commit 497a601c424e8e728ef0a8e61f049982f2d4af16 Author: Persson-dev <sim16.prib@gmail.com> Date: Sat Aug 12 10:32:52 2023 +0200 fix warning commit 1bfd019a1ea00dcdb6323d1f285e2cdd3ebb4020 Author: Persson-dev <sim16.prib@gmail.com> Date: Tue Jul 25 19:05:13 2023 +0200 refactor: update cast commit 5bbc23a7d37e53eb74a885685f18e714f9448fd9 Author: Persson-dev <sim16.prib@gmail.com> Date: Tue Jul 25 19:04:15 2023 +0200 moved GetImguiTeamColor commit fd0e2d2470ea5cca3553acf280aa371de5c06f4c Author: Persson-dev <sim16.prib@gmail.com> Date: Tue Jul 25 19:03:37 2023 +0200 packets forward declaration commit 06eb9b99a96731f4b9a2167c00ed0bcd03702e3b Author: Persson-dev <sim16.prib@gmail.com> Date: Tue Jul 25 18:30:55 2023 +0200 remove Protocol.h includes commit 165f63d2e8b468f3e38992baddc221270010f801 Author: Persson-dev <sim16.prib@gmail.com> Date: Tue Jul 25 18:30:30 2023 +0200 split packets into separate source files commit f247f146c6c1e804a44b86f65cf3059859c07c6c Author: Persson-dev <sim16.prib@gmail.com> Date: Tue Jul 25 17:45:24 2023 +0200 split packets into separate headers
82 lines
2.6 KiB
C++
82 lines
2.6 KiB
C++
#include "protocol/packets/WorldBeginDataPacket.h"
|
|
|
|
namespace td {
|
|
namespace protocol {
|
|
|
|
DataBuffer WorldBeginDataPacket::Serialize(bool packetID) const {
|
|
DataBuffer data;
|
|
const game::TowerTileColorPalette& towerTilePalette = m_Header.m_World->GetTowerTileColorPalette();
|
|
const std::vector<Color>& decoTilePalette = m_Header.m_World->GetDecorationPalette();
|
|
|
|
WritePacketID(data, packetID);
|
|
|
|
data << towerTilePalette << m_Header.m_World->GetWalkableTileColor()
|
|
<< static_cast<std::uint16_t>(decoTilePalette.size());
|
|
|
|
// deco color palette
|
|
std::size_t bufferSize = data.GetSize();
|
|
data.Resize(bufferSize + decoTilePalette.size() * sizeof(Color));
|
|
|
|
memcpy(reinterpret_cast<std::uint8_t*>(data.data()) + bufferSize, decoTilePalette.data(), decoTilePalette.size() * sizeof(Color));
|
|
|
|
data << m_Header.m_World->GetBackgroundColor();
|
|
|
|
const game::Spawn& redSpawn = m_Header.m_World->GetRedTeam().GetSpawn(), blueSpawn = m_Header.m_World->GetBlueTeam().GetSpawn();
|
|
const game::TeamCastle& redCastle = m_Header.m_World->GetRedTeam().GetCastle(), blueCastle = m_Header.m_World->GetBlueTeam().GetCastle();
|
|
|
|
data << redSpawn << static_cast<utils::shape::Rectangle>(redCastle);
|
|
data << blueSpawn << static_cast<utils::shape::Rectangle>(blueCastle);
|
|
|
|
// tile palette
|
|
data << static_cast<std::uint64_t>(m_Header.m_World->GetTilePalette().size());
|
|
|
|
for (game::TilePtr tile : m_Header.m_World->GetTilePalette()) {
|
|
data << tile;
|
|
}
|
|
|
|
data << m_Header.m_World->GetSpawnColors();
|
|
|
|
return data;
|
|
}
|
|
|
|
void WorldBeginDataPacket::Deserialize(DataBuffer& data) {
|
|
data >> m_Header.m_TowerPlacePalette >> m_Header.m_WalkablePalette;
|
|
|
|
std::uint16_t decoPaletteSize;
|
|
data >> decoPaletteSize;
|
|
|
|
std::size_t decoPalletteSizeByte = decoPaletteSize * sizeof(Color);
|
|
|
|
m_Header.m_DecorationPalette.resize(decoPaletteSize);
|
|
|
|
memcpy(reinterpret_cast<std::uint8_t*>(m_Header.m_DecorationPalette.data()), data.data() + data.GetReadOffset(), decoPalletteSizeByte);
|
|
|
|
data.SetReadOffset(data.GetReadOffset() + decoPalletteSizeByte);
|
|
|
|
data >> m_Header.m_Background;
|
|
|
|
utils::shape::Rectangle redCastle, blueCastle;
|
|
|
|
data >> m_Header.m_RedSpawn >> redCastle;
|
|
data >> m_Header.m_BlueSpawn >> blueCastle;
|
|
|
|
m_Header.m_RedCastle.SetShape(redCastle);
|
|
m_Header.m_BlueCastle.SetShape(blueCastle);
|
|
|
|
std::uint64_t tilePaletteSize;
|
|
data >> tilePaletteSize;
|
|
|
|
m_Header.m_TilePalette.reserve(tilePaletteSize);
|
|
|
|
for (std::uint64_t tileNumber = 0; tileNumber < tilePaletteSize; tileNumber++) {
|
|
game::TilePtr tile;
|
|
data >> tile;
|
|
m_Header.m_TilePalette.push_back(tile);
|
|
}
|
|
|
|
data >> m_Header.m_SpawnColorPalette;
|
|
}
|
|
|
|
} // namespace protocol
|
|
} // namespace td
|