diff options
Diffstat (limited to 'mp/src/public/vgui_controls/PanelAnimationVar.h')
| -rw-r--r-- | mp/src/public/vgui_controls/PanelAnimationVar.h | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/mp/src/public/vgui_controls/PanelAnimationVar.h b/mp/src/public/vgui_controls/PanelAnimationVar.h new file mode 100644 index 00000000..8b274f70 --- /dev/null +++ b/mp/src/public/vgui_controls/PanelAnimationVar.h @@ -0,0 +1,161 @@ +//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+
+#ifndef PANELANIMATIONVAR_H
+#define PANELANIMATIONVAR_H
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include "tier1/utlvector.h"
+#include <vgui_controls/Panel.h>
+
+#define DECLARE_PANELANIMATION( className ) \
+ static void AddToAnimationMap( char const *scriptname, char const *type, char const *var, \
+ char const *defaultvalue, bool array, PANELLOOKUPFUNC func ) \
+ { \
+ PanelAnimationMap *map = FindOrAddPanelAnimationMap( GetPanelClassName() ); \
+ \
+ PanelAnimationMapEntry entry; \
+ entry.m_pszScriptName = scriptname; \
+ entry.m_pszVariable = var; \
+ entry.m_pszType = type; \
+ entry.m_pszDefaultValue = defaultvalue; \
+ entry.m_pfnLookup = func; \
+ entry.m_bArray = array; \
+ \
+ map->entries.AddToTail( entry ); \
+ } \
+ \
+ static void ChainToAnimationMap( void ) \
+ { \
+ static bool chained = false; \
+ if ( chained ) \
+ return; \
+ chained = true; \
+ PanelAnimationMap *map = FindOrAddPanelAnimationMap( GetPanelClassName() ); \
+ map->pfnClassName = GetPanelClassName; \
+ if ( map && GetPanelBaseClassName() && GetPanelBaseClassName()[0] ) \
+ { \
+ map->baseMap = FindOrAddPanelAnimationMap( GetPanelBaseClassName() ); \
+ } \
+ } \
+ \
+ class className##_Register; \
+ friend class className##_Register; \
+ class className##_Register \
+ { \
+ public: \
+ className##_Register() \
+ { \
+ className::ChainToAnimationMap(); \
+ } \
+ }; \
+ className##_Register m_RegisterAnimationClass; \
+ \
+ virtual PanelAnimationMap *GetAnimMap() \
+ { \
+ return FindOrAddPanelAnimationMap( GetPanelClassName() ); \
+ }
+
+typedef void *( *PANELLOOKUPFUNC )( vgui::Panel *panel );
+
+// Use this macro to define a variable which hudanimations.txt and hudlayout.res scripts can access
+#define CPanelAnimationVarAliasType( type, name, scriptname, defaultvalue, typealias ) \
+ class PanelAnimationVar_##name; \
+ friend class PanelAnimationVar_##name; \
+ static void *GetVar_##name( vgui::Panel *panel ) \
+ { \
+ return &(( ThisClass *)panel)->name; \
+ } \
+ class PanelAnimationVar_##name \
+ { \
+ public: \
+ static void InitVar() \
+ { \
+ static bool bAdded = false; \
+ if ( !bAdded ) \
+ { \
+ bAdded = true; \
+ AddToAnimationMap( scriptname, typealias, #name, defaultvalue, false, ThisClass::GetVar_##name ); \
+ } \
+ } \
+ PanelAnimationVar_##name() \
+ { \
+ PanelAnimationVar_##name::InitVar(); \
+ } \
+ }; \
+ PanelAnimationVar_##name m_##name##_register; \
+ type name;
+
+#define CPanelAnimationVar( type, name, scriptname, defaultvalue ) \
+ CPanelAnimationVarAliasType( type, name, scriptname, defaultvalue, #type )
+
+// Use this macro to define a variable which hudanimations.txt and hudlayout.res scripts can access
+#define CPanelAnimationStringVarAliasType( count, name, scriptname, defaultvalue, typealias ) \
+ class PanelAnimationVar_##name; \
+ friend class PanelAnimationVar_##name; \
+ static void *GetVar_##name( vgui::Panel *panel ) \
+ { \
+ return &(( ThisClass *)panel)->name; \
+ } \
+ class PanelAnimationVar_##name \
+ { \
+ public: \
+ static void InitVar() \
+ { \
+ static bool bAdded = false; \
+ if ( !bAdded ) \
+ { \
+ bAdded = true; \
+ AddToAnimationMap( scriptname, typealias, #name, defaultvalue, true, ThisClass::GetVar_##name ); \
+ } \
+ } \
+ PanelAnimationVar_##name() \
+ { \
+ PanelAnimationVar_##name::InitVar(); \
+ } \
+ }; \
+ PanelAnimationVar_##name m_##name##_register; \
+ char name[ count ];
+
+#define CPanelAnimationStringVar( count, name, scriptname, defaultvalue ) \
+ CPanelAnimationStringVarAliasType( count, name, scriptname, defaultvalue, "string" )
+
+struct PanelAnimationMapEntry
+{
+ char const *name() { return m_pszScriptName; }
+ char const *type() { return m_pszType; }
+ char const *defaultvalue() { return m_pszDefaultValue; }
+ bool isarray() { return m_bArray; }
+
+ char const *m_pszScriptName;
+ char const *m_pszVariable;
+ char const *m_pszType;
+ char const *m_pszDefaultValue;
+ bool m_bArray;
+
+ PANELLOOKUPFUNC m_pfnLookup;
+};
+
+struct PanelAnimationMap
+{
+ PanelAnimationMap()
+ {
+ baseMap = NULL;
+ pfnClassName = NULL;
+ }
+
+ CUtlVector< PanelAnimationMapEntry > entries;
+ PanelAnimationMap *baseMap;
+ char const *(*pfnClassName)( void );
+};
+
+PanelAnimationMap *FindPanelAnimationMap( char const *className );
+PanelAnimationMap *FindOrAddPanelAnimationMap( char const *className );
+void PanelAnimationDumpVars( char const *className );
+
+#endif // PANELANIMATIONVAR_H
|