1
This commit is contained in:
161
public/vgui_controls/PanelAnimationVar.h
Normal file
161
public/vgui_controls/PanelAnimationVar.h
Normal file
@ -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
|
Reference in New Issue
Block a user