AEmitterCameraLensEffectBase* APlayerCameraManager::FindCameraLensEffect(TSubclassOf<AEmitterCameraLensEffectBase> LensEffectEmitterClass) { for (int32 i = 0; i < CameraLensEffects.Num(); ++i) { AEmitterCameraLensEffectBase* LensEffect = CameraLensEffects[i]; if ( !LensEffect->IsPendingKill() && ( (LensEffect->GetClass() == LensEffectEmitterClass) || (LensEffect->EmittersToTreatAsSame.Find(LensEffectEmitterClass) != INDEX_NONE) || (GetDefault<AEmitterCameraLensEffectBase>(LensEffectEmitterClass)->EmittersToTreatAsSame.Find(LensEffect->GetClass()) != INDEX_NONE ) ) ) { return LensEffect; } } return NULL; }
AEmitterCameraLensEffectBase* APlayerCameraManager::AddCameraLensEffect(TSubclassOf<AEmitterCameraLensEffectBase> LensEffectEmitterClass) { if (LensEffectEmitterClass != NULL) { AEmitterCameraLensEffectBase* LensEffect = NULL; if (!GetDefault<AEmitterCameraLensEffectBase>(LensEffectEmitterClass)->bAllowMultipleInstances) { LensEffect = FindCameraLensEffect(LensEffectEmitterClass); if (LensEffect != NULL) { LensEffect->NotifyRetriggered(); } } if (LensEffect == NULL) { // spawn with viewtarget as the owner so bOnlyOwnerSee works as intended FActorSpawnParameters SpawnInfo; SpawnInfo.Owner = PCOwner->GetViewTarget(); SpawnInfo.Instigator = Instigator; SpawnInfo.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn; SpawnInfo.ObjectFlags |= RF_Transient; // We never want to save these into a map AEmitterCameraLensEffectBase const* const EmitterCDO = LensEffectEmitterClass->GetDefaultObject<AEmitterCameraLensEffectBase>(); FVector CamLoc; FRotator CamRot; GetCameraViewPoint(CamLoc, CamRot); FTransform SpawnTransform = AEmitterCameraLensEffectBase::GetAttachedEmitterTransform(EmitterCDO, CamLoc, CamRot, GetFOVAngle()); LensEffect = GetWorld()->SpawnActor<AEmitterCameraLensEffectBase>(LensEffectEmitterClass, SpawnTransform, SpawnInfo); if (LensEffect != NULL) { LensEffect->RegisterCamera(this); CameraLensEffects.Add(LensEffect); } } return LensEffect; } return NULL; }
AEmitterCameraLensEffectBase* APlayerCameraManager::AddCameraLensEffect(TSubclassOf<AEmitterCameraLensEffectBase> LensEffectEmitterClass) { if (LensEffectEmitterClass != NULL) { AEmitterCameraLensEffectBase* LensEffect = NULL; if (!GetDefault<AEmitterCameraLensEffectBase>(LensEffectEmitterClass)->bAllowMultipleInstances) { LensEffect = FindCameraLensEffect(LensEffectEmitterClass); if (LensEffect != NULL) { LensEffect->NotifyRetriggered(); } } if (LensEffect == NULL) { // spawn with viewtarget as the owner so bOnlyOwnerSee works as intended FActorSpawnParameters SpawnInfo; SpawnInfo.Owner = PCOwner->GetViewTarget(); SpawnInfo.Instigator = Instigator; SpawnInfo.bNoCollisionFail = true; SpawnInfo.ObjectFlags |= RF_Transient; // We never want to save these into a map LensEffect = GetWorld()->SpawnActor<AEmitterCameraLensEffectBase>(LensEffectEmitterClass, SpawnInfo); if (LensEffect != NULL) { FVector CamLoc; FRotator CamRot; GetCameraViewPoint(CamLoc, CamRot); LensEffect->RegisterCamera(this); LensEffect->UpdateLocation(CamLoc, CamRot, GetFOVAngle()); CameraLensEffects.Add(LensEffect); } } return LensEffect; } return NULL; }