SQCSimulator2023/SQCSim2021/world.h

60 lines
1.8 KiB
C
Raw Normal View History

2021-11-15 20:58:13 -05:00
#ifndef WORLD_H__
#define WORLD_H__
#include <fstream>
#include <string>
#include <vector>
#include <future>
#include <thread>
2021-11-15 20:58:13 -05:00
#include "define.h"
#include "chunk.h"
#include "array2d.h"
2023-09-25 17:17:17 -04:00
#include "../SQCSim-common/vector3.h"
2021-12-01 21:21:45 -05:00
#include "player.h"
2021-11-15 20:58:13 -05:00
#include "transformation.h"
2021-12-02 18:12:35 -05:00
#include "shader.h"
2021-12-07 18:59:50 -05:00
#include "bullet.h"
2021-12-02 18:12:35 -05:00
#include "textureatlas.h"
2021-11-15 20:58:13 -05:00
class Chunk;
2021-12-01 21:21:45 -05:00
class Player;
2021-12-07 18:59:50 -05:00
class Bullet;
2021-11-15 20:58:13 -05:00
class World {
2021-12-02 18:12:35 -05:00
public:
World();
~World();
2021-11-15 20:58:13 -05:00
2021-12-02 18:12:35 -05:00
Array2d<Chunk*>& GetChunks();
2021-11-15 20:58:13 -05:00
2023-09-25 08:23:52 -04:00
void SetSeed(uint64_t seed);
2021-12-02 18:12:35 -05:00
Chunk* ChunkAt(float x, float y, float z) const;
Chunk* ChunkAt(const Vector3f& pos) const;
2021-11-15 20:58:13 -05:00
2021-12-02 18:12:35 -05:00
BlockType BlockAt(float x, float y, float z, BlockType defaultBlockType = BTYPE_AIR) const;
BlockType BlockAt(const Vector3f& pos, BlockType defaultBlockType = BTYPE_AIR) const;
2021-12-01 22:06:47 -05:00
void Update(int& rendercount, Bullet* bullets[MAX_BULLETS], Player& player, Transformation& world, Shader& shader, TextureAtlas& atlas, BlockInfo* blockinfo[BTYPE_LAST]);
2021-12-02 18:12:35 -05:00
2021-12-18 15:24:57 -05:00
void GetScope(unsigned int& x, unsigned int& y);
2021-12-02 18:12:35 -05:00
void ChangeBlockAtCursor(BlockType blockType, Player& player, bool& block);
2021-12-07 18:59:50 -05:00
void ChangeBlockAtPosition(BlockType blockType, Vector3f pos);
2021-12-02 18:12:35 -05:00
void CleanUpWorld(int& deleteframes, bool clear);
int GettbDeleted() const;
2021-11-15 20:58:13 -05:00
private:
2021-11-26 11:59:02 -05:00
Array2d<Chunk*> m_chunks = Array2d<Chunk*>(WORLD_SIZE_X, WORLD_SIZE_Y);
2021-12-01 21:21:45 -05:00
std::vector<Chunk*> m_tbDeleted;
2023-09-25 08:23:52 -04:00
uint64_t m_seed = 0;
2021-11-15 20:58:13 -05:00
2021-12-18 15:36:21 -05:00
unsigned int m_center[2] = { UINT16_MAX / 2 - WORLD_SIZE_X, UINT16_MAX / 2 - WORLD_SIZE_Y };
2021-12-02 18:12:35 -05:00
2021-12-18 15:24:57 -05:00
void UpdateChunk(int& updates, unsigned int chx, unsigned int chy, BlockInfo* blockinfo[BTYPE_LAST]);
2021-12-07 18:59:50 -05:00
void RenderWorld(int& rendercount, Player& player, Transformation& world, Shader& shader);
void UpdateWorld(Player& player, BlockInfo* blockinfo[BTYPE_LAST]);
2021-12-07 18:59:50 -05:00
void TransposeWorld(Player& player, Bullet* bullets[MAX_BULLETS]);
2021-12-02 18:12:35 -05:00
2021-11-15 20:58:13 -05:00
};
2021-11-16 20:48:52 -05:00
#endif // WORLD_H__
2021-11-15 20:58:13 -05:00