diff options
Diffstat (limited to '')
-rw-r--r-- | src/PathFind.h | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/src/PathFind.h b/src/PathFind.h new file mode 100644 index 00000000..f4857ce2 --- /dev/null +++ b/src/PathFind.h @@ -0,0 +1,130 @@ +#pragma once + +#include "Treadable.h" + +struct CPathNode +{ + CVector pos; + CPathNode *prev; //? + CPathNode *next; + int16 unknown; + int16 objectIndex; + int16 firstLink; + uint8 numLinks; + uint8 flags; + uint8 group; +/* VC: + int16 unk1; + int16 nextIndex; + int16 x; + int16 y; + int16 z; + int16 unknown; + int16 firstLink; + int8 width; + int8 group; + int8 numLinks : 4; + int8 bDeadEnd : 1; + int8 bTurnedOff : 1; // flag 8 in node info + int8 flagA40 : 1; // flag 20 in node info + int8 flagA80 : 1; // flag 4 in node info + int8 flagB1 : 1; // flag 10 in node info + int8 flagB2 : 1; // flag 2 in node info + int8 flagB4 : 1; + int8 speedLimit : 2; // speed limit + int8 flagB20 : 1; + int8 flagB40 : 1; + int8 flagB80 : 1; + int8 spawnRate : 4; + int8 flagsC : 4; +*/ +}; + +// TODO: name? +struct NaviNode +{ + float posX; + float posY; + float dirX; + float dirY; + int16 pathNodeIndex; + int8 numLeftLanes; + int8 numRightLanes; + int8 trafficLightType; + // probably only padding + int8 field15; + int8 field16; + int8 field17; +}; + +struct CPathInfoForObject +{ + int16 x; + int16 y; + int16 z; + int8 type; + int8 next; + int8 numLeftLanes; + int8 numRightLanes; + uint8 flag; +}; + +struct CTempNode +{ + CVector pos; + float dirX; + float dirY; + int16 link1; + int16 link2; + int8 numLeftLanes; + int8 numRightLanes; + int8 linkState; + // probably padding + int8 field1B; +}; + +struct CTempDetachedNode // unused +{ + uint8 foo[20]; +}; + +class CPathFind +{ +public: +/* For reference VC: + CPathNode pathNodes[9650]; + NaviNode naviNodes[3500]; + CBuilding *mapObjects[1250]; + // 0x8000 is cross road flag + // 0x4000 is traffic light flag + uint16 linkTo[20400]; + uint8 distTo[20400]; + int16 naviNodeLinks[20400]; +*/ + CPathNode m_pathNodes[4930]; + NaviNode m_naviNodes[2076]; + CTreadable *m_mapObjects[1250]; + uint8 m_objectFlags[1250]; + int16 m_linkTo[10260]; + int16 m_distTo[10260]; + uint8 m_linkFlags[10260]; + int16 m_naviNodeLinks[10260]; + int32 m_numPathNodes; + int32 m_numCarPathNodes; + int32 m_numPedPathNodes; + int16 m_numMapObjects; + int16 m_numLinks; + int32 m_numNaviNodes; + int32 h; + uint8 m_numGroups[2]; + CPathNode m_aExtraPaths[872]; + + void PreparePathData(void); + void CountFloodFillGroups(uint8 type); + void PreparePathDataForType(uint8 type, CTempNode *tempnodes, CPathInfoForObject *objectpathinfo, + float unk, CTempDetachedNode *detachednodes, int unused); + void CalcNodeCoors(int16 x, int16 y, int16 z, int32 id, CVector *out); +}; +static_assert(sizeof(CPathFind) == 0x4c8f4, "CPathFind: error"); + +extern CPathFind &ThePaths; |