#pragma once #include #include #include struct UpgradeTowerPacketData { sp::BitField, // std::uint16_t m_Tower : 12; sp::Field // std::uint8_t m_Upgrade : 4; > m_TowerAndUpgrade; sp::VarInt m_Test; std::map> m_Test2; }; class UpgradeTowerPacket : public sp::MessageBase> { private: UpgradeTowerPacketData m_Data; public: template UpgradeTowerPacket(T... args) : m_Data{args...} {} std::uint16_t GetTowerId() const { return m_Data.m_TowerAndUpgrade.GetField<0>(); } std::uint8_t GetTowerUpgrade() const { return m_Data.m_TowerAndUpgrade.GetField<1>(); } virtual sp::PacketID GetId() const { return UpgradeTower; } UpgradeTowerPacketData& GetData() { return m_Data; } };