Files
UnrealEngineUWP/Engine/Source/Runtime/Niagara/NiagaraScriptConstantData.h
Simon Tovey 3fa40ac5b0 Additional Niagara BC fix.
Was getting warnings about duplicate property name. Renamed for now. Will rename back once data is updated.

#codereview olaf.piesche

[CL 2592127 by Simon Tovey in Main branch]
2015-06-18 12:16:43 -04:00

103 lines
3.5 KiB
C++

// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "NiagaraConstantSet.h"
#include "NiagaraScriptConstantData.generated.h"
USTRUCT()
struct FNiagaraScriptConstantData
{
GENERATED_USTRUCT_BODY()
/** The set of external constants for this script. */
UPROPERTY()
FDeprecatedNiagaraConstants ExternalConstants_DEPRECATED;
UPROPERTY()
FDeprecatedNiagaraConstants InternalConstants_DEPRECATED;
/** Constants driven by the system. Named New for BC reasons. Once all data is updated beyond VER_UE4_NIAGARA_DATA_OBJECT_DEV_UI_FIX. Get rid of the deprecated consts and rename the New. */
UPROPERTY()
FNiagaraConstants ExternalConstantsNew;
/** The set of internal constants for this script. Named New for BC reasons. Once all data is updated beyond VER_UE4_NIAGARA_DATA_OBJECT_DEV_UI_FIX. Get rid of the deprecated consts and rename the New. */
UPROPERTY()
FNiagaraConstants InternalConstantsNew;
void Empty()
{
ExternalConstantsNew.Empty();
InternalConstantsNew.Empty();
}
FNiagaraConstants& GetExternalConstants(){ return ExternalConstantsNew; }
/** Fill a constants table ready for use in an update or spawn. */
void FillConstantTable(const FNiagaraConstantMap& ExternalConstantsMap, TArray<FVector4>& OutConstantTable, TArray<UNiagaraDataObject *> &DataObjTable) const
{
//First up in the table comes the External constants in scalar->vector->matrix order.
//Only fills the constants actually used by the script.
OutConstantTable.Empty();
ExternalConstantsNew.AppendToConstantsTable(OutConstantTable, ExternalConstantsMap);
ExternalConstantsNew.AppendExternalBufferConstants(DataObjTable, ExternalConstantsMap);
//Next up add all the internal constants from the script.
InternalConstantsNew.AppendToConstantsTable(OutConstantTable);
InternalConstantsNew.AppendBufferConstants(DataObjTable);
}
template<typename T>
void SetOrAddInternal(const FNiagaraVariableInfo& Constant, const T& Value)
{
InternalConstantsNew.SetOrAdd(Constant, Value);
}
template<typename T>
void SetOrAddExternal(const FNiagaraVariableInfo& Constant, const T& Value)
{
ExternalConstantsNew.SetOrAdd(Constant, Value);
}
/**
Calculates the index into a a constant table created from this constant data for the given constant name.
Obviously, assumes the constant data is complete. Any additions etc will invalidate previously calculated indexes.
*/
void GetTableIndex(const FNiagaraVariableInfo& Constant, bool bInternal, int32& OutConstantIdx, int32& OutComponentIndex, ENiagaraDataType& OutType)const
{
int32 Base = bInternal ? ExternalConstantsNew.GetTableSize() : 0;
int32 ConstIdx = INDEX_NONE;
int32 CompIdx = INDEX_NONE;
ENiagaraDataType Type;
const FNiagaraConstants& Consts = bInternal ? InternalConstantsNew : ExternalConstantsNew;
ConstIdx = Consts.GetAbsoluteIndex_Scalar(Constant);
Type = ENiagaraDataType::Scalar;
if (ConstIdx == INDEX_NONE)
{
ConstIdx = Consts.GetTableIndex_Vector(Constant);
Type = ENiagaraDataType::Vector;
if (ConstIdx == INDEX_NONE)
{
ConstIdx = Consts.GetTableIndex_Matrix(Constant);
Type = ENiagaraDataType::Matrix;
if (ConstIdx == INDEX_NONE) // curves/buffers are in a separate table, so set base to 0
{
ConstIdx = Consts.GetTableIndex_DataObj(Constant);
Type = ENiagaraDataType::Curve;
Base = 0;
}
}
}
else
{
CompIdx = ConstIdx % 4;
ConstIdx /= 4;
}
OutConstantIdx = Base + ConstIdx;
OutComponentIndex = CompIdx;
OutType = Type;
}
};