You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
161 lines
5.2 KiB
161 lines
5.2 KiB
//========= 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
|
|
|