summaryrefslogtreecommitdiff
path: root/public/datamodel/dmattributetypes.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /public/datamodel/dmattributetypes.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'public/datamodel/dmattributetypes.h')
-rw-r--r--public/datamodel/dmattributetypes.h317
1 files changed, 317 insertions, 0 deletions
diff --git a/public/datamodel/dmattributetypes.h b/public/datamodel/dmattributetypes.h
new file mode 100644
index 0000000..3a29caa
--- /dev/null
+++ b/public/datamodel/dmattributetypes.h
@@ -0,0 +1,317 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================
+
+#ifndef DMATTRIBUTETYPES_H
+#define DMATTRIBUTETYPES_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "tier1/utlvector.h"
+#include "tier1/utlbinaryblock.h"
+#include "tier1/utlstring.h"
+#include "tier1/uniqueid.h"
+#include "Color.h"
+#include "mathlib/vector2d.h"
+#include "mathlib/vector.h"
+#include "mathlib/vector4d.h"
+#include "mathlib/vmatrix.h"
+#include "datamodel/dmelementhandle.h"
+#include "tier1/utlsymbol.h"
+
+
+//-----------------------------------------------------------------------------
+// Object Id
+//-----------------------------------------------------------------------------
+typedef UniqueId_t DmObjectId_t;
+
+
+//-----------------------------------------------------------------------------
+// Necessary for template specialization for AT_UNKNOWN
+//-----------------------------------------------------------------------------
+struct DmUnknownAttribute_t
+{
+ bool operator==( const DmUnknownAttribute_t& src ) const { return true; }
+};
+
+
+//-----------------------------------------------------------------------------
+// Element array
+//-----------------------------------------------------------------------------
+struct DmElementAttribute_t
+{
+ DmElementAttribute_t() : m_ElementType( UTL_INVAL_SYMBOL ) {}
+
+ operator DmElementHandle_t&() { return m_Handle; }
+ operator const DmElementHandle_t&() const { return m_Handle; }
+
+ DmElementHandle_t m_Handle;
+ UtlSymId_t m_ElementType;
+};
+
+struct DmElementArray_t : public CUtlVector< DmElementHandle_t >
+{
+ DmElementArray_t() : m_ElementType( UTL_INVAL_SYMBOL ) {}
+
+ UtlSymId_t m_ElementType;
+};
+
+
+//-----------------------------------------------------------------------------
+// Attribute chunk type enum
+//-----------------------------------------------------------------------------
+enum DmAttributeType_t
+{
+ AT_UNKNOWN = 0,
+
+ AT_FIRST_VALUE_TYPE,
+
+ AT_ELEMENT = AT_FIRST_VALUE_TYPE,
+ AT_INT,
+ AT_FLOAT,
+ AT_BOOL,
+ AT_STRING,
+ AT_VOID,
+ AT_OBJECTID,
+ AT_COLOR, //rgba
+ AT_VECTOR2,
+ AT_VECTOR3,
+ AT_VECTOR4,
+ AT_QANGLE,
+ AT_QUATERNION,
+ AT_VMATRIX,
+
+ AT_FIRST_ARRAY_TYPE,
+
+ AT_ELEMENT_ARRAY = AT_FIRST_ARRAY_TYPE,
+ AT_INT_ARRAY,
+ AT_FLOAT_ARRAY,
+ AT_BOOL_ARRAY,
+ AT_STRING_ARRAY,
+ AT_VOID_ARRAY,
+ AT_OBJECTID_ARRAY,
+ AT_COLOR_ARRAY,
+ AT_VECTOR2_ARRAY,
+ AT_VECTOR3_ARRAY,
+ AT_VECTOR4_ARRAY,
+ AT_QANGLE_ARRAY,
+ AT_QUATERNION_ARRAY,
+ AT_VMATRIX_ARRAY,
+ AT_TYPE_COUNT,
+};
+
+const char *GetTypeString( DmAttributeType_t type );
+
+inline bool IsValueType( DmAttributeType_t type )
+{
+ return type >= AT_FIRST_VALUE_TYPE && type < AT_FIRST_ARRAY_TYPE;
+}
+
+inline bool IsArrayType( DmAttributeType_t type )
+{
+ return type >= AT_FIRST_ARRAY_TYPE && type < AT_TYPE_COUNT;
+}
+
+inline bool IsTopological( DmAttributeType_t type )
+{
+ return type == AT_ELEMENT || type == AT_ELEMENT_ARRAY;
+}
+
+inline DmAttributeType_t ValueTypeToArrayType( DmAttributeType_t type )
+{
+ Assert( IsValueType( type ) );
+ return ( DmAttributeType_t )( ( type - AT_FIRST_VALUE_TYPE ) + AT_FIRST_ARRAY_TYPE );
+}
+
+inline DmAttributeType_t ArrayTypeToValueType( DmAttributeType_t type )
+{
+ Assert( IsArrayType( type ) );
+ return ( DmAttributeType_t )( ( type - AT_FIRST_ARRAY_TYPE ) + AT_FIRST_VALUE_TYPE );
+}
+
+inline int NumComponents( DmAttributeType_t type )
+{
+ switch ( type )
+ {
+ case AT_BOOL:
+ case AT_INT:
+ case AT_FLOAT:
+ return 1;
+
+ case AT_VECTOR2:
+ return 2;
+
+ case AT_VECTOR3:
+ case AT_QANGLE:
+ return 3;
+
+ case AT_COLOR: //rgba
+ case AT_VECTOR4:
+ case AT_QUATERNION:
+ return 4;
+
+ case AT_VMATRIX:
+ return 16;
+
+ case AT_ELEMENT:
+ case AT_STRING:
+ case AT_VOID:
+ case AT_OBJECTID:
+ default:
+ return 0;
+ }
+}
+
+template< typename T >
+inline float GetComponent( const T &value, int i )
+{
+ Assert( 0 );
+ return 0.0f;
+}
+
+template <> inline float GetComponent( const bool &value, int i )
+{
+ Assert( i == 0 );
+ return value ? 1.0f : 0.0f;
+}
+
+template <> inline float GetComponent( const int &value, int i )
+{
+ Assert( i == 0 );
+ return float( value );
+}
+
+template <> inline float GetComponent( const float &value, int i )
+{
+ Assert( i == 0 );
+ return value;
+}
+
+template <> inline float GetComponent( const Vector2D &value, int i )
+{
+ return value[ i ];
+}
+
+template <> inline float GetComponent( const Vector &value, int i )
+{
+ return value[ i ];
+}
+
+template <> inline float GetComponent( const QAngle &value, int i )
+{
+ return value[ i ];
+}
+
+template <> inline float GetComponent( const Color &value, int i )
+{
+ return value[ i ];
+}
+
+template <> inline float GetComponent( const Vector4D &value, int i )
+{
+ return value[ i ];
+}
+
+template <> inline float GetComponent( const Quaternion &value, int i )
+{
+ return value[ i ];
+}
+
+template <> inline float GetComponent( const VMatrix &value, int i )
+{
+ return value.Base()[ i ];
+}
+
+
+//-----------------------------------------------------------------------------
+// Attribute info...
+//-----------------------------------------------------------------------------
+template <typename T>
+class CDmAttributeInfo
+{
+public:
+ enum { ATTRIBUTE_TYPE = AT_UNKNOWN };
+
+ typedef T StorageType_t;
+
+ static DmAttributeType_t AttributeType()
+ {
+ return AT_UNKNOWN;
+ }
+
+ static const char *AttributeTypeName()
+ {
+ return "unknown";
+ }
+
+ static void SetDefaultValue( T& value )
+ {
+ Assert(0);
+ }
+};
+
+
+#define DECLARE_ATTRIBUTE_TYPE_INTERNAL( _className, _storageType, _attributeType, _attributeName, _defaultSetStatement ) \
+ template< > class CDmAttributeInfo< _className > \
+ { \
+ public: \
+ enum { ATTRIBUTE_TYPE = _attributeType }; \
+ typedef _storageType StorageType_t; \
+ static DmAttributeType_t AttributeType() { return _attributeType; } \
+ static const char *AttributeTypeName() { return _attributeName; } \
+ static void SetDefaultValue( _className& value ) { _defaultSetStatement } \
+ }; \
+
+#define DECLARE_ATTRIBUTE_ARRAY_TYPE_INTERNAL( _className, _storageType, _attributeType, _attributeName ) \
+ template< > class CDmAttributeInfo< CUtlVector<_className> > \
+ { \
+ public: \
+ enum { ATTRIBUTE_TYPE = _attributeType }; \
+ typedef _storageType StorageType_t; \
+ static DmAttributeType_t AttributeType() { return _attributeType; } \
+ static const char *AttributeTypeName() { return _attributeName; } \
+ static void SetDefaultValue( CUtlVector< _className >& value ) { value.RemoveAll(); } \
+ }; \
+
+#define DECLARE_ATTRIBUTE_TYPE( _className, _attributeType, _attributeName, _defaultSetStatement ) \
+ DECLARE_ATTRIBUTE_TYPE_INTERNAL( _className, _className, _attributeType, _attributeName, _defaultSetStatement )
+
+#define DECLARE_ATTRIBUTE_ARRAY_TYPE( _className, _attributeType, _attributeName )\
+ DECLARE_ATTRIBUTE_ARRAY_TYPE_INTERNAL( _className, CUtlVector< _className >, _attributeType, _attributeName )
+
+// NOTE: If you add an attribute type here, also add it to the list of DEFINE_ATTRIBUTE_TYPES in dmattribute.cpp
+DECLARE_ATTRIBUTE_TYPE( int, AT_INT, "int", value = 0; )
+DECLARE_ATTRIBUTE_TYPE( float, AT_FLOAT, "float", value = 0.0f; )
+DECLARE_ATTRIBUTE_TYPE( bool, AT_BOOL, "bool", value = false; )
+DECLARE_ATTRIBUTE_TYPE( Color, AT_COLOR, "color", value.SetColor( 0, 0, 0, 255 ); )
+DECLARE_ATTRIBUTE_TYPE( Vector2D, AT_VECTOR2, "vector2", value.Init( 0.0f, 0.0f ); )
+DECLARE_ATTRIBUTE_TYPE( Vector, AT_VECTOR3, "vector3", value.Init( 0.0f, 0.0f, 0.0f ); )
+DECLARE_ATTRIBUTE_TYPE( Vector4D, AT_VECTOR4, "vector4", value.Init( 0.0f, 0.0f, 0.0f, 0.0f ); )
+DECLARE_ATTRIBUTE_TYPE( QAngle, AT_QANGLE, "qangle", value.Init( 0.0f, 0.0f, 0.0f ); )
+DECLARE_ATTRIBUTE_TYPE( Quaternion, AT_QUATERNION, "quaternion", value.Init( 0.0f, 0.0f, 0.0f, 1.0f ); )
+DECLARE_ATTRIBUTE_TYPE( VMatrix, AT_VMATRIX, "matrix", MatrixSetIdentity( value ); )
+DECLARE_ATTRIBUTE_TYPE( CUtlString, AT_STRING, "string", value.Set( NULL ); )
+DECLARE_ATTRIBUTE_TYPE( CUtlBinaryBlock, AT_VOID, "binary", value.Set( NULL, 0 ); )
+DECLARE_ATTRIBUTE_TYPE( DmObjectId_t, AT_OBJECTID, "elementid", InvalidateUniqueId( &value ); )
+DECLARE_ATTRIBUTE_TYPE_INTERNAL( DmElementHandle_t, DmElementAttribute_t, AT_ELEMENT, "element", value = DMELEMENT_HANDLE_INVALID; )
+
+DECLARE_ATTRIBUTE_ARRAY_TYPE( int, AT_INT_ARRAY, "int_array" )
+DECLARE_ATTRIBUTE_ARRAY_TYPE( float, AT_FLOAT_ARRAY, "float_array" )
+DECLARE_ATTRIBUTE_ARRAY_TYPE( bool, AT_BOOL_ARRAY, "bool_array" )
+DECLARE_ATTRIBUTE_ARRAY_TYPE( Color, AT_COLOR_ARRAY, "color_array" )
+DECLARE_ATTRIBUTE_ARRAY_TYPE( Vector2D, AT_VECTOR2_ARRAY, "vector2_array" )
+DECLARE_ATTRIBUTE_ARRAY_TYPE( Vector, AT_VECTOR3_ARRAY, "vector3_array" )
+DECLARE_ATTRIBUTE_ARRAY_TYPE( Vector4D, AT_VECTOR4_ARRAY, "vector4_array" )
+DECLARE_ATTRIBUTE_ARRAY_TYPE( QAngle, AT_QANGLE_ARRAY, "qangle_array" )
+DECLARE_ATTRIBUTE_ARRAY_TYPE( Quaternion, AT_QUATERNION_ARRAY, "quaternion_array" )
+DECLARE_ATTRIBUTE_ARRAY_TYPE( VMatrix, AT_VMATRIX_ARRAY, "matrix_array" )
+DECLARE_ATTRIBUTE_ARRAY_TYPE( CUtlString, AT_STRING_ARRAY, "string_array" )
+DECLARE_ATTRIBUTE_ARRAY_TYPE( CUtlBinaryBlock, AT_VOID_ARRAY, "binary_array" )
+DECLARE_ATTRIBUTE_ARRAY_TYPE( DmObjectId_t, AT_OBJECTID_ARRAY, "elementid_array" )
+DECLARE_ATTRIBUTE_ARRAY_TYPE_INTERNAL( DmElementHandle_t, DmElementArray_t, AT_ELEMENT_ARRAY, "element_array" )
+
+
+#endif // DMATTRIBUTETYPES_H