mirror of https://github.com/AxioDL/metaforce.git
Merge branch 'master' of https://github.com/AxioDL/urde
This commit is contained in:
commit
bc8daa1d50
|
@ -9,6 +9,7 @@ make_dnalist(liblist
|
||||||
CINF
|
CINF
|
||||||
CSKR
|
CSKR
|
||||||
EVNT
|
EVNT
|
||||||
|
PATH
|
||||||
CMDLMaterials
|
CMDLMaterials
|
||||||
MREA
|
MREA
|
||||||
DeafBabe
|
DeafBabe
|
||||||
|
|
|
@ -0,0 +1,73 @@
|
||||||
|
#ifndef __DNACOMMON_PATH_HPP__
|
||||||
|
#define __DNACOMMON_PATH_HPP__
|
||||||
|
|
||||||
|
#include "../DNACommon/DNACommon.hpp"
|
||||||
|
|
||||||
|
namespace DataSpec
|
||||||
|
{
|
||||||
|
struct PATH : BigDNA
|
||||||
|
{
|
||||||
|
DECL_DNA
|
||||||
|
Value<atUint32> version;
|
||||||
|
struct Vertex : BigDNA
|
||||||
|
{
|
||||||
|
DECL_DNA
|
||||||
|
Value<atVec3f> position;
|
||||||
|
Value<atVec3f> normal;
|
||||||
|
};
|
||||||
|
Value<atUint32> vertexCount;
|
||||||
|
Vector<Vertex, DNA_COUNT(vertexCount)> nodes;
|
||||||
|
struct Edge : BigDNA
|
||||||
|
{
|
||||||
|
DECL_DNA
|
||||||
|
Value<atUint32> polyA;
|
||||||
|
Value<atUint32> polyB;
|
||||||
|
Value<float> width1;
|
||||||
|
Value<float> width2;
|
||||||
|
};
|
||||||
|
|
||||||
|
Value<atUint32> edgeCount;
|
||||||
|
Vector<Edge, DNA_COUNT(edgeCount)> edges;
|
||||||
|
|
||||||
|
struct Polygon : BigDNA
|
||||||
|
{
|
||||||
|
DECL_DNA
|
||||||
|
Value<atUint32> vertCount;
|
||||||
|
Value<atUint32> vertStart;
|
||||||
|
Value<atUint32> edgeCount;
|
||||||
|
Value<atUint32> edgeStart;
|
||||||
|
Value<atUint32> flags;
|
||||||
|
Value<float> area;
|
||||||
|
Value<atVec3f> normal;
|
||||||
|
Value<atUint32> selfIdx1;
|
||||||
|
Value<atVec3f> center;
|
||||||
|
Value<atVec3f> aabb[2];
|
||||||
|
Value<atUint32> selfIdx2;
|
||||||
|
};
|
||||||
|
|
||||||
|
Value<atUint32> polyCount;
|
||||||
|
Vector<Polygon, DNA_COUNT(polyCount)> polygons;
|
||||||
|
|
||||||
|
Vector<atUint32, DNA_COUNT((((polyCount * (polyCount - 1)) / 2) + 31) / 32)> bitmap1;
|
||||||
|
Vector<atUint32, DNA_COUNT(bitmap1.size())> bitmap2;
|
||||||
|
Vector<atUint32, DNA_COUNT(((((polyCount * polyCount) + 31) / 32) - bitmap1.size()) * 2)> bitmap3;
|
||||||
|
|
||||||
|
Value<atUint32> unkIntCount;
|
||||||
|
Vector<atUint32, DNA_COUNT(unkIntCount)> unkInts;
|
||||||
|
|
||||||
|
struct UnknownStruct : BigDNA
|
||||||
|
{
|
||||||
|
DECL_DNA
|
||||||
|
Value<atUint32> unk1;
|
||||||
|
Value<atVec3f> unk2[3];
|
||||||
|
Value<atUint32> unk3[8]; // Usually 0xFF
|
||||||
|
Value<atUint32> unk4;
|
||||||
|
Value<atUint32> unk5;
|
||||||
|
};
|
||||||
|
|
||||||
|
Value<atUint32> unkStructCount;
|
||||||
|
Vector<UnknownStruct, DNA_COUNT(unkStructCount)> unkStructs;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __DNACOMMON_PATH_HPP__
|
|
@ -167,7 +167,7 @@ public:
|
||||||
TUniqueId x4_uid = kInvalidUniqueId;
|
TUniqueId x4_uid = kInvalidUniqueId;
|
||||||
} xa8_map[1024];
|
} xa8_map[1024];
|
||||||
u32 x10a8_pvsVersion = 0;
|
u32 x10a8_pvsVersion = 0;
|
||||||
TLockedToken<CPathFindArea> x10ac_path;
|
TLockedToken<CPFArea> x10ac_path;
|
||||||
// bool x10b8_ = 0; optional flag for CToken
|
// bool x10b8_ = 0; optional flag for CToken
|
||||||
u32 x10bc_ = 0;
|
u32 x10bc_ = 0;
|
||||||
std::unique_ptr<CObjectList> x10c0_areaObjs;
|
std::unique_ptr<CObjectList> x10c0_areaObjs;
|
||||||
|
|
|
@ -10,6 +10,11 @@ set(WORLD_SOURCES
|
||||||
CAiFuncMap.hpp CAiFuncMap.cpp
|
CAiFuncMap.hpp CAiFuncMap.cpp
|
||||||
CPatterned.hpp CPatterned.cpp
|
CPatterned.hpp CPatterned.cpp
|
||||||
CPathFindArea.hpp CPathFindArea.cpp
|
CPathFindArea.hpp CPathFindArea.cpp
|
||||||
|
CPathFindRegion.hpp CPathFindRegion.cpp
|
||||||
|
CPathFindDraw.hpp CPathFindDraw.cpp
|
||||||
|
CPathFindAreaOctree.hpp CPathFindAreaOctree.cpp
|
||||||
|
CPathFindOpenList.hpp CPathFindOpenList.cpp
|
||||||
|
CPathFindLink.hpp CPathFindLink.cpp
|
||||||
CPhysicsActor.hpp CPhysicsActor.cpp
|
CPhysicsActor.hpp CPhysicsActor.cpp
|
||||||
CEntity.hpp CEntity.cpp
|
CEntity.hpp CEntity.cpp
|
||||||
CPhysicsActor.hpp CPhysicsActor.cpp
|
CPhysicsActor.hpp CPhysicsActor.cpp
|
||||||
|
|
|
@ -4,13 +4,15 @@
|
||||||
|
|
||||||
namespace urde
|
namespace urde
|
||||||
{
|
{
|
||||||
CPathFindArea::CPathFindArea(const std::unique_ptr<u8[]>&& buf, int len)
|
CPFArea::CPFArea(const std::unique_ptr<u8[]>&& buf, int len)
|
||||||
{
|
{
|
||||||
x13c_data = buf.get();
|
x13c_ = buf.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<IObj> FPathFindAreaFactory(const SObjectTag& /*tag*/, const std::unique_ptr<u8[]>& buf, const CVParamTransfer &xfer)
|
std::unique_ptr<IObj> FPathFindAreaFactory(const SObjectTag& /*tag*/, const std::unique_ptr<u8[]>& buf,
|
||||||
|
const CVParamTransfer &xfer)
|
||||||
{
|
{
|
||||||
return TToken<CPathFindArea>::GetIObjObjectFor(std::unique_ptr<CPathFindArea>(new CPathFindArea(std::move(buf), *reinterpret_cast<int*>(xfer.GetObj()))));
|
return TToken<CPFArea>::GetIObjObjectFor(
|
||||||
|
std::unique_ptr<CPFArea>(new CPFArea(std::move(buf), *reinterpret_cast<int*>(xfer.GetObj()))));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,77 +4,70 @@
|
||||||
#include "IObj.hpp"
|
#include "IObj.hpp"
|
||||||
#include "zeus/CTransform.hpp"
|
#include "zeus/CTransform.hpp"
|
||||||
#include "zeus/CAABox.hpp"
|
#include "zeus/CAABox.hpp"
|
||||||
|
#include "CPathFindOpenList.hpp"
|
||||||
|
|
||||||
namespace urde
|
namespace urde
|
||||||
{
|
{
|
||||||
class CVParamTransfer;
|
class CVParamTransfer;
|
||||||
|
|
||||||
class CPFRegion
|
class CPFBitSet
|
||||||
{
|
{
|
||||||
friend class CPFOpenList;
|
public:
|
||||||
u32 x0_ = 0;
|
CPFBitSet() = default;
|
||||||
u32 x4_ = 0;
|
void Clear();
|
||||||
u32 x8_ = 0;
|
void Add(s32);
|
||||||
u32 xc_ = 0;
|
bool Test(s32);
|
||||||
u32 x10_ = 0;
|
void Rmv(s32);
|
||||||
float x14_ = 0.f;
|
|
||||||
zeus::CVector3f x18_;
|
|
||||||
u32 x24_ = 0;
|
|
||||||
zeus::CVector3f x28_;
|
|
||||||
zeus::CAABox x34_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class CPFRegionData
|
class CPFArea
|
||||||
{
|
{
|
||||||
friend class CPFOpenList;
|
float x0_ = FLT_MAX;
|
||||||
float x0_ = 0.f;
|
|
||||||
zeus::CVector3f x4_;
|
zeus::CVector3f x4_;
|
||||||
s32 x10_ = -1;
|
std::vector<zeus::CVector3f> x10_;
|
||||||
zeus::CVector3f x14_;
|
|
||||||
s32 x20_ = 0;
|
|
||||||
s32 x24_ = 0;
|
|
||||||
s32 x28_ = 0;
|
|
||||||
s32 x2c_ = 0;
|
|
||||||
};
|
|
||||||
|
|
||||||
class CPFOpenList
|
|
||||||
{
|
|
||||||
friend class CPathFindArea;
|
|
||||||
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 x20_ = 0;
|
||||||
u32 x24_ = 0;
|
u32 x24_ = 0;
|
||||||
u32 x28_ = 0;
|
u32 x28_ = 0;
|
||||||
u32 x2c_ = 0;
|
u32 x2c_ = 0;
|
||||||
u32 x30_ = 0;
|
bool x30_ = false;
|
||||||
u32 x34_ = 0;
|
u32 x34_ = 0;
|
||||||
u32 x38_ = 0;
|
u32 x38_ = 0;
|
||||||
u32 x3c_ = 0;
|
u32 x3c_ = 0;
|
||||||
std::vector<CPFRegion> x40_region;
|
u32 x40_ = 0;
|
||||||
std::vector<CPFRegionData> x90_regionData;
|
u32 x44_ = 0;
|
||||||
public:
|
u32 x48_ = 0;
|
||||||
CPFOpenList()
|
u32 x4c_ = 0;
|
||||||
{
|
u32 x50_ = 0;
|
||||||
}
|
u32 x54_ = 0;
|
||||||
};
|
u32 x58_ = 0;
|
||||||
|
u32 x5c_ = 0;
|
||||||
class CPathFindArea
|
u32 x60_ = 0;
|
||||||
{
|
u32 x64_ = 0;
|
||||||
zeus::CVector3f x0_;
|
u32 x68_ = 0;
|
||||||
float xc_ = 0.f;
|
u32 x6c_ = 0;
|
||||||
std::vector<zeus::CVector3f> x10_;
|
u32 x70_ = 0;
|
||||||
bool x30_ = false;
|
u32 x74_ = 0;
|
||||||
std::vector<CPFOpenList> x78_;
|
CPFOpenList x78_;
|
||||||
u8* x13c_data;
|
u32 x138_;
|
||||||
|
u8* x13c_ = nullptr;
|
||||||
|
u32 x140_ = 0;
|
||||||
|
u8* x144_ = nullptr;
|
||||||
|
u32 x148_ = 0;
|
||||||
|
u8* x14c_ = nullptr;
|
||||||
|
u32 x150_ = 0;
|
||||||
|
u8* x154_ = nullptr;
|
||||||
|
u32 x158_ = 0;
|
||||||
|
u32 x15c_ = 0;
|
||||||
|
u32 x160_ = 0;
|
||||||
|
u32 x164_ = 0;
|
||||||
|
u32 x168_ = 0;
|
||||||
|
u32 x16c_ = 0;
|
||||||
|
u32 x170_ = 0;
|
||||||
|
u32 x174_ = 0;
|
||||||
|
std::vector<CPFRegionData> x178_;
|
||||||
zeus::CTransform x188_;
|
zeus::CTransform x188_;
|
||||||
public:
|
public:
|
||||||
CPathFindArea(const std::unique_ptr<u8[]>&& buf, int len);
|
CPFArea(const std::unique_ptr<u8[]>&& buf, int len);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
#ifndef __URDE_CPATHFINDLINK_HPP__
|
||||||
|
#define __URDE_CPATHFINDLINK_HPP__
|
||||||
|
|
||||||
|
#include "RetroTypes.hpp"
|
||||||
|
|
||||||
|
namespace urde
|
||||||
|
{
|
||||||
|
class CPFLink
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void GetRegion() const;
|
||||||
|
void GetNode() const;
|
||||||
|
void Get2dWidth() const;
|
||||||
|
void GetOO2dWidth() const;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __URDE_CPATHFINDLINK_HPP__
|
|
@ -0,0 +1,11 @@
|
||||||
|
#include "CPathFindOpenList.hpp"
|
||||||
|
namespace urde
|
||||||
|
{
|
||||||
|
CPFOpenList::CPFOpenList()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPFOpenList::Clear()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
#ifndef __URDE_CPATHFINDOPENLIST_HPP__
|
||||||
|
#define __URDE_CPATHFINDOPENLIST_HPP__
|
||||||
|
|
||||||
|
#include "RetroTypes.hpp"
|
||||||
|
#include "CPathFindRegion.hpp"
|
||||||
|
|
||||||
|
namespace urde
|
||||||
|
{
|
||||||
|
class CPFOpenList
|
||||||
|
{
|
||||||
|
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*);
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __URDE_CPATHFINDOPENLIST_HPP__
|
|
@ -0,0 +1,24 @@
|
||||||
|
#include "CPathFindRegion.hpp"
|
||||||
|
|
||||||
|
namespace urde
|
||||||
|
{
|
||||||
|
void CPFRegionData::SetOpenLess(CPFRegion* region)
|
||||||
|
{
|
||||||
|
x24_openLess = region;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CPFRegionData::SetOpenMore(CPFRegion* region)
|
||||||
|
{
|
||||||
|
x28_openMore = region;
|
||||||
|
}
|
||||||
|
|
||||||
|
CPFRegion* CPFRegionData::GetOpenLess()
|
||||||
|
{
|
||||||
|
return x24_openLess;
|
||||||
|
}
|
||||||
|
|
||||||
|
CPFRegion* CPFRegionData::GetOpenMore()
|
||||||
|
{
|
||||||
|
return x28_openMore;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,84 @@
|
||||||
|
#ifndef __URDE_CPATHFINDREGION_HPP__
|
||||||
|
#define __URDE_CPATHFINDREGION_HPP__
|
||||||
|
|
||||||
|
#include "RetroTypes.hpp"
|
||||||
|
#include "zeus/CAABox.hpp"
|
||||||
|
|
||||||
|
namespace urde
|
||||||
|
{
|
||||||
|
class CPFArea;
|
||||||
|
class CPFLink;
|
||||||
|
class CPFRegionData;
|
||||||
|
class CPFRegion
|
||||||
|
{
|
||||||
|
u32 x0_ = 0;
|
||||||
|
u32 x4_ = 0;
|
||||||
|
u32 x8_ = 0;
|
||||||
|
u32 xc_ = 0;
|
||||||
|
u32 x10_ = 0;
|
||||||
|
float x14_ = 0.f;
|
||||||
|
zeus::CVector3f x18_;
|
||||||
|
u32 x24_ = 0;
|
||||||
|
zeus::CVector3f x28_;
|
||||||
|
zeus::CAABox x34_;
|
||||||
|
u32 x4c_;
|
||||||
|
public:
|
||||||
|
CPFRegion() = default;
|
||||||
|
void SetData(CPFRegionData*) {}
|
||||||
|
CPFRegionData* Data() const;
|
||||||
|
void GetIndex() const;
|
||||||
|
float GetHeight() const;
|
||||||
|
void GetPathLink() const;
|
||||||
|
void GetNumLinks() const;
|
||||||
|
void GetFlags() const;
|
||||||
|
void GetLink(s32) const;
|
||||||
|
void SetCentroid(const zeus::CVector3f&);
|
||||||
|
zeus::CVector3f GetCentroid() const;
|
||||||
|
void Fixup(CPFArea&, s32);
|
||||||
|
bool IsPointInside(const zeus::CVector3f&);
|
||||||
|
zeus::CVector3f GetNormal();
|
||||||
|
s32 GetNumNodes() const;
|
||||||
|
void GetNode(s32) const;
|
||||||
|
void PointHeight(const zeus::CVector3f&);
|
||||||
|
void FindClosestPointOnPolygon(const std::vector<zeus::CVector3f>&,
|
||||||
|
const zeus::CVector3f&, const zeus::CVector3f&, bool);
|
||||||
|
void FindBestPoint(std::vector<zeus::CVector3f>&, const zeus::CVector3f&, u32, float);
|
||||||
|
void SetLinkTo(s32);
|
||||||
|
void DropToGround(zeus::CVector3f&) const;
|
||||||
|
void GetLinkMidPoint(const CPFLink&);
|
||||||
|
void FitThroughLink2d(const zeus::CVector3f&, const CPFLink&, const zeus::CVector3f&, float) const;
|
||||||
|
void FitThroughLink3d(const zeus::CVector3f&, const CPFLink&, float, const zeus::CVector3f&, float, float) const;
|
||||||
|
void IsPointInsidePaddedAABox(const zeus::CVector3f&, float) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CPFRegionData
|
||||||
|
{
|
||||||
|
float x0_ = 0.f;
|
||||||
|
zeus::CVector3f x4_;
|
||||||
|
s32 x10_ = -1;
|
||||||
|
zeus::CVector3f x14_;
|
||||||
|
s32 x20_ = 0;
|
||||||
|
CPFRegion* x24_openLess = nullptr;
|
||||||
|
CPFRegion* x28_openMore = nullptr;
|
||||||
|
s32 x2c_ = 0;
|
||||||
|
public:
|
||||||
|
CPFRegionData() = default;
|
||||||
|
void SetOpenLess(CPFRegion*);
|
||||||
|
void SetOpenMore(CPFRegion*);
|
||||||
|
CPFRegion* GetOpenLess();
|
||||||
|
CPFRegion* GetOpenMore();
|
||||||
|
void GetCost();
|
||||||
|
void GetPathLink() const;
|
||||||
|
void GetParent() const;
|
||||||
|
void Setup(CPFRegion*, float, float);
|
||||||
|
void SetBestPoint(const zeus::CVector3f&);
|
||||||
|
void SetBestPointDistanceSquared(float);
|
||||||
|
float GetBestPointDistanceSquared() const;
|
||||||
|
void SetPathLink(s32);
|
||||||
|
void SetCookie(s32);
|
||||||
|
zeus::CVector3f GetBestPoint() const;
|
||||||
|
void GetCookie() const;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // __URDE_CPATHFINDREGION_HPP__
|
Loading…
Reference in New Issue