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 );
        }
    }
}
示例#3
0
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();
    }
}