114 - Reloading Combat State
This commit is contained in:
parent
f630c5d6a2
commit
1141d0957e
Binary file not shown.
Binary file not shown.
|
@ -74,4 +74,6 @@ void UBlasterAnimInstance::NativeUpdateAnimation(float DeltaSeconds)
|
|||
RightHandRotation = FMath::RInterpTo(RightHandRotation, LookAtRotation, DeltaSeconds, 30.f);
|
||||
}
|
||||
}
|
||||
|
||||
bUseFABRIK = BlasterCharacter->GetCombatState() != ECombatState::ECS_Reloading;
|
||||
}
|
||||
|
|
|
@ -79,4 +79,7 @@ private:
|
|||
|
||||
UPROPERTY(BlueprintReadOnly, Category="Movement", meta=(AllowPrivateAccess = "true"))
|
||||
bool bEliminated;
|
||||
|
||||
UPROPERTY(BlueprintReadOnly, Category="Movement", meta=(AllowPrivateAccess = "true"))
|
||||
bool bUseFABRIK;
|
||||
};
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
};
|
||||
|
|
|
@ -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")
|
||||
};
|
Loading…
Reference in New Issue