#ifndef WORLD_H__ #define WORLD_H__ #include "define.h" #include "chunk.h" #include "array2d.h" #include "vector3.h" #include "transformation.h" class World { public: World(); ~World(); Array2d& GetChunks(); template Chunk* World::ChunkAt(T x, T y, T z) const { int cx = (int)x / CHUNK_SIZE_X; int cz = (int)z / CHUNK_SIZE_Z; if (cx >= VIEW_DISTANCE || // L'array en ce moment est de VIEW_DISTANCE par VIEW_DISTANCE. cz >= VIEW_DISTANCE || cx < 0 || cz < 0) return 0; return m_chunks.Get(cx, cz); } template Chunk* World::ChunkAt(const Vector3& pos) const { return ChunkAt(pos.x, pos.y, pos.z); } template BlockType World::BlockAt(T x, T y, T z, BlockType defaultBlockType = BTYPE_AIR) const { Chunk* c = ChunkAt(x, y, z); if (!c) return defaultBlockType; int bx = (int)x % CHUNK_SIZE_X; int by = (int)y % CHUNK_SIZE_Y; int bz = (int)z % CHUNK_SIZE_Z; return c->GetBlock(bx, by, bz); } template BlockType World::BlockAt(Vector3& pos, BlockType defaultBlockType = BTYPE_AIR) const { return BlockAt(pos.x, pos.y, pos.z); } private: Array2d m_chunks = Array2d(VIEW_DISTANCE, VIEW_DISTANCE); int m_center[2] = {0, 0}; }; #endif