114 - Reloading Combat State

This commit is contained in:
Kingsmedia 2022-05-09 23:16:55 +02:00
parent f630c5d6a2
commit 1141d0957e
9 changed files with 62 additions and 2 deletions

View File

@ -74,4 +74,6 @@ void UBlasterAnimInstance::NativeUpdateAnimation(float DeltaSeconds)
RightHandRotation = FMath::RInterpTo(RightHandRotation, LookAtRotation, DeltaSeconds, 30.f);
}
}
bUseFABRIK = BlasterCharacter->GetCombatState() != ECombatState::ECS_Reloading;
}

View File

@ -79,4 +79,7 @@ private:
UPROPERTY(BlueprintReadOnly, Category="Movement", meta=(AllowPrivateAccess = "true"))
bool bEliminated;
UPROPERTY(BlueprintReadOnly, Category="Movement", meta=(AllowPrivateAccess = "true"))
bool bUseFABRIK;
};

View File

@ -636,6 +636,12 @@ FVector ABlasterCharacter::GetHitTarget() const
return Combat->HitTarget;
}
ECombatState ABlasterCharacter::GetCombatState() const
{
if (Combat == nullptr) return ECombatState::ECS_MAX;
return Combat->CombatState;
}
void ABlasterCharacter::OnRep_OverlappingWeapon(AWeapon* LastWeapon)
{
if (OverlappingWeapon)

View File

@ -4,6 +4,7 @@
#include "CoreMinimal.h"
#include "Blaster/Interfaces/InteractWithCrosshairInterface.h"
#include "Blaster/Types/CombatState.h"
#include "Blaster/Types/TurningInPlace.h"
#include "Components/TimelineComponent.h"
#include "GameFramework/Character.h"
@ -78,7 +79,7 @@ private:
UFUNCTION()
void OnRep_OverlappingWeapon(AWeapon* LastWeapon);
UPROPERTY(VisibleAnywhere)
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true"))
class UCombatComponent* Combat;
UFUNCTION(Server, Reliable)
@ -184,4 +185,5 @@ public:
FORCEINLINE bool IsEliminated() const { return bEliminated; }
FORCEINLINE float GetHealth() const { return Health; }
FORCEINLINE float GetMaxHealth() const { return MaxHealth; }
ECombatState GetCombatState() const;
};

View File

@ -27,6 +27,7 @@ void UCombatComponent::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& Out
DOREPLIFETIME(UCombatComponent, EquippedWeapon);
DOREPLIFETIME_CONDITION(UCombatComponent, CarriedAmmo, COND_OwnerOnly);
DOREPLIFETIME(UCombatComponent, bAiming);
DOREPLIFETIME(UCombatComponent, CombatState);
}
void UCombatComponent::BeginPlay()
@ -331,16 +332,41 @@ void UCombatComponent::EquipWeapon(AWeapon* WeaponToEquip)
void UCombatComponent::Reload()
{
if (CarriedAmmo > 0)
if (CarriedAmmo > 0 && CombatState != ECombatState::ECS_Reloading)
{
ServerReload();
}
}
void UCombatComponent::FinishedReloading()
{
if (Character == nullptr) return;
if (Character->HasAuthority())
{
CombatState = ECombatState::ECS_Unoccupied;;
}
}
void UCombatComponent::ServerReload_Implementation()
{
if (Character == nullptr) return;
CombatState = ECombatState::ECS_Reloading;
HandleReload();
}
void UCombatComponent::OnRep_CombatState()
{
switch (CombatState)
{
case ECombatState::ECS_Reloading:
HandleReload();
break;
}
}
void UCombatComponent::HandleReload()
{
Character->PlayReloadMontage();
}

View File

@ -4,6 +4,7 @@
#include "CoreMinimal.h"
#include "Blaster/HUD/BlasterHUD.h"
#include "Blaster/Types/CombatState.h"
#include "Blaster/Weapon/WeaponTypes.h"
#include "Components/ActorComponent.h"
#include "CombatComponent.generated.h"
@ -24,6 +25,8 @@ public:
void EquipWeapon(class AWeapon* WeaponToEquip);
void Reload();
UFUNCTION(BlueprintCallable)
void FinishedReloading();
protected:
virtual void BeginPlay() override;
@ -50,6 +53,8 @@ protected:
UFUNCTION(Server, Reliable)
void ServerReload();
void HandleReload();
private:
UPROPERTY()
class ABlasterCharacter* Character;
@ -118,4 +123,10 @@ private:
int32 StartingARAmmo = 30;
void InitializeCarriedAmmo();
UPROPERTY(ReplicatedUsing=OnRep_CombatState)
ECombatState CombatState = ECombatState::ECS_Unoccupied;
UFUNCTION()
void OnRep_CombatState();
};

View File

@ -0,0 +1,10 @@
#pragma once
UENUM(BlueprintType)
enum class ECombatState : uint8
{
ECS_Unoccupied UMETA(DisplayName = "Unoccupied"),
ECS_Reloading UMETA(DisplayName = "Reloading"),
ECS_MAX UMETA(DisplayName = "DefaultMAX")
};