#pragma once #include "../util.h" enum CvarTypes_t { CVAR_TYPE_INT, CVAR_TYPE_FLOAT, CVAR_TYPE_COLOR, CVAR_TYPE_STRING, CVAR_TYPE_FN, CVAR_TYPE_LAST }; enum CvarFlags_t { CVAR_FLAG_NONE = 0, CVAR_FLAG_MINMAX = 1 << 1, }; typedef I32(*CVAR_FUNC)( struct CVAR* self, LIST cmdline ); struct CVAR { STR name; U8 type; STR desc; U32 flags; union { F32 fl_v; I32 i_v; CLR clr_v; CVAR_FUNC fn_v; char str_v[64]; }; union { F32 fl_v; I32 i_v; CLR clr_v; CVAR_FUNC fn_v; char str_v[64]; } default_v; union { F32 fl_v; I32 i_v; } min_v; union { F32 fl_v; I32 i_v; } max_v; }; struct VAR_LIST { LIST vars; }; extern VAR_LIST* vars_init(); extern CVAR* var_new( const char* name, STR desc, F32 v ); extern CVAR* var_new( const char* name, STR desc, F32 v, F32 min_v, F32 max_v ); extern CVAR* var_new( const char* name, STR desc, I32 v ); extern CVAR* var_new( const char* name, STR desc, I32 v, I32 min_v, I32 max_v ); extern CVAR* var_new( const char* name, STR desc, CLR v ); extern CVAR* var_new( const char* name, STR desc, const char* v ); extern CVAR* var_new( const char* name, STR desc, CVAR_FUNC fn ); extern CVAR* var_find( const char* name ); extern I32 var_call( CVAR* cmdvar, LIST cmdline ); extern F32 var_getf( CVAR* var ); extern I32 var_geti( CVAR* var ); extern CLR var_getclr( CVAR* var ); extern STR var_gets( const CVAR* var ); extern void var_set( CVAR* var, F32 v ); extern void var_set( CVAR* var, I32 v ); extern void var_set( CVAR* var, CLR v ); extern void var_set( CVAR* var, STR v ); extern VAR_LIST* varl;