Files
Tower-Defense2/src/td/game/World.cpp
2025-07-18 18:56:49 +02:00

65 lines
1.8 KiB
C++

#include <td/game/World.h>
#include <td/simulation/WorldTicker.h>
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<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;
}
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