#pragma once #include "dZMCommon.h" #include #include #include "Zone.h" class Level { public: enum ChunkTypeID : uint16_t { FileInfo = 1000, SceneEnviroment = 2000, SceneObjectData, SceneParticleData }; enum ChunkTypes { Enviroment, Objects, Particles }; struct FileInfoChunk { uint32_t version; uint32_t revision; uint32_t enviromentChunkStart; uint32_t objectChunkStart; uint32_t particleChunkStart; }; struct SceneObjectDataChunk { std::map objects; const void PrintAllObjects() { for (std::map::iterator it = objects.begin(); it != objects.end(); ++it) { std::cout << "\t ID: " << it->first << " LOT: " << it->second.lot << std::endl; } } uint32_t GetObjectCount() { return objects.size(); } }; struct Header { uint32_t id; uint16_t chunkVersion; ChunkTypeID chunkType; uint32_t size; uint32_t startPosition; FileInfoChunk* fileInfo; SceneObjectDataChunk* sceneObjects; LWOSCENEID lwoSceneID; }; public: Level(Zone* parentZone, const std::string& filepath); ~Level(); const void PrintAllObjects(); std::map m_ChunkHeaders; private: Zone* m_ParentZone; //private functions: void ReadChunks(std::istream& file); void ReadFileInfoChunk(std::istream& file, Header& header); void ReadSceneObjectDataChunk(std::istream& file, Header& header); };