#include "Packet.hpp"
#include "../app/init.hpp"
-#include "../model/CompositeModel.hpp"
+#include "../model/Model.hpp"
#include "../world/Entity.hpp"
#include "../world/EntityState.hpp"
constexpr size_t Packet::PlayerCorrection::MAX_LEN;
constexpr size_t Packet::ChunkBegin::MAX_LEN;
constexpr size_t Packet::ChunkData::MAX_LEN;
+constexpr size_t Packet::BlockUpdate::MAX_LEN;
Connection::Connection(const IPaddress &addr)
: handler(nullptr)
return "ChunkBegin";
case ChunkData::TYPE:
return "ChunkData";
+ case BlockUpdate::TYPE:
+ return "BlockUpdate";
default:
return "Unknown";
}
memcpy(d, &data[12], len);
}
+void Packet::BlockUpdate::WriteChunkCoords(const glm::ivec3 &coords) noexcept {
+ Write(coords, 0);
+}
+
+void Packet::BlockUpdate::ReadChunkCoords(glm::ivec3 &coords) const noexcept {
+ Read(coords, 0);
+}
+
+void Packet::BlockUpdate::WriteBlockCount(uint32_t count) noexcept {
+ Write(count, 12);
+}
+
+void Packet::BlockUpdate::ReadBlockCount(uint32_t &count) const noexcept {
+ Read(count, 12);
+}
+
+void Packet::BlockUpdate::WriteIndex(uint16_t index, uint32_t num) noexcept {
+ uint32_t off = GetSize(num);
+ Write(index, off);
+}
+
+void Packet::BlockUpdate::ReadIndex(uint16_t &index, uint32_t num) const noexcept {
+ uint32_t off = GetSize(num);
+ Read(index, off);
+}
+
+void Packet::BlockUpdate::WriteBlock(const Block &block, uint32_t num) noexcept {
+ uint32_t off = GetSize(num) + 2;
+ Write(block, off);
+}
+
+void Packet::BlockUpdate::ReadBlock(Block &block, uint32_t num) const noexcept {
+ uint32_t off = GetSize(num) + 2;
+ Read(block, off);
+}
+
void ConnectionHandler::Handle(const UDPpacket &udp_pack) {
const Packet &pack = *reinterpret_cast<const Packet *>(udp_pack.data);
case Packet::ChunkData::TYPE:
On(Packet::As<Packet::ChunkData>(udp_pack));
break;
+ case Packet::BlockUpdate::TYPE:
+ On(Packet::As<Packet::BlockUpdate>(udp_pack));
+ break;
default:
// drop unknown or unhandled packets
break;