summaryrefslogtreecommitdiff
path: root/src/game/vars.h
blob: 754979c0e5212b809f8edd64411040da7447a850 (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
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
#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
};

enum CvarFlags_t {
  CVAR_FLAG_NONE = 0,
  CVAR_FLAG_MINMAX = 1 << 1,
};

typedef I32(*CVAR_FUNC)( struct CVAR* self, LIST<STR> cmdline );

struct CVAR {
  STR  name;
  U8   type;
  STR  desc;
  U32  flags;
  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;

  union {
    F32 fl_v;
    I32 i_v;
  } min_v;

  union {
    F32 fl_v;
    I32 i_v;
  } max_v;
};

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

extern VAR_LIST* vars_init();

extern CVAR* var_new( const char* name, STR desc, F32 v );
extern CVAR* var_new(
  const char* name,
  STR desc,
  F32 v,
  F32 min_v,
  F32 max_v
);
extern CVAR* var_new( const char* name, STR desc, I32 v );
extern CVAR* var_new(
  const char* name,
  STR desc,
  I32 v,
  I32 min_v,
  I32 max_v
);
extern CVAR* var_new( const char* name, STR desc, CLR v );
extern CVAR* var_new( const char* name, STR desc, const char* v );
extern CVAR* var_new( const char* name, STR desc, CVAR_FUNC fn );

extern CVAR* var_find( const char* name );
extern I32 var_call( CVAR* cmdvar, LIST<STR> cmdline );
extern F32 var_getf( CVAR* var );
extern I32 var_geti( CVAR* var );
extern CLR var_getclr( CVAR* var );
extern STR var_gets( const 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;