SpawnPoints_t CtfSoldierSpawnPointMapElementSystem::GetActiveSpawnPoints( Team::Type team ) { SpawnPoints_t r; MapElementListFilter<MapSystem::All> mapElementListFilter( mMapSystem->GetMapElementList(), CtfSoldierSpawnPointMapElement::GetType_static() ); for( MapElementListFilter<MapSystem::All>::const_iterator ctfSoldierSpawnPointMapElementIt = mapElementListFilter.begin(), ctfSoldierSpawnPointMapElementE = mapElementListFilter.end(); ctfSoldierSpawnPointMapElementIt != ctfSoldierSpawnPointMapElementE; ++ctfSoldierSpawnPointMapElementIt ) { Opt<CtfSoldierSpawnPointMapElement> ctfSoldierSpawnPointMapElement( *ctfSoldierSpawnPointMapElementIt ); if ( ctfSoldierSpawnPointMapElement->GetTeam() == team ) { r.push_back( SpawnPoint( ctfSoldierSpawnPointMapElement->GetX(), ctfSoldierSpawnPointMapElement->GetY() ) ); } } return r; }
void LevelGeneratedMapElementSystem::OnLevelGenerated(map::LevelGeneratedEvent const& Evt) { MapElementListFilter<MapSystem::All> mapElementListFilter( mMapSystem->GetMapElementList(), LevelGeneratedMapElement::GetType_static() ); for (MapElementListFilter<MapSystem::All>::const_iterator levelGeneratedMapElementIt = mapElementListFilter.begin(), levelGeneratedMapElementE = mapElementListFilter.end(); levelGeneratedMapElementIt != levelGeneratedMapElementE; ++levelGeneratedMapElementIt) { Opt<LevelGeneratedMapElement> levelGeneratedMapElement( *levelGeneratedMapElementIt ); if (Evt.mState == LevelGeneratedEvent::TerrainGenerated) { levelGeneratedMapElement->DoOutputId( LevelGeneratedMapElement::GeneratedNodeId(), 1 ); mHandleTerrainGeneratedCounter = 4; } else if (Evt.mState == LevelGeneratedEvent::ActorsSpawned) { levelGeneratedMapElement->DoOutputId( LevelGeneratedMapElement::ActorsSpawnedNodeId(), 1 ); } } }
void SpawnSoldiersMapElementSystem::Update( double DeltaTime ) { MapElementSystem::Update( DeltaTime ); MapElementListFilter<MapSystem::All> mapElementListFilter( mMapSystem->GetMapElementList(), SpawnSoldiersMapElement::GetType_static() ); for( MapElementListFilter<MapSystem::All>::const_iterator spawnSoldiersMapElementIt = mapElementListFilter.begin(), spawnSoldiersMapElementE = mapElementListFilter.end(); spawnSoldiersMapElementIt != spawnSoldiersMapElementE; ++spawnSoldiersMapElementIt ) { Opt<SpawnSoldiersMapElement> spawnSoldiersMapElement( *spawnSoldiersMapElementIt ); if ( spawnSoldiersMapElement->GetValueId( SpawnSoldiersMapElement::SpawnNodeId() ) > 0 ) { if ( mProgramState.mMode == core::ProgramState::Server ) { Opt<engine::SoldierSpawnSystem> soldierSpawnS( engine::SoldierSpawnSystem::Get() ); for ( core::ProgramState::ClientDatas_t::iterator i = mProgramState.mClientDatas.begin(), e = mProgramState.mClientDatas.end(); i != e; ++i ) { std::auto_ptr<Actor> player( soldierSpawnS->Spawn( *i ) ); mScene.AddActor( player.release() ); } } else if ( mProgramState.mMode == core::ProgramState::Local ) { Opt<core::ClientData> clientData( mProgramState.FindClientDataByClientId( mProgramState.mClientId ) ); if ( clientData.IsValid() ) { L2( "spawning local player" ); clientData->mClientActorGUID = -1; std::auto_ptr<Actor> Pl( engine::SoldierSpawnSystem::Get()->Spawn( *clientData ) ); Opt<PlayerControllerComponent>playerCC(Pl->Get<IControllerComponent>()); playerCC->SetEnabled( true ); playerCC->mActive = true; // TODO: positionC? auto positionC=(Pl->Get<IPositionComponent>()); mScene.SetPlayerModels( Opt<Actor>( Pl.get() ) ); mProgramState.mControlledActorGUID = clientData->mClientActorGUID; mScene.AddActor( Pl.release() ); } } L1( "spawn soldiers!" ); } spawnSoldiersMapElement->ResetValues(); } }