// Fill out your copyright notice in the Description page of Project Settings. #include "SurvivalGameMode.h" #include "FpsPlayerController.h" #include "GameFramework/GameSession.h" #include "GameFramework/PlayerState.h" #include "SessionSubsystem.h" #include "SurvivalGameState.h" #include "SurvivalPlayerState.h" ASurvivalGameMode::ASurvivalGameMode() { MaxCoopPlayers = USessionSubsystem::DefaultMaxPlayers; // Les classes du framework sont cablees ici et non dans le Blueprint : ce // sont des choix d'architecture, pas des reglages a tatonner en PIE. GameStateClass = ASurvivalGameState::StaticClass(); PlayerStateClass = ASurvivalPlayerState::StaticClass(); PlayerControllerClass = AFpsPlayerController::StaticClass(); // Une seule map pour l'instant, donc pas de voyage sans coupure a gerer. // A repasser a true le jour ou la partie changera de niveau : sans lui, // chaque changement de map deconnecte puis reconnecte tous les clients. bUseSeamlessTravel = false; } void ASurvivalGameMode::InitGame(const FString& MapName, const FString& Options, FString& ErrorMessage) { Super::InitGame(MapName, Options, ErrorMessage); // AGameSession n'existe qu'apres le Super : c'est lui qui l'engendre. if (GameSession) { GameSession->MaxPlayers = MaxCoopPlayers; } } void ASurvivalGameMode::PostLogin(APlayerController* NewPlayer) { Super::PostLogin(NewPlayer); // Trace volontairement conservee : c'est la preuve la plus rapide qu'une // connexion a bien abouti, et le premier endroit ou regarder quand un ami // dit "ca tourne mais je ne te vois pas". const APlayerState* State = NewPlayer ? NewPlayer->GetPlayerState() : nullptr; UE_LOG(LogTemp, Log, TEXT("ASurvivalGameMode : arrivee de [%s], %d joueur(s) sur %d."), State ? *State->GetPlayerName() : TEXT("inconnu"), GetNumPlayers(), MaxCoopPlayers); } void ASurvivalGameMode::Logout(AController* Exiting) { const APlayerState* State = Exiting ? Exiting->GetPlayerState() : nullptr; UE_LOG(LogTemp, Log, TEXT("ASurvivalGameMode : depart de [%s]."), State ? *State->GetPlayerName() : TEXT("inconnu")); Super::Logout(Exiting); }