void CWeaponFX::PlayImpactSound() { IMPACTFX* pImpactFX = m_pAmmo->pImpactFX; if (IsLiquid(m_eCode)) { pImpactFX = m_pAmmo->pUWImpactFX; } if (!pImpactFX) return; if (m_pAmmo->eType == VECTOR) { if ((m_nDetailLevel == RS_LOW) && GetRandom(1, 2) != 1) return; else if ((m_nDetailLevel == RS_MED) && GetRandom(1, 3) == 1) return; } char* pSnd = GetImpactSound(m_eSurfaceType, m_nAmmoId); LTFLOAT fSndRadius = (LTFLOAT) pImpactFX->nSoundRadius; if (pSnd) { uint32 dwFlags = 0; float fPitchShift = 1.0f; if (g_cvarImpactPitchShift.GetFloat() > 0.0f) { dwFlags |= PLAYSOUND_CTRL_PITCH; } uint8 nVolume = IsLiquid(m_eCode) ? 50 : 100; g_pClientSoundMgr->PlaySoundFromPos(m_vPos, pSnd, fSndRadius, SOUNDPRIORITY_MISC_LOW, dwFlags, nVolume, fPitchShift); } }
void AAmethystImpactEffect::PostInitializeComponents() { Super::PostInitializeComponents(); UPhysicalMaterial* HitPhysMat = SurfaceHit.PhysMaterial.Get(); EPhysicalSurface HitSurfaceType = UPhysicalMaterial::DetermineSurfaceType(HitPhysMat); // show particles UParticleSystem* ImpactFX = GetImpactFX(HitSurfaceType); if (ImpactFX) { UGameplayStatics::SpawnEmitterAtLocation(this, ImpactFX, GetActorLocation(), GetActorRotation()); } // play sound USoundCue* ImpactSound = GetImpactSound(HitSurfaceType); if (ImpactSound) { UGameplayStatics::PlaySoundAtLocation(this, ImpactSound, GetActorLocation()); } if (DefaultDecal.DecalMaterial) { FRotator RandomDecalRotation = SurfaceHit.ImpactNormal.Rotation(); RandomDecalRotation.Roll = FMath::FRandRange(-180.0f, 180.0f); UGameplayStatics::SpawnDecalAttached(DefaultDecal.DecalMaterial, FVector(DefaultDecal.DecalSize, DefaultDecal.DecalSize, 1.0f), SurfaceHit.Component.Get(), SurfaceHit.BoneName, SurfaceHit.ImpactPoint, RandomDecalRotation, EAttachLocation::KeepWorldPosition, DefaultDecal.LifeSpan); } }