Exemple #1
0
void FreeForAllGameModeSystem::OnStartGameMode( core::StartGameModeEvent const& Evt )
{
    if ( Evt.mMode != "ffa" )
    {
        return;
    }
    ::engine::Engine::Get().SetEnabled< ::engine::SoldierSpawnSystem>( true );
    ::engine::Engine::Get().SetEnabled< ::engine::ctf::CtfSoldierSpawnSystem>( false );
    ::engine::Engine::Get().SetEnabled< ::map::EditorSoldierSpawnSystem>( false );
    ::engine::Engine::Get().SetEnabled< ::map::RoomEditorSystem>( false );
    ::engine::Engine::Get().SetEnabled< ::map::EditorSystem>( false );
    ::engine::Engine::Get().SetEnabled< ::map::EditorTargetSystem>( false );
    ::engine::Engine::Get().SetEnabled< ::map::EditorGridSystem>( false );
    ::engine::Engine::Get().SetEnabled< ::map::EditorBrushSystem>( false );
    ::engine::Engine::Get().SetEnabled< ::core::FreeForAllGameModeSystem>( true );
    ::engine::Engine::Get().SetEnabled< ::core::CaptureTheFlagGameModeSystem>( false );
    ::engine::Engine::Get().SetEnabled< ::core::RogueGameModeSystem>( false );

    auto levelSelectionSystem = engine::Engine::Get().GetSystem<LevelSelectionSystem>();
    if ( levelSelectionSystem.IsValid() )
    {
        mScene.Load( levelSelectionSystem->GetSelectedLevel() );
    }
    else
    {
        L1("failed to retrieve LevelSelectionSystem\n");
        return;
    }
    //    glfwSetInputMode(engine::Engine::Get().GetSystem<engine::WindowSystem>()->GetWindow(),GLFW_CURSOR,GLFW_CURSOR_HIDDEN);
    Ui::Get().Load( "hud" );
    if ( ProgramState::Get().mMode == ProgramState::Client )
    {
        return;
    }

    if ( ProgramState::Get().mMode != ProgramState::Local )
    {
        return;
    }

    std::auto_ptr<Actor> Pl;
    for( int i = 0; i < 11; ++i )
    {
        Pl = ActorFactory::Get()( AutoId( "player" ) );

        Opt<IPositionComponent> positionC = Pl->Get<IPositionComponent>();
        positionC->SetX( -240 + i * 60 );
        positionC->SetY( 0.0 );
        Pl->Get<IInventoryComponent>();
        Opt<IInventoryComponent> inventoryC = Pl->Get<IInventoryComponent>();
        inventoryC->AddItem( AutoId( "plasma_gun" ) );
        inventoryC->SetSelectedWeapon( AutoId( "plasma_gun" ) );
        Opt<PlayerControllerComponent> pcc( Pl->Get<IControllerComponent>() );
        pcc->SetEnabled( false );
        pcc->mActive = false;
        pcc->mControllerId = i;
        Pl->Get<IMoveComponent>()->SetMoving( false );
        mScene.AddActor( Pl.release() );
    }
}
Exemple #2
0
void SSGameLobby::OnNewClientConnect( short playerID )
{
	if ( AreAnyClientsConnected( ) )
		g_PacketPump.Send( LevelSelectionChangeMessage( GetSelectedLevel() ), playerID );

	TryChangeColour( 0, playerID, false );
	TryChangeTeam( playerID, playerID, false ); // Run just in case it is decided to run limitation logic on teams
	ChangeSpawnCount(m_NumberOfSpawns);

	if ( !m_ConnectedPlayerEntries[ playerID ].IsAI ) // No need to send to AI players
	{
		int i = 0;
		for ( auto& player : m_ConnectedPlayerEntries )
		{
			if ( player.IsActive && AreAnyClientsConnected( ) )
			{
				g_PacketPump.Send( ColourChangeMessage( i, player.SelectedColourIndex, true), playerID );
				g_PacketPump.Send( TeamChangeMessage( i, player.SelectedTeamIndex, true), playerID );
				if ( player.IsAI )
				{
					g_PacketPump.Send( ReserveAIMessage( i, true ), playerID );
				}
				for ( unsigned int j = 0; j < m_ButtonsSpawnPoints.size(); ++j )
				{
					if ( m_ButtonsSpawnPoints.at( j ).PlayerID == i )
					{
						g_PacketPump.Send( SpawnPointChangeMessage( i, j, true ), playerID );
						break;
					}
				}
			}
			++i;
		}
	}
}