62 lines
2.1 KiB
C++
62 lines
2.1 KiB
C++
// 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<APlayerState>() : 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<APlayerState>() : nullptr;
|
|
UE_LOG(LogTemp, Log, TEXT("ASurvivalGameMode : depart de [%s]."),
|
|
State ? *State->GetPlayerName() : TEXT("inconnu"));
|
|
|
|
Super::Logout(Exiting);
|
|
}
|