Files
UnrealEngineUWP/Engine/Source/Editor/NiagaraEditor/Private/NiagaraScriptFactory.cpp
Ben Marsh 20bf0eb6a1 Updating copyright notices to 2017 (copying from //Tasks/UE4/Dev-Copyright-2017).
#rb none
#lockdown Nick.Penwarden

[CL 3226823 by Ben Marsh in Main branch]
2016-12-08 08:52:44 -05:00

72 lines
2.7 KiB
C++

// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
#include "CoreMinimal.h"
#include "Misc/ConfigCacheIni.h"
#include "Modules/ModuleManager.h"
#include "NiagaraCommon.h"
#include "NiagaraEditorModule.h"
#include "NiagaraScript.h"
#include "EdGraph/EdGraph.h"
#include "NiagaraGraph.h"
#include "NiagaraScriptSource.h"
#include "NiagaraScriptFactoryNew.h"
#include "NiagaraNodeOutput.h"
#define LOCTEXT_NAMESPACE "NiagaraScriptFactory"
UNiagaraScriptFactoryNew::UNiagaraScriptFactoryNew(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
SupportedClass = UNiagaraScript::StaticClass();
bCreateNew = false;
bEditAfterNew = true;
// Check ini to see if we should enable creation
bool bEnableNiagara = false;
GConfig->GetBool(TEXT("Niagara"), TEXT("EnableNiagara"), bEnableNiagara, GEngineIni);
bCreateNew = bEnableNiagara;
}
UObject* UNiagaraScriptFactoryNew::FactoryCreateNew(UClass* Class,UObject* InParent,FName Name,EObjectFlags Flags,UObject* Context,FFeedbackContext* Warn)
{
check(Class->IsChildOf(UNiagaraScript::StaticClass()));
// First allocate runtime script
UNiagaraScript* NewScript = NewObject<UNiagaraScript>(InParent, Class, Name, Flags);
if(NewScript != NULL)
{
// Then allocate editor-only 'source' object
UNiagaraScriptSource* Source = NewObject<UNiagaraScriptSource>(NewScript, NAME_None, RF_Transactional);
if(Source)
{
// Create 'update graph'
UNiagaraGraph* CreatedGraph = NewObject<UNiagaraGraph>(Source, NAME_None, RF_Transactional);
Source->NodeGraph = CreatedGraph;
FGraphNodeCreator<UNiagaraNodeOutput> OutputNodeCreator(*CreatedGraph);
UNiagaraNodeOutput* OutputNode = OutputNodeCreator.CreateNode();
//Automatically add attributes that the current render modules rely on. Not sure what we'll want to do here in the end.
OutputNode->Outputs.Add(FNiagaraVariableInfo(FName(TEXT("Position")), ENiagaraDataType::Vector));
OutputNode->Outputs.Add(FNiagaraVariableInfo(FName(TEXT("Velocity")), ENiagaraDataType::Vector));
OutputNode->Outputs.Add(FNiagaraVariableInfo(FName(TEXT("Acceleration")), ENiagaraDataType::Vector));
OutputNode->Outputs.Add(FNiagaraVariableInfo(FName(TEXT("Rotation")), ENiagaraDataType::Vector));
OutputNode->Outputs.Add(FNiagaraVariableInfo(FName(TEXT("Color")), ENiagaraDataType::Vector));
OutputNode->Outputs.Add(FNiagaraVariableInfo(FName(TEXT("Age")), ENiagaraDataType::Vector));
OutputNodeCreator.Finalize();
// Set pointer in script to source
NewScript->Source = Source;
FNiagaraEditorModule& NiagaraEditorModule = FModuleManager::Get().LoadModuleChecked<FNiagaraEditorModule>(TEXT("NiagaraEditor"));
NiagaraEditorModule.CompileScript(NewScript);
}
}
return NewScript;
}
#undef LOCTEXT_NAMESPACE