[박치영] Sprint Animation 추가

main
pcyoung 2023-08-06 21:51:50 +09:00 committed by PCYPC\pcy35
parent b83ca133ca
commit 3a78d0a63f
19 changed files with 97 additions and 6 deletions

View File

@ -4,7 +4,7 @@
#include "CoreMinimal.h"
#include "Actor/BaseEquippable.h"
#include "Enums/CombatType.h"
#include "Definitions/GameEnums.h"
#include "Animation/CombatAnimInstance.h"
#include "Components/StateManagerComponent.h"
#include "BaseWeapon.generated.h"

View File

@ -5,7 +5,7 @@
#include "CoreMinimal.h"
#include "Animation/AnimInstance.h"
#include "Interface/IAnimInstance.h"
#include "Enums/CombatType.h"
#include "Definitions/GameEnums.h"
#include "CombatAnimInstance.generated.h"
/**

View File

@ -36,6 +36,9 @@ ACombatCharacter::ACombatCharacter()
// Note: For faster iteration times these variables, and many more, can be tweaked in the Character Blueprint
// instead of recompiling to adjust them
GetCharacterMovement()->MaxAcceleration = 1500.f;
GetCharacterMovement()->BrakingFrictionFactor = 1.f;
GetCharacterMovement()->bUseSeparateBrakingFriction = true; //Sprint 시 애니메이션이 끊기는 거 방지
GetCharacterMovement()->JumpZVelocity = 700.f;
GetCharacterMovement()->AirControl = 0.35f;
GetCharacterMovement()->MaxWalkSpeed = 500.f;
@ -68,6 +71,12 @@ ACombatCharacter::ACombatCharacter()
StateManagerComponent->OnActionBegin.AddUObject(this, &ACombatCharacter::CharacterActionBegin);
StateManagerComponent->OnActionEnd.AddUObject(this, &ACombatCharacter::CharacterActionEnd);
//Setting MovementSpeed
MovementSpeedMode = EMovementSpeedMode::Jogging;
WalkingSpeed = 200.f;
JoggingSpeed = 500.f;
SprintSpeed = 700.f;
Health = 100.f;
PelvisBoneName = TEXT("pelvis");
}
@ -191,6 +200,13 @@ void ACombatCharacter::SetupPlayerInputComponent(class UInputComponent* PlayerIn
//Dodge
EnhancedInputComponent->BindAction(DodgeAction, ETriggerEvent::Started, this, &ACombatCharacter::Dodge);
//ToggleWalk
EnhancedInputComponent->BindAction(ToggleWalkAction, ETriggerEvent::Started, this, &ACombatCharacter::ToggleWalk);
//Sprint
EnhancedInputComponent->BindAction(SprintAction, ETriggerEvent::Started, this, &ACombatCharacter::StartSprint);
EnhancedInputComponent->BindAction(SprintAction, ETriggerEvent::Completed, this, &ACombatCharacter::StopSprint);
}
}
@ -280,6 +296,26 @@ void ACombatCharacter::Dodge(const FInputActionValue& Value)
PerformDodge();
}
void ACombatCharacter::ToggleWalk(const FInputActionValue& Value)
{
if (GetMovementSpeedMode() != EMovementSpeedMode::Walking)
SetMovementSpeedMode(EMovementSpeedMode::Walking);
else
SetMovementSpeedMode(EMovementSpeedMode::Jogging);
}
void ACombatCharacter::StartSprint(const FInputActionValue& Value)
{
SetMovementSpeedMode(EMovementSpeedMode::Sprinting);
}
void ACombatCharacter::StopSprint(const FInputActionValue& Value)
{
if (GetMovementSpeedMode() == EMovementSpeedMode::Sprinting)
SetMovementSpeedMode(EMovementSpeedMode::Jogging);
}
void ACombatCharacter::CharacterStateBegin(ECharacterState CharState)
{
switch (CharState)
@ -437,6 +473,28 @@ void ACombatCharacter::EnableRagdoll()
GetMesh()->SetAllBodiesBelowPhysicsBlendWeight(PelvisBoneName, 1.f);
}
void ACombatCharacter::SetMovementSpeedMode(EMovementSpeedMode NewSpeedMode)
{
if (NewSpeedMode == MovementSpeedMode)
return;
MovementSpeedMode = NewSpeedMode;
switch (MovementSpeedMode)
{
case EMovementSpeedMode::Walking:
GetCharacterMovement()->MaxWalkSpeed = WalkingSpeed;
break;
case EMovementSpeedMode::Jogging:
GetCharacterMovement()->MaxWalkSpeed = JoggingSpeed;
break;
case EMovementSpeedMode::Sprinting:
GetCharacterMovement()->MaxWalkSpeed = SprintSpeed;
break;
default:
break;
}
}
void ACombatCharacter::PerformAttack(ECharacterAction attackType, int32 attackIndex)
{
ABaseWeapon* CurrentWeapon = CombatComponent->GetMainWeapon();
@ -620,7 +678,8 @@ ECharacterAction ACombatCharacter::GetDesiredAttackType()
if (GetCharacterMovement()->IsFalling())
return ECharacterAction::FallingAttack;
//TODO : Movement Speed Mode 추가
if (GetMovementSpeedMode() == EMovementSpeedMode::Sprinting)
return ECharacterAction::SprintAttack;
//TODO : Heavy Attack Ãß°¡

View File

@ -7,6 +7,7 @@
#include "InputActionValue.h"
#include "Interface/CombatInterface.h"
#include "Components/StateManagerComponent.h"
#include "Definitions/GameEnums.h"
#include "CombatCharacter.generated.h"
@ -52,6 +53,12 @@ class ACombatCharacter : public ACharacter, public ICombatInterface
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
class UInputAction* DodgeAction;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
class UInputAction* ToggleWalkAction;
UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = Input, meta = (AllowPrivateAccess = "true"))
class UInputAction* SprintAction;
public:
ACombatCharacter();
@ -94,6 +101,9 @@ protected:
void ToggleCombat(const FInputActionValue& Value);
void LightAttack(const FInputActionValue& Value);
void Dodge(const FInputActionValue& Value);
void ToggleWalk(const FInputActionValue& Value);
void StartSprint(const FInputActionValue& Value);
void StopSprint(const FInputActionValue& Value);
private://Delegate
void CharacterStateBegin(ECharacterState CharState);
@ -107,6 +117,8 @@ private:
void CharacterTakeDamage(float InDamage);
void ApplyHitReactionPhysicsVelocity(float InitialSpeed);
void EnableRagdoll();
void SetMovementSpeedMode(EMovementSpeedMode NewSpeedMode);
FORCEINLINE EMovementSpeedMode GetMovementSpeedMode() const { return MovementSpeedMode; }
private:
void PerformAttack(ECharacterAction attackType, int32 attackIndex);
@ -143,6 +155,18 @@ public:
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Hit", meta = (AllowPrivateAccess = "true"))
TObjectPtr<class UParticleSystem> HitEmitter;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MovementSpeed", meta = (AllowPrivateAccess = "true"))
EMovementSpeedMode MovementSpeedMode;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MovementSpeed", meta = (AllowPrivateAccess = "true"))
float WalkingSpeed;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MovementSpeed", meta = (AllowPrivateAccess = "true"))
float JoggingSpeed;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "MovementSpeed", meta = (AllowPrivateAccess = "true"))
float SprintSpeed;
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Stats", meta = (AllowPrivateAccess = "true"))
float Health;
};

View File

@ -3,7 +3,7 @@
#include "Components/CombatComponent.h"
#include "Actor/BaseWeapon.h"
#include "Enums/CombatType.h"
#include "Definitions/GameEnums.h"
#include "GameFramework/Character.h"
#include "Interface/IAnimInstance.h"

View File

@ -1,2 +1,2 @@
// Fill out your copyright notice in the Description page of Project Settings.
#include "Enums/CombatType.h"
#include "Definitions/GameEnums.h"

View File

@ -13,3 +13,11 @@ enum class ECombatType : uint8
GREATSWORD UMETA(DisplayName = "GREATSWORD")
};
UENUM(BlueprintType)
enum class EMovementSpeedMode : uint8
{
Walking UMETA(DisplayName = "Walking"),
Jogging UMETA(DisplayName = "Jogging"),
Sprinting UMETA(DisplayName = "Sprinting"),
};

View File

@ -4,7 +4,7 @@
#include "CoreMinimal.h"
#include "UObject/Interface.h"
#include "Enums/CombatType.h"
#include "Definitions/GameEnums.h"
#include "IAnimInstance.generated.h"
// This class does not need to be modified.