(Feat) Add mulitplayer

This commit is contained in:
2026-08-03 10:30:47 +02:00
parent 41d6e6a7f3
commit a4cc59a411
41 changed files with 3418 additions and 125 deletions
@@ -34,6 +34,8 @@ public:
virtual void BeginPlay() override;
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override;
virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;
/** Rend de la vie, de la faim et de la soif. Les valeurs sont bornees au max. */
UFUNCTION(BlueprintCallable, Category = "Survie")
void ApplyRestore(float HealthAmount, float HungerAmount, float ThirstAmount);
@@ -106,11 +108,38 @@ private:
/** Appelee par le timer : fait descendre les jauges et applique les degats. */
void UpdateStats();
/**
* Les jauges viennent d'arriver du serveur : on rediffuse le delegue
* habituel, et WBP_SurvivalStats se met a jour sans une ligne de changement.
*/
UFUNCTION()
void OnRep_Stats();
FTimerHandle UpdateTimerHandle;
// La simulation tourne UNIQUEMENT sur le serveur : quatre clients qui
// feraient descendre leur faim chacun de leur cote divergeraient en
// quelques minutes, et le premier a mourir ne serait pas le meme partout.
// Les clients ne font que recevoir.
UPROPERTY(ReplicatedUsing = OnRep_Stats)
float Health = 0.f;
UPROPERTY(ReplicatedUsing = OnRep_Stats)
float Hunger = 0.f;
UPROPERTY(ReplicatedUsing = OnRep_Stats)
float Thirst = 0.f;
/**
* ReplicatedUsing et non simplement Replicated : OnDied n'est diffuse que
* sur le serveur, or c'est ce delegue qui declenche l'ecran de mort et le
* respawn cote joueur. Sans OnRep, un client mourrait sans jamais le savoir
* et continuerait a jouer un personnage que le serveur considere mort.
*/
UPROPERTY(ReplicatedUsing = OnRep_Dead)
bool bDead = false;
UFUNCTION()
void OnRep_Dead();
};