void AWeapon::Equip(AMutagenCharacter* entity){ AttachMeshToPawn(); bPendingEquip = true; DetermineWeaponState(); float duration = PlayWeaponAnimation(equipAnimation); if (duration <= 0.0f) { duration = 0.5f; } EquipStartedTime = GetWorld()->GetTimeSeconds(); EquipDuration = duration; //GetWorldTimerManager().SetTimer(this, &AWeapon::OnEquipFinished, duration, false); GetWorldTimerManager().SetTimer(equipTimerHandle, this, &AWeapon::OnEquipFinished, duration, false); if (GetItemOwner() && GetItemOwner()->IsLocallyControlled()) { //play weapon equip sound } }
void ASWeapon::OnEquip() { AttachMeshToPawn(); bPendingEquip = true; DetermineWeaponState(); float Duration = PlayWeaponAnimation(EquipAnim); if (Duration <= 0.0f) { // Failsafe Duration = 0.5f; } EquipStartedTime = GetWorld()->TimeSeconds; EquipDuration = Duration; GetWorldTimerManager().SetTimer(EquipFinishedTimerHandle, this, &ASWeapon::OnEquipFinished, Duration, false); if (MyPawn && MyPawn->IsLocallyControlled()) { PlayWeaponSound(EquipSound); } }
void AShooterWeapon::SimulateWeaponFire() { if (Role == ROLE_Authority && CurrentState != EWeaponState::Firing) { return; } if (MuzzleFX) { USkeletalMeshComponent* UseWeaponMesh = GetWeaponMesh(); if (!bLoopedMuzzleFX || MuzzlePSC == NULL) { // Split screen requires we create 2 effects. One that we see and one that the other player sees. if( (MyPawn != NULL ) && ( MyPawn->IsLocallyControlled() == true ) ) { AController* PlayerCon = MyPawn->GetController(); if( PlayerCon != NULL ) { Mesh1P->GetSocketLocation(MuzzleAttachPoint); MuzzlePSC = UGameplayStatics::SpawnEmitterAttached(MuzzleFX, Mesh1P, MuzzleAttachPoint); MuzzlePSC->bOwnerNoSee = false; MuzzlePSC->bOnlyOwnerSee = true; Mesh3P->GetSocketLocation(MuzzleAttachPoint); MuzzlePSCSecondary = UGameplayStatics::SpawnEmitterAttached(MuzzleFX, Mesh3P, MuzzleAttachPoint); MuzzlePSCSecondary->bOwnerNoSee = true; MuzzlePSCSecondary->bOnlyOwnerSee = false; } } else { MuzzlePSC = UGameplayStatics::SpawnEmitterAttached(MuzzleFX, UseWeaponMesh, MuzzleAttachPoint); } } } if (!bLoopedFireAnim || !bPlayingFireAnim) { PlayWeaponAnimation(FireAnim); bPlayingFireAnim = true; } if (bLoopedFireSound) { if (FireAC == NULL) { FireAC = PlayWeaponSound(FireLoopSound); } } else { PlayWeaponSound(FireSound); } AShooterPlayerController* PC = (MyPawn != NULL) ? Cast<AShooterPlayerController>(MyPawn->Controller) : NULL; if (PC != NULL && PC->IsLocalController()) { if (FireCameraShake != NULL) { PC->ClientPlayCameraShake(FireCameraShake, 1); } if (FireForceFeedback != NULL) { PC->ClientPlayForceFeedback(FireForceFeedback, false, "Weapon"); } } }