mirror of
				https://github.com/AxioDL/metaforce.git
				synced 2025-10-25 22:50:24 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			59 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| #pragma once
 | |
| 
 | |
| #include "DNACommon.hpp"
 | |
| #include "DeafBabe.hpp"
 | |
| #include "zeus/CAABox.hpp"
 | |
| #include "CMDL.hpp"
 | |
| #include <set>
 | |
| 
 | |
| namespace DataSpec {
 | |
| namespace DNAPATH {
 | |
| template <class PAKBridge>
 | |
| struct PATH;
 | |
| }
 | |
| 
 | |
| 
 | |
| 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);
 | |
|     template <class PAKBridge>
 | |
|     void pathWrite(DNAPATH::PATH<PAKBridge>& path, const zeus::CAABox& curAABB);
 | |
|   } 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);
 | |
|   template <class PAKBridge>
 | |
|   void buildPath(DNAPATH::PATH<PAKBridge>& path);
 | |
| };
 | |
| 
 | |
| } // namespace DataSpec
 |