#ifndef SERVER_WORLD_CHUNK_HH_ #define SERVER_WORLD_CHUNK_HH_ #include #include "server/database.hh" #include "server/shared.hh" #include "shared/entity/player.hh" #include "shared/math/math.hh" #include "shared/net/net.hh" #include "shared/net/proto.hh" #include "shared/world/chunk.hh" namespace server { namespace world { class chunk : public shared::world::chunk { private: bool should_write = false; bool should_update = true; public: proto::packet packet; // Packet ready for sending, updated in update(). void arm_should_update() noexcept { this->should_update = this->should_write = true; } public: template chunk(Args&&... args) noexcept : shared::world::chunk(std::forward(args)...) { this->pack(packet.mutable_chunk_packet()); } virtual ~chunk() noexcept; public: // Update the chunk_packet associated with the chunk if necessary. void update() noexcept; // calling .write before the destrutor will not result in a double write void write() noexcept; }; } // namespace world } // namespace server #endif