Create new character class
This commit is contained in:
parent
dba265ac03
commit
2c7bf0fb53
BIN
SwordNGun/Content/Characters/Protagonist/Animations/NewProtag_AnimBP.uasset
(Stored with Git LFS)
Normal file
BIN
SwordNGun/Content/Characters/Protagonist/Animations/NewProtag_AnimBP.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
SwordNGun/Content/Characters/Protagonist/BP_NewProtag.uasset
(Stored with Git LFS)
Normal file
BIN
SwordNGun/Content/Characters/Protagonist/BP_NewProtag.uasset
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
SwordNGun/Content/Characters/Protagonist/BP_Protagonist.uasset
(Stored with Git LFS)
BIN
SwordNGun/Content/Characters/Protagonist/BP_Protagonist.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
SwordNGun/Content/Core/GameModes/BP_TestGameMode.uasset
(Stored with Git LFS)
BIN
SwordNGun/Content/Core/GameModes/BP_TestGameMode.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
SwordNGun/Content/Maps/MovementTest.umap
(Stored with Git LFS)
BIN
SwordNGun/Content/Maps/MovementTest.umap
(Stored with Git LFS)
Binary file not shown.
Binary file not shown.
@ -0,0 +1,265 @@
|
|||||||
|
// Project Sword & Gun Copyright © 2021 Kevin Poretti
|
||||||
|
|
||||||
|
|
||||||
|
#include "Characters/SNGCharacterBase_DEPRECATED.h"
|
||||||
|
|
||||||
|
#include "Components/CapsuleComponent.h"
|
||||||
|
#include "GameFramework/PawnMovementComponent.h"
|
||||||
|
#include "Kismet/KismetMathLibrary.h"
|
||||||
|
#include "SwordNGun/SwordNGun.h"
|
||||||
|
|
||||||
|
// Sets default values
|
||||||
|
ASNGCharacterBase_DEPRECATED::ASNGCharacterBase_DEPRECATED(const FObjectInitializer& ObjectInitializer)
|
||||||
|
: Super(ObjectInitializer.SetDefaultSubobjectClass<USNGCharacterMovementComponent>(ACharacter::CharacterMovementComponentName))
|
||||||
|
{
|
||||||
|
// By default calls Tick() every frame.
|
||||||
|
PrimaryActorTick.bCanEverTick = true;
|
||||||
|
|
||||||
|
StateMachineComponent = CreateDefaultSubobject<USNGStateMachineComponent>(TEXT("StateMachineComponent"));
|
||||||
|
HealthComponent = CreateDefaultSubobject<USNGHealthComponent>(TEXT("HealthComponent"));
|
||||||
|
|
||||||
|
GetCapsuleComponent()->SetCollisionResponseToChannel(COLLISION_RANGED_WEAPON, ECR_Ignore);
|
||||||
|
GetCapsuleComponent()->SetCollisionResponseToChannel(COLLISION_MELEE_WEAPON, ECR_Ignore);
|
||||||
|
|
||||||
|
EnableAllActions();
|
||||||
|
|
||||||
|
AController* MyController = GetController();
|
||||||
|
if(MyController)
|
||||||
|
{
|
||||||
|
GetController()->SetIgnoreMoveInput(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASNGCharacterBase_DEPRECATED::SetupRotateTowardsTarget(FRotator TargetRotation, float DegreesPerSecond, float MaxRotation)
|
||||||
|
{
|
||||||
|
RotateTimeElapsed = 0.0f;
|
||||||
|
InitialRot = GetActorRotation();
|
||||||
|
this->TargetRot = TargetRotation;
|
||||||
|
DegPerSecond = DegreesPerSecond;
|
||||||
|
this->MaxRot = MaxRotation;
|
||||||
|
|
||||||
|
RotateTime = FMath::Min(FMath::Abs(TargetRotation.Yaw - InitialRot.Yaw), MaxRotation) / DegreesPerSecond;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASNGCharacterBase_DEPRECATED::RotateTowardsTarget(float DeltaTime)
|
||||||
|
{
|
||||||
|
if(RotateTimeElapsed < RotateTime)
|
||||||
|
{
|
||||||
|
SetActorRotation(UKismetMathLibrary::RInterpTo_Constant(GetActorRotation(), TargetRot,
|
||||||
|
DeltaTime, DegPerSecond));
|
||||||
|
|
||||||
|
RotateTimeElapsed += DeltaTime;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASNGCharacterBase_DEPRECATED::SetIgnoreMovementInput(bool IsIgnored)
|
||||||
|
{
|
||||||
|
AController* MyController = GetController();
|
||||||
|
if(MyController)
|
||||||
|
{
|
||||||
|
GetController()->SetIgnoreMoveInput(IsIgnored);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASNGCharacterBase_DEPRECATED::DisableAllActions()
|
||||||
|
{
|
||||||
|
bCanMove = false;
|
||||||
|
bCanJump = false;
|
||||||
|
bCanDodge = false;
|
||||||
|
bCanAttack = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASNGCharacterBase_DEPRECATED::EnableAllActions()
|
||||||
|
{
|
||||||
|
bCanMove = true;
|
||||||
|
bCanJump = true;
|
||||||
|
bCanDodge = true;
|
||||||
|
bCanAttack = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASNGCharacterBase_DEPRECATED::SetCanMove(bool CanMove)
|
||||||
|
{
|
||||||
|
bCanMove = CanMove;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ASNGCharacterBase_DEPRECATED::CanMove()
|
||||||
|
{
|
||||||
|
return bCanMove;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASNGCharacterBase_DEPRECATED::SetCanCharacterJump(bool CanJump)
|
||||||
|
{
|
||||||
|
bCanJump = CanJump;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ASNGCharacterBase_DEPRECATED::CanCharacterJump()
|
||||||
|
{
|
||||||
|
return bCanJump;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASNGCharacterBase_DEPRECATED::SetCanAttack(bool CanAttack)
|
||||||
|
{
|
||||||
|
bCanAttack = CanAttack;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ASNGCharacterBase_DEPRECATED::CanAttack()
|
||||||
|
{
|
||||||
|
return bCanAttack;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASNGCharacterBase_DEPRECATED::SetCanDodge(bool CanDodge)
|
||||||
|
{
|
||||||
|
bCanDodge = CanDodge;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ASNGCharacterBase_DEPRECATED::CanDodge()
|
||||||
|
{
|
||||||
|
return bCanDodge;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASNGCharacterBase_DEPRECATED::ApplyHitStop(float HitStopTime, float HitSlowTime)
|
||||||
|
{
|
||||||
|
CurrHitStopTime = HitStopTime;
|
||||||
|
CurrHitSlowTime = HitSlowTime;
|
||||||
|
bIsInHitStop = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASNGCharacterBase_DEPRECATED::PushEvent_Implementation(FSNGEvent Event)
|
||||||
|
{
|
||||||
|
if(StateMachineComponent)
|
||||||
|
{
|
||||||
|
StateMachineComponent->PushEvent(Event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ASNGWeaponBase* ASNGCharacterBase_DEPRECATED::GetCurrentWeapon_Implementation()
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASNGCharacterBase_DEPRECATED::ReceiveHit(FSNGHitData const& HitData, AController* EventInstigator, AActor* DamageCauser)
|
||||||
|
{
|
||||||
|
AActor* Causer = EventInstigator->GetPawn();
|
||||||
|
|
||||||
|
if(HitData.HitstopApplicationType == ESNGHitstopApplicationType::Both ||
|
||||||
|
HitData.HitstopApplicationType == ESNGHitstopApplicationType::ReceiverOnly)
|
||||||
|
{
|
||||||
|
ApplyHitStop(HitData.StopTime, HitData.SlowTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
FVector AdjustedLaunchDir;
|
||||||
|
switch (HitData.LaunchDirectionType)
|
||||||
|
{
|
||||||
|
case ESNGLaunchDirectionType::UseCauserRotation:
|
||||||
|
{
|
||||||
|
FRotator CauserRotationYaw(0.0f, Causer->GetActorRotation().Yaw, 0.0f);
|
||||||
|
AdjustedLaunchDir = CauserRotationYaw.RotateVector(HitData.LaunchDirection);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ESNGLaunchDirectionType::UseLookAtRotation:
|
||||||
|
{
|
||||||
|
FRotator LookAtRotation = UKismetMathLibrary::FindLookAtRotation(Causer->GetActorLocation(), GetActorLocation());
|
||||||
|
FRotator LookAtRotationYaw(0.0f, LookAtRotation.Yaw, 0.0f);
|
||||||
|
AdjustedLaunchDir = LookAtRotationYaw.RotateVector(HitData.LaunchDirection);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
AdjustedLaunchDir = HitData.LaunchDirection;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (HitData.LaunchType)
|
||||||
|
{
|
||||||
|
case ESNGLaunchType::OnlyInAir:
|
||||||
|
{
|
||||||
|
bool IsInAir = GetMovementComponent()->IsFalling();
|
||||||
|
if(IsInAir)
|
||||||
|
{
|
||||||
|
AdjustedLaunchDir *= HitData.LaunchForce;
|
||||||
|
LaunchCharacter(AdjustedLaunchDir, true, true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
AdjustedLaunchDir = FVector(AdjustedLaunchDir.X, AdjustedLaunchDir.Y, 0.0f);
|
||||||
|
LaunchCharacter(AdjustedLaunchDir, true, true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ESNGLaunchType::Always:
|
||||||
|
{
|
||||||
|
AdjustedLaunchDir *= HitData.LaunchForce;
|
||||||
|
LaunchCharacter(AdjustedLaunchDir, true, true);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
float ASNGCharacterBase_DEPRECATED::TakeDamage(float Damage, FDamageEvent const& DamageEvent, AController* EventInstigator,
|
||||||
|
AActor* DamageCauser)
|
||||||
|
{
|
||||||
|
Super::TakeDamage(Damage, DamageEvent, EventInstigator, DamageCauser);
|
||||||
|
|
||||||
|
if(HealthComponent)
|
||||||
|
{
|
||||||
|
HealthComponent->SubtractHealth(Damage);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DamageEvent.IsOfType(FSNGDamageEvent::ClassID))
|
||||||
|
{
|
||||||
|
// point damage event, pass off to helper function
|
||||||
|
FSNGDamageEvent* const MyDamageEvent = (FSNGDamageEvent*) &DamageEvent;
|
||||||
|
ReceiveHit(MyDamageEvent->HitData, EventInstigator, DamageCauser);
|
||||||
|
|
||||||
|
FSNGEvent Event;
|
||||||
|
Event.EventType = ESNGEventType::Damage;
|
||||||
|
Event.DamageData.HitData = MyDamageEvent->HitData;
|
||||||
|
Event.DamageData.EventInstigator = EventInstigator;
|
||||||
|
Event.DamageData.DamageCauser = DamageCauser;
|
||||||
|
Event.DamageData.SurfaceType = MyDamageEvent->SurfaceType;
|
||||||
|
Event.DamageData.ImpactPoint = MyDamageEvent->ImpactPoint;
|
||||||
|
PushEvent(Event);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Damage;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASNGCharacterBase_DEPRECATED::Tick(float DeltaSeconds)
|
||||||
|
{
|
||||||
|
Super::Tick(DeltaSeconds);
|
||||||
|
|
||||||
|
RotateTowardsTarget(DeltaSeconds);
|
||||||
|
|
||||||
|
if(bIsInHitStop)
|
||||||
|
{
|
||||||
|
CurrHitStopTime = FMath::Clamp(CurrHitStopTime - GetWorld()->GetDeltaSeconds(), 0.0f, CurrHitStopTime);
|
||||||
|
if(CurrHitStopTime > 0.0f)
|
||||||
|
{
|
||||||
|
CustomTimeDilation = 0.0f;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
CustomTimeDilation = 0.01;
|
||||||
|
CurrHitSlowTime = FMath::Clamp(CurrHitSlowTime - GetWorld()->GetDeltaSeconds(), 0.0f, CurrHitSlowTime);
|
||||||
|
if(CurrHitSlowTime == 0.0f)
|
||||||
|
{
|
||||||
|
CustomTimeDilation = 1.0f;
|
||||||
|
bIsInHitStop = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ASNGCharacterBase_DEPRECATED::PostInitializeComponents()
|
||||||
|
{
|
||||||
|
Super::PostInitializeComponents();
|
||||||
|
|
||||||
|
SNGCharacterMovementComponent = Cast<USNGCharacterMovementComponent>(Super::GetMovementComponent());
|
||||||
|
}
|
||||||
|
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
USNGCharacterMovementComponent::USNGCharacterMovementComponent()
|
USNGCharacterMovementComponent::USNGCharacterMovementComponent()
|
||||||
{
|
{
|
||||||
// Set defaults dealign with grounded movement
|
// Set defaults dealing with grounded movement
|
||||||
DefaultGravityScale = 1.0f;
|
DefaultGravityScale = 1.0f;
|
||||||
DefaultMaxWalkSpeed = 475.0f;
|
DefaultMaxWalkSpeed = 475.0f;
|
||||||
FiringMaxWalkSpeed = 300.0f;
|
FiringMaxWalkSpeed = 300.0f;
|
||||||
@ -13,7 +13,7 @@ USNGCharacterMovementComponent::USNGCharacterMovementComponent()
|
|||||||
SprintingMaxWalkSpeed = 600.0f;
|
SprintingMaxWalkSpeed = 600.0f;
|
||||||
|
|
||||||
// Set defaults dealing with jumping and being airborne
|
// Set defaults dealing with jumping and being airborne
|
||||||
JumpForce = 1000.0f;
|
DefaultJumpForce = 1000.0f;
|
||||||
DefaultAirFriction = 150.0f;
|
DefaultAirFriction = 150.0f;
|
||||||
DefaultAirControl = 0.35;
|
DefaultAirControl = 0.35;
|
||||||
|
|
||||||
@ -36,23 +36,28 @@ void USNGCharacterMovementComponent::RestoreMovementDefaults()
|
|||||||
MaxWalkSpeed = DefaultMaxWalkSpeed;
|
MaxWalkSpeed = DefaultMaxWalkSpeed;
|
||||||
BrakingDecelerationFalling = DefaultAirFriction;
|
BrakingDecelerationFalling = DefaultAirFriction;
|
||||||
AirControl = DefaultAirControl;
|
AirControl = DefaultAirControl;
|
||||||
|
JumpZVelocity = DefaultJumpForce;
|
||||||
}
|
}
|
||||||
|
|
||||||
void USNGCharacterMovementComponent::StartJump()
|
void USNGCharacterMovementComponent::StartJump()
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
JumpTimer = MaxJumpTime;
|
JumpTimer = MaxJumpTime;
|
||||||
|
|
||||||
Velocity = FVector(Velocity.X * LateralVelocityDampening, Velocity.Y * LateralVelocityDampening, 0.0f);
|
Velocity = FVector(Velocity.X * LateralVelocityDampening, Velocity.Y * LateralVelocityDampening, 0.0f);
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void USNGCharacterMovementComponent::AddJumpForce()
|
void USNGCharacterMovementComponent::AddJumpForce()
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
if(JumpTimer > 0.0f)
|
if(JumpTimer > 0.0f)
|
||||||
{
|
{
|
||||||
Velocity = FVector(Velocity.X, Velocity.Y, Velocity.Z + (JumpForce * GetWorld()->DeltaTimeSeconds));
|
Velocity = FVector(Velocity.X, Velocity.Y, Velocity.Z + (JumpForce * GetWorld()->DeltaTimeSeconds));
|
||||||
|
|
||||||
JumpTimer = FMath::Max(JumpTimer - GetWorld()->DeltaTimeSeconds, 0.0f);
|
JumpTimer = FMath::Max(JumpTimer - GetWorld()->DeltaTimeSeconds, 0.0f);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void USNGCharacterMovementComponent::BeginPlay()
|
void USNGCharacterMovementComponent::BeginPlay()
|
||||||
@ -61,9 +66,6 @@ void USNGCharacterMovementComponent::BeginPlay()
|
|||||||
|
|
||||||
// set character movement parameters to defaults
|
// set character movement parameters to defaults
|
||||||
RestoreMovementDefaults();
|
RestoreMovementDefaults();
|
||||||
|
|
||||||
// Reset timers
|
|
||||||
JumpTimer = 0.0f;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void USNGCharacterMovementComponent::TickComponent(float DeltaTime, ELevelTick Tick,
|
void USNGCharacterMovementComponent::TickComponent(float DeltaTime, ELevelTick Tick,
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#include "Weapons/SNGInstantRangedWeapon.h"
|
#include "Weapons/SNGInstantRangedWeapon.h"
|
||||||
|
|
||||||
#include "DrawDebugHelpers.h"
|
#include "DrawDebugHelpers.h"
|
||||||
#include "Characters/SNGCharacterBase.h"
|
#include "Characters/SNGCharacterBase_DEPRECATED.h"
|
||||||
#include "Kismet/GameplayStatics.h"
|
#include "Kismet/GameplayStatics.h"
|
||||||
#include "Particles/ParticleSystemComponent.h"
|
#include "Particles/ParticleSystemComponent.h"
|
||||||
#include "PhysicalMaterials/PhysicalMaterial.h"
|
#include "PhysicalMaterials/PhysicalMaterial.h"
|
||||||
@ -107,7 +107,7 @@ void ASNGInstantRangedWeapon::DoLineTrace(FRotator SpreadOffset)
|
|||||||
if(HitData.HitstopApplicationType == ESNGHitstopApplicationType::Both ||
|
if(HitData.HitstopApplicationType == ESNGHitstopApplicationType::Both ||
|
||||||
HitData.HitstopApplicationType == ESNGHitstopApplicationType::CauserOnly)
|
HitData.HitstopApplicationType == ESNGHitstopApplicationType::CauserOnly)
|
||||||
{
|
{
|
||||||
ASNGCharacterBase* OwnerAsChar = Cast<ASNGCharacterBase>(GetOwner());
|
ASNGCharacterBase_DEPRECATED* OwnerAsChar = Cast<ASNGCharacterBase_DEPRECATED>(GetOwner());
|
||||||
OwnerAsChar->ApplyHitStop(HitData.StopTime, HitData.SlowTime);
|
OwnerAsChar->ApplyHitStop(HitData.StopTime, HitData.SlowTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#include "Weapons/SNGMeleeWeaponBase.h"
|
#include "Weapons/SNGMeleeWeaponBase.h"
|
||||||
|
|
||||||
|
|
||||||
#include "Characters/SNGCharacterBase.h"
|
#include "Characters/SNGCharacterBase_DEPRECATED.h"
|
||||||
#include "Kismet/KismetSystemLibrary.h"
|
#include "Kismet/KismetSystemLibrary.h"
|
||||||
#include "SwordNGun/SwordNGun.h"
|
#include "SwordNGun/SwordNGun.h"
|
||||||
|
|
||||||
@ -61,7 +61,7 @@ void ASNGMeleeWeaponBase::DoSphereCast(FSNGHitData const& HitData, bool Override
|
|||||||
if(HitData.HitstopApplicationType == ESNGHitstopApplicationType::Both ||
|
if(HitData.HitstopApplicationType == ESNGHitstopApplicationType::Both ||
|
||||||
HitData.HitstopApplicationType == ESNGHitstopApplicationType::CauserOnly)
|
HitData.HitstopApplicationType == ESNGHitstopApplicationType::CauserOnly)
|
||||||
{
|
{
|
||||||
ASNGCharacterBase* OwnerAsChar = Cast<ASNGCharacterBase>(GetOwner());
|
ASNGCharacterBase_DEPRECATED* OwnerAsChar = Cast<ASNGCharacterBase_DEPRECATED>(GetOwner());
|
||||||
OwnerAsChar->ApplyHitStop(HitData.StopTime, HitData.SlowTime);
|
OwnerAsChar->ApplyHitStop(HitData.StopTime, HitData.SlowTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Binary file not shown.
@ -0,0 +1,174 @@
|
|||||||
|
// Project Sword & Gun Copyright © 2021 Kevin Poretti
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "Components/SNGCharacterMovementComponent.h"
|
||||||
|
|
||||||
|
#include "Components/SNGHealthComponent.h"
|
||||||
|
#include "Components/SNGStateMachineComponent.h"
|
||||||
|
#include "GameFramework/Character.h"
|
||||||
|
#include "Interfaces/SNGEventProcessorInterface.h"
|
||||||
|
#include "Interfaces/SNGWeaponUserInterface.h"
|
||||||
|
|
||||||
|
#include "SNGCharacterBase_DEPRECATED.generated.h"
|
||||||
|
|
||||||
|
UCLASS()
|
||||||
|
class SWORDNGUN_API ASNGCharacterBase_DEPRECATED : public ACharacter, public ISNGEventProcessorInterface, public ISNGWeaponUserInterface
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
// Sets default values for this character's properties
|
||||||
|
ASNGCharacterBase_DEPRECATED(const FObjectInitializer& ObjectInitializer);
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
* Flags
|
||||||
|
********************************************************************/
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable)
|
||||||
|
void DisableAllActions();
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable)
|
||||||
|
void EnableAllActions();
|
||||||
|
|
||||||
|
// NOTE(kevin): should be a blueprint setter but I could not get that working for the life of me
|
||||||
|
UFUNCTION(BlueprintCallable)
|
||||||
|
void SetCanMove(bool CanMove);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintGetter)
|
||||||
|
bool CanMove();
|
||||||
|
|
||||||
|
// NOTE(kevin): should be a blueprint setter but I could not get that working for the life of me
|
||||||
|
// should also probably be a protagonist/player character specific thing
|
||||||
|
UFUNCTION(BlueprintCallable)
|
||||||
|
void SetCanCharacterJump(bool CanJump);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintGetter)
|
||||||
|
bool CanCharacterJump();
|
||||||
|
|
||||||
|
// NOTE(kevin): should be a blueprint setter but I could not get that working for the life of me
|
||||||
|
UFUNCTION(BlueprintCallable)
|
||||||
|
void SetCanAttack(bool CanAttack);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintGetter)
|
||||||
|
bool CanAttack();
|
||||||
|
|
||||||
|
// NOTE(kevin): should be a blueprint setter but I could not get that working for the life of me
|
||||||
|
// should also probably be a protagonist/player character specific thing
|
||||||
|
UFUNCTION(BlueprintCallable)
|
||||||
|
void SetCanDodge(bool CanDodge);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintGetter)
|
||||||
|
bool CanDodge();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
UPROPERTY(BlueprintReadOnly)
|
||||||
|
bool bCanMove;
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadOnly)
|
||||||
|
bool bCanJump;
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadOnly)
|
||||||
|
bool bCanAttack;
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadOnly)
|
||||||
|
bool bCanDodge;
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
* Movement
|
||||||
|
********************************************************************/
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable, Category="Movement")
|
||||||
|
void SetIgnoreMovementInput(bool IsIgnored);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable, Category="Movement")
|
||||||
|
FORCEINLINE class USNGCharacterMovementComponent* GetSNGCharacterMovementComponent() const
|
||||||
|
{
|
||||||
|
return SNGCharacterMovementComponent;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
USNGCharacterMovementComponent* SNGCharacterMovementComponent;
|
||||||
|
|
||||||
|
public:
|
||||||
|
/*********************************************************************
|
||||||
|
* Event processing interface
|
||||||
|
********************************************************************/
|
||||||
|
// event processing
|
||||||
|
UFUNCTION(BlueprintCallable, BlueprintNativeEvent)
|
||||||
|
void PushEvent(FSNGEvent Event);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The state machine will be handling most if not all of the states
|
||||||
|
* we simply wrap the state machine's push event implementation since most
|
||||||
|
* characters that will want to push events to another character will have a reference
|
||||||
|
* to the character itself rather than the state machine component
|
||||||
|
*/
|
||||||
|
virtual void PushEvent_Implementation(FSNGEvent Event);
|
||||||
|
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
* Weapons
|
||||||
|
********************************************************************/
|
||||||
|
UFUNCTION(BlueprintCallable, BlueprintNativeEvent)
|
||||||
|
ASNGWeaponBase* GetCurrentWeapon();
|
||||||
|
|
||||||
|
virtual ASNGWeaponBase* GetCurrentWeapon_Implementation();
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
* Damage and hits
|
||||||
|
********************************************************************/
|
||||||
|
// damage and related
|
||||||
|
UFUNCTION(BlueprintCallable)
|
||||||
|
void ApplyHitStop(float HitStopTime, float HitSlowTime);
|
||||||
|
|
||||||
|
virtual void ReceiveHit(FSNGHitData const& HitData, AController* EventInstigator, AActor* DamageCauser);
|
||||||
|
|
||||||
|
virtual float TakeDamage(float Damage, struct FDamageEvent const& DamageEvent, AController* EventInstigator, AActor* DamageCauser) override;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
bool bIsInHitStop;
|
||||||
|
|
||||||
|
float CurrHitStopTime;
|
||||||
|
|
||||||
|
float CurrHitSlowTime;
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
* Rotate towards target
|
||||||
|
********************************************************************/
|
||||||
|
public:
|
||||||
|
UFUNCTION(BlueprintCallable)
|
||||||
|
void SetupRotateTowardsTarget(FRotator TargetRotation, float DegreesPerSecond, float MaxRotation);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable)
|
||||||
|
void RotateTowardsTarget(float DeltaTime);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
FRotator InitialRot;
|
||||||
|
|
||||||
|
FRotator TargetRot;
|
||||||
|
|
||||||
|
float DegPerSecond;
|
||||||
|
|
||||||
|
float MaxRot;
|
||||||
|
|
||||||
|
float RotateTime;
|
||||||
|
|
||||||
|
float RotateTimeElapsed;
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
* Components
|
||||||
|
********************************************************************/
|
||||||
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Components")
|
||||||
|
USNGStateMachineComponent* StateMachineComponent;
|
||||||
|
|
||||||
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category="Components")
|
||||||
|
USNGHealthComponent* HealthComponent;
|
||||||
|
|
||||||
|
virtual void Tick(float DeltaSeconds) override;
|
||||||
|
|
||||||
|
virtual void PostInitializeComponents() override;
|
||||||
|
};
|
@ -3,14 +3,14 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "CoreMinimal.h"
|
#include "CoreMinimal.h"
|
||||||
#include "Characters/SNGCharacterBase.h"
|
#include "Characters/SNGCharacterBase_DEPRECATED.h"
|
||||||
#include "SNGEnemyBase.generated.h"
|
#include "SNGEnemyBase.generated.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
UCLASS()
|
UCLASS()
|
||||||
class SWORDNGUN_API ASNGEnemyBase : public ASNGCharacterBase
|
class SWORDNGUN_API ASNGEnemyBase : public ASNGCharacterBase_DEPRECATED
|
||||||
{
|
{
|
||||||
GENERATED_BODY()
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
#include "CoreMinimal.h"
|
#include "CoreMinimal.h"
|
||||||
|
|
||||||
#include "Camera/CameraComponent.h"
|
#include "Camera/CameraComponent.h"
|
||||||
#include "Characters/SNGCharacterBase.h"
|
#include "Characters/SNGCharacterBase_DEPRECATED.h"
|
||||||
#include "Components/SNGWeaponInventoryComponent.h"
|
#include "Components/SNGWeaponInventoryComponent.h"
|
||||||
#include "GameFramework/SpringArmComponent.h"
|
#include "GameFramework/SpringArmComponent.h"
|
||||||
|
|
||||||
@ -27,7 +27,7 @@ struct FMeleeAttackData
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
UCLASS()
|
UCLASS()
|
||||||
class SWORDNGUN_API ASNGProtagonist : public ASNGCharacterBase
|
class SWORDNGUN_API ASNGProtagonist : public ASNGCharacterBase_DEPRECATED
|
||||||
{
|
{
|
||||||
GENERATED_BODY()
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
@ -54,11 +54,7 @@ protected:
|
|||||||
|
|
||||||
/** Force to continuously apply to character when they are holding the jump button */
|
/** Force to continuously apply to character when they are holding the jump button */
|
||||||
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Character Movement: SNG Air Defaults", meta=(ClampMin="0", UIMin="0"))
|
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Character Movement: SNG Air Defaults", meta=(ClampMin="0", UIMin="0"))
|
||||||
float JumpForce;
|
float DefaultJumpForce;
|
||||||
|
|
||||||
/** Timer that counts down */
|
|
||||||
UPROPERTY(BlueprintReadWrite);
|
|
||||||
float JumpTimer;
|
|
||||||
|
|
||||||
/** Minimum height a character must reach before jump force is no longer applied even if the jump input is not being held */
|
/** Minimum height a character must reach before jump force is no longer applied even if the jump input is not being held */
|
||||||
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Character Movement: SNG Air Defaults", meta=(ClampMin="0", UIMin="0"))
|
UPROPERTY(EditDefaultsOnly, BlueprintReadOnly, Category="Character Movement: SNG Air Defaults", meta=(ClampMin="0", UIMin="0"))
|
||||||
|
Loading…
Reference in New Issue
Block a user