52 lines
1.9 KiB
C++
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;
|
|
};
|