diff options
| author | aura <nw@moneybot.cc> | 2026-07-28 22:54:26 +0200 |
|---|---|---|
| committer | aura <nw@moneybot.cc> | 2026-07-28 22:54:26 +0200 |
| commit | c0c9d699c75ee9ffeb041f985edb23517a3e8e29 (patch) | |
| tree | a7c07069fffce73d7da61e2f1b423164775c5fbf /src/game | |
| parent | 86d248ed2b033fe36ce53b0387b2cbdcb69c0b72 (diff) | |
var set funcs
Diffstat (limited to 'src/game')
| -rw-r--r-- | src/game/vars.cpp | 77 | ||||
| -rw-r--r-- | src/game/vars.h | 8 |
2 files changed, 78 insertions, 7 deletions
diff --git a/src/game/vars.cpp b/src/game/vars.cpp index 4d48125..443699d 100644 --- a/src/game/vars.cpp +++ b/src/game/vars.cpp @@ -20,7 +20,7 @@ CVAR* var_new( const char* name, F32 v ) { CVAR* ret = new CVAR; memset( ret, 0 , sizeof( CVAR ) ); ret->type = CVAR_TYPE_FLOAT; - strcpy( ret->name, name ); + ret->name = name; ret->fl_v = v; varl->vars.push( ret ); @@ -33,7 +33,7 @@ CVAR* var_new( const char* name, I32 i ) { CVAR* ret = new CVAR; memset( ret, 0 , sizeof( CVAR ) ); ret->type = CVAR_TYPE_INT; - strcpy( ret->name, name ); + ret->name = name; ret->i_v = i; varl->vars.push( ret ); @@ -46,7 +46,7 @@ CVAR* var_new( const char* name, CLR c ) { CVAR* ret = new CVAR; memset( ret, 0 , sizeof( CVAR ) ); ret->type = CVAR_TYPE_COLOR; - strcpy( ret->name, name ); + ret->name = name; ret->clr_v = c; varl->vars.push( ret ); @@ -59,7 +59,7 @@ CVAR* var_new( const char* name, CVAR_FUNC func ) { CVAR* ret = new CVAR; memset( ret, 0 , sizeof( CVAR ) ); ret->type = CVAR_TYPE_FN; - strcpy( ret->name, name ); + ret->name = name; ret->fn_v = func; varl->vars.push( ret ); @@ -72,7 +72,7 @@ CVAR* var_new( const char* name, const char* v ) { CVAR* ret = new CVAR; memset( ret, 0, sizeof( CVAR ) ); ret->type = CVAR_TYPE_STRING; - strcpy( ret->name, name ); + ret->name = name; varl->vars.push( ret ); return ret; @@ -144,3 +144,70 @@ const char* var_gets( CVAR *var ) { return ""; } } + +void var_set( CVAR* var, F32 v ) { + switch( var->type ) { + case CVAR_TYPE_FLOAT: + var->fl_v = v; break; + case CVAR_TYPE_INT: + var->i_v = (I32)v; break; + case CVAR_TYPE_COLOR: + var->clr_v = (CLR){ v, v, v, 1.f }; break; + case CVAR_TYPE_STRING: + strcpy( var->str_v, to_str( v ) ); break; + default: break; + } +} + +void var_set( CVAR* var, I32 v ) { + switch( var->type ) { + case CVAR_TYPE_FLOAT: + var->fl_v = (F32)v; break; + case CVAR_TYPE_INT: + var->i_v = v; break; + case CVAR_TYPE_COLOR: + var->clr_v = (CLR){ ((F32)v / 255), ((F32)v / 255), ((F32)v / 255), 1.f }; break; + case CVAR_TYPE_STRING: + strcpy( var->str_v, to_str( v ) ); break; + default: break; + } +} + +void var_set( CVAR* var, CLR v ) { + switch( var->type ) { + case CVAR_TYPE_COLOR: + var->clr_v = v; break; + case CVAR_TYPE_STRING: + strcpy( var->str_v, to_str( v ) ); break; + default: dlog( "attempted to set color to %s, but it's not a color value", var->name.data ); break; + } +} + +void var_set( CVAR* var, STR v ) { + if( v.size >= 64 ) { + dlog( "attempted to set string to %s, but it's too long (%d/64 bytes)", var->name.data, v.size ); + return; + } + + switch( var->type ) { + case CVAR_TYPE_FLOAT: + F32 f; sscanf( v.data, "%f", &f ); + var->fl_v = f; break; + case CVAR_TYPE_INT: + var->i_v = atoi( v.data ); break; + case CVAR_TYPE_STRING: + strcpy( var->str_v, v.data ); break; + case CVAR_TYPE_COLOR: { + LIST<STR> strings = v.split( " " ); + if( strings.size < 3 || strings.size > 4 ) + break; + + for( U32 i = 0; i < strings.size; ++i ) { + F32 f{}; sscanf( strings[i].data, "%f", &f ); + ( (F32*)( &var->clr_v ) )[i] = f; + } break; + } + default: + break; + } +} diff --git a/src/game/vars.h b/src/game/vars.h index 8abe2fa..253effb 100644 --- a/src/game/vars.h +++ b/src/game/vars.h @@ -13,7 +13,7 @@ enum CvarTypes_t { typedef I32(*CVAR_FUNC)( struct CVAR* self, const char* cmdline ); struct CVAR { - char name[100]; + STR name; U8 type; union { F32 fl_v; @@ -44,7 +44,6 @@ extern CVAR* var_new( const char* name, CLR v ); extern CVAR* var_new( const char* name, const char* v ); extern CVAR* var_new( const char* name, CVAR_FUNC fn ); - extern CVAR* var_find( const char* name ); extern I32 var_call( CVAR* cmdvar, const char* cmdline ); extern F32 var_getf( CVAR* var ); @@ -52,4 +51,9 @@ extern I32 var_geti( CVAR* var ); extern CLR var_getclr( CVAR* var ); extern const char* var_gets( 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; |
