void AShooterWeapon::OnEquip(const AShooterWeapon* LastWeapon) { AttachMeshToPawn(); bPendingEquip = true; DetermineWeaponState(); // Only play animation if last weapon is valid if (LastWeapon) { float Duration = PlayWeaponAnimation(EquipAnim); if (Duration <= 0.0f) { // failsafe Duration = 0.5f; } EquipStartedTime = GetWorld()->GetTimeSeconds(); EquipDuration = Duration; GetWorldTimerManager().SetTimer(TimerHandle_OnEquipFinished, this, &AShooterWeapon::OnEquipFinished, Duration, false); } else { OnEquipFinished(); } if (MyPawn && MyPawn->IsLocallyControlled()) { PlayWeaponSound(EquipSound); } }
void ASWeapon::OnEquip(bool bPlayAnimation) { bPendingEquip = true; DetermineWeaponState(); if (bPlayAnimation) { float Duration = PlayWeaponAnimation(EquipAnim); if (Duration <= 0.0f) { // Failsafe in case animation is missing Duration = NoEquipAnimDuration; } EquipStartedTime = GetWorld()->TimeSeconds; EquipDuration = Duration; GetWorldTimerManager().SetTimer(EquipFinishedTimerHandle, this, &ASWeapon::OnEquipFinished, Duration, false); } else { /* Immediately finish equipping */ OnEquipFinished(); } if (MyPawn && MyPawn->IsLocallyControlled()) { PlayWeaponSound(EquipSound); } }