summaryrefslogtreecommitdiff
path: root/src/game/vars.h
blob: 8abe2faec7a9fc0d9560daa682b9854181fb0858 (plain)
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
#pragma once
#include "../util.h"

enum CvarTypes_t {
  CVAR_TYPE_INT,
  CVAR_TYPE_FLOAT,
  CVAR_TYPE_COLOR,
  CVAR_TYPE_STRING,
  CVAR_TYPE_FN,
  CVAR_TYPE_LAST
};

typedef I32(*CVAR_FUNC)( struct CVAR* self, const char* cmdline );

struct CVAR {
  char name[100];
  U8   type;
  union {
    F32 fl_v;
    I32 i_v;
    CLR clr_v;
    CVAR_FUNC fn_v;
    char str_v[64];
  };

  union {
    F32 fl_v;
    I32 i_v;
    CLR clr_v;
    CVAR_FUNC fn_v;
    char str_v[64];
  } default_v;
};

struct VAR_LIST {
  LIST<CVAR*> vars;
};

extern VAR_LIST* vars_init();

extern CVAR* var_new( const char* name, F32 v );
extern CVAR* var_new( const char* name, I32 v );
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 );
extern I32 var_geti( CVAR* var );
extern CLR var_getclr( CVAR* var );
extern const char* var_gets( CVAR* var );

extern VAR_LIST* varl;