summaryrefslogtreecommitdiff
path: root/src/game/vars.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/vars.cpp')
-rw-r--r--src/game/vars.cpp77
1 files changed, 72 insertions, 5 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;
+ }
+}