diff options
Diffstat (limited to '')
| -rw-r--r-- | src/koopatlas/mapdata.cpp | 23 | ||||
| -rw-r--r-- | src/koopatlas/mapdata.h | 17 | 
2 files changed, 40 insertions, 0 deletions
| diff --git a/src/koopatlas/mapdata.cpp b/src/koopatlas/mapdata.cpp index 826d478..7fd2d17 100644 --- a/src/koopatlas/mapdata.cpp +++ b/src/koopatlas/mapdata.cpp @@ -33,11 +33,15 @@ int dKPLayer_s::findNodeID(dKPNode_s *node) {  dKPMapData_c::dKPMapData_c() {  	data = 0;  	fixedUp = false; +	levelNodeExtraArray = 0;  	tilesetLoaders = 0;  	tilesetsLoaded = false;  }  dKPMapData_c::~dKPMapData_c() { +	if (levelNodeExtraArray) +		delete[] levelNodeExtraArray; +  	unloadTilesets();  	m_fileLoader.unload(); @@ -153,6 +157,25 @@ void dKPMapData_c::fixup() {  		}  	} +	 +	// before we finish here, create the Node Extra classes +	// first off, count how many we need... +	int count = 0; +	for (int nodeIdx = 0; nodeIdx < pathLayer->nodeCount; nodeIdx++) { +		if (pathLayer->nodes[nodeIdx]->type == dKPNode_s::LEVEL) +			count++; +	} + +	levelNodeExtraArray = new dKPNodeExtra_c[count]; + +	int extraIdx = 0; + +	for (int nodeIdx = 0; nodeIdx < pathLayer->nodeCount; nodeIdx++) { +		if (pathLayer->nodes[nodeIdx]->type == dKPNode_s::LEVEL) { +			pathLayer->nodes[nodeIdx]->extra = &levelNodeExtraArray[extraIdx]; +			extraIdx++; +		} +	}  } diff --git a/src/koopatlas/mapdata.h b/src/koopatlas/mapdata.h index 9f40433..6739086 100644 --- a/src/koopatlas/mapdata.h +++ b/src/koopatlas/mapdata.h @@ -7,6 +7,8 @@  // forward declarations  struct dKPLayer_s; +class dKPNodeExtra_c; +  /******************************************************************************   * Doodads   ******************************************************************************/ @@ -68,6 +70,11 @@ struct dKPNode_s {  	dKPLayer_s *tileLayer, *doodadLayer;  	NodeTypes type; + +	dKPNodeExtra_c *extra; + +	// The union is placed at the very end so we can leave out padding in the +	// kpbin  	union {  		struct { u8 levelNumber[2]; };  		// FORWARDS COMPATIBILITY:   @@ -208,10 +215,20 @@ class dKPMapData_c {  		dDvdLoader_c bgLoader;  		dDvdLoader_c nodeLoader; +		dKPNodeExtra_c *levelNodeExtraArray; +  		dKPMapData_c();  		bool load(const char *filename);  		~dKPMapData_c();  }; + +// Currently only available for LEVEL nodes +class dKPNodeExtra_c { +	public: +		mMtx matrix; +		m3d::mdl_c model; +}; +  #endif | 
