diff --git a/include/protocol/PacketHandler.h b/include/protocol/PacketHandler.h index 2d12deb..add3149 100644 --- a/include/protocol/PacketHandler.h +++ b/include/protocol/PacketHandler.h @@ -35,6 +35,7 @@ public: virtual void HandlePacket(SpawnMobPacket* packet) {} virtual void HandlePacket(PlaceTowerPacket* packet) {} virtual void HandlePacket(WorldAddTowerPacket* packet) {} + virtual void HandlePacket(WorldRemoveTowerPacket* packet) {} }; } // namespace protocol diff --git a/include/protocol/Protocol.h b/include/protocol/Protocol.h index 830ab27..122666c 100644 --- a/include/protocol/Protocol.h +++ b/include/protocol/Protocol.h @@ -29,7 +29,8 @@ enum class PacketType : std::uint8_t { ServerTps, SpawnMob, PlaceTower, - WorldAddTower + WorldAddTower, + WorldRemoveTower, }; class Packet { @@ -428,5 +429,22 @@ public: virtual PacketType getType() const { return PacketType::WorldAddTower; } }; +class WorldRemoveTowerPacket : public Packet{ +private: + game::TowerID m_TowerID; +public: + WorldRemoveTowerPacket() {} + WorldRemoveTowerPacket(game::TowerID id) : m_TowerID(id) {} + virtual ~WorldRemoveTowerPacket() {} + + virtual DataBuffer Serialize() const; + virtual void Deserialize(DataBuffer& data); + virtual void Dispatch(PacketHandler* handler); + + game::TowerID getTowerID() const { return m_TowerID; } + + virtual PacketType getType() const { return PacketType::WorldRemoveTower; } +}; + } } \ No newline at end of file diff --git a/src/protocol/PacketFactory.cpp b/src/protocol/PacketFactory.cpp index 5dbd180..8c6bbc7 100644 --- a/src/protocol/PacketFactory.cpp +++ b/src/protocol/PacketFactory.cpp @@ -28,6 +28,7 @@ static std::map packets = { {PacketType::SpawnMob, []() -> Packet* {return new SpawnMobPacket(); } }, {PacketType::PlaceTower, []() -> Packet* {return new PlaceTowerPacket(); } }, {PacketType::WorldAddTower, []() -> Packet* {return new WorldAddTowerPacket(); } }, + {PacketType::WorldRemoveTower, []() -> Packet* {return new WorldRemoveTowerPacket(); } }, }; Packet* createPacket(PacketType type, DataBuffer& buffer) { diff --git a/src/protocol/Protocol.cpp b/src/protocol/Protocol.cpp index aed7a23..147de0f 100644 --- a/src/protocol/Protocol.cpp +++ b/src/protocol/Protocol.cpp @@ -402,12 +402,22 @@ void PlaceTowerPacket::Deserialize(DataBuffer& data) { DataBuffer WorldAddTowerPacket::Serialize() const { DataBuffer data; - data << getID() << m_TowerX << m_TowerY << m_TowerType << m_Builder; + data << getID() << m_TowerID << m_TowerX << m_TowerY << m_TowerType << m_Builder; return data; } void WorldAddTowerPacket::Deserialize(DataBuffer& data) { - data >> m_TowerX >> m_TowerY >> m_TowerType >> m_Builder; + data >> m_TowerID >> m_TowerX >> m_TowerY >> m_TowerType >> m_Builder; +} + +DataBuffer WorldRemoveTowerPacket::Serialize() const { + DataBuffer data; + data << getID() << m_TowerID; + return data; +} + +void WorldRemoveTowerPacket::Deserialize(DataBuffer& data) { + data >> m_TowerID; } REGISTER_DISPATCH_CLASS(PlayerLoginPacket); @@ -429,6 +439,7 @@ REGISTER_DISPATCH_CLASS(ServerTpsPacket); REGISTER_DISPATCH_CLASS(SpawnMobPacket); REGISTER_DISPATCH_CLASS(PlaceTowerPacket); REGISTER_DISPATCH_CLASS(WorldAddTowerPacket); +REGISTER_DISPATCH_CLASS(WorldRemoveTowerPacket); } // namespace protocol } // namespace td \ No newline at end of file