DefaultEmitter
DefaultEmitter
#Overview
name: DefaultEmitter
The value of this variable can be defined or overridden in .ini config files. 1
.ini config file referencing this setting variable.
It is referenced in 1
C++ source file.
#Summary
#Setting Variables
#References In INI files
Location: <Workspace>/Engine/Plugins/FX/Niagara/Config/BaseNiagara.ini:63, section: [/Script/NiagaraEditor.NiagaraEditorSettings]
- INI Section:
/Script/NiagaraEditor.NiagaraEditorSettings
- Raw value:
/Niagara/DefaultAssets/DefaultEmitter.DefaultEmitter
- Is Array:
False
#References in C++ code
#Callsites
This variable is referenced in the following C++ source code:
#Loc: <Workspace>/Engine/Plugins/FX/Niagara/Source/NiagaraEditor/Private/Tests/NiagaraEmitterInheritanceTests.cpp:210
Scope: file
Source code excerpt:
bool FNiagaraEditorDiffEmittersWithAddedModulesTest::RunTest(const FString& Parameters)
{
UNiagaraEmitter* DefaultEmitter = FNiagaraEditorTestUtilities::LoadEmitter(TestDataRoot / TEXT("TestEmitter.TestEmitter"));
ASSERT_TRUE(DefaultEmitter != nullptr, TEXT("Could not load default emitter"));
UNiagaraEmitter* EmitterWithAddedModules = FNiagaraEditorTestUtilities::LoadEmitter(TestDataRoot / TEXT("TestAddedModules.TestAddedModules"));
ASSERT_TRUE(EmitterWithAddedModules != nullptr, TEXT("Could not load emitter with added modules"));
// Changes
// Emitter Spawn
// Added SetParticles.NewNiagaraFloat0
// Emitter Update
// Added SetParticles.NewNiagaraFloat1
// Added SetParticles.NewNiagaraFloat2
// Particle Spawn
// Added SetParticles.NewNiagaraFloat3
// Added SetParticles.NewNiagaraFloat4
// Added SetParticles.NewNiagaraFloat5
// Particle Update
// Added SetParticles.NewNiagaraFloat6 (moved 6 -> 4)
// Added SetParticles.NewNiagaraFloat7
// Added SetParticles.NewNiagaraFloat8
// Added SetParticles.NewNiagaraFloat9
FNiagaraEmitterDiffResults DiffResults = FNiagaraScriptMergeManager::Get()->DiffEmitters(*DefaultEmitter, *EmitterWithAddedModules);
ASSERT_TRUE(DiffResults.IsValid(), *FString::Printf(TEXT("Emitter diff failed. Message: %s"), *DiffResults.GetErrorMessagesString()));
FString EmitterSpawnDiffErrors;
bool EmitterSpawnDiffMatches = CheckDiffResults(DiffResults.EmitterSpawnDiffResults, 0, 1, 0, 0, 0, 0, EmitterSpawnDiffErrors);
ASSERT_TRUE(EmitterSpawnDiffMatches, *FString::Printf(TEXT("Script stack diff was wrong.%s"), *EmitterSpawnDiffErrors));
FString EmitterUpdateDiffErrors;
bool EmitterUpdateDiffMatches = CheckDiffResults(DiffResults.EmitterUpdateDiffResults, 0, 2, 0, 0, 0, 0, EmitterUpdateDiffErrors);
ASSERT_TRUE(EmitterUpdateDiffMatches, *FString::Printf(TEXT("Script stack diff was wrong.%s"), *EmitterUpdateDiffErrors));
FString ParticleSpawnDiffErrors;
bool ParticleSpawnDiffMatches = CheckDiffResults(DiffResults.ParticleSpawnDiffResults, 0, 3, 0, 0, 0, 0, ParticleSpawnDiffErrors);
ASSERT_TRUE(ParticleSpawnDiffMatches, *FString::Printf(TEXT("Script stack diff was wrong.%s"), *ParticleSpawnDiffErrors));
FString ParticleUpdateDiffErrors;
bool ParticleUpdateDiffMatches = CheckDiffResults(DiffResults.ParticleUpdateDiffResults, 0, 4, 2, 0, 0, 0, ParticleUpdateDiffErrors);
ASSERT_TRUE(ParticleUpdateDiffMatches, *FString::Printf(TEXT("Script stack diff was wrong.%s"), *ParticleUpdateDiffErrors));
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FNiagaraEditorDiffEmittersWithRemovedModulesTest, "System.Plugins.Niagara.Editor.Inheritance.Diff emitters with removed modules", EAutomationTestFlags::EditorContext | EAutomationTestFlags::CriticalPriority | EAutomationTestFlags::EngineFilter)
bool FNiagaraEditorDiffEmittersWithRemovedModulesTest::RunTest(const FString& Parameters)
{
UNiagaraEmitter* DefaultEmitter = FNiagaraEditorTestUtilities::LoadEmitter(TestDataRoot / TEXT("TestEmitter.TestEmitter"));
ASSERT_TRUE(DefaultEmitter != nullptr, TEXT("Could not load default emitter"));
UNiagaraEmitter* EmitterWithRemovedModules = FNiagaraEditorTestUtilities::LoadEmitter(TestDataRoot / TEXT("TestRemovedModules.TestRemovedModules"));
ASSERT_TRUE(EmitterWithRemovedModules != nullptr, TEXT("Could not load emitter with removed modules"));
// Changes
// Remove EmitterUpdate->SpawnRate
// Remove ParticleUpdate->ApplyVelocity
// Remove ParticleUpdate->ScaleSizeByVelocity
FNiagaraEmitterDiffResults DiffResults = FNiagaraScriptMergeManager::Get()->DiffEmitters(*DefaultEmitter, *EmitterWithRemovedModules);
ASSERT_TRUE(DiffResults.IsValid(), *FString::Printf(TEXT("Emitter diff failed. Message: %s"), *DiffResults.GetErrorMessagesString()));
ASSERT_TRUE(DiffResults.EmitterSpawnDiffResults.IsEmpty(), TEXT("Script stack diff results weren't empty"));
FString EmitterUpdateDiffErrors;
bool EmitterUpdateDiffMatches = CheckDiffResults(DiffResults.EmitterUpdateDiffResults, 1, 0, 0, 0, 0, 0, EmitterUpdateDiffErrors);
ASSERT_TRUE(EmitterUpdateDiffMatches, *FString::Printf(TEXT("Script stack diff was wrong.%s"), *EmitterUpdateDiffErrors));
ASSERT_TRUE(DiffResults.ParticleSpawnDiffResults.IsEmpty(), TEXT("Script stack diff results weren't empty"));
FString ParticleUpdateDiffErrors;
bool ParticleUpdateDiffMatches = CheckDiffResults(DiffResults.ParticleUpdateDiffResults, 2, 0, 0, 0, 0, 0, ParticleUpdateDiffErrors);
ASSERT_TRUE(ParticleUpdateDiffMatches, *FString::Printf(TEXT("Script stack diff was wrong.%s"), *ParticleUpdateDiffErrors));
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FNiagaraEditorDiffEmittersWithMovedModulesTest, "System.Plugins.Niagara.Editor.Inheritance.Diff emitters with moved modules", EAutomationTestFlags::EditorContext | EAutomationTestFlags::CriticalPriority | EAutomationTestFlags::EngineFilter)
bool FNiagaraEditorDiffEmittersWithMovedModulesTest::RunTest(const FString& Parameters)
{
UNiagaraEmitter* DefaultEmitter = FNiagaraEditorTestUtilities::LoadEmitter(TestDataRoot / TEXT("TestEmitter.TestEmitter"));
ASSERT_TRUE(DefaultEmitter != nullptr, TEXT("Could not load default emitter"));
UNiagaraEmitter* EmitterWithMovedModules = FNiagaraEditorTestUtilities::LoadEmitter(TestDataRoot / TEXT("TestMovedModules.TestMovedModules"));
ASSERT_TRUE(EmitterWithMovedModules != nullptr, TEXT("Could not load emitter with Moved modules"));
// Changes
// Emitter Update
// Move SpawnRate 1 -> 0
// Move EmitterLifetime 0 -> 1 (side effect)
// Particle Update
// Move AnimatedColor 2 -> 0 (swap)
// Move Lifetime to index 0 -> 2 (swap)
// Move SclaeSizeByVelocty 5 -> 3
// Move ApplyAcceleration to index 3 -> 4 (side effect)
// Move ApplyVelocity to index 4 -> 5 (side effect)
FNiagaraEmitterDiffResults DiffResults = FNiagaraScriptMergeManager::Get()->DiffEmitters(*DefaultEmitter, *EmitterWithMovedModules);
ASSERT_TRUE(DiffResults.IsValid(), *FString::Printf(TEXT("Emitter diff failed. Message: %s"), *DiffResults.GetErrorMessagesString()));
ASSERT_TRUE(DiffResults.EmitterSpawnDiffResults.IsEmpty(), TEXT("Script stack diff results weren't empty"));
FString EmitterUpdateDiffErrors;
bool EmitterUpdateDiffMatches = CheckDiffResults(DiffResults.EmitterUpdateDiffResults, 0, 0, 2, 0, 0, 0, EmitterUpdateDiffErrors);
ASSERT_TRUE(EmitterUpdateDiffMatches, *FString::Printf(TEXT("Script stack diff was wrong.%s"), *EmitterUpdateDiffErrors));
ASSERT_TRUE(DiffResults.EmitterUpdateDiffResults.MovedBaseModules[0]->GetStackIndex() == 0, TEXT("Diff results moved module indices were wrong."));
ASSERT_TRUE(DiffResults.EmitterUpdateDiffResults.MovedOtherModules[0]->GetStackIndex() == 1, TEXT("Diff results moved module indices were wrong."));
ASSERT_TRUE(DiffResults.EmitterUpdateDiffResults.MovedBaseModules[1]->GetStackIndex() == 1, TEXT("Diff results moved module indices were wrong."));
ASSERT_TRUE(DiffResults.EmitterUpdateDiffResults.MovedOtherModules[1]->GetStackIndex() == 0, TEXT("Diff results moved module indices were wrong."));
ASSERT_TRUE(DiffResults.ParticleSpawnDiffResults.IsEmpty(), TEXT("Script stack diff results weren't empty"));
FString ParticleUpdateDiffErrors;
bool ParticleUpdateDiffMatches = CheckDiffResults(DiffResults.ParticleUpdateDiffResults, 0, 0, 5, 0, 0, 0, ParticleUpdateDiffErrors);
ASSERT_TRUE(ParticleUpdateDiffMatches, *FString::Printf(TEXT("Script stack diff was wrong.%s"), *ParticleUpdateDiffErrors));
ASSERT_TRUE(DiffResults.ParticleUpdateDiffResults.MovedBaseModules[0]->GetStackIndex() == 0, TEXT("Diff results moved module indices were wrong."));
ASSERT_TRUE(DiffResults.ParticleUpdateDiffResults.MovedOtherModules[0]->GetStackIndex() == 2, TEXT("Diff results moved module indices were wrong."));
ASSERT_TRUE(DiffResults.ParticleUpdateDiffResults.MovedBaseModules[1]->GetStackIndex() == 2, TEXT("Diff results moved module indices were wrong."));
ASSERT_TRUE(DiffResults.ParticleUpdateDiffResults.MovedOtherModules[1]->GetStackIndex() == 0, TEXT("Diff results moved module indices were wrong."));
ASSERT_TRUE(DiffResults.ParticleUpdateDiffResults.MovedBaseModules[2]->GetStackIndex() == 3, TEXT("Diff results moved module indices were wrong."));
ASSERT_TRUE(DiffResults.ParticleUpdateDiffResults.MovedOtherModules[2]->GetStackIndex() == 4, TEXT("Diff results moved module indices were wrong."));
ASSERT_TRUE(DiffResults.ParticleUpdateDiffResults.MovedBaseModules[3]->GetStackIndex() == 4, TEXT("Diff results moved module indices were wrong."));
ASSERT_TRUE(DiffResults.ParticleUpdateDiffResults.MovedOtherModules[3]->GetStackIndex() == 5, TEXT("Diff results moved module indices were wrong."));
ASSERT_TRUE(DiffResults.ParticleUpdateDiffResults.MovedBaseModules[4]->GetStackIndex() == 5, TEXT("Diff results moved module indices were wrong."));
ASSERT_TRUE(DiffResults.ParticleUpdateDiffResults.MovedOtherModules[4]->GetStackIndex() == 3, TEXT("Diff results moved module indices were wrong."));
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FNiagaraEditorDiffEmittersWithChangedInputOverridesTest, "System.Plugins.Niagara.Editor.Inheritance.Diff emitters with changed input overrides", EAutomationTestFlags::EditorContext | EAutomationTestFlags::CriticalPriority | EAutomationTestFlags::EngineFilter)
bool FNiagaraEditorDiffEmittersWithChangedInputOverridesTest::RunTest(const FString& Parameters)
{
UNiagaraEmitter* DefaultEmitter = FNiagaraEditorTestUtilities::LoadEmitter(TestDataRoot / TEXT("TestEmitter.TestEmitter"));
ASSERT_TRUE(DefaultEmitter != nullptr, TEXT("Could not load default emitter"));
UNiagaraEmitter* EmitterWithChangedInputs = FNiagaraEditorTestUtilities::LoadEmitter(TestDataRoot / TEXT("TestChangedInputs.TestChangedInputs"));
ASSERT_TRUE(EmitterWithChangedInputs != nullptr, TEXT("Could not load emitter with changed input overrides."));
FNiagaraEmitterDiffResults DiffResults = FNiagaraScriptMergeManager::Get()->DiffEmitters(*DefaultEmitter, *EmitterWithChangedInputs);
ASSERT_TRUE(DiffResults.IsValid(), *FString::Printf(TEXT("Emitter diff failed. Message: %s"), *DiffResults.GetErrorMessagesString()));
FString EmitterUpdateDiffErrors;
// EmitterLifetime->DelayFirstLoopOnly - Reset to default - 1 removed input override.
// EmitterLifetime->DurationRecalcEachLoop - Change local value - 1 added input override.
bool EmitterUpdateDiffMatches = CheckDiffResults(DiffResults.EmitterUpdateDiffResults, 0, 0, 0, 1, 1, 0, EmitterUpdateDiffErrors);
ASSERT_TRUE(EmitterUpdateDiffMatches, *FString::Printf(TEXT("Script stack diff was wrong.%s"), *EmitterUpdateDiffErrors));
FString ParticleSpawnDiffErrors;
// BoxLocation->BoxSize - Change local value (20) - 1 modified input override
// SetParticles.Lifetime->Input - Change to different dynamic input (mod) - 1 modified input override
// SetParticles.SpriteSize - Remove dynamic input (ranged float) - 1 modified input override
// SetParticles.SpriteRotation->Value - Change To Dynamic Input (ranged float) - 1 modified input override
bool ParticleSpawnDiffMatches = CheckDiffResults(DiffResults.ParticleSpawnDiffResults, 0, 0, 0, 0, 0, 4, ParticleSpawnDiffErrors);
ASSERT_TRUE(ParticleSpawnDiffMatches, *FString::Printf(TEXT("Script stack diff was wrong.%s"), *ParticleSpawnDiffErrors));
// Lifetime->Lifetime - Change linked parameter handle - 1 modified input override
// AnimatedColor->Animation - Change curve value - 1 modified input override
FString ParticleUpdateDiffErrors;
bool ParticleUpdateDiffMatches = CheckDiffResults(DiffResults.ParticleUpdateDiffResults, 0, 0, 0, 0, 0, 2, ParticleUpdateDiffErrors);
ASSERT_TRUE(ParticleUpdateDiffMatches, *FString::Printf(TEXT("Script stack diff was wrong.%s"), *ParticleUpdateDiffErrors));
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FNiagaraEditorMergeEmitterWithChangedInputOverridesTest, "System.Plugins.Niagara.Editor.Inheritance.Merge emitter with changed input overrides", EAutomationTestFlags::EditorContext | EAutomationTestFlags::CriticalPriority | EAutomationTestFlags::EngineFilter)
bool FNiagaraEditorMergeEmitterWithChangedInputOverridesTest::RunTest(const FString& Parameters)
{
TSharedRef<FNiagaraScriptMergeManager> MergeManager = FNiagaraScriptMergeManager::Get();
// Changes to source
// Emitter Update
// EmitterLifetime->NextLoopDuration - Changed to 3
// Particle Spawn
// SetParticles.SpriteSize->Input->Minimum - changed to 10
// SetParticles.SpriteRotation - removed.
// UniformDistributionColor - Added and moved up 2 spaces.
// Changes to instance
// Emitter Update
// EmitterLifetime->DelayFirstLoopOnly - Reset to default - 1 removed input override.
// EmitterLifetime->DurationRecalcEachLoop - Change local value - 1 added input override.
// Particle Spawn
// BoxLocation->BoxSize - Change local value (20) - 1 modified input override
// SetParticles.Lifetime->Input - Change to different dynamic input (mod) - 1 modified input override
// SetParticles.SpriteSize - Remove dynamic input (ranged float) - 1 modified input override
// SetParticles.SpriteRotation->Value - Change To Dynamic Input (ranged float) - 1 modified input override
// Particle Update
// Lifetime->Lifetime - Change linked parameter handle - 1 modified input override
// AnimatedColor->Animation - Change curve value - 1 modified input override
UNiagaraEmitter* DefaultEmitter = FNiagaraEditorTestUtilities::LoadEmitter(TestDataRoot / TEXT("TestEmitter.TestEmitter"));
ASSERT_TRUE(DefaultEmitter != nullptr, TEXT("Could not load default emitter"));
UNiagaraEmitter* EmitterWithChangedInputs = FNiagaraEditorTestUtilities::LoadEmitter(TestDataRoot / TEXT("TestChangedInputs.TestChangedInputs"));
ASSERT_TRUE(EmitterWithChangedInputs != nullptr, TEXT("Could not load emitter with changed input overrides."));
UNiagaraEmitter* MergeSourceEmitter = FNiagaraEditorTestUtilities::LoadEmitter(TestDataRoot / TEXT("TestMergeSource.TestMergeSource"));
ASSERT_TRUE(MergeSourceEmitter != nullptr, TEXT("Could not load emitter with changed input overrides merge source."));
UNiagaraEmitter* MergeTargetEmitter = FNiagaraEditorTestUtilities::LoadEmitter(TestDataRoot / TEXT("TestMergeTarget.TestMergeTarget"));
ASSERT_TRUE(MergeTargetEmitter != nullptr, TEXT("Could not load emitter with changed input overrides merge target."));
INiagaraModule::FMergeEmitterResults MergeResults = MergeManager->MergeEmitter(*MergeSourceEmitter, *DefaultEmitter, *EmitterWithChangedInputs);
ASSERT_TRUE(MergeResults.bSucceeded, *FString::Printf(TEXT("Merge failed. Message: %s"), *MergeResults.GetErrorMessagesString()));
ASSERT_TRUE(MergeResults.bModifiedGraph, TEXT("Merge reported success, but reported that the graph wasn't modified."));
FNiagaraEmitterDiffResults MergedEmitterDiffResults = MergeManager->DiffEmitters(*MergeResults.MergedInstance, *MergeTargetEmitter);
ASSERT_TRUE(MergedEmitterDiffResults.EmitterSpawnDiffResults.IsEmpty(), TEXT("Script stack diff results weren't empty"));
ASSERT_TRUE(MergedEmitterDiffResults.EmitterUpdateDiffResults.IsEmpty(), TEXT("Script stack diff results weren't empty"));
ASSERT_TRUE(MergedEmitterDiffResults.ParticleSpawnDiffResults.IsEmpty(), TEXT("Script stack diff results weren't empty"));
ASSERT_TRUE(MergedEmitterDiffResults.ParticleUpdateDiffResults.IsEmpty(), TEXT("Script stack diff results weren't empty"));
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FNiagaraEditorMergeEmitterWithRemovedModulesTest, "System.Plugins.Niagara.Editor.Inheritance.Merge emitter with removed modules", EAutomationTestFlags::EditorContext | EAutomationTestFlags::CriticalPriority | EAutomationTestFlags::EngineFilter)
bool FNiagaraEditorMergeEmitterWithRemovedModulesTest::RunTest(const FString& Parameters)
{
TSharedRef<FNiagaraScriptMergeManager> MergeManager = FNiagaraScriptMergeManager::Get();
// Changes to source
// Emitter Update
// EmitterLifetime->NextLoopDuration - Changed to 3
// Particle Spawn
// SetParticles.SpriteSize->Input->Minimum - changed to 10
// SetParticles.SpriteRotation - removed.
// UniformDistributionColor - Added and moved up 2 spaces.
// Changes to instance
// Emitter Update
// Remove SpawnRate
// Particle Update
// Remove ApplyVelocity
// Remove ScaleSizeByVelocity
UNiagaraEmitter* DefaultEmitter = FNiagaraEditorTestUtilities::LoadEmitter(TestDataRoot / TEXT("TestEmitter.TestEmitter"));
ASSERT_TRUE(DefaultEmitter != nullptr, TEXT("Could not load default emitter"));
UNiagaraEmitter* EmitterWithRemovedModules = FNiagaraEditorTestUtilities::LoadEmitter(TestDataRoot / TEXT("TestRemovedModules.TestRemovedModules"));
ASSERT_TRUE(EmitterWithRemovedModules != nullptr, TEXT("Could not load emitter with removed modules."));
UNiagaraEmitter* MergeSourceEmitter = FNiagaraEditorTestUtilities::LoadEmitter(TestDataRoot / TEXT("TestMergeSource.TestMergeSource"));
ASSERT_TRUE(MergeSourceEmitter != nullptr, TEXT("Could not load emitter with removed modules merge source."));
UNiagaraEmitter* MergeTargetEmitter = FNiagaraEditorTestUtilities::LoadEmitter(TestDataRoot / TEXT("RemovedModulesMergeTarget.RemovedModulesMergeTarget"));
ASSERT_TRUE(MergeTargetEmitter != nullptr, TEXT("Could not load emitter with removed modules merge target."));
INiagaraModule::FMergeEmitterResults MergeResults = MergeManager->MergeEmitter(*MergeSourceEmitter, *DefaultEmitter, *EmitterWithRemovedModules);
ASSERT_TRUE(MergeResults.bSucceeded, *FString::Printf(TEXT("Merge failed. Message: %s"), *MergeResults.GetErrorMessagesString()));
ASSERT_TRUE(MergeResults.bModifiedGraph, TEXT("Merge reported success, but reported that the graph wasn't modified."));
FNiagaraEmitterDiffResults MergedEmitterDiffResults = MergeManager->DiffEmitters(*MergeResults.MergedInstance, *MergeTargetEmitter);
ASSERT_TRUE(MergedEmitterDiffResults.EmitterSpawnDiffResults.IsEmpty(), TEXT("Script stack diff results weren't empty"));
ASSERT_TRUE(MergedEmitterDiffResults.EmitterUpdateDiffResults.IsEmpty(), TEXT("Script stack diff results weren't empty"));
ASSERT_TRUE(MergedEmitterDiffResults.ParticleSpawnDiffResults.IsEmpty(), TEXT("Script stack diff results weren't empty"));
ASSERT_TRUE(MergedEmitterDiffResults.ParticleUpdateDiffResults.IsEmpty(), TEXT("Script stack diff results weren't empty"));
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FNiagaraEditorMergeEmitterWithAddedModulesTest, "System.Plugins.Niagara.Editor.Inheritance.Merge emitter with added modules", EAutomationTestFlags::EditorContext | EAutomationTestFlags::CriticalPriority | EAutomationTestFlags::EngineFilter)
bool FNiagaraEditorMergeEmitterWithAddedModulesTest::RunTest(const FString& Parameters)
{
TSharedRef<FNiagaraScriptMergeManager> MergeManager = FNiagaraScriptMergeManager::Get();
// Changes to source
// Emitter Update
// EmitterLifetime->NextLoopDuration - Changed to 3
// Particle Spawn
// SetParticles.SpriteSize->Input->Minimum - changed to 10
// SetParticles.SpriteRotation - removed.
// UniformDistributionColor - Added and moved up 2 spaces.
// Changes to instance
// Emitter Spawn
// Added SetParticles.NewNiagaraFloat0
// Emitter Update
// Added SetParticles.NewNiagaraFloat1
// Added SetParticles.NewNiagaraFloat2
// Particle Spawn
// Added SetParticles.NewNiagaraFloat3
// Added SetParticles.NewNiagaraFloat4
// Added SetParticles.NewNiagaraFloat5
// Particle Update
// Added SetParticles.NewNiagaraFloat6 (moved 6 -> 4)
// Added SetParticles.NewNiagaraFloat7
// Added SetParticles.NewNiagaraFloat8
// Added SetParticles.NewNiagaraFloat9
UNiagaraEmitter* DefaultEmitter = FNiagaraEditorTestUtilities::LoadEmitter(TestDataRoot / TEXT("TestEmitter.TestEmitter"));
ASSERT_TRUE(DefaultEmitter != nullptr, TEXT("Could not load default emitter"));
UNiagaraEmitter* EmitterWithAddedModules = FNiagaraEditorTestUtilities::LoadEmitter(TestDataRoot / TEXT("TestAddedModules.TestAddedModules"));
ASSERT_TRUE(EmitterWithAddedModules != nullptr, TEXT("Could not load emitter with added modules."));
UNiagaraEmitter* MergeSourceEmitter = FNiagaraEditorTestUtilities::LoadEmitter(TestDataRoot / TEXT("TestMergeSource.TestMergeSource"));
ASSERT_TRUE(MergeSourceEmitter != nullptr, TEXT("Could not load emitter with added modules merge source."));
UNiagaraEmitter* MergeTargetEmitter = FNiagaraEditorTestUtilities::LoadEmitter(TestDataRoot / TEXT("AddedModulesMergeTarget.AddedModulesMergeTarget"));
ASSERT_TRUE(MergeTargetEmitter != nullptr, TEXT("Could not load emitter with added modules merge target."));
INiagaraModule::FMergeEmitterResults MergeResults = MergeManager->MergeEmitter(*MergeSourceEmitter, *DefaultEmitter, *EmitterWithAddedModules);
ASSERT_TRUE(MergeResults.bSucceeded, *FString::Printf(TEXT("Merge failed. Message: %s"), *MergeResults.GetErrorMessagesString()));
ASSERT_TRUE(MergeResults.bModifiedGraph, TEXT("Merge reported success, but reported that the graph wasn't modified."));
FNiagaraEmitterDiffResults MergedEmitterDiffResults = MergeManager->DiffEmitters(*MergeResults.MergedInstance, *MergeTargetEmitter);
// We don't end up with an empty diff here because the Guids for the added modules in the instance and target won't
// match. Instead we verify that they are at the correct index and the correct nodes.
// Emitter Spawn
FString EmitterSpawnDiffErrors;
bool EmitterSpawnDiffMatches = CheckDiffResults(MergedEmitterDiffResults.EmitterSpawnDiffResults, 1, 1, 0, 0, 0, 0, EmitterSpawnDiffErrors);
ASSERT_TRUE(EmitterSpawnDiffMatches, *FString::Printf(TEXT("Script stack diff was wrong.%s"), *EmitterSpawnDiffErrors));
FString EmitterSpawnModuleListErrors;
bool EmitterSpawnModuleListsMatch = CheckModuleListsMatch(
MergedEmitterDiffResults.EmitterSpawnDiffResults.RemovedBaseModules, MergedEmitterDiffResults.EmitterSpawnDiffResults.AddedOtherModules,
EmitterSpawnModuleListErrors);
ASSERT_TRUE(EmitterSpawnModuleListsMatch, *FString::Printf(TEXT("Added and removed module lists were different: %s"), *EmitterSpawnModuleListErrors));
// Emitter Update
FString EmitterUpdateDiffErrors;
bool EmitterUpdateDiffMatches = CheckDiffResults(MergedEmitterDiffResults.EmitterUpdateDiffResults, 2, 2, 0, 0, 0, 0, EmitterUpdateDiffErrors);
ASSERT_TRUE(EmitterUpdateDiffMatches, *FString::Printf(TEXT("Script stack diff was wrong.%s"), *EmitterUpdateDiffErrors));
FString EmitterUpdateModuleListErrors;
bool EmitterUpdateModuleListsMatch = CheckModuleListsMatch(
MergedEmitterDiffResults.EmitterUpdateDiffResults.RemovedBaseModules, MergedEmitterDiffResults.EmitterUpdateDiffResults.AddedOtherModules,
EmitterUpdateModuleListErrors);
ASSERT_TRUE(EmitterUpdateModuleListsMatch, *FString::Printf(TEXT("Added and removed module lists were different: %s"), *EmitterUpdateModuleListErrors));
// Particle Spawn
FString ParticleSpawnDiffErrors;
bool ParticleSpawnDiffMatches = CheckDiffResults(MergedEmitterDiffResults.ParticleSpawnDiffResults, 3, 3, 0, 0, 0, 0, ParticleSpawnDiffErrors);
ASSERT_TRUE(ParticleSpawnDiffMatches, *FString::Printf(TEXT("Script stack diff was wrong.%s"), *ParticleSpawnDiffErrors));
FString ParticleSpawnModuleListErrors;
bool ParticleSpawnModuleListsMatch = CheckModuleListsMatch(
MergedEmitterDiffResults.ParticleSpawnDiffResults.RemovedBaseModules, MergedEmitterDiffResults.ParticleSpawnDiffResults.AddedOtherModules,
ParticleSpawnModuleListErrors);
ASSERT_TRUE(ParticleSpawnModuleListsMatch, *FString::Printf(TEXT("Added and removed module lists were different: %s"), *ParticleSpawnModuleListErrors));
// Particle Update
FString ParticleUpdateDiffErrors;
bool ParticleUpdateDiffMatches = CheckDiffResults(MergedEmitterDiffResults.ParticleUpdateDiffResults, 4, 4, 0, 0, 0, 0, ParticleUpdateDiffErrors);
ASSERT_TRUE(ParticleUpdateDiffMatches, *FString::Printf(TEXT("Script stack diff was wrong.%s"), *ParticleUpdateDiffErrors));
FString ParticleUpdateModuleListErrors;
bool ParticleUpdateModuleListsMatch = CheckModuleListsMatch(
MergedEmitterDiffResults.ParticleUpdateDiffResults.RemovedBaseModules, MergedEmitterDiffResults.ParticleUpdateDiffResults.AddedOtherModules,
ParticleUpdateModuleListErrors);
ASSERT_TRUE(ParticleUpdateModuleListsMatch, *FString::Printf(TEXT("Added and removed module lists were different: %s"), *ParticleUpdateModuleListErrors));
return true;
}
IMPLEMENT_SIMPLE_AUTOMATION_TEST(FNiagaraEditorMergeEmitterWithModifiedDuplicateDynamicInptus, "System.Plugins.Niagara.Editor.Inheritance.Merge Emitter With Modified Duplicate Dynamic Inptus", EAutomationTestFlags::EditorContext | EAutomationTestFlags::CriticalPriority | EAutomationTestFlags::EngineFilter)
bool FNiagaraEditorMergeEmitterWithModifiedDuplicateDynamicInptus::RunTest(const FString& Parameters)
{
TSharedRef<FNiagaraScriptMergeManager> MergeManager = FNiagaraScriptMergeManager::Get();
FString SubDirectory = "ModifiedDuplicateDynamicInputs";
UNiagaraEmitter* OriginalSourceEmitter = FNiagaraEditorTestUtilities::LoadEmitter(TestDataRoot / SubDirectory / TEXT("OriginalSource.OriginalSource"));
ASSERT_TRUE(OriginalSourceEmitter != nullptr, TEXT("Could not load original source emitter"));
UNiagaraEmitter* InstanceEmitter = FNiagaraEditorTestUtilities::LoadEmitter(TestDataRoot / SubDirectory / TEXT("Instance.Instance"));
ASSERT_TRUE(InstanceEmitter != nullptr, TEXT("Could not load instance emitter"));
UNiagaraEmitter* NewSourceEmitter = FNiagaraEditorTestUtilities::LoadEmitter(TestDataRoot / SubDirectory / TEXT("NewSource.NewSource"));
ASSERT_TRUE(NewSourceEmitter != nullptr, TEXT("Could not load new source emitter"));
UNiagaraEmitter* MergedEmitter = FNiagaraEditorTestUtilities::LoadEmitter(TestDataRoot / SubDirectory / TEXT("Merged.Merged"));
ASSERT_TRUE(MergedEmitter != nullptr, TEXT("Could not load new source emitter"));
INiagaraModule::FMergeEmitterResults MergeResults = MergeManager->MergeEmitter(*NewSourceEmitter, *OriginalSourceEmitter, *InstanceEmitter);
ASSERT_TRUE(MergeResults.bSucceeded, *FString::Printf(TEXT("Merge failed. Message: %s"), *MergeResults.GetErrorMessagesString()));
ASSERT_TRUE(MergeResults.bModifiedGraph, TEXT("Merge reported success, but reported that the graph wasn't modified."));
FNiagaraEmitterDiffResults MergedEmitterDiffResults = MergeManager->DiffEmitters(*MergeResults.MergedInstance, *MergedEmitter);
ASSERT_TRUE(MergedEmitterDiffResults.IsEmpty(), TEXT("Actual merged emitter was different from the expected merged emitter"));
return true;
}
*/