166 - Secondary Weapon
This commit is contained in:
parent
a39861b510
commit
a38547ce5b
Binary file not shown.
|
@ -32,7 +32,7 @@ void UBlasterAnimInstance::NativeUpdateAnimation(float DeltaTime)
|
||||||
bIsInAir = BlasterCharacter->GetCharacterMovement()->IsFalling();
|
bIsInAir = BlasterCharacter->GetCharacterMovement()->IsFalling();
|
||||||
bIsAccelerating = BlasterCharacter->GetCharacterMovement()->GetCurrentAcceleration().Size() > 0.f ? true : false;
|
bIsAccelerating = BlasterCharacter->GetCharacterMovement()->GetCurrentAcceleration().Size() > 0.f ? true : false;
|
||||||
bWeaponEquipped = BlasterCharacter->IsWeaponEquipped();
|
bWeaponEquipped = BlasterCharacter->IsWeaponEquipped();
|
||||||
EquippedWeapon = BlasterCharacter->GetEquippedWeapon();
|
EquippedWeapon = BlasterCharacter->GetPrimaryWeapon();
|
||||||
bIsCrouched = BlasterCharacter->bIsCrouched;
|
bIsCrouched = BlasterCharacter->bIsCrouched;
|
||||||
bAiming = BlasterCharacter->IsAiming();
|
bAiming = BlasterCharacter->IsAiming();
|
||||||
TurningInPlace = BlasterCharacter->GetTurningInPlace();
|
TurningInPlace = BlasterCharacter->GetTurningInPlace();
|
||||||
|
|
|
@ -84,9 +84,9 @@ void ABlasterCharacter::OnRep_ReplicatedMovement()
|
||||||
|
|
||||||
void ABlasterCharacter::Eliminated()
|
void ABlasterCharacter::Eliminated()
|
||||||
{
|
{
|
||||||
if (Combat && Combat->EquippedWeapon)
|
if (Combat && Combat->PrimaryWeapon)
|
||||||
{
|
{
|
||||||
Combat->EquippedWeapon->Dropped();
|
Combat->PrimaryWeapon->Dropped();
|
||||||
}
|
}
|
||||||
MulticastEliminated();
|
MulticastEliminated();
|
||||||
GetWorldTimerManager().SetTimer(
|
GetWorldTimerManager().SetTimer(
|
||||||
|
@ -146,7 +146,7 @@ void ABlasterCharacter::MulticastEliminated_Implementation()
|
||||||
GetActorLocation()
|
GetActorLocation()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
if (IsLocallyControlled() && GetEquippedWeapon() && GetEquippedWeapon()->IsSniper() && IsAiming())
|
if (IsLocallyControlled() && GetPrimaryWeapon() && GetPrimaryWeapon()->IsSniper() && IsAiming())
|
||||||
{
|
{
|
||||||
ShowSniperScopeWidget(false);
|
ShowSniperScopeWidget(false);
|
||||||
}
|
}
|
||||||
|
@ -173,9 +173,9 @@ void ABlasterCharacter::Destroyed()
|
||||||
ABlasterGameMode* BlasterGameMode = Cast<ABlasterGameMode>(UGameplayStatics::GetGameMode(this));
|
ABlasterGameMode* BlasterGameMode = Cast<ABlasterGameMode>(UGameplayStatics::GetGameMode(this));
|
||||||
bool bMatchNotInProgress = BlasterGameMode && BlasterGameMode->GetMatchState() != MatchState::InProgress;
|
bool bMatchNotInProgress = BlasterGameMode && BlasterGameMode->GetMatchState() != MatchState::InProgress;
|
||||||
|
|
||||||
if (Combat && Combat->EquippedWeapon && bMatchNotInProgress)
|
if (Combat && Combat->PrimaryWeapon && bMatchNotInProgress)
|
||||||
{
|
{
|
||||||
Combat->EquippedWeapon->Destroy();
|
Combat->PrimaryWeapon->Destroy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -267,7 +267,7 @@ void ABlasterCharacter::PostInitializeComponents()
|
||||||
|
|
||||||
void ABlasterCharacter::PlayFireMontage(bool bAiming)
|
void ABlasterCharacter::PlayFireMontage(bool bAiming)
|
||||||
{
|
{
|
||||||
if (Combat == nullptr || Combat->EquippedWeapon == nullptr) return;
|
if (Combat == nullptr || Combat->PrimaryWeapon == nullptr) return;
|
||||||
|
|
||||||
UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance();
|
UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance();
|
||||||
if (AnimInstance && FireWeaponMontage)
|
if (AnimInstance && FireWeaponMontage)
|
||||||
|
@ -281,7 +281,7 @@ void ABlasterCharacter::PlayFireMontage(bool bAiming)
|
||||||
|
|
||||||
void ABlasterCharacter::PlayReloadMontage()
|
void ABlasterCharacter::PlayReloadMontage()
|
||||||
{
|
{
|
||||||
if (Combat == nullptr || Combat->EquippedWeapon == nullptr) return;
|
if (Combat == nullptr || Combat->PrimaryWeapon == nullptr) return;
|
||||||
|
|
||||||
UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance();
|
UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance();
|
||||||
if (AnimInstance && ReloadMontage)
|
if (AnimInstance && ReloadMontage)
|
||||||
|
@ -289,7 +289,7 @@ void ABlasterCharacter::PlayReloadMontage()
|
||||||
AnimInstance->Montage_Play(ReloadMontage);
|
AnimInstance->Montage_Play(ReloadMontage);
|
||||||
FName SectionName;
|
FName SectionName;
|
||||||
|
|
||||||
switch (Combat->EquippedWeapon->GetWeaponType())
|
switch (Combat->PrimaryWeapon->GetWeaponType())
|
||||||
{
|
{
|
||||||
case EWeaponType::EWT_AssaultRifle:
|
case EWeaponType::EWT_AssaultRifle:
|
||||||
SectionName = FName("Rifle");
|
SectionName = FName("Rifle");
|
||||||
|
@ -341,7 +341,7 @@ void ABlasterCharacter::PlayThrowGrenadeMontage()
|
||||||
|
|
||||||
void ABlasterCharacter::PlayHitReactMontage()
|
void ABlasterCharacter::PlayHitReactMontage()
|
||||||
{
|
{
|
||||||
if (Combat == nullptr || Combat->EquippedWeapon == nullptr) return;
|
if (Combat == nullptr || Combat->PrimaryWeapon == nullptr) return;
|
||||||
|
|
||||||
UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance();
|
UAnimInstance* AnimInstance = GetMesh()->GetAnimInstance();
|
||||||
if (AnimInstance && HitReactMontage)
|
if (AnimInstance && HitReactMontage)
|
||||||
|
@ -428,21 +428,17 @@ void ABlasterCharacter::EquipButtonPressed()
|
||||||
{
|
{
|
||||||
if (bDisableGameplay) return;
|
if (bDisableGameplay) return;
|
||||||
if (Combat)
|
if (Combat)
|
||||||
{
|
|
||||||
if (HasAuthority())
|
|
||||||
{
|
|
||||||
Combat->EquipWeapon(OverlappingWeapon);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
ServerEquipButtonPressed();
|
ServerEquipButtonPressed();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
void ABlasterCharacter::ServerEquipButtonPressed_Implementation()
|
void ABlasterCharacter::ServerEquipButtonPressed_Implementation()
|
||||||
{
|
{
|
||||||
EquipButtonPressed();
|
if (Combat)
|
||||||
|
{
|
||||||
|
Combat->EquipWeapon(OverlappingWeapon);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ABlasterCharacter::CrouchButtonPressed()
|
void ABlasterCharacter::CrouchButtonPressed()
|
||||||
|
@ -502,7 +498,7 @@ float ABlasterCharacter::CalculateSpeed()
|
||||||
|
|
||||||
void ABlasterCharacter::AimOffset(float DeltaTime)
|
void ABlasterCharacter::AimOffset(float DeltaTime)
|
||||||
{
|
{
|
||||||
if (Combat && Combat->EquippedWeapon == nullptr) return;
|
if (Combat && Combat->PrimaryWeapon == nullptr) return;
|
||||||
float Speed = CalculateSpeed();
|
float Speed = CalculateSpeed();
|
||||||
bool bIsInAir = GetCharacterMovement()->IsFalling();
|
bool bIsInAir = GetCharacterMovement()->IsFalling();
|
||||||
|
|
||||||
|
@ -545,7 +541,7 @@ void ABlasterCharacter::CalculateAO_Pitch()
|
||||||
|
|
||||||
void ABlasterCharacter::SimProxiesTurn()
|
void ABlasterCharacter::SimProxiesTurn()
|
||||||
{
|
{
|
||||||
if (Combat == nullptr || Combat->EquippedWeapon == nullptr) return;
|
if (Combat == nullptr || Combat->PrimaryWeapon == nullptr) return;
|
||||||
bRotateRootBone = false;
|
bRotateRootBone = false;
|
||||||
float Speed = CalculateSpeed();
|
float Speed = CalculateSpeed();
|
||||||
if (Speed > 0.f)
|
if (Speed > 0.f)
|
||||||
|
@ -637,17 +633,17 @@ void ABlasterCharacter::HideCameraIfCharacterClose()
|
||||||
if ((FollowCamera->GetComponentLocation() - GetActorLocation()).Size() < CameraThreshold)
|
if ((FollowCamera->GetComponentLocation() - GetActorLocation()).Size() < CameraThreshold)
|
||||||
{
|
{
|
||||||
GetMesh()->SetVisibility(false);
|
GetMesh()->SetVisibility(false);
|
||||||
if (Combat && Combat->EquippedWeapon && Combat->EquippedWeapon->GetWeaponMesh())
|
if (Combat && Combat->PrimaryWeapon && Combat->PrimaryWeapon->GetWeaponMesh())
|
||||||
{
|
{
|
||||||
Combat->EquippedWeapon->GetWeaponMesh()->bOwnerNoSee = true;
|
Combat->PrimaryWeapon->GetWeaponMesh()->bOwnerNoSee = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
GetMesh()->SetVisibility(true);
|
GetMesh()->SetVisibility(true);
|
||||||
if (Combat && Combat->EquippedWeapon && Combat->EquippedWeapon->GetWeaponMesh())
|
if (Combat && Combat->PrimaryWeapon && Combat->PrimaryWeapon->GetWeaponMesh())
|
||||||
{
|
{
|
||||||
Combat->EquippedWeapon->GetWeaponMesh()->bOwnerNoSee = false;
|
Combat->PrimaryWeapon->GetWeaponMesh()->bOwnerNoSee = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -691,10 +687,10 @@ void ABlasterCharacter::UpdateHUDShield()
|
||||||
void ABlasterCharacter::UpdateHUDAmmo()
|
void ABlasterCharacter::UpdateHUDAmmo()
|
||||||
{
|
{
|
||||||
BlasterPlayerController = BlasterPlayerController == nullptr ? Cast<ABlasterPlayerController>(Controller) : BlasterPlayerController;
|
BlasterPlayerController = BlasterPlayerController == nullptr ? Cast<ABlasterPlayerController>(Controller) : BlasterPlayerController;
|
||||||
if (BlasterPlayerController && Combat && Combat->EquippedWeapon)
|
if (BlasterPlayerController && Combat && Combat->PrimaryWeapon)
|
||||||
{
|
{
|
||||||
BlasterPlayerController->SetHUDCarriedAmmo(Combat->CarriedAmmo);
|
BlasterPlayerController->SetHUDCarriedAmmo(Combat->CarriedAmmo);
|
||||||
BlasterPlayerController->SetHUDWeaponAmmo(Combat->EquippedWeapon->GetAmmo());
|
BlasterPlayerController->SetHUDWeaponAmmo(Combat->PrimaryWeapon->GetAmmo());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -775,7 +771,7 @@ void ABlasterCharacter::OnRep_OverlappingWeapon(AWeapon* LastWeapon)
|
||||||
|
|
||||||
bool ABlasterCharacter::IsWeaponEquipped()
|
bool ABlasterCharacter::IsWeaponEquipped()
|
||||||
{
|
{
|
||||||
return Combat && Combat->EquippedWeapon;
|
return Combat && Combat->PrimaryWeapon;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ABlasterCharacter::IsAiming()
|
bool ABlasterCharacter::IsAiming()
|
||||||
|
@ -783,10 +779,10 @@ bool ABlasterCharacter::IsAiming()
|
||||||
return Combat && Combat->bAiming;
|
return Combat && Combat->bAiming;
|
||||||
}
|
}
|
||||||
|
|
||||||
AWeapon* ABlasterCharacter::GetEquippedWeapon()
|
AWeapon* ABlasterCharacter::GetPrimaryWeapon()
|
||||||
{
|
{
|
||||||
if (Combat == nullptr) return nullptr;
|
if (Combat == nullptr) return nullptr;
|
||||||
return Combat->EquippedWeapon;
|
return Combat->PrimaryWeapon;
|
||||||
}
|
}
|
||||||
|
|
||||||
FVector ABlasterCharacter::GetHitTarget() const
|
FVector ABlasterCharacter::GetHitTarget() const
|
||||||
|
|
|
@ -219,7 +219,7 @@ public:
|
||||||
bool IsAiming();
|
bool IsAiming();
|
||||||
FORCEINLINE float GetAO_Yaw() const { return AO_Yaw; }
|
FORCEINLINE float GetAO_Yaw() const { return AO_Yaw; }
|
||||||
FORCEINLINE float GetAO_Pitch() const { return AO_Pitch; }
|
FORCEINLINE float GetAO_Pitch() const { return AO_Pitch; }
|
||||||
AWeapon* GetEquippedWeapon();
|
AWeapon* GetPrimaryWeapon();
|
||||||
FORCEINLINE ETurningInPlace GetTurningInPlace() const { return TurningInPlace; }
|
FORCEINLINE ETurningInPlace GetTurningInPlace() const { return TurningInPlace; }
|
||||||
FVector GetHitTarget() const;
|
FVector GetHitTarget() const;
|
||||||
FORCEINLINE UCameraComponent* GetFollowCamera() const { return FollowCamera; }
|
FORCEINLINE UCameraComponent* GetFollowCamera() const { return FollowCamera; }
|
||||||
|
|
|
@ -24,7 +24,8 @@ void UCombatComponent::GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& Out
|
||||||
{
|
{
|
||||||
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
|
Super::GetLifetimeReplicatedProps(OutLifetimeProps);
|
||||||
|
|
||||||
DOREPLIFETIME(UCombatComponent, EquippedWeapon);
|
DOREPLIFETIME(UCombatComponent, PrimaryWeapon);
|
||||||
|
DOREPLIFETIME(UCombatComponent, SecondaryWeapon);
|
||||||
DOREPLIFETIME(UCombatComponent, bAiming);
|
DOREPLIFETIME(UCombatComponent, bAiming);
|
||||||
DOREPLIFETIME_CONDITION(UCombatComponent, CarriedAmmo, COND_OwnerOnly);
|
DOREPLIFETIME_CONDITION(UCombatComponent, CarriedAmmo, COND_OwnerOnly);
|
||||||
DOREPLIFETIME(UCombatComponent, CombatState);
|
DOREPLIFETIME(UCombatComponent, CombatState);
|
||||||
|
@ -38,7 +39,7 @@ void UCombatComponent::PickupAmmo(EWeaponType WeaponType, int32 AmmoAmount)
|
||||||
CarriedAmmoMap[WeaponType] = FMath::Clamp(CarriedAmmoMap[WeaponType] + AmmoAmount, 0, MaxCarriedAmmo);
|
CarriedAmmoMap[WeaponType] = FMath::Clamp(CarriedAmmoMap[WeaponType] + AmmoAmount, 0, MaxCarriedAmmo);
|
||||||
UpdateCarriedAmmo();
|
UpdateCarriedAmmo();
|
||||||
}
|
}
|
||||||
if (EquippedWeapon && EquippedWeapon->IsEmpty() && EquippedWeapon->GetWeaponType() == WeaponType)
|
if (PrimaryWeapon && PrimaryWeapon->IsEmpty() && PrimaryWeapon->GetWeaponType() == WeaponType)
|
||||||
{
|
{
|
||||||
Reload();
|
Reload();
|
||||||
}
|
}
|
||||||
|
@ -82,7 +83,7 @@ void UCombatComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActo
|
||||||
void UCombatComponent::FireButtonPressed(bool bPressed)
|
void UCombatComponent::FireButtonPressed(bool bPressed)
|
||||||
{
|
{
|
||||||
bFireButtonPressed = bPressed;
|
bFireButtonPressed = bPressed;
|
||||||
if (bFireButtonPressed && EquippedWeapon)
|
if (bFireButtonPressed && PrimaryWeapon)
|
||||||
{
|
{
|
||||||
Fire();
|
Fire();
|
||||||
}
|
}
|
||||||
|
@ -102,7 +103,7 @@ void UCombatComponent::Fire()
|
||||||
{
|
{
|
||||||
bCanFire = false;
|
bCanFire = false;
|
||||||
ServerFire(HitTarget);
|
ServerFire(HitTarget);
|
||||||
if (EquippedWeapon)
|
if (PrimaryWeapon)
|
||||||
{
|
{
|
||||||
CrosshairShootingFactor = .75f;
|
CrosshairShootingFactor = .75f;
|
||||||
}
|
}
|
||||||
|
@ -112,20 +113,20 @@ void UCombatComponent::Fire()
|
||||||
|
|
||||||
void UCombatComponent::StartFireTimer()
|
void UCombatComponent::StartFireTimer()
|
||||||
{
|
{
|
||||||
if (EquippedWeapon == nullptr || Character == nullptr) return;
|
if (PrimaryWeapon == nullptr || Character == nullptr) return;
|
||||||
Character->GetWorldTimerManager().SetTimer(
|
Character->GetWorldTimerManager().SetTimer(
|
||||||
FireTimer,
|
FireTimer,
|
||||||
this,
|
this,
|
||||||
&UCombatComponent::FireTimerFinished,
|
&UCombatComponent::FireTimerFinished,
|
||||||
EquippedWeapon->FireDelay
|
PrimaryWeapon->FireDelay
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UCombatComponent::FireTimerFinished()
|
void UCombatComponent::FireTimerFinished()
|
||||||
{
|
{
|
||||||
if (EquippedWeapon == nullptr) return;
|
if (PrimaryWeapon == nullptr) return;
|
||||||
bCanFire = true;
|
bCanFire = true;
|
||||||
if (bFireButtonPressed && EquippedWeapon->bAutomatic)
|
if (bFireButtonPressed && PrimaryWeapon->bAutomatic)
|
||||||
{
|
{
|
||||||
Fire();
|
Fire();
|
||||||
}
|
}
|
||||||
|
@ -139,18 +140,18 @@ void UCombatComponent::ServerFire_Implementation(const FVector_NetQuantize& Trac
|
||||||
|
|
||||||
void UCombatComponent::MulticastFire_Implementation(const FVector_NetQuantize& TraceHitTarget)
|
void UCombatComponent::MulticastFire_Implementation(const FVector_NetQuantize& TraceHitTarget)
|
||||||
{
|
{
|
||||||
if (EquippedWeapon == nullptr) return;
|
if (PrimaryWeapon == nullptr) return;
|
||||||
if (Character && CombatState == ECombatState::ECS_Reloading && EquippedWeapon->IsShotgun())
|
if (Character && CombatState == ECombatState::ECS_Reloading && PrimaryWeapon->IsShotgun())
|
||||||
{
|
{
|
||||||
Character->PlayFireMontage(bAiming);
|
Character->PlayFireMontage(bAiming);
|
||||||
EquippedWeapon->Fire(TraceHitTarget);
|
PrimaryWeapon->Fire(TraceHitTarget);
|
||||||
CombatState = ECombatState::ECS_Unoccupied;
|
CombatState = ECombatState::ECS_Unoccupied;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (Character && CombatState == ECombatState::ECS_Unoccupied)
|
if (Character && CombatState == ECombatState::ECS_Unoccupied)
|
||||||
{
|
{
|
||||||
Character->PlayFireMontage(bAiming);
|
Character->PlayFireMontage(bAiming);
|
||||||
EquippedWeapon->Fire(TraceHitTarget);
|
PrimaryWeapon->Fire(TraceHitTarget);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,25 +160,50 @@ void UCombatComponent::EquipWeapon(AWeapon* WeaponToEquip)
|
||||||
if (Character == nullptr || WeaponToEquip == nullptr) return;
|
if (Character == nullptr || WeaponToEquip == nullptr) return;
|
||||||
if (CombatState != ECombatState::ECS_Unoccupied) return;
|
if (CombatState != ECombatState::ECS_Unoccupied) return;
|
||||||
|
|
||||||
DropEquippedWeapon();
|
if (PrimaryWeapon != nullptr && SecondaryWeapon == nullptr)
|
||||||
EquippedWeapon = WeaponToEquip;
|
{
|
||||||
EquippedWeapon->SetWeaponState(EWeaponState::EWS_Equipped);
|
EquipSecondaryWeapon(WeaponToEquip);
|
||||||
AttachActorToRightHand(EquippedWeapon);
|
}
|
||||||
EquippedWeapon->SetOwner(Character);
|
else
|
||||||
EquippedWeapon->SetHUDAmmo();
|
{
|
||||||
UpdateCarriedAmmo();
|
EquipPrimaryWeapon(WeaponToEquip);
|
||||||
PlayEquipWeaponSound();
|
}
|
||||||
ReloadEmptyWeapon();
|
|
||||||
|
|
||||||
Character->GetCharacterMovement()->bOrientRotationToMovement = false;
|
Character->GetCharacterMovement()->bOrientRotationToMovement = false;
|
||||||
Character->bUseControllerRotationYaw = true;
|
Character->bUseControllerRotationYaw = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UCombatComponent::DropEquippedWeapon()
|
void UCombatComponent::EquipPrimaryWeapon(AWeapon* WeaponToEquip)
|
||||||
{
|
{
|
||||||
if (EquippedWeapon)
|
if (WeaponToEquip == nullptr) return;
|
||||||
|
|
||||||
|
DropPrimaryWeapon();
|
||||||
|
PrimaryWeapon = WeaponToEquip;
|
||||||
|
PrimaryWeapon->SetWeaponState(EWeaponState::EWS_Equipped);
|
||||||
|
AttachActorToRightHand(PrimaryWeapon);
|
||||||
|
PrimaryWeapon->SetOwner(Character);
|
||||||
|
PrimaryWeapon->SetHUDAmmo();
|
||||||
|
UpdateCarriedAmmo();
|
||||||
|
PlayEquipWeaponSound(PrimaryWeapon);
|
||||||
|
ReloadEmptyWeapon();
|
||||||
|
}
|
||||||
|
|
||||||
|
void UCombatComponent::EquipSecondaryWeapon(AWeapon* WeaponToEquip)
|
||||||
{
|
{
|
||||||
EquippedWeapon->Dropped();
|
if (WeaponToEquip == nullptr) return;
|
||||||
|
|
||||||
|
SecondaryWeapon = WeaponToEquip;
|
||||||
|
SecondaryWeapon->SetWeaponState(EWeaponState::EWS_Equipped);
|
||||||
|
AttachActorToBackpack(WeaponToEquip);
|
||||||
|
PrimaryWeapon->SetOwner(Character);
|
||||||
|
PlayEquipWeaponSound(SecondaryWeapon);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UCombatComponent::DropPrimaryWeapon()
|
||||||
|
{
|
||||||
|
if (PrimaryWeapon)
|
||||||
|
{
|
||||||
|
PrimaryWeapon->Dropped();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -193,8 +219,8 @@ void UCombatComponent::AttachActorToRightHand(AActor* ActorToAttach)
|
||||||
|
|
||||||
void UCombatComponent::AttachActorToLeftHand(AActor* ActorToAttach)
|
void UCombatComponent::AttachActorToLeftHand(AActor* ActorToAttach)
|
||||||
{
|
{
|
||||||
if (Character == nullptr || Character->GetMesh() == nullptr || ActorToAttach == nullptr || EquippedWeapon == nullptr) return;
|
if (Character == nullptr || Character->GetMesh() == nullptr || ActorToAttach == nullptr || PrimaryWeapon == nullptr) return;
|
||||||
bool bUsePistolSocket = EquippedWeapon->IsPistol() || EquippedWeapon->IsSMG();
|
bool bUsePistolSocket = PrimaryWeapon->IsPistol() || PrimaryWeapon->IsSMG();
|
||||||
FName SocketName = bUsePistolSocket ? FName("LeftHandPistolSocket") : FName("LeftHandSocket");
|
FName SocketName = bUsePistolSocket ? FName("LeftHandPistolSocket") : FName("LeftHandSocket");
|
||||||
const USkeletalMeshSocket* HandSocket = Character->GetMesh()->GetSocketByName(SocketName);
|
const USkeletalMeshSocket* HandSocket = Character->GetMesh()->GetSocketByName(SocketName);
|
||||||
if (HandSocket)
|
if (HandSocket)
|
||||||
|
@ -203,12 +229,22 @@ void UCombatComponent::AttachActorToLeftHand(AActor* ActorToAttach)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void UCombatComponent::AttachActorToBackpack(AActor* ActorToAttach)
|
||||||
|
{
|
||||||
|
if (Character == nullptr || Character->GetMesh() == nullptr|| ActorToAttach == nullptr) return;
|
||||||
|
const USkeletalMeshSocket* BackpackSocket = Character->GetMesh()->GetSocketByName(FName("BackpackSocket"));
|
||||||
|
if (BackpackSocket)
|
||||||
|
{
|
||||||
|
BackpackSocket->AttachActor(ActorToAttach, Character->GetMesh());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void UCombatComponent::UpdateCarriedAmmo()
|
void UCombatComponent::UpdateCarriedAmmo()
|
||||||
{
|
{
|
||||||
if (EquippedWeapon == nullptr) return;
|
if (PrimaryWeapon == nullptr) return;
|
||||||
if (CarriedAmmoMap.Contains(EquippedWeapon->GetWeaponType()))
|
if (CarriedAmmoMap.Contains(PrimaryWeapon->GetWeaponType()))
|
||||||
{
|
{
|
||||||
CarriedAmmo = CarriedAmmoMap[EquippedWeapon->GetWeaponType()];
|
CarriedAmmo = CarriedAmmoMap[PrimaryWeapon->GetWeaponType()];
|
||||||
}
|
}
|
||||||
|
|
||||||
Controller = Controller == nullptr ? Cast<ABlasterPlayerController>(Character->Controller) : Controller;
|
Controller = Controller == nullptr ? Cast<ABlasterPlayerController>(Character->Controller) : Controller;
|
||||||
|
@ -218,13 +254,13 @@ void UCombatComponent::UpdateCarriedAmmo()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void UCombatComponent::PlayEquipWeaponSound()
|
void UCombatComponent::PlayEquipWeaponSound(const AWeapon* Weapon)
|
||||||
{
|
{
|
||||||
if (Character && EquippedWeapon && EquippedWeapon->EquipSound)
|
if (Character && Weapon && Weapon->EquipSound)
|
||||||
{
|
{
|
||||||
UGameplayStatics::PlaySoundAtLocation(
|
UGameplayStatics::PlaySoundAtLocation(
|
||||||
this,
|
this,
|
||||||
EquippedWeapon->EquipSound,
|
Weapon->EquipSound,
|
||||||
Character->GetActorLocation()
|
Character->GetActorLocation()
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -232,7 +268,7 @@ void UCombatComponent::PlayEquipWeaponSound()
|
||||||
|
|
||||||
void UCombatComponent::ReloadEmptyWeapon()
|
void UCombatComponent::ReloadEmptyWeapon()
|
||||||
{
|
{
|
||||||
if (EquippedWeapon && EquippedWeapon->IsEmpty())
|
if (PrimaryWeapon && PrimaryWeapon->IsEmpty())
|
||||||
{
|
{
|
||||||
Reload();
|
Reload();
|
||||||
}
|
}
|
||||||
|
@ -248,10 +284,10 @@ void UCombatComponent::Reload()
|
||||||
|
|
||||||
void UCombatComponent::ServerReload_Implementation()
|
void UCombatComponent::ServerReload_Implementation()
|
||||||
{
|
{
|
||||||
if (Character == nullptr || EquippedWeapon == nullptr) return;
|
if (Character == nullptr || PrimaryWeapon == nullptr) return;
|
||||||
|
|
||||||
// return if weapon mag is at max capacity
|
// return if weapon mag is at max capacity
|
||||||
if (EquippedWeapon->GetAmmo() == EquippedWeapon->GetMagCapacity()) return;
|
if (PrimaryWeapon->GetAmmo() == PrimaryWeapon->GetMagCapacity()) return;
|
||||||
|
|
||||||
CombatState = ECombatState::ECS_Reloading;
|
CombatState = ECombatState::ECS_Reloading;
|
||||||
HandleReload();
|
HandleReload();
|
||||||
|
@ -273,38 +309,38 @@ void UCombatComponent::FinishedReloading()
|
||||||
|
|
||||||
void UCombatComponent::UpdateAmmoValues()
|
void UCombatComponent::UpdateAmmoValues()
|
||||||
{
|
{
|
||||||
if (Character == nullptr || EquippedWeapon == nullptr) return;
|
if (Character == nullptr || PrimaryWeapon == nullptr) return;
|
||||||
int32 ReloadAmount = AmountToReload();
|
int32 ReloadAmount = AmountToReload();
|
||||||
if (CarriedAmmoMap.Contains(EquippedWeapon->GetWeaponType()))
|
if (CarriedAmmoMap.Contains(PrimaryWeapon->GetWeaponType()))
|
||||||
{
|
{
|
||||||
CarriedAmmoMap[EquippedWeapon->GetWeaponType()] -= ReloadAmount;
|
CarriedAmmoMap[PrimaryWeapon->GetWeaponType()] -= ReloadAmount;
|
||||||
CarriedAmmo = CarriedAmmoMap[EquippedWeapon->GetWeaponType()];
|
CarriedAmmo = CarriedAmmoMap[PrimaryWeapon->GetWeaponType()];
|
||||||
}
|
}
|
||||||
Controller = Controller == nullptr ? Cast<ABlasterPlayerController>(Character->Controller) : Controller;
|
Controller = Controller == nullptr ? Cast<ABlasterPlayerController>(Character->Controller) : Controller;
|
||||||
if (Controller)
|
if (Controller)
|
||||||
{
|
{
|
||||||
Controller->SetHUDCarriedAmmo(CarriedAmmo);
|
Controller->SetHUDCarriedAmmo(CarriedAmmo);
|
||||||
}
|
}
|
||||||
EquippedWeapon->AddAmmo(-ReloadAmount);
|
PrimaryWeapon->AddAmmo(-ReloadAmount);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UCombatComponent::UpdateShotgunAmmoValues()
|
void UCombatComponent::UpdateShotgunAmmoValues()
|
||||||
{
|
{
|
||||||
if (Character == nullptr || EquippedWeapon == nullptr) return;
|
if (Character == nullptr || PrimaryWeapon == nullptr) return;
|
||||||
|
|
||||||
if (CarriedAmmoMap.Contains(EquippedWeapon->GetWeaponType()))
|
if (CarriedAmmoMap.Contains(PrimaryWeapon->GetWeaponType()))
|
||||||
{
|
{
|
||||||
CarriedAmmoMap[EquippedWeapon->GetWeaponType()] -= 1;
|
CarriedAmmoMap[PrimaryWeapon->GetWeaponType()] -= 1;
|
||||||
CarriedAmmo = CarriedAmmoMap[EquippedWeapon->GetWeaponType()];
|
CarriedAmmo = CarriedAmmoMap[PrimaryWeapon->GetWeaponType()];
|
||||||
}
|
}
|
||||||
Controller = Controller == nullptr ? Cast<ABlasterPlayerController>(Character->Controller) : Controller;
|
Controller = Controller == nullptr ? Cast<ABlasterPlayerController>(Character->Controller) : Controller;
|
||||||
if (Controller)
|
if (Controller)
|
||||||
{
|
{
|
||||||
Controller->SetHUDCarriedAmmo(CarriedAmmo);
|
Controller->SetHUDCarriedAmmo(CarriedAmmo);
|
||||||
}
|
}
|
||||||
EquippedWeapon->AddAmmo(-1);
|
PrimaryWeapon->AddAmmo(-1);
|
||||||
bCanFire = true;
|
bCanFire = true;
|
||||||
if (EquippedWeapon->IsFull() || CarriedAmmo == 0)
|
if (PrimaryWeapon->IsFull() || CarriedAmmo == 0)
|
||||||
{
|
{
|
||||||
JumpToShotgunEnd();
|
JumpToShotgunEnd();
|
||||||
}
|
}
|
||||||
|
@ -323,7 +359,7 @@ void UCombatComponent::JumpToShotgunEnd()
|
||||||
void UCombatComponent::ThrowGrenadeFinished()
|
void UCombatComponent::ThrowGrenadeFinished()
|
||||||
{
|
{
|
||||||
CombatState = ECombatState::ECS_Unoccupied;
|
CombatState = ECombatState::ECS_Unoccupied;
|
||||||
AttachActorToRightHand(EquippedWeapon);
|
AttachActorToRightHand(PrimaryWeapon);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UCombatComponent::LaunchGrenade()
|
void UCombatComponent::LaunchGrenade()
|
||||||
|
@ -375,7 +411,7 @@ void UCombatComponent::OnRep_CombatState()
|
||||||
if (Character && !Character->IsLocallyControlled())
|
if (Character && !Character->IsLocallyControlled())
|
||||||
{
|
{
|
||||||
Character->PlayThrowGrenadeMontage();
|
Character->PlayThrowGrenadeMontage();
|
||||||
AttachActorToLeftHand(EquippedWeapon);
|
AttachActorToLeftHand(PrimaryWeapon);
|
||||||
ShowAttachedGrenade(true);
|
ShowAttachedGrenade(true);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -389,12 +425,12 @@ void UCombatComponent::HandleReload()
|
||||||
|
|
||||||
int32 UCombatComponent::AmountToReload()
|
int32 UCombatComponent::AmountToReload()
|
||||||
{
|
{
|
||||||
if (EquippedWeapon == nullptr) return 0;
|
if (PrimaryWeapon == nullptr) return 0;
|
||||||
int32 RoomInMag = EquippedWeapon->GetMagCapacity() - EquippedWeapon->GetAmmo();
|
int32 RoomInMag = PrimaryWeapon->GetMagCapacity() - PrimaryWeapon->GetAmmo();
|
||||||
|
|
||||||
if (CarriedAmmoMap.Contains(EquippedWeapon->GetWeaponType()))
|
if (CarriedAmmoMap.Contains(PrimaryWeapon->GetWeaponType()))
|
||||||
{
|
{
|
||||||
int32 AmountCarried = CarriedAmmoMap[EquippedWeapon->GetWeaponType()];
|
int32 AmountCarried = CarriedAmmoMap[PrimaryWeapon->GetWeaponType()];
|
||||||
int32 Least = FMath::Min(RoomInMag, AmountCarried);
|
int32 Least = FMath::Min(RoomInMag, AmountCarried);
|
||||||
return FMath::Clamp(RoomInMag, 0, Least);
|
return FMath::Clamp(RoomInMag, 0, Least);
|
||||||
}
|
}
|
||||||
|
@ -404,12 +440,12 @@ int32 UCombatComponent::AmountToReload()
|
||||||
void UCombatComponent::ThrowGrenade()
|
void UCombatComponent::ThrowGrenade()
|
||||||
{
|
{
|
||||||
if (Grenades == 0) return;
|
if (Grenades == 0) return;
|
||||||
if (CombatState != ECombatState::ECS_Unoccupied || EquippedWeapon == nullptr) return;
|
if (CombatState != ECombatState::ECS_Unoccupied || PrimaryWeapon == nullptr) return;
|
||||||
CombatState = ECombatState::ECS_ThrowingGrenade;
|
CombatState = ECombatState::ECS_ThrowingGrenade;
|
||||||
if (Character)
|
if (Character)
|
||||||
{
|
{
|
||||||
Character->PlayThrowGrenadeMontage();
|
Character->PlayThrowGrenadeMontage();
|
||||||
AttachActorToLeftHand(EquippedWeapon);
|
AttachActorToLeftHand(PrimaryWeapon);
|
||||||
ShowAttachedGrenade(true);
|
ShowAttachedGrenade(true);
|
||||||
}
|
}
|
||||||
if (Character && !Character->HasAuthority())
|
if (Character && !Character->HasAuthority())
|
||||||
|
@ -430,7 +466,7 @@ void UCombatComponent::ServerThrowGrenade_Implementation()
|
||||||
if (Character)
|
if (Character)
|
||||||
{
|
{
|
||||||
Character->PlayThrowGrenadeMontage();
|
Character->PlayThrowGrenadeMontage();
|
||||||
AttachActorToLeftHand(EquippedWeapon);
|
AttachActorToLeftHand(PrimaryWeapon);
|
||||||
ShowAttachedGrenade(true);
|
ShowAttachedGrenade(true);
|
||||||
}
|
}
|
||||||
Grenades = FMath::Clamp(Grenades -1, 0, MaxGrenades);
|
Grenades = FMath::Clamp(Grenades -1, 0, MaxGrenades);
|
||||||
|
@ -459,15 +495,25 @@ void UCombatComponent::ShowAttachedGrenade(bool bShowGrenade)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void UCombatComponent::OnRep_EquippedWeapon()
|
void UCombatComponent::OnRep_PrimaryWeapon()
|
||||||
{
|
{
|
||||||
if (EquippedWeapon && Character)
|
if (PrimaryWeapon && Character)
|
||||||
{
|
{
|
||||||
EquippedWeapon->SetWeaponState(EWeaponState::EWS_Equipped);
|
PrimaryWeapon->SetWeaponState(EWeaponState::EWS_Equipped);
|
||||||
AttachActorToRightHand(EquippedWeapon);
|
AttachActorToRightHand(PrimaryWeapon);
|
||||||
Character->GetCharacterMovement()->bOrientRotationToMovement = false;
|
Character->GetCharacterMovement()->bOrientRotationToMovement = false;
|
||||||
Character->bUseControllerRotationYaw = true;
|
Character->bUseControllerRotationYaw = true;
|
||||||
PlayEquipWeaponSound();
|
PlayEquipWeaponSound(PrimaryWeapon);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void UCombatComponent::OnRep_SecondaryWeapon()
|
||||||
|
{
|
||||||
|
if (SecondaryWeapon && Character)
|
||||||
|
{
|
||||||
|
SecondaryWeapon->SetWeaponState(EWeaponState::EWS_Equipped);
|
||||||
|
AttachActorToBackpack(SecondaryWeapon);
|
||||||
|
PlayEquipWeaponSound(SecondaryWeapon);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -530,13 +576,13 @@ void UCombatComponent::SetHUDCrosshairs(float DeltaTime)
|
||||||
HUD = HUD == nullptr ? Cast<ABlasterHUD>(Controller->GetHUD()) : HUD;
|
HUD = HUD == nullptr ? Cast<ABlasterHUD>(Controller->GetHUD()) : HUD;
|
||||||
if (HUD)
|
if (HUD)
|
||||||
{
|
{
|
||||||
if (EquippedWeapon)
|
if (PrimaryWeapon)
|
||||||
{
|
{
|
||||||
HUDPackage.CrosshairsCenter = EquippedWeapon->CrosshairsCenter;
|
HUDPackage.CrosshairsCenter = PrimaryWeapon->CrosshairsCenter;
|
||||||
HUDPackage.CrosshairsLeft = EquippedWeapon->CrosshairsLeft;
|
HUDPackage.CrosshairsLeft = PrimaryWeapon->CrosshairsLeft;
|
||||||
HUDPackage.CrosshairsRight = EquippedWeapon->CrosshairsRight;
|
HUDPackage.CrosshairsRight = PrimaryWeapon->CrosshairsRight;
|
||||||
HUDPackage.CrosshairsBottom = EquippedWeapon->CrosshairsBottom;
|
HUDPackage.CrosshairsBottom = PrimaryWeapon->CrosshairsBottom;
|
||||||
HUDPackage.CrosshairsTop = EquippedWeapon->CrosshairsTop;
|
HUDPackage.CrosshairsTop = PrimaryWeapon->CrosshairsTop;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -590,11 +636,11 @@ void UCombatComponent::SetHUDCrosshairs(float DeltaTime)
|
||||||
|
|
||||||
void UCombatComponent::InterpFOV(float DeltaTime)
|
void UCombatComponent::InterpFOV(float DeltaTime)
|
||||||
{
|
{
|
||||||
if (EquippedWeapon == nullptr) return;
|
if (PrimaryWeapon == nullptr) return;
|
||||||
|
|
||||||
if (bAiming)
|
if (bAiming)
|
||||||
{
|
{
|
||||||
CurrentFOV = FMath::FInterpTo(CurrentFOV, EquippedWeapon->GetZoomedFOV(), DeltaTime, EquippedWeapon->GetZoomInterpSpeed());
|
CurrentFOV = FMath::FInterpTo(CurrentFOV, PrimaryWeapon->GetZoomedFOV(), DeltaTime, PrimaryWeapon->GetZoomInterpSpeed());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -608,14 +654,14 @@ void UCombatComponent::InterpFOV(float DeltaTime)
|
||||||
|
|
||||||
void UCombatComponent::SetAiming(bool bIsAiming)
|
void UCombatComponent::SetAiming(bool bIsAiming)
|
||||||
{
|
{
|
||||||
if (Character == nullptr || EquippedWeapon == nullptr) return;
|
if (Character == nullptr || PrimaryWeapon == nullptr) return;
|
||||||
bAiming = bIsAiming;
|
bAiming = bIsAiming;
|
||||||
ServerSetAiming(bIsAiming);
|
ServerSetAiming(bIsAiming);
|
||||||
if (Character)
|
if (Character)
|
||||||
{
|
{
|
||||||
Character->GetCharacterMovement()->MaxWalkSpeed = bIsAiming ? AimWalkSpeed : BaseWalkSpeed;
|
Character->GetCharacterMovement()->MaxWalkSpeed = bIsAiming ? AimWalkSpeed : BaseWalkSpeed;
|
||||||
}
|
}
|
||||||
if (Character->IsLocallyControlled() && EquippedWeapon->IsSniper())
|
if (Character->IsLocallyControlled() && PrimaryWeapon->IsSniper())
|
||||||
{
|
{
|
||||||
Character->ShowSniperScopeWidget(bIsAiming);
|
Character->ShowSniperScopeWidget(bIsAiming);
|
||||||
}
|
}
|
||||||
|
@ -632,10 +678,10 @@ void UCombatComponent::ServerSetAiming_Implementation(bool bIsAiming)
|
||||||
|
|
||||||
bool UCombatComponent::CanFire()
|
bool UCombatComponent::CanFire()
|
||||||
{
|
{
|
||||||
if (EquippedWeapon == nullptr) return false;
|
if (PrimaryWeapon == nullptr) return false;
|
||||||
if (EquippedWeapon->IsEmpty()) return false;
|
if (PrimaryWeapon->IsEmpty()) return false;
|
||||||
if (!bCanFire) return false;
|
if (!bCanFire) return false;
|
||||||
if (CombatState == ECombatState::ECS_Reloading && EquippedWeapon->GetWeaponType() == EWeaponType::EWT_Shotgun) return true;
|
if (CombatState == ECombatState::ECS_Reloading && PrimaryWeapon->GetWeaponType() == EWeaponType::EWT_Shotgun) return true;
|
||||||
return CombatState == ECombatState::ECS_Unoccupied;
|
return CombatState == ECombatState::ECS_Unoccupied;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -647,8 +693,8 @@ void UCombatComponent::OnRep_CarriedAmmo()
|
||||||
Controller->SetHUDCarriedAmmo(CarriedAmmo);
|
Controller->SetHUDCarriedAmmo(CarriedAmmo);
|
||||||
}
|
}
|
||||||
bool bJumpToShotgunEnd = CombatState == ECombatState::ECS_Reloading &&
|
bool bJumpToShotgunEnd = CombatState == ECombatState::ECS_Reloading &&
|
||||||
EquippedWeapon != nullptr &&
|
PrimaryWeapon != nullptr &&
|
||||||
EquippedWeapon->GetWeaponType() == EWeaponType::EWT_Shotgun &&
|
PrimaryWeapon->GetWeaponType() == EWeaponType::EWT_Shotgun &&
|
||||||
CarriedAmmo == 0;
|
CarriedAmmo == 0;
|
||||||
|
|
||||||
if (bJumpToShotgunEnd)
|
if (bJumpToShotgunEnd)
|
||||||
|
|
|
@ -55,7 +55,10 @@ protected:
|
||||||
void ServerSetAiming(bool bIsAiming);
|
void ServerSetAiming(bool bIsAiming);
|
||||||
|
|
||||||
UFUNCTION()
|
UFUNCTION()
|
||||||
void OnRep_EquippedWeapon();
|
void OnRep_PrimaryWeapon();
|
||||||
|
UFUNCTION()
|
||||||
|
void OnRep_SecondaryWeapon();
|
||||||
|
|
||||||
void Fire();
|
void Fire();
|
||||||
|
|
||||||
UFUNCTION(Server, Reliable)
|
UFUNCTION(Server, Reliable)
|
||||||
|
@ -82,23 +85,31 @@ protected:
|
||||||
UPROPERTY(EditAnywhere)
|
UPROPERTY(EditAnywhere)
|
||||||
TSubclassOf<class AProjectile> GrenadeClass;
|
TSubclassOf<class AProjectile> GrenadeClass;
|
||||||
|
|
||||||
void DropEquippedWeapon();
|
void DropPrimaryWeapon();
|
||||||
void AttachActorToRightHand(AActor* ActorToAttach);
|
void AttachActorToRightHand(AActor* ActorToAttach);
|
||||||
void AttachActorToLeftHand(AActor* ActorToAttach);
|
void AttachActorToLeftHand(AActor* ActorToAttach);
|
||||||
|
void AttachActorToBackpack(AActor* ActorToAttach);
|
||||||
void UpdateCarriedAmmo();
|
void UpdateCarriedAmmo();
|
||||||
void PlayEquipWeaponSound();
|
void PlayEquipWeaponSound(const AWeapon* Weapon);
|
||||||
void ReloadEmptyWeapon();
|
void ReloadEmptyWeapon();
|
||||||
void ShowAttachedGrenade(bool bShowGrenade);
|
void ShowAttachedGrenade(bool bShowGrenade);
|
||||||
|
void EquipPrimaryWeapon(AWeapon* WeaponToEquip);
|
||||||
|
void EquipSecondaryWeapon(AWeapon* WeaponToEquip);
|
||||||
private:
|
private:
|
||||||
UPROPERTY()
|
UPROPERTY()
|
||||||
class ABlasterCharacter* Character;
|
ABlasterCharacter* Character;
|
||||||
|
|
||||||
UPROPERTY()
|
UPROPERTY()
|
||||||
class ABlasterPlayerController* Controller;
|
class ABlasterPlayerController* Controller;
|
||||||
UPROPERTY()
|
|
||||||
class ABlasterHUD* HUD;
|
|
||||||
|
|
||||||
UPROPERTY(ReplicatedUsing=OnRep_EquippedWeapon)
|
UPROPERTY()
|
||||||
class AWeapon* EquippedWeapon;
|
ABlasterHUD* HUD;
|
||||||
|
|
||||||
|
UPROPERTY(ReplicatedUsing=OnRep_PrimaryWeapon)
|
||||||
|
AWeapon* PrimaryWeapon;
|
||||||
|
|
||||||
|
UPROPERTY(ReplicatedUsing=OnRep_SecondaryWeapon)
|
||||||
|
AWeapon* SecondaryWeapon;
|
||||||
|
|
||||||
UPROPERTY(Replicated)
|
UPROPERTY(Replicated)
|
||||||
bool bAiming;
|
bool bAiming;
|
||||||
|
|
|
@ -105,11 +105,16 @@ void AWeapon::OnRep_Owner()
|
||||||
{
|
{
|
||||||
OwnerCharacter = nullptr;
|
OwnerCharacter = nullptr;
|
||||||
OwnerController = nullptr;
|
OwnerController = nullptr;
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
OwnerCharacter = OwnerCharacter == nullptr ? Cast<ABlasterCharacter>(Owner) : OwnerCharacter;
|
||||||
|
if (OwnerCharacter && OwnerCharacter->GetPrimaryWeapon() && OwnerCharacter->GetPrimaryWeapon() == this)
|
||||||
{
|
{
|
||||||
SetHUDAmmo();
|
SetHUDAmmo();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void AWeapon::SetHUDAmmo()
|
void AWeapon::SetHUDAmmo()
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue