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);
|
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"))
|
UPROPERTY(BlueprintReadOnly, Category="Movement", meta=(AllowPrivateAccess = "true"))
|
||||||
bool bEliminated;
|
bool bEliminated;
|
||||||
|
|
||||||
|
UPROPERTY(BlueprintReadOnly, Category="Movement", meta=(AllowPrivateAccess = "true"))
|
||||||
|
bool bUseFABRIK;
|
||||||
};
|
};
|
||||||
|
|
|
@ -636,6 +636,12 @@ FVector ABlasterCharacter::GetHitTarget() const
|
||||||
return Combat->HitTarget;
|
return Combat->HitTarget;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ECombatState ABlasterCharacter::GetCombatState() const
|
||||||
|
{
|
||||||
|
if (Combat == nullptr) return ECombatState::ECS_MAX;
|
||||||
|
return Combat->CombatState;
|
||||||
|
}
|
||||||
|
|
||||||
void ABlasterCharacter::OnRep_OverlappingWeapon(AWeapon* LastWeapon)
|
void ABlasterCharacter::OnRep_OverlappingWeapon(AWeapon* LastWeapon)
|
||||||
{
|
{
|
||||||
if (OverlappingWeapon)
|
if (OverlappingWeapon)
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include "CoreMinimal.h"
|
#include "CoreMinimal.h"
|
||||||
#include "Blaster/Interfaces/InteractWithCrosshairInterface.h"
|
#include "Blaster/Interfaces/InteractWithCrosshairInterface.h"
|
||||||
|
#include "Blaster/Types/CombatState.h"
|
||||||
#include "Blaster/Types/TurningInPlace.h"
|
#include "Blaster/Types/TurningInPlace.h"
|
||||||
#include "Components/TimelineComponent.h"
|
#include "Components/TimelineComponent.h"
|
||||||
#include "GameFramework/Character.h"
|
#include "GameFramework/Character.h"
|
||||||
|
@ -78,7 +79,7 @@ private:
|
||||||
UFUNCTION()
|
UFUNCTION()
|
||||||
void OnRep_OverlappingWeapon(AWeapon* LastWeapon);
|
void OnRep_OverlappingWeapon(AWeapon* LastWeapon);
|
||||||
|
|
||||||
UPROPERTY(VisibleAnywhere)
|
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true"))
|
||||||
class UCombatComponent* Combat;
|
class UCombatComponent* Combat;
|
||||||
|
|
||||||
UFUNCTION(Server, Reliable)
|
UFUNCTION(Server, Reliable)
|
||||||
|
@ -184,4 +185,5 @@ public:
|
||||||
FORCEINLINE bool IsEliminated() const { return bEliminated; }
|
FORCEINLINE bool IsEliminated() const { return bEliminated; }
|
||||||
FORCEINLINE float GetHealth() const { return Health; }
|
FORCEINLINE float GetHealth() const { return Health; }
|
||||||
FORCEINLINE float GetMaxHealth() const { return MaxHealth; }
|
FORCEINLINE float GetMaxHealth() const { return MaxHealth; }
|
||||||
|
ECombatState GetCombatState() const;
|
||||||
};
|
};
|
||||||
|
|
|
@ -27,6 +27,7 @@ void UCombatComponent::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& Out
|
||||||
DOREPLIFETIME(UCombatComponent, EquippedWeapon);
|
DOREPLIFETIME(UCombatComponent, EquippedWeapon);
|
||||||
DOREPLIFETIME_CONDITION(UCombatComponent, CarriedAmmo, COND_OwnerOnly);
|
DOREPLIFETIME_CONDITION(UCombatComponent, CarriedAmmo, COND_OwnerOnly);
|
||||||
DOREPLIFETIME(UCombatComponent, bAiming);
|
DOREPLIFETIME(UCombatComponent, bAiming);
|
||||||
|
DOREPLIFETIME(UCombatComponent, CombatState);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UCombatComponent::BeginPlay()
|
void UCombatComponent::BeginPlay()
|
||||||
|
@ -331,16 +332,41 @@ void UCombatComponent::EquipWeapon(AWeapon* WeaponToEquip)
|
||||||
|
|
||||||
void UCombatComponent::Reload()
|
void UCombatComponent::Reload()
|
||||||
{
|
{
|
||||||
if (CarriedAmmo > 0)
|
if (CarriedAmmo > 0 && CombatState != ECombatState::ECS_Reloading)
|
||||||
{
|
{
|
||||||
ServerReload();
|
ServerReload();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void UCombatComponent::FinishedReloading()
|
||||||
|
{
|
||||||
|
if (Character == nullptr) return;
|
||||||
|
if (Character->HasAuthority())
|
||||||
|
{
|
||||||
|
CombatState = ECombatState::ECS_Unoccupied;;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void UCombatComponent::ServerReload_Implementation()
|
void UCombatComponent::ServerReload_Implementation()
|
||||||
{
|
{
|
||||||
if (Character == nullptr) return;
|
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();
|
Character->PlayReloadMontage();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
|
|
||||||
#include "CoreMinimal.h"
|
#include "CoreMinimal.h"
|
||||||
#include "Blaster/HUD/BlasterHUD.h"
|
#include "Blaster/HUD/BlasterHUD.h"
|
||||||
|
#include "Blaster/Types/CombatState.h"
|
||||||
#include "Blaster/Weapon/WeaponTypes.h"
|
#include "Blaster/Weapon/WeaponTypes.h"
|
||||||
#include "Components/ActorComponent.h"
|
#include "Components/ActorComponent.h"
|
||||||
#include "CombatComponent.generated.h"
|
#include "CombatComponent.generated.h"
|
||||||
|
@ -24,6 +25,8 @@ public:
|
||||||
|
|
||||||
void EquipWeapon(class AWeapon* WeaponToEquip);
|
void EquipWeapon(class AWeapon* WeaponToEquip);
|
||||||
void Reload();
|
void Reload();
|
||||||
|
UFUNCTION(BlueprintCallable)
|
||||||
|
void FinishedReloading();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void BeginPlay() override;
|
virtual void BeginPlay() override;
|
||||||
|
@ -50,6 +53,8 @@ protected:
|
||||||
|
|
||||||
UFUNCTION(Server, Reliable)
|
UFUNCTION(Server, Reliable)
|
||||||
void ServerReload();
|
void ServerReload();
|
||||||
|
|
||||||
|
void HandleReload();
|
||||||
private:
|
private:
|
||||||
UPROPERTY()
|
UPROPERTY()
|
||||||
class ABlasterCharacter* Character;
|
class ABlasterCharacter* Character;
|
||||||
|
@ -118,4 +123,10 @@ private:
|
||||||
int32 StartingARAmmo = 30;
|
int32 StartingARAmmo = 30;
|
||||||
|
|
||||||
void InitializeCarriedAmmo();
|
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