fix WorldBeginDataPacket
This commit is contained in:
@@ -3,6 +3,64 @@
|
|||||||
namespace td {
|
namespace td {
|
||||||
namespace protocol {
|
namespace protocol {
|
||||||
|
|
||||||
|
static DataBuffer& operator<<(DataBuffer& buffer, game::TilePtr tile) {
|
||||||
|
buffer << tile->GetType();
|
||||||
|
|
||||||
|
switch (tile->GetType()) {
|
||||||
|
|
||||||
|
case game::TileType::Tower: {
|
||||||
|
const game::TowerTile* towerTile = dynamic_cast<const game::TowerTile*>(tile.get());
|
||||||
|
buffer << towerTile->color_palette_ref << towerTile->team_owner;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case game::TileType::Walk: {
|
||||||
|
const game::WalkableTile* walkTile = dynamic_cast<const game::WalkableTile*>(tile.get());
|
||||||
|
buffer << walkTile->direction;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case game::TileType::Decoration: {
|
||||||
|
const game::DecorationTile* decoTile = dynamic_cast<const game::DecorationTile*>(tile.get());
|
||||||
|
buffer << decoTile->color_palette_ref;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
static DataBuffer& operator>>(DataBuffer& buffer, game::TilePtr& tile) {
|
||||||
|
game::TileType tileType;
|
||||||
|
buffer >> tileType;
|
||||||
|
switch (tileType) {
|
||||||
|
case game::TileType::Tower: {
|
||||||
|
auto tilePtr = std::make_shared<game::TowerTile>();
|
||||||
|
buffer >> tilePtr->color_palette_ref >> tilePtr->team_owner;
|
||||||
|
tile = tilePtr;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case game::TileType::Walk: {
|
||||||
|
auto tilePtr = std::make_shared<game::WalkableTile>();
|
||||||
|
buffer >> tilePtr->direction;
|
||||||
|
tile = tilePtr;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case game::TileType::Decoration: {
|
||||||
|
auto tilePtr = std::make_shared<game::DecorationTile>();
|
||||||
|
buffer >> tilePtr->color_palette_ref;
|
||||||
|
tile = tilePtr;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return buffer;
|
||||||
|
}
|
||||||
|
|
||||||
DataBuffer WorldBeginDataPacket::Serialize(bool packetID) const {
|
DataBuffer WorldBeginDataPacket::Serialize(bool packetID) const {
|
||||||
DataBuffer data;
|
DataBuffer data;
|
||||||
const game::TowerTileColorPalette& towerTilePalette = m_Header.m_World->GetTowerTileColorPalette();
|
const game::TowerTileColorPalette& towerTilePalette = m_Header.m_World->GetTowerTileColorPalette();
|
||||||
|
|||||||
@@ -12,64 +12,6 @@ static unsigned int countBits(unsigned int number) {
|
|||||||
return static_cast<unsigned int>(std::log2(number) + 1);
|
return static_cast<unsigned int>(std::log2(number) + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static DataBuffer& operator<<(DataBuffer& buffer, game::TilePtr tile) {
|
|
||||||
buffer << tile->GetType();
|
|
||||||
|
|
||||||
switch (tile->GetType()) {
|
|
||||||
|
|
||||||
case game::TileType::Tower: {
|
|
||||||
const game::TowerTile* towerTile = dynamic_cast<const game::TowerTile*>(tile.get());
|
|
||||||
buffer << towerTile->color_palette_ref << towerTile->team_owner;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case game::TileType::Walk: {
|
|
||||||
const game::WalkableTile* walkTile = dynamic_cast<const game::WalkableTile*>(tile.get());
|
|
||||||
buffer << walkTile->direction;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case game::TileType::Decoration: {
|
|
||||||
const game::DecorationTile* decoTile = dynamic_cast<const game::DecorationTile*>(tile.get());
|
|
||||||
buffer << decoTile->color_palette_ref;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
static DataBuffer& operator>>(DataBuffer& buffer, game::TilePtr& tile) {
|
|
||||||
game::TileType tileType;
|
|
||||||
buffer >> tileType;
|
|
||||||
switch (tileType) {
|
|
||||||
case game::TileType::Tower: {
|
|
||||||
auto tilePtr = std::make_shared<game::TowerTile>();
|
|
||||||
buffer >> tilePtr->color_palette_ref >> tilePtr->team_owner;
|
|
||||||
tile = tilePtr;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case game::TileType::Walk: {
|
|
||||||
auto tilePtr = std::make_shared<game::WalkableTile>();
|
|
||||||
buffer >> tilePtr->direction;
|
|
||||||
tile = tilePtr;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case game::TileType::Decoration: {
|
|
||||||
auto tilePtr = std::make_shared<game::DecorationTile>();
|
|
||||||
buffer >> tilePtr->color_palette_ref;
|
|
||||||
tile = tilePtr;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
typedef std::vector<uint64_t> ChunkPackedData;
|
typedef std::vector<uint64_t> ChunkPackedData;
|
||||||
|
|
||||||
DataBuffer WorldDataPacket::Serialize(bool packetID) const {
|
DataBuffer WorldDataPacket::Serialize(bool packetID) const {
|
||||||
|
|||||||
Reference in New Issue
Block a user