diff options
author | LaG1924 <12997935+LaG1924@users.noreply.github.com> | 2017-06-21 16:26:25 +0200 |
---|---|---|
committer | LaG1924 <12997935+LaG1924@users.noreply.github.com> | 2017-06-21 16:26:25 +0200 |
commit | f5aa7827af55342a1ec714d366944b3e3f3129b2 (patch) | |
tree | 4f4885d2ae0f46004a22e7d4dc34f80c11ecee0c /include/world | |
parent | 2017-06-20 (diff) | |
download | AltCraft-f5aa7827af55342a1ec714d366944b3e3f3129b2.tar AltCraft-f5aa7827af55342a1ec714d366944b3e3f3129b2.tar.gz AltCraft-f5aa7827af55342a1ec714d366944b3e3f3129b2.tar.bz2 AltCraft-f5aa7827af55342a1ec714d366944b3e3f3129b2.tar.lz AltCraft-f5aa7827af55342a1ec714d366944b3e3f3129b2.tar.xz AltCraft-f5aa7827af55342a1ec714d366944b3e3f3129b2.tar.zst AltCraft-f5aa7827af55342a1ec714d366944b3e3f3129b2.zip |
Diffstat (limited to 'include/world')
-rw-r--r-- | include/world/Block.hpp | 15 | ||||
-rw-r--r-- | include/world/Collision.hpp | 8 | ||||
-rw-r--r-- | include/world/Section.hpp | 48 | ||||
-rw-r--r-- | include/world/World.hpp | 35 |
4 files changed, 106 insertions, 0 deletions
diff --git a/include/world/Block.hpp b/include/world/Block.hpp new file mode 100644 index 0000000..2f823fe --- /dev/null +++ b/include/world/Block.hpp @@ -0,0 +1,15 @@ +#pragma once + +struct Block { + Block(); + + Block(unsigned short id, unsigned char state); + + ~Block(); + + unsigned short id : 13; + unsigned char state : 4; + //unsigned char light:4; +}; + +bool operator<(const Block &lhs, const Block &rhs);
\ No newline at end of file diff --git a/include/world/Collision.hpp b/include/world/Collision.hpp new file mode 100644 index 0000000..b88fbf7 --- /dev/null +++ b/include/world/Collision.hpp @@ -0,0 +1,8 @@ +#pragma once + +struct AABB { + double x,y,z; + double w,l,h; +}; + +bool TestCollision(AABB first, AABB second);
\ No newline at end of file diff --git a/include/world/Section.hpp b/include/world/Section.hpp new file mode 100644 index 0000000..139b5b5 --- /dev/null +++ b/include/world/Section.hpp @@ -0,0 +1,48 @@ +#pragma once + +#include <vector> +#include <map> +#include <condition_variable> + +#include <easylogging++.h> + +#include <world/Block.hpp> +#include <Vector.hpp> +#include <Utility.hpp> + +const int SECTION_WIDTH = 16; +const int SECTION_LENGTH = 16; +const int SECTION_HEIGHT = 16; + +class Section { + std::vector<unsigned short> m_palette; + byte *m_dataBlocks = nullptr; + size_t m_dataBlocksLen; + byte *m_dataLight = nullptr; + byte *m_dataSkyLight = nullptr; + byte m_bitsPerBlock = 0; + std::vector<Block> m_blocks; + std::condition_variable parseWaiter; + + Section(); + + Vector worldPosition; + +public: + void Parse(); + + Section(Vector position, byte *dataBlocks, size_t dataBlocksLength, byte *dataLight, byte *dataSky, byte bitsPerBlock, + std::vector<unsigned short> palette); + + ~Section(); + + Block &GetBlock(Vector pos); + + Section &operator=(Section other); + + friend void swap(Section &a, Section &b); + + Section(const Section &other); + + Vector GetPosition(); +};
\ No newline at end of file diff --git a/include/world/World.hpp b/include/world/World.hpp new file mode 100644 index 0000000..6e5eedb --- /dev/null +++ b/include/world/World.hpp @@ -0,0 +1,35 @@ +#pragma once + +#include <map> +#include <bitset> + +#include <easylogging++.h> + +#include <world/Block.hpp> +#include <world/Section.hpp> +#include <network/Packet.hpp> +#include <world/Collision.hpp> + +class World { + //utility vars + World(const World &other); + + World &operator=(const World &other); + + //game vars + int dimension = 0; + + //game methods + Section ParseSection(StreamInput *data, Vector position); + +public: + World(); + + ~World(); + + void ParseChunkData(std::shared_ptr<PacketChunkData> packet); + + std::map<Vector, Section> sections; + + bool isPlayerCollides(double X, double Y, double Z); +};
\ No newline at end of file |