#include "vars.h" #include "../util.h" #include VAR_LIST* varl; void vars_check_global_list() { if( !varl ) varl = vars_init(); } VAR_LIST* vars_init() { VAR_LIST* ret = new VAR_LIST; return ret; } CVAR* var_new( const char* name, F32 v ) { vars_check_global_list(); CVAR* ret = new CVAR; memset( ret, 0 , sizeof( CVAR ) ); ret->type = CVAR_TYPE_FLOAT; strcpy( ret->name, name ); ret->fl_v = v; varl->vars.push( ret ); return ret; } CVAR* var_new( const char* name, I32 i ) { vars_check_global_list(); CVAR* ret = new CVAR; memset( ret, 0 , sizeof( CVAR ) ); ret->type = CVAR_TYPE_INT; strcpy( ret->name, name ); ret->i_v = i; varl->vars.push( ret ); return ret; } CVAR* var_new( const char* name, CLR c ) { vars_check_global_list(); CVAR* ret = new CVAR; memset( ret, 0 , sizeof( CVAR ) ); ret->type = CVAR_TYPE_COLOR; strcpy( ret->name, name ); ret->clr_v = c; varl->vars.push( ret ); return ret; } CVAR* var_new( const char* name, CVAR_FUNC func ) { vars_check_global_list(); CVAR* ret = new CVAR; memset( ret, 0 , sizeof( CVAR ) ); ret->type = CVAR_TYPE_FN; strcpy( ret->name, name ); ret->fn_v = func; varl->vars.push( ret ); return ret; } CVAR* var_new( const char* name, const char* v ) { vars_check_global_list(); CVAR* ret = new CVAR; memset( ret, 0, sizeof( CVAR ) ); ret->type = CVAR_TYPE_STRING; strcpy( ret->name, name ); varl->vars.push( ret ); return ret; } CVAR* var_find( const char* name ) { if( !varl ) { dlog( "var_new() : error: varl null\n" ); return 0; } U32 len = strlen( name ); for( U32 i = 0; i < varl->vars.size; ++i ) { U32 len2 = strlen( varl->vars[i]->name ); if( strncmp( varl->vars[i]->name, name, min( len, len2 ) ) == 0 ) { return varl->vars[i]; } } return 0; } I32 var_call( CVAR *cmdvar, const char *cmdline ) { if( cmdvar->type != CVAR_TYPE_FN ) { dlog( "var_call() : error: not a function\n" ); return -1; } return cmdvar->fn_v( cmdvar, cmdline ); } F32 var_getf( CVAR *var ) { switch( var->type ) { case CVAR_TYPE_FLOAT: return var->fl_v; case CVAR_TYPE_INT: return (F32)var->i_v; default: return 0.f; } } I32 var_geti( CVAR *var ) { switch( var->type ) { case CVAR_TYPE_INT: return var->i_v; case CVAR_TYPE_FLOAT: return (I32)var->fl_v; default: return 0; } } CLR var_getclr( CVAR *var ) { switch( var->type ) { case CVAR_TYPE_COLOR: return var->clr_v; case CVAR_TYPE_FLOAT: return (CLR){ var->fl_v, var->fl_v, var->fl_v, 1.f }; default: return {}; } } const char* var_gets( CVAR *var ) { switch( var->type ) { case CVAR_TYPE_STRING: return var->str_v; case CVAR_TYPE_FLOAT: sprintf( var->str_v + sizeof(F32), "%f", var->fl_v ); return var->str_v + sizeof(F32); case CVAR_TYPE_INT: sprintf( var->str_v + sizeof(I32), "%d", var->i_v ); return var->str_v + sizeof(I32); case CVAR_TYPE_COLOR: sprintf( var->str_v + sizeof(CLR), "%f %f %f %f", var->clr_v.r, var->clr_v.g, var->clr_v.b, var->clr_v.a ); return var->str_v + sizeof(CLR); default: return ""; } }