vrheights

annotate src/game_var.cc @ 12:cb97ea43709b

fixed line endings
author John Tsiombikas <nuclear@member.fsf.org>
date Fri, 03 Oct 2014 23:11:43 +0300
parents 537db3079134
children
rev   line source
nuclear@12 1 #include <string.h>
nuclear@12 2 #include <map>
nuclear@12 3 #include "game_var.h"
nuclear@12 4
nuclear@12 5 static std::map<std::string, GameVariable> gvars;
nuclear@12 6
nuclear@12 7 GameVariable::GameVariable()
nuclear@12 8 {
nuclear@12 9 num_val = 0.0f;
nuclear@12 10 bool_val = false;
nuclear@12 11 }
nuclear@12 12
nuclear@12 13 std::string GameVariable::to_str() const
nuclear@12 14 {
nuclear@12 15 char buf[128];
nuclear@12 16
nuclear@12 17 switch(type) {
nuclear@12 18 case GameVariable::STR:
nuclear@12 19 return val;
nuclear@12 20 case GameVariable::BOOL:
nuclear@12 21 return bool_val ? "true" : "false";
nuclear@12 22 case GameVariable::NUMBER:
nuclear@12 23 sprintf(buf, "%g", num_val);
nuclear@12 24 return buf;
nuclear@12 25 }
nuclear@12 26 return "<unknown>";
nuclear@12 27 }
nuclear@12 28
nuclear@12 29 void set_gvar(const GameVariable &var)
nuclear@12 30 {
nuclear@12 31 gvars[var.name] = var;
nuclear@12 32 }
nuclear@12 33
nuclear@12 34 void set_gvar_str(const char *name, const char *val)
nuclear@12 35 {
nuclear@12 36 GameVariable v;
nuclear@12 37 v.name = name;
nuclear@12 38 v.val = val;
nuclear@12 39 v.type = GameVariable::STR;
nuclear@12 40 set_gvar(v);
nuclear@12 41 }
nuclear@12 42
nuclear@12 43 void set_gvar_num(const char *name, float val)
nuclear@12 44 {
nuclear@12 45 GameVariable v;
nuclear@12 46 v.name = name;
nuclear@12 47 v.num_val = val;
nuclear@12 48 v.type = GameVariable::NUMBER;
nuclear@12 49 set_gvar(v);
nuclear@12 50 }
nuclear@12 51
nuclear@12 52 void set_gvar_bool(const char *name, bool val)
nuclear@12 53 {
nuclear@12 54 GameVariable v;
nuclear@12 55 v.name = name;
nuclear@12 56 v.bool_val = val;
nuclear@12 57 v.type = GameVariable::BOOL;
nuclear@12 58 set_gvar(v);
nuclear@12 59 }
nuclear@12 60
nuclear@12 61 static char *strip_whitespace(char *s)
nuclear@12 62 {
nuclear@12 63 while(*s && isspace(*s)) ++s;
nuclear@12 64 if(*s == 0) return s;
nuclear@12 65
nuclear@12 66 char *endp = s + strlen(s) - 1;
nuclear@12 67 while(endp > s && isspace(*endp)) {
nuclear@12 68 *endp-- = 0;
nuclear@12 69 }
nuclear@12 70 return s;
nuclear@12 71 }
nuclear@12 72
nuclear@12 73 static int strccmp(const char *a, const char *b)
nuclear@12 74 {
nuclear@12 75 while(*a && *b) {
nuclear@12 76 int diff = tolower(*a) - tolower(*b);
nuclear@12 77 if(diff != 0) return diff;
nuclear@12 78 ++a;
nuclear@12 79 ++b;
nuclear@12 80 }
nuclear@12 81 if(*a == 0 && *b == 0) return 0;
nuclear@12 82 return *a == 0 ? -1 : 1;
nuclear@12 83 }
nuclear@12 84
nuclear@12 85 int set_gvar_parse(const char *name, const char *val)
nuclear@12 86 {
nuclear@12 87 char *endp, *valstr = (char*)alloca(strlen(val) + 1);
nuclear@12 88 strcpy(valstr, val);
nuclear@12 89 valstr = strip_whitespace(valstr);
nuclear@12 90
nuclear@12 91 float fval = strtod(valstr, &endp);
nuclear@12 92 if(endp != valstr && *endp == 0) {
nuclear@12 93 set_gvar_num(name, fval);
nuclear@12 94 return GameVariable::NUMBER;
nuclear@12 95 }
nuclear@12 96
nuclear@12 97 if(strccmp(valstr, "true") == 0 || strccmp(valstr, "yes") == 0) {
nuclear@12 98 set_gvar_bool(name, true);
nuclear@12 99 return GameVariable::BOOL;
nuclear@12 100 }
nuclear@12 101 if(strccmp(valstr, "false") == 0 || strccmp(valstr, "no") == 0) {
nuclear@12 102 set_gvar_bool(name, false);
nuclear@12 103 return GameVariable::BOOL;
nuclear@12 104 }
nuclear@12 105 set_gvar_str(name, val);
nuclear@12 106 return GameVariable::STR;
nuclear@12 107 }
nuclear@12 108
nuclear@12 109 GameVariable &get_gvar(const char *name)
nuclear@12 110 {
nuclear@12 111 return gvars[name];
nuclear@12 112 }
nuclear@12 113
nuclear@12 114 const char *get_gvar_str(const char *name)
nuclear@12 115 {
nuclear@12 116 return gvars[name].val.c_str();
nuclear@12 117 }
nuclear@12 118
nuclear@12 119 float get_gvar_num(const char *name)
nuclear@12 120 {
nuclear@12 121 return gvars[name].num_val;
nuclear@12 122 }
nuclear@12 123
nuclear@12 124 bool get_gvar_bool(const char *name)
nuclear@12 125 {
nuclear@12 126 return gvars[name].bool_val;
nuclear@12 127 }
nuclear@12 128
nuclear@12 129 bool have_gvar(const char *name)
nuclear@12 130 {
nuclear@12 131 return gvars.find(std::string(name)) != gvars.end();
nuclear@12 132 }
nuclear@12 133
nuclear@12 134 std::list<std::string> get_gvar_list()
nuclear@12 135 {
nuclear@12 136 std::list<std::string> res;
nuclear@12 137
nuclear@12 138 std::map<std::string, GameVariable>::const_iterator it = gvars.begin();
nuclear@12 139 while(it != gvars.end()) {
nuclear@12 140 res.push_back((it++)->first);
nuclear@12 141 }
nuclear@12 142 return res;
nuclear@12 143 }