2018-10-07 03:42:33 +00:00
|
|
|
#pragma once
|
2016-08-10 21:54:53 +00:00
|
|
|
|
|
|
|
#include "DNACommon.hpp"
|
2016-08-11 19:52:22 +00:00
|
|
|
#include "DeafBabe.hpp"
|
2016-08-10 21:54:53 +00:00
|
|
|
#include "zeus/CAABox.hpp"
|
|
|
|
#include "CMDL.hpp"
|
2022-02-18 07:37:54 +00:00
|
|
|
#include <athena/MemoryWriter.hpp>
|
2016-08-10 21:54:53 +00:00
|
|
|
#include <set>
|
|
|
|
|
2018-12-08 05:30:43 +00:00
|
|
|
namespace DataSpec {
|
2020-03-18 06:12:43 +00:00
|
|
|
namespace DNAPATH {
|
2020-04-09 05:46:40 +00:00
|
|
|
template <class PAKBridge>
|
2018-02-25 08:23:27 +00:00
|
|
|
struct PATH;
|
|
|
|
}
|
2016-08-10 21:54:53 +00:00
|
|
|
|
2018-12-08 05:30:43 +00:00
|
|
|
struct AROTBuilder {
|
|
|
|
using ColMesh = hecl::blender::ColMesh;
|
|
|
|
|
|
|
|
struct BitmapPool {
|
|
|
|
std::vector<std::set<int>> m_pool;
|
|
|
|
size_t addIndices(const std::set<int>& indices);
|
|
|
|
} bmpPool;
|
|
|
|
|
|
|
|
struct Node {
|
|
|
|
std::vector<Node> childNodes;
|
|
|
|
std::set<int> childIndices;
|
|
|
|
size_t poolIdx = 0;
|
|
|
|
uint16_t flags = 0;
|
|
|
|
uint16_t compSubdivs = 0;
|
|
|
|
|
|
|
|
size_t nodeOff = 0;
|
|
|
|
size_t nodeSz = 4;
|
|
|
|
|
|
|
|
void addChild(int level, int minChildren, const std::vector<zeus::CAABox>& triBoxes, const zeus::CAABox& curAABB,
|
|
|
|
BspNodeType& typeOut);
|
|
|
|
void mergeSets(int a, int b);
|
|
|
|
bool compareSets(int a, int b) const;
|
|
|
|
void nodeCount(size_t& sz, size_t& idxRefs, BitmapPool& bmpPool, size_t& curOff);
|
|
|
|
void writeIndirectionTable(athena::io::MemoryWriter& w);
|
|
|
|
void writeNodes(athena::io::MemoryWriter& w, int nodeIdx);
|
|
|
|
void advanceIndex(int& nodeIdx);
|
|
|
|
|
|
|
|
void colSize(size_t& totalSz);
|
|
|
|
void writeColNodes(uint8_t*& ptr, const zeus::CAABox& curAABB);
|
|
|
|
|
|
|
|
void pathCountNodesAndLookups(size_t& nodeCount, size_t& lookupCount);
|
2020-04-09 05:46:40 +00:00
|
|
|
template <class PAKBridge>
|
|
|
|
void pathWrite(DNAPATH::PATH<PAKBridge>& path, const zeus::CAABox& curAABB);
|
2018-12-08 05:30:43 +00:00
|
|
|
} rootNode;
|
|
|
|
|
|
|
|
void build(std::vector<std::vector<uint8_t>>& secs, const zeus::CAABox& fullAabb,
|
|
|
|
const std::vector<zeus::CAABox>& meshAabbs, const std::vector<DNACMDL::Mesh>& meshes);
|
|
|
|
std::pair<std::unique_ptr<uint8_t[]>, uint32_t> buildCol(const ColMesh& mesh, BspNodeType& rootOut);
|
2020-04-09 05:46:40 +00:00
|
|
|
template <class PAKBridge>
|
|
|
|
void buildPath(DNAPATH::PATH<PAKBridge>& path);
|
2016-08-10 21:54:53 +00:00
|
|
|
};
|
|
|
|
|
2018-12-08 05:30:43 +00:00
|
|
|
} // namespace DataSpec
|