summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoraura <nw@moneybot.cc>2026-07-28 22:54:26 +0200
committeraura <nw@moneybot.cc>2026-07-28 22:54:26 +0200
commitc0c9d699c75ee9ffeb041f985edb23517a3e8e29 (patch)
treea7c07069fffce73d7da61e2f1b423164775c5fbf /src
parent86d248ed2b033fe36ce53b0387b2cbdcb69c0b72 (diff)
var set funcs
Diffstat (limited to 'src')
-rw-r--r--src/game/vars.cpp77
-rw-r--r--src/game/vars.h8
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;