2014-12-07 19:09:38 -05:00
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
2014-10-16 03:41:17 -04:00
# pragma once
# include "NiagaraConstantSet.h"
# include "NiagaraScriptConstantData.generated.h"
USTRUCT ( )
struct FNiagaraScriptConstantData
{
2015-03-17 05:38:32 -04:00
GENERATED_USTRUCT_BODY ( )
2014-10-16 03:41:17 -04:00
/** The set of external constants for this script. */
UPROPERTY ( )
2015-06-17 10:12:41 -04:00
FDeprecatedNiagaraConstants ExternalConstants_DEPRECATED ;
2015-06-18 08:46:03 -04:00
UPROPERTY ( )
FDeprecatedNiagaraConstants InternalConstants_DEPRECATED ;
2015-06-17 10:12:41 -04:00
2015-06-18 12:16:43 -04:00
/** 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. */
2015-06-17 10:12:41 -04:00
UPROPERTY ( )
2015-06-18 12:16:43 -04:00
FNiagaraConstants ExternalConstantsNew ;
2014-10-16 03:41:17 -04:00
2015-06-18 12:16:43 -04:00
/** 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. */
2014-10-16 03:41:17 -04:00
UPROPERTY ( )
2015-06-18 12:16:43 -04:00
FNiagaraConstants InternalConstantsNew ;
2014-10-16 03:41:17 -04:00
2015-01-14 15:48:20 -05:00
void Empty ( )
{
2015-06-18 12:16:43 -04:00
ExternalConstantsNew . Empty ( ) ;
InternalConstantsNew . Empty ( ) ;
2015-01-14 15:48:20 -05:00
}
2015-06-18 12:16:43 -04:00
FNiagaraConstants & GetExternalConstants ( ) { return ExternalConstantsNew ; }
2014-10-16 03:41:17 -04:00
/** Fill a constants table ready for use in an update or spawn. */
2015-06-15 15:51:40 -04:00
void FillConstantTable ( const FNiagaraConstantMap & ExternalConstantsMap , TArray < FVector4 > & OutConstantTable , TArray < UNiagaraDataObject * > & DataObjTable ) const
2014-10-16 03:41:17 -04:00
{
//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 ( ) ;
2015-06-18 12:16:43 -04:00
ExternalConstantsNew . AppendToConstantsTable ( OutConstantTable , ExternalConstantsMap ) ;
ExternalConstantsNew . AppendExternalBufferConstants ( DataObjTable , ExternalConstantsMap ) ;
2014-10-16 03:41:17 -04:00
//Next up add all the internal constants from the script.
2015-06-18 12:16:43 -04:00
InternalConstantsNew . AppendToConstantsTable ( OutConstantTable ) ;
InternalConstantsNew . AppendBufferConstants ( DataObjTable ) ;
2014-10-16 03:41:17 -04:00
}
2015-01-14 15:48:20 -05:00
template < typename T >
void SetOrAddInternal ( const FNiagaraVariableInfo & Constant , const T & Value )
2014-10-16 03:41:17 -04:00
{
2015-06-18 12:16:43 -04:00
InternalConstantsNew . SetOrAdd ( Constant , Value ) ;
2014-10-16 03:41:17 -04:00
}
2015-01-14 15:48:20 -05:00
template < typename T >
void SetOrAddExternal ( const FNiagaraVariableInfo & Constant , const T & Value )
2014-10-16 03:41:17 -04:00
{
2015-06-18 12:16:43 -04:00
ExternalConstantsNew . SetOrAdd ( Constant , Value ) ;
2014-10-16 03:41:17 -04:00
}
/**
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 .
*/
2015-08-20 08:49:28 -04:00
void GetTableIndex ( const FNiagaraVariableInfo & Constant , bool bInternal , int32 & OutConstantIdx , ENiagaraDataType & OutType ) const
2014-10-16 03:41:17 -04:00
{
2015-06-18 12:16:43 -04:00
int32 Base = bInternal ? ExternalConstantsNew . GetTableSize ( ) : 0 ;
2014-10-16 03:41:17 -04:00
int32 ConstIdx = INDEX_NONE ;
ENiagaraDataType Type ;
2015-06-18 12:16:43 -04:00
const FNiagaraConstants & Consts = bInternal ? InternalConstantsNew : ExternalConstantsNew ;
2014-10-16 03:41:17 -04:00
2015-08-20 08:49:28 -04:00
ConstIdx = Consts . GetTableIndex_Scalar ( Constant ) ;
2014-10-16 03:41:17 -04:00
Type = ENiagaraDataType : : Scalar ;
if ( ConstIdx = = INDEX_NONE )
{
2015-01-14 15:48:20 -05:00
ConstIdx = Consts . GetTableIndex_Vector ( Constant ) ;
2014-10-16 03:41:17 -04:00
Type = ENiagaraDataType : : Vector ;
if ( ConstIdx = = INDEX_NONE )
{
2015-01-14 15:48:20 -05:00
ConstIdx = Consts . GetTableIndex_Matrix ( Constant ) ;
2014-10-16 03:41:17 -04:00
Type = ENiagaraDataType : : Matrix ;
2015-01-08 11:49:58 -05:00
if ( ConstIdx = = INDEX_NONE ) // curves/buffers are in a separate table, so set base to 0
{
2015-01-14 15:48:20 -05:00
ConstIdx = Consts . GetTableIndex_DataObj ( Constant ) ;
2015-01-08 11:49:58 -05:00
Type = ENiagaraDataType : : Curve ;
Base = 0 ;
}
2014-10-16 03:41:17 -04:00
}
}
OutConstantIdx = Base + ConstIdx ;
OutType = Type ;
}
} ;