Files

52 lines
1.9 KiB
C++

// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/GameModeBase.h"
#include "SurvivalGameMode.generated.h"
/**
* L'arbitre de la partie. N'existe QUE sur le serveur -- sur un client,
* GetGameMode() rend nullptr, toujours. Ce n'est pas un bug mais le design du
* framework : le GameMode decide, le GameState montre.
*
* Corollaire a garder en tete pour tout le portage coop : le moindre appel a
* GetGameMode() ecrit du cote client doit etre remplace par un RPC serveur ou
* par une lecture du GameState. C'est le cas du respawn, aujourd'hui declenche
* depuis AFpsPlayerController.
*
* Y mettra plus tard : les regles de mort, le cycle jour/nuit, la sauvegarde
* du monde. Pour l'instant il ne fait que borner le nombre de joueurs et
* cabler GameState et PlayerState.
*/
UCLASS()
class EMBERWILD_API ASurvivalGameMode : public AGameModeBase
{
GENERATED_BODY()
public:
ASurvivalGameMode();
virtual void InitGame(const FString& MapName, const FString& Options, FString& ErrorMessage) override;
virtual void PostLogin(APlayerController* NewPlayer) override;
virtual void Logout(AController* Exiting) override;
protected:
/**
* Plafond de joueurs, applique a la AGameSession.
*
* Regle ici et pas seulement dans les reglages de session : la session
* annonce des places libres, mais c'est le GameMode qui refuse reellement la
* connexion. Sans ce plafond, un cinquieme joueur qui arrive par une
* invitation directe entre quand meme.
*
* Sa valeur par defaut est posee dans le constructeur depuis
* USessionSubsystem::DefaultMaxPlayers, pour qu'il n'existe qu'UN seul 4
* dans le projet : deux nombres qui doivent rester egaux finissent toujours
* par diverger, et le symptome serait une place annoncee mais refusee.
*/
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Coop", meta = (ClampMin = "1", ClampMax = "16"))
int32 MaxCoopPlayers;
};