#ifndef WORLD_H__ #define WORLD_H__ #include "define.h" #include "chunk.h" #include "array2d.h" #include "vector3.h" #include "player.h" #include "transformation.h" #include "perlin.h" #include "shader.h" #include "textureatlas.h" #include #include #include class Chunk; class Player; 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; void Update(int& rendercount, int& badhitcount, Player& player, Transformation& world, Shader& shader, TextureAtlas& atlas, Perlin& perlin, BlockInfo* blockinfo[BTYPE_LAST]); void GetScope(int& x, int& y); void ChangeBlockAtCursor(BlockType blockType, Player& player, bool& block); void CleanUpWorld(int& deleteframes, bool clear); private: Array2d m_chunks = Array2d(WORLD_SIZE_X, WORLD_SIZE_Y); std::vector m_tbDeleted; int m_center[2] = { INT16_MAX / 2 - WORLD_SIZE_X / 2, INT16_MAX / 2 - WORLD_SIZE_Y / 2 }; bool GenerateChunk(int x, int y, Perlin& perlin); void UpdateChunk(int& generates, int& updates, int chx, int chy, Perlin& perlin, BlockInfo* blockinfo[BTYPE_LAST]); void RenderWorld(int& rendercount, int& badhitcount, Player& player, Transformation& world, Shader& shader); void UpdateWorld(Player& player, Perlin& perlin, BlockInfo* blockinfo[BTYPE_LAST]); void TransposeWorld(Player& player); /*Chunk* RetrieveChunk(int x, int y);*/ }; #endif // WORLD_H__