#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(); Chunk* ChunkAt(float x, float y, float z) const; Chunk* ChunkAt(const Vector3f& pos) const; BlockType BlockAt(float x, float y, float z, BlockType defaultBlockType = BTYPE_AIR) const; BlockType BlockAt(const Vector3f& pos, BlockType defaultBlockType = BTYPE_AIR) const; private: Array2d m_chunks = Array2d(VIEW_DISTANCE, VIEW_DISTANCE); int m_center[2] = {0, 0}; }; // //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) 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(const Vector3& pos, BlockType defaultBlockType) const { // return BlockAt(pos.x, pos.y, pos.z); //} #endif