namespace blank {
+class Block;
class Entity;
class EntityState;
struct PlayerUpdate : public Payload {
static constexpr std::uint8_t TYPE = 4;
- static constexpr std::size_t MAX_LEN = 64;
-
- void WritePlayer(const Entity &) noexcept;
- void ReadPlayerState(EntityState &) const noexcept;
+ static constexpr std::size_t MAX_LEN = 76;
+
+ void WritePredictedState(const EntityState &) noexcept;
+ void ReadPredictedState(EntityState &) const noexcept;
+ void WriteMovement(const glm::vec3 &) noexcept;
+ void ReadMovement(glm::vec3 &) const noexcept;
+ void WritePitch(float) noexcept;
+ void ReadPitch(float &) const noexcept;
+ void WriteYaw(float) noexcept;
+ void ReadYaw(float &) const noexcept;
+ void WriteActions(std::uint8_t) noexcept;
+ void ReadActions(std::uint8_t &) const noexcept;
+ void WriteSlot(std::uint8_t) noexcept;
+ void ReadSlot(std::uint8_t &) const noexcept;
};
struct SpawnEntity : public Payload {
struct EntityUpdate : public Payload {
static constexpr std::uint8_t TYPE = 7;
- static constexpr std::size_t MAX_LEN = 452;
+ static constexpr std::size_t MAX_LEN = 480;
static constexpr std::uint32_t MAX_ENTITIES = 7;
static constexpr std::size_t GetSize(std::uint32_t num) noexcept {
void ReadData(std::uint8_t *, std::size_t maxlen) const noexcept;
};
+ struct BlockUpdate : public Payload {
+ static constexpr std::uint8_t TYPE = 11;
+ static constexpr std::size_t MAX_LEN = 484;
+
+ static constexpr std::uint32_t MAX_BLOCKS = 78;
+ static constexpr std::size_t GetSize(std::uint32_t num) noexcept {
+ return 16 + (num * 6);
+ }
+
+ void WriteChunkCoords(const glm::ivec3 &) noexcept;
+ void ReadChunkCoords(glm::ivec3 &) const noexcept;
+ void WriteBlockCount(std::uint32_t) noexcept;
+ void ReadBlockCount(std::uint32_t &) const noexcept;
+
+ void WriteIndex(std::uint16_t, std::uint32_t) noexcept;
+ void ReadIndex(std::uint16_t &, std::uint32_t) const noexcept;
+ void WriteBlock(const Block &, std::uint32_t) noexcept;
+ void ReadBlock(Block &, std::uint32_t) const noexcept;
+ };
+
template<class PayloadType>
PayloadType As() {