#include #include namespace td { namespace game { World::World() : m_CurrentState{.m_Teams{Team{TeamColor::Red}, Team{TeamColor::Blue}}}, m_NextState{.m_Teams{Team{TeamColor::Red}, Team{TeamColor::Blue}}} {} const Color* World::GetTileColor(TilePtr tile) const { switch (tile->GetType()) { case TileType::Tower: { TowerTile* towerTile = dynamic_cast(tile.get()); return &m_TowerPlacePalette[towerTile->color_palette_ref]; } case TileType::Walk: { return &m_WalkablePalette; } case TileType::Decoration: { DecorationTile* towerTile = dynamic_cast(tile.get()); return &m_DecorationPalette[towerTile->color_palette_ref]; break; } default: { return nullptr; } } return nullptr; } bool World::LoadMap(const protocol::pdata::WorldHeader& a_WorldHeader) { m_TowerPlacePalette = a_WorldHeader.m_TowerPlacePalette; m_WalkablePalette = a_WorldHeader.m_WalkablePalette; m_DecorationPalette = a_WorldHeader.m_DecorationPalette; m_Background = a_WorldHeader.m_Background; GetRedTeam().GetSpawn() = a_WorldHeader.m_RedSpawn; GetBlueTeam().GetSpawn() = a_WorldHeader.m_BlueSpawn; m_SpawnColorPalette = a_WorldHeader.m_SpawnColorPalette; GetRedTeam().GetCastle() = a_WorldHeader.m_RedCastle; GetRedTeam().GetCastle().SetTeam(&GetRedTeam()); GetBlueTeam().GetCastle() = a_WorldHeader.m_BlueCastle; GetBlueTeam().GetCastle().SetTeam(&GetBlueTeam()); m_TilePalette = a_WorldHeader.m_TilePalette; return true; } bool World::LoadMap(const protocol::pdata::WorldData& a_WorldData) { m_Chunks = a_WorldData.m_Chunks; return true; } void World::Tick(const protocol::LockStep& a_LockStep, FpFloat a_Delta) { m_CurrentState = m_NextState; m_NextState = m_Ticker.NextStep(*this, m_NextState, a_LockStep, a_Delta); } } // namespace game } // namespace td