DarkflameServer/dZoneManager/Level.h
2023-06-16 23:30:28 -05:00

68 lines
1.4 KiB
C++

#pragma once
#include "dZMCommon.h"
#include <map>
#include <iostream>
#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<LWOOBJID, SceneObject> objects;
const void PrintAllObjects() {
for (std::map<LWOOBJID, SceneObject>::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<uint32_t, Header> 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);
};