(Feat) Add footsteps
This commit is contained in:
@@ -17,8 +17,10 @@
|
||||
#include "InputActionValue.h"
|
||||
#include "CharacterAppearanceComponent.h"
|
||||
#include "CraftingComponent.h"
|
||||
#include "FootstepComponent.h"
|
||||
#include "FpsPlayerController.h"
|
||||
#include "HeadBobComponent.h"
|
||||
#include "HeldItemComponent.h"
|
||||
#include "InteractionComponent.h"
|
||||
#include "InventoryComponent.h"
|
||||
#include "ItemDataAsset.h"
|
||||
@@ -111,6 +113,8 @@ AFpsPlayer::AFpsPlayer()
|
||||
CraftingComponent = CreateDefaultSubobject<UCraftingComponent>(TEXT("CraftingComponent"));
|
||||
SurvivalStats = CreateDefaultSubobject<USurvivalStatsComponent>(TEXT("SurvivalStats"));
|
||||
AppearanceComponent = CreateDefaultSubobject<UCharacterAppearanceComponent>(TEXT("AppearanceComponent"));
|
||||
HeldItemComponent = CreateDefaultSubobject<UHeldItemComponent>(TEXT("HeldItemComponent"));
|
||||
FootstepComponent = CreateDefaultSubobject<UFootstepComponent>(TEXT("FootstepComponent"));
|
||||
|
||||
// En vue FPS on ne veut pas voir son propre corps (mesh 3e personne),
|
||||
// mais on garde son ombre.
|
||||
@@ -377,6 +381,31 @@ void AFpsPlayer::OnRep_PlayerState()
|
||||
RefreshAppearanceFromPlayerState();
|
||||
}
|
||||
|
||||
void AFpsPlayer::PossessedBy(AController* NewController)
|
||||
{
|
||||
Super::PossessedBy(NewController);
|
||||
|
||||
// Cote serveur uniquement : chez l'hote c'est ce chemin qui remplit sa
|
||||
// propre main, IsLocallyControlled() ne devenant vrai qu'ici.
|
||||
if (HeldItemComponent)
|
||||
{
|
||||
HeldItemComponent->RefreshFromInventory();
|
||||
}
|
||||
}
|
||||
|
||||
void AFpsPlayer::OnRep_Controller()
|
||||
{
|
||||
Super::OnRep_Controller();
|
||||
|
||||
// Le pendant client. Meme raison qu'OnRep_PlayerState juste au-dessus : rien
|
||||
// ne dit lequel du pawn ou du controller arrive le premier, donc les deux
|
||||
// bouts de la course appellent la meme fonction idempotente.
|
||||
if (HeldItemComponent)
|
||||
{
|
||||
HeldItemComponent->RefreshFromInventory();
|
||||
}
|
||||
}
|
||||
|
||||
void AFpsPlayer::RefreshAppearanceFromPlayerState()
|
||||
{
|
||||
if (!AppearanceComponent)
|
||||
@@ -470,6 +499,14 @@ void AFpsPlayer::Landed(const FHitResult& Hit)
|
||||
FallSpeed, LandPunchMinFallSpeed);
|
||||
}
|
||||
|
||||
// Le geste des bras suit le meme seuil bas que la camera : une marche
|
||||
// d'escalier ne doit ni secouer la vue ni faire encaisser le personnage.
|
||||
if (FallSpeed > LandPunchMinFallSpeed)
|
||||
{
|
||||
UAnimMontage* Montage = (FallSpeed >= HardLandingFallSpeed) ? HardLandMontage : LandMontage;
|
||||
PlayArmsMontage(Montage);
|
||||
}
|
||||
|
||||
LastFallSpeed = 0.f;
|
||||
}
|
||||
|
||||
@@ -899,6 +936,11 @@ void AFpsPlayer::HandleDeath()
|
||||
ClearTransientInputStates();
|
||||
GetCharacterMovement()->DisableMovement();
|
||||
|
||||
// Un cadavre ne marche plus. Sans ca, la derniere foulee en cours produirait
|
||||
// encore son pas final au moment ou la vitesse tombe a zero -- et HandleDeath
|
||||
// tourne sur toutes les machines, donc les amis l'entendraient aussi.
|
||||
FootstepComponent->SetFootstepsEnabled(false);
|
||||
|
||||
if (APlayerController* OwningController = Cast<APlayerController>(GetController()))
|
||||
{
|
||||
DisableInput(OwningController);
|
||||
|
||||
Reference in New Issue
Block a user