2016-07-23 21:41:18 +00:00
|
|
|
#ifndef __URDE_CMAPWORLD_HPP__
|
|
|
|
#define __URDE_CMAPWORLD_HPP__
|
|
|
|
|
2016-07-24 22:51:15 +00:00
|
|
|
#include "RetroTypes.hpp"
|
2016-07-29 17:00:23 +00:00
|
|
|
#include "CToken.hpp"
|
2016-07-28 07:33:55 +00:00
|
|
|
#include "zeus/CColor.hpp"
|
|
|
|
#include "zeus/CVector3f.hpp"
|
|
|
|
#include "zeus/CTransform.hpp"
|
2017-03-20 06:59:46 +00:00
|
|
|
#include "CMapArea.hpp"
|
2016-07-24 22:51:15 +00:00
|
|
|
|
2016-07-23 21:41:18 +00:00
|
|
|
namespace urde
|
|
|
|
{
|
|
|
|
class IWorld;
|
2016-07-28 07:33:55 +00:00
|
|
|
class CMapWorldInfo;
|
|
|
|
class CStateManager;
|
2016-07-23 21:41:18 +00:00
|
|
|
class CMapWorld
|
|
|
|
{
|
|
|
|
public:
|
2016-07-28 07:33:55 +00:00
|
|
|
/* skDrawProfileItemNames; */
|
|
|
|
enum class EMapAreaList
|
|
|
|
{
|
|
|
|
};
|
|
|
|
|
|
|
|
class CMapAreaBFSInfo
|
|
|
|
{
|
2017-04-15 05:32:25 +00:00
|
|
|
s32 x0_areaIdx;
|
|
|
|
s32 x4_depth;
|
|
|
|
float x8_;
|
|
|
|
float xc_;
|
2016-07-28 07:33:55 +00:00
|
|
|
public:
|
2017-04-15 05:32:25 +00:00
|
|
|
CMapAreaBFSInfo(s32 areaIdx, s32 depth, float a, float b)
|
|
|
|
: x0_areaIdx(areaIdx), x4_depth(depth), x8_(a), xc_(b) {}
|
|
|
|
s32 GetAreaIndex() const { return x0_areaIdx; }
|
|
|
|
s32 GetDepth() const { return x4_depth; }
|
2016-07-28 07:33:55 +00:00
|
|
|
float GetOutlineDrawDepth() const;
|
|
|
|
float GetSurfaceDrawDepth() const;
|
|
|
|
};
|
|
|
|
|
|
|
|
class CMapObjectSortInfo
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
enum class EObjectCode
|
|
|
|
{
|
|
|
|
};
|
|
|
|
private:
|
|
|
|
public:
|
|
|
|
CMapObjectSortInfo(float, int, EObjectCode, int, const zeus::CColor&, const zeus::CColor& );
|
|
|
|
const zeus::CColor& GetOutlineColor() const;
|
|
|
|
const zeus::CColor& GetSurfaceColor() const;
|
|
|
|
u32 GetLocalObjectIndex();
|
|
|
|
EObjectCode GetObjectCode() const;
|
|
|
|
u32 GetAreaIndex() const;
|
|
|
|
float GetZDistance() const;
|
|
|
|
};
|
|
|
|
|
|
|
|
class CMapAreaData
|
|
|
|
{
|
2016-07-29 17:00:23 +00:00
|
|
|
TCachedToken<CMapArea> x0_area;
|
2016-07-28 07:33:55 +00:00
|
|
|
public:
|
|
|
|
CMapAreaData(u32, EMapAreaList, CMapAreaData*);
|
|
|
|
void Lock();
|
|
|
|
void Unlock();
|
|
|
|
bool IsLoaded() const;
|
2017-03-20 05:09:53 +00:00
|
|
|
const CMapArea* GetMapArea() const { return x0_area.IsLoaded() ? x0_area.GetObj() : nullptr; }
|
2016-07-28 07:33:55 +00:00
|
|
|
void GetNextMapAreaData() const;
|
|
|
|
void GetContainingList() const;
|
|
|
|
void NextMapAreaData();
|
|
|
|
void SetContainingList(EMapAreaList);
|
|
|
|
void SetNextMapArea(CMapAreaData*);
|
|
|
|
};
|
|
|
|
|
|
|
|
class CMapWorldDrawParms
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
CMapWorldDrawParms(float, float, float, float, float, const CStateManager&, const zeus::CTransform&,
|
|
|
|
const zeus::CTransform&, const IWorld&, const CMapWorldInfo&, float, bool);
|
|
|
|
void GetWorld() const;
|
|
|
|
float GetOutlineWidthScale() const;
|
|
|
|
void GetPlaneProjectionTransform() const;
|
|
|
|
void GetPlayerAreaFlashIntensity() const;
|
|
|
|
void GetCameraTransform() const;
|
|
|
|
void GetAlphaOutlineUnvisited() const;
|
|
|
|
void GetAlphaSurfaceUnvisited() const;
|
|
|
|
void GetAlphaOutlineVisited() const;
|
|
|
|
void GetAlphaSurfaceVisited() const;
|
|
|
|
void GetMapWorldInfo() const;
|
|
|
|
void GetStateManager() const;
|
|
|
|
bool GetIsSortDoorSurfaces() const;
|
|
|
|
};
|
|
|
|
|
|
|
|
private:
|
2016-07-29 17:00:23 +00:00
|
|
|
std::vector<CMapAreaData> x0_areas;
|
2016-07-28 07:33:55 +00:00
|
|
|
public:
|
|
|
|
CMapWorld(CInputStream&);
|
2017-04-15 05:32:25 +00:00
|
|
|
u32 GetNumAreas() const { return x0_areas.size(); }
|
|
|
|
const CMapArea* GetMapArea(TAreaId aid) const { return x0_areas[aid].GetMapArea(); }
|
2016-07-31 01:43:34 +00:00
|
|
|
void IsMapAreaInBFSInfoVector(const CMapAreaData*, const std::vector<CMapAreaBFSInfo>&) const;
|
2016-07-24 22:51:15 +00:00
|
|
|
void SetWhichMapAreasLoaded(const IWorld&, int start, int count);
|
2016-07-23 21:41:18 +00:00
|
|
|
bool IsMapAreasStreaming() const;
|
2016-07-28 07:33:55 +00:00
|
|
|
void MoveMapAreaToList(CMapAreaData*, EMapAreaList);
|
2017-04-15 05:32:25 +00:00
|
|
|
s32 GetCurrentMapAreaDepth(const IWorld&, TAreaId) const;
|
2016-07-28 07:33:55 +00:00
|
|
|
void GetVisibleAreas(const IWorld&, const CMapWorldInfo&) const;
|
|
|
|
void Draw(const CMapWorldDrawParms&, int, int, float, float, bool) const;
|
2017-04-15 05:32:25 +00:00
|
|
|
void DoBFS(const IWorld&, TAreaId, int, float, float, bool, std::vector<CMapAreaBFSInfo>&) const;
|
2016-07-28 07:33:55 +00:00
|
|
|
bool IsMapAreaValid(const IWorld&, int, bool) const;
|
|
|
|
void DrawAreas(const CMapWorldDrawParms&, int, const std::vector<CMapAreaBFSInfo>&, bool) const;
|
|
|
|
void RecalculateWorldSphere(const CMapWorldInfo&, const IWorld&) const;
|
2017-04-15 05:32:25 +00:00
|
|
|
zeus::CVector3f ConstrainToWorldVolume(const zeus::CVector3f&, const zeus::CVector3f&) const;
|
2016-07-28 07:33:55 +00:00
|
|
|
void ClearTraversedFlags() const;
|
2016-07-23 21:41:18 +00:00
|
|
|
};
|
|
|
|
|
2016-10-08 20:32:36 +00:00
|
|
|
CFactoryFnReturn FMapWorldFactory(const SObjectTag& tag, CInputStream& in, const CVParamTransfer& param,
|
|
|
|
CObjectReference* selfRef);
|
|
|
|
|
2016-07-23 21:41:18 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#endif // __URDE_CMAPWORLD_HPP__
|