#include "CPathFindArea.hpp" #include "IVParamObj.hpp" #include "CToken.hpp" namespace urde { CPFAreaOctree::CPFAreaOctree(CMemoryInStream& in) { x0_isLeaf = in.readUint32Big(); for (int i=0 ; i<3 ; ++i) x4_points[i] = in.readVec3fBig(); for (int i=0 ; i<8 ; ++i) x28_children[i] = reinterpret_cast(in.readUint32Big()); x48_regionCount = in.readUint32Big(); x4c_regions = reinterpret_cast(in.readUint32Big()); } void CPFAreaOctree::Fixup(CPFArea& area) { x0_isLeaf = x0_isLeaf != 0 ? 1 : 0; if (x0_isLeaf) { if (!x48_regionCount) return; x4c_regions = &area.x160_octreeRegionLookup[reinterpret_cast(x4c_regions)]; return; } for (int i=0 ; i<8 ; ++i) { if ((reinterpret_cast(x28_children[i]) & 0x80000000) == 0) x28_children[i] = &area.x158_octree[reinterpret_cast(x28_children[i])]; else x28_children[i] = nullptr; } } CPFOpenList::CPFOpenList() { } void CPFOpenList::Clear() { } CPFArea::CPFArea(std::unique_ptr&& buf, u32 len) { CMemoryInStream r(buf.get(), len); u32 numNodes = r.readUint32Big(); x140_nodes.reserve(numNodes); for (u32 i=0 ; i(r.readUint32Big())); for (CPFRegion*& rl : x160_octreeRegionLookup) rl = &x150_regions[reinterpret_cast(rl)]; u32 numOctreeNodes = r.readUint32Big(); x158_octree.reserve(numOctreeNodes); for (u32 i=0 ; i&& in, u32 len, const urde::CVParamTransfer& vparms, CObjectReference* selfRef) { return TToken::GetIObjObjectFor(std::make_unique(std::move(in), len)); } }