(Feat) Add footsteps

This commit is contained in:
2026-08-11 15:23:10 +02:00
parent e8e128457a
commit 176beab9fc
4776 changed files with 18806 additions and 121 deletions
+71
View File
@@ -11,7 +11,9 @@ class UAnimMontage;
class UCameraComponent;
class UCharacterAppearanceComponent;
class UCraftingComponent;
class UFootstepComponent;
class UHeadBobComponent;
class UHeldItemComponent;
class UInputAction;
class UInputMappingContext;
class UInteractionComponent;
@@ -126,6 +128,12 @@ public:
UFUNCTION(BlueprintPure, Category = "Apparence")
UCharacterAppearanceComponent* GetAppearanceComponent() const { return AppearanceComponent; }
UFUNCTION(BlueprintPure, Category = "Inventaire")
UHeldItemComponent* GetHeldItemComponent() const { return HeldItemComponent; }
UFUNCTION(BlueprintPure, Category = "Audio")
UFootstepComponent* GetFootstepComponent() const { return FootstepComponent; }
// ------------------------------------------------------------------
// Commandes console d'apparence
//
@@ -252,6 +260,20 @@ public:
*/
virtual void OnRep_PlayerState() override;
/**
* Les deux moities de « le controller est arrive ».
*
* UHeldItemComponent ne peut lire la case active QUE chez le joueur local,
* et son BeginPlay peut tomber avant que le pawn soit possede -- chez un
* client, le pawn et son controller arrivent par deux chemins independants,
* exactement comme le PlayerState. Un joueur qui reapparait avec une hache
* deja en case 1 aurait alors la main vide jusqu'a ce qu'il touche a son
* inventaire. PossessedBy couvre le serveur, OnRep_Controller le client, et
* RefreshFromInventory() est idempotente.
*/
virtual void PossessedBy(AController* NewController) override;
virtual void OnRep_Controller() override;
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
@@ -300,6 +322,35 @@ protected:
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation")
TObjectPtr<UAnimMontage> GrabMontage;
/**
* Réception au sol, version légère (MTG_Land).
*
* Un montage et pas un état de la machine : l'atterrissage est un geste
* PONCTUEL qui doit se superposer à ce que les bras faisaient déjà. Un état
* imposerait de décider combien de temps y rester, et retomber en pleine
* course y bloquerait le cycle de foulée le temps de l'animation.
*/
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation")
TObjectPtr<UAnimMontage> LandMontage;
/** Réception lourde (MTG_HardLand), au-delà de HardLandingFallSpeed. */
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category = "Animation")
TObjectPtr<UAnimMontage> HardLandMontage;
/**
* Vitesse de chute (cm/s) à partir de laquelle la réception passe en lourde.
*
* Doit rester nettement au-dessus de la retombée d'un saut sur place
* (~JumpZVelocity, 450 par défaut), sinon chaque saut se termine par une
* réception encaissée et le déplacement devient poussif.
*
* Le seuil BAS, lui, est LandPunchMinFallSpeed : sous cette vitesse aucun
* montage n'est joué, exactement comme la caméra ne bouge pas. Une seule
* valeur à comprendre pour les deux effets, qui restent donc cohérents.
*/
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Animation", meta = (ClampMin = "0"))
float HardLandingFallSpeed = 800.f;
/**
* Balancement de tête procédural : respiration à l'arrêt, pas à la marche,
* foulée au sprint. Tous ses réglages sont dans le Details panel du composant,
@@ -345,6 +396,26 @@ protected:
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Apparence")
TObjectPtr<UCharacterAppearanceComponent> AppearanceComponent;
/**
* Montre dans la main l'objet de la case active de la barre rapide.
*
* Sur le pawn : ce sont ces bras-la et ce corps-la qui tiennent l'objet, et
* un cadavre ne tient plus rien. Il lit l'inventaire du meme acteur.
*/
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Inventaire")
TObjectPtr<UHeldItemComponent> HeldItemComponent;
/**
* Bruits de pas.
*
* Sur le pawn et sur TOUS les pawns, pas seulement celui du joueur local :
* le composant ne replique rien, chaque machine calcule les pas de tous les
* corps qu'elle connait a partir de leur vitesse deja synchronisee. Le
* mettre sur le controller n'aurait donc donne les pas que d'un joueur.
*/
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Audio")
TObjectPtr<UFootstepComponent> FootstepComponent;
// ------------------------------------------------------------------
// Enhanced Input : assets à assigner dans le Blueprint
// ------------------------------------------------------------------