mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-12-10 21:47:41 +00:00
Implement CPFArea constructor
This commit is contained in:
@@ -4,11 +4,13 @@
|
||||
#include "IObj.hpp"
|
||||
#include "zeus/CTransform.hpp"
|
||||
#include "zeus/CAABox.hpp"
|
||||
#include "CPathFindOpenList.hpp"
|
||||
#include "IFactory.hpp"
|
||||
#include "CPathFindRegion.hpp"
|
||||
|
||||
namespace urde
|
||||
{
|
||||
class CVParamTransfer;
|
||||
class CObjectReference;
|
||||
|
||||
class CPFBitSet
|
||||
{
|
||||
@@ -20,25 +22,65 @@ public:
|
||||
void Rmv(s32);
|
||||
};
|
||||
|
||||
class CPFNode
|
||||
class CPFAreaOctree
|
||||
{
|
||||
zeus::CVector3f x0_position;
|
||||
zeus::CVector3f xc_normal;
|
||||
u32 x0_isLeaf;
|
||||
zeus::CVector3f x4_points[3];
|
||||
CPFAreaOctree* x28_children[8];
|
||||
u32 x48_regionCount;
|
||||
CPFRegion** x4c_regions;
|
||||
public:
|
||||
const zeus::CVector3f& GetPos() const { return x0_position; }
|
||||
const zeus::CVector3f& GetNormal() const { return xc_normal; }
|
||||
CPFAreaOctree(CMemoryInStream& in);
|
||||
void Fixup(CPFArea& area);
|
||||
void GetChildIndex(const zeus::CVector3f&) const;
|
||||
void GetRegionList(const zeus::CVector3f&) const;
|
||||
//void GetRegionListList(rstl::reserved_vector<rstl::prereserved_vector<CPFRegion>, 32>, const zeus::CVector3f&, float);
|
||||
bool IsPointInPaddedAABox(const zeus::CVector3f&, float);
|
||||
void Render();
|
||||
};
|
||||
|
||||
class CPFAreaOctree;
|
||||
class CPFArea
|
||||
class CPFOpenList
|
||||
{
|
||||
float x0_ = FLT_MAX;
|
||||
zeus::CVector3f x4_;
|
||||
std::vector<zeus::CVector3f> x10_;
|
||||
friend class CPFArea;
|
||||
u32 x0_ = 0;
|
||||
u32 x4_ = 0;
|
||||
u32 x8_ = 0;
|
||||
u32 xc_ = 0;
|
||||
u32 x10_ = 0;
|
||||
u32 x14_ = 0;
|
||||
u32 x18_ = 0;
|
||||
u32 x1c_ = 0;
|
||||
u32 x20_ = 0;
|
||||
u32 x24_ = 0;
|
||||
u32 x28_ = 0;
|
||||
u32 x2c_ = 0;
|
||||
u32 x30_ = 0;
|
||||
u32 x34_ = 0;
|
||||
u32 x38_ = 0;
|
||||
u32 x3c_ = 0;
|
||||
CPFRegion x40_region;
|
||||
CPFRegionData x90_regionData;
|
||||
|
||||
public:
|
||||
CPFOpenList();
|
||||
|
||||
void Clear();
|
||||
void Push(CPFRegion*);
|
||||
void Pop();
|
||||
void Pop(CPFRegion*);
|
||||
void Test(CPFRegion*);
|
||||
};
|
||||
|
||||
class CPFArea
|
||||
{
|
||||
friend class CPFRegion;
|
||||
friend class CPFAreaOctree;
|
||||
|
||||
float x0_ = FLT_MAX;
|
||||
zeus::CVector3f x4_;
|
||||
std::vector<zeus::CVector3f> x10_;
|
||||
u32 x20_ = 0;
|
||||
zeus::CVector3f x24_;
|
||||
bool x30_ = false;
|
||||
u32 x34_ = 0;
|
||||
u32 x38_ = 0;
|
||||
@@ -59,31 +101,30 @@ class CPFArea
|
||||
u32 x74_ = 0;
|
||||
CPFOpenList x78_;
|
||||
u32 x138_;
|
||||
std::unique_ptr<u8[]> x13c_data = nullptr;
|
||||
std::vector<CPFNode> x140_nodes;
|
||||
/*std::vector<> x150_;*/
|
||||
u32 x160_ = 0;
|
||||
u32 x164_ = 0;
|
||||
u32 x168_ = 0;
|
||||
u32 x16c_ = 0;
|
||||
u32 x170_ = 0;
|
||||
u32 x174_ = 0;
|
||||
std::vector<CPFRegionData> x178_;
|
||||
//std::unique_ptr<u8[]> x13c_data;
|
||||
std::vector<CPFNode> x140_nodes; // x140: count, x144: ptr
|
||||
std::vector<CPFLink> x148_links; // x148: count, x14c: ptr
|
||||
std::vector<CPFRegion> x150_regions; // x150: count, x154: ptr
|
||||
std::vector<CPFAreaOctree> x158_octree; // x158: count, x15c: ptr
|
||||
std::vector<CPFRegion*> x160_octreeRegionLookup; // x160: count, x164: ptr
|
||||
std::vector<u32> x168_connectionsA; // x168: word_count, x16c: ptr
|
||||
std::vector<u32> x170_connectionsB; // x170: word_count, x174: ptr
|
||||
std::vector<CPFRegionData> x178_regionDatas;
|
||||
zeus::CTransform x188_transform;
|
||||
public:
|
||||
CPFArea(const std::unique_ptr<u8[]>&& buf, int len);
|
||||
CPFArea(std::unique_ptr<u8[]>&& buf, u32 len);
|
||||
|
||||
void SetTransform(const zeus::CTransform& xf) { x188_transform = xf; }
|
||||
const zeus::CTransform& GetTransform() const { return x188_transform; }
|
||||
CPFRegion* GetRegion(s32) const { return nullptr; }
|
||||
const CPFRegion& GetRegion(s32 i) const { return x150_regions[i]; }
|
||||
void GetClosestPoint() const;
|
||||
void OpenList();
|
||||
void ClosedSet();
|
||||
CPFRegionData* GetRegionData() const;
|
||||
CPFLink* GetLink(s32);
|
||||
CPFNode* GetNode(s32) const;
|
||||
CPFAreaOctree* GetOctree(s32);
|
||||
void GetOctreeRegionPtrs(s32);
|
||||
const CPFRegionData& GetRegionData(s32 i) const { return x178_regionDatas[i]; }
|
||||
const CPFLink& GetLink(s32 i) const { return x148_links[i]; }
|
||||
const CPFNode& GetNode(s32 i) const { return x140_nodes[i]; }
|
||||
const CPFAreaOctree& GetOctree(s32 i) const { return x158_octree[i]; }
|
||||
const CPFRegion* GetOctreeRegionPtrs(s32 i) const { return x160_octreeRegionLookup[i]; }
|
||||
void GetOctreeRegionList(const zeus::CVector3f&);
|
||||
void FindRegions(rstl::reserved_vector<CPFRegion, 4>&, const zeus::CVector3f&, u32);
|
||||
void FindClosestRegion(const zeus::CVector3f&, u32, float);
|
||||
@@ -91,7 +132,10 @@ public:
|
||||
};
|
||||
|
||||
|
||||
std::unique_ptr<IObj> FPathFindAreaFactory(const SObjectTag& /*tag*/, const std::unique_ptr<u8[]>& buf, const CVParamTransfer& xfer);
|
||||
CFactoryFnReturn FPathFindAreaFactory(const urde::SObjectTag& tag,
|
||||
std::unique_ptr<u8[]>&& in, u32 len,
|
||||
const urde::CVParamTransfer& vparms,
|
||||
CObjectReference* selfRef);
|
||||
}
|
||||
|
||||
#endif // CPATHFINDAREA_HPP
|
||||
|
||||
Reference in New Issue
Block a user