#pragma once #include #include #include #include #include #include "Block.hpp" #include "Vector.hpp" #include "Utility.hpp" struct PackedSection { Vector position; int bitsPerBlock; std::vector palette; std::vector blocks; std::vector light; std::vector sky; PackedSection(Vector position, byte *dataBlocks, size_t dataBlocksLength, byte *dataLight, byte *dataSky, byte bitsPerBlock, std::vector palette); PackedSection() = default; }; class Section { std::vector blocks; Vector worldPosition; public: Section(PackedSection data); ~Section(); Section(Section &&other) noexcept; Block &GetBlock(Vector pos); Block GetBlock(Vector pos) const; Section &operator=(Section other) noexcept; friend void swap(Section& lhs, Section& rhs) noexcept; Section(const Section &other); Vector GetPosition() const; size_t GetHash() const; };