#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; void PrintAllObjects() const; 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(); static void MakeSpawner(SceneObject obj); 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); };