refactor tile serialize

This commit is contained in:
2025-07-31 18:02:14 +02:00
parent c8159bae6e
commit 1a455a3d6b
10 changed files with 84 additions and 117 deletions

View File

@@ -5,27 +5,39 @@
namespace td {
namespace game {
class ColorTileVisitor : public TileHandler {
private:
const World& m_World;
const Color* m_Result;
public:
ColorTileVisitor(const World& a_World) : m_World(a_World), m_Result(nullptr) {}
virtual void Handle(const EmptyTile& a_Tile) override {}
virtual void Handle(const TowerTile& a_Tile) override {
m_Result = &m_World.GetTowerTileColorPalette()[a_Tile->m_ColorPaletteRef];
}
virtual void Handle(const WalkableTile& a_Tile) override {
m_Result = &m_World.GetWalkableTileColor();
}
virtual void Handle(const DecorationTile& a_Tile) override {
m_Result = &m_World.GetDecorationPalette()[a_Tile->m_ColorPaletteRef];
}
const Color* GetResult() {
return m_Result;
}
};
World::World() : m_CurrentState(std::make_shared<sim::WorldSnapshot>()), m_NextState(m_CurrentState) {}
const Color* World::GetTileColor(const TilePtr& tile) const {
switch (tile->GetType()) {
case TileType::Tower: {
TowerTile* towerTile = dynamic_cast<TowerTile*>(tile.get());
return &m_TowerPlacePalette[towerTile->color_palette_ref];
}
case TileType::Walk: {
return &m_WalkablePalette;
}
case TileType::Decoration: {
DecorationTile* towerTile = dynamic_cast<DecorationTile*>(tile.get());
return &m_DecorationPalette[towerTile->color_palette_ref];
break;
}
default: {
return nullptr;
}
}
return nullptr;
ColorTileVisitor visitor(*this);
tile->Dispatch(visitor);
return visitor.GetResult();
}
bool World::LoadMap(const protocol::pdata::WorldHeader& a_WorldHeader) {

View File

@@ -1,7 +1,5 @@
#include <td/game/WorldTypes.h>
#include <sp/common/DataBuffer.h>
namespace td {
namespace game {