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() ); } }
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; } } }