(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
+68 -5
View File
@@ -7,8 +7,8 @@
#include "Interactable.h"
#include "PickupItem.generated.h"
class UBoxComponent;
class UItemDataAsset;
class USphereComponent;
class UStaticMeshComponent;
/**
@@ -60,12 +60,28 @@ protected:
/**
* Volume que le trace d'interaction vient toucher.
* Volontairement separe du mesh : beaucoup de meshes d'asset packs,
* en particulier la vegetation, n'ont aucune geometrie de collision.
* Avec une sphere dediee, le pickup fonctionne quel que soit le visuel.
*
* Volontairement separe du mesh : beaucoup de meshes d'asset packs, en
* particulier la vegetation, n'ont aucune geometrie de collision. Avec un
* volume dedie, le pickup fonctionne quel que soit le visuel.
*
* Une BOITE et non une sphere, contrairement a la premiere version : la
* sphere englobante d'un objet allonge a pour rayon sa DEMI-DIAGONALE, ce qui
* est le pire cas geometrique possible. Une branche de 120x20x15 donnait une
* sphere de 62 cm de rayon, soit vingt-sept fois le volume de l'objet. Le
* symptome n'etait pas cosmetique : deux pickups poses cote a cote voyaient
* leurs spheres se chevaucher, et le trace retenait le premier volume touche
* plutot que l'objet reellement vise.
*
* Elle epouse toute seule le mesh pose (voir FitInteractionBox) : un seul
* BP_Pickup sert des centaines d'objets, une taille fixe serait forcement
* fausse pour la plupart.
*
* Contrairement a celle du coffre, elle ne bloque QUE le canal Visibility :
* un objet au sol se traverse, il ne barre pas le passage.
*/
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Item")
TObjectPtr<USphereComponent> InteractionSphere;
TObjectPtr<UBoxComponent> InteractionBox;
/**
* Quel objet ce pickup represente. A assigner sur chaque instance.
@@ -105,6 +121,15 @@ protected:
*/
void ApplyItemVisuals();
/**
* Cale la boite d'interaction sur le mesh actuellement pose.
*
* Elle lit le mesh du COMPOSANT et pas celui de l'ItemData : le cas
* bUseMeshFromItemData decoche -- un mesh impose a la main sur une instance --
* a autant besoin d'une boite a sa taille que les autres.
*/
void FitInteractionBox();
/**
* Reprend automatiquement le WorldMesh de l'ItemData dans l'editeur.
* Decoche pour imposer un mesh different sur une instance precise.
@@ -112,6 +137,44 @@ protected:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Item")
bool bUseMeshFromItemData = true;
/**
* La boite d'interaction epouse toute seule le mesh pose.
*
* Coche par defaut : changer l'ItemData d'une instance doit suffire, sans
* avoir a retailler un volume a la main derriere. Decoche-le pour un objet
* qu'on veut volontairement ramassable de plus loin, ou de plus pres.
*/
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Item|Interaction")
bool bAutoFitInteractionBox = true;
/**
* Marge ajoutee sur chaque axe, en cm.
*
* Additive et surtout pas multiplicative : c'est tout l'interet du passage a
* une boite. Multiplier la demi-epaisseur d'une branche -- 7 cm -- par 1.2
* ajoute un centimetre et demi, autant dire rien, alors que le meme facteur
* rallonge son grand axe de 12 cm. La tolerance de visee ne depend pas de la
* taille de l'objet, elle se compte en centimetres.
*
* Garde-la petite : le trace d'interaction est deja un balayage spherique
* tolerant, gonfler la boite ferait surtout voler la cible aux voisins.
*/
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Item|Interaction",
meta = (EditCondition = "bAutoFitInteractionBox", ClampMin = "0", Units = "cm"))
float InteractionBoxPadding = 4.f;
/**
* Demi-dimension plancher, appliquee axe par axe, en cm.
*
* Une baie ou un clou donneraient une boite de deux centimetres, impossible
* a viser meme avec la tolerance du balayage. Axe par axe et non sur le
* volume entier : une branche a besoin qu'on epaississe son epaisseur, pas
* qu'on rallonge sa longueur.
*/
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Item|Interaction",
meta = (EditCondition = "bAutoFitInteractionBox", ClampMin = "0", Units = "cm"))
float MinInteractionExtent = 10.f;
/** Active le Custom Depth quand l'objet est vise. */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Item")
bool bHighlightOnFocus = true;