1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
|
#include "vars.h"
#include "../util.h"
#include <string.h>
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->fl_v;
default: return 0.f;
}
}
I32 var_geti( CVAR *var ) {
switch( var->type ) {
case CVAR_TYPE_INT: return var->fl_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 "";
}
}
|