X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fnet%2FPacket.hpp;h=b32b42b5bceee10c901d8335426bb971b81c5746;hb=c1da86ebab41895bf49ed747c75ecf722e8c5586;hp=ba078585c0c06dae4ed5ad488b9123dfd7ecbaef;hpb=ae5a7e7d8517fac406a88e9bf98fd3d5bb1728b9;p=blank.git diff --git a/src/net/Packet.hpp b/src/net/Packet.hpp index ba07858..b32b42b 100644 --- a/src/net/Packet.hpp +++ b/src/net/Packet.hpp @@ -55,8 +55,16 @@ struct Packet { std::size_t length; std::uint8_t *data; + /// WARNING: do not use these if the data doesn not + /// point into a real packet's payload + const Packet &GetPacket() const noexcept { + return *reinterpret_cast(data - sizeof(Header)); + } + const Header &GetHeader() const noexcept { + return GetPacket().header; + } std::uint16_t Seq() const noexcept { - return reinterpret_cast(data - sizeof(Header))->header.ctrl.seq; + return GetHeader().ctrl.seq; } template @@ -99,10 +107,20 @@ struct Packet { 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 { @@ -125,11 +143,11 @@ struct Packet { 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 { - return 4 + (num * 64); + return 4 + (num * 68); } void WriteEntityCount(std::uint32_t) noexcept;