Skip to content

Commit

Permalink
load keys from config
Browse files Browse the repository at this point in the history
  • Loading branch information
xtreme8000 committed May 8, 2018
1 parent 4fb567c commit 7872396
Show file tree
Hide file tree
Showing 7 changed files with 124 additions and 78 deletions.
49 changes: 24 additions & 25 deletions resources/config.ini
Expand Up @@ -14,28 +14,27 @@ greedy_meshing = 0
vsync = 1

[controls]
move_forward = 0x11
move_backward = 0x1F
move_left = 0x1E
move_right = 0x20
jump = 0x39
crouch = 0x1D
sneak = 0x2f
sprint = 0x2A
view_map = 0x32
reload = 0x13
cube_color_up = 0xC8
cube_color_down = 0xD0
cube_color_left = 0xCB
cube_color_right = 0xCD
cube_color_sample = 0x12
quit_game = 0x1
save_map = 0x3B
volume_up = 0x4E
volume_down = 0x4A
view_score = 0x0F
show_mouse = 0x3F
change_team = 0x33
change_weapon = 0x34
last_weapon = 0x10
toggle_graph = 0x57
move_forward = 87
move_backward = 83
move_left = 65
move_right = 68
jump = 32
crouch = 341
sneak = 86
sprint = 340
view_map = 77
reload = 82
cube_color_up = 265
cube_color_down = 264
cube_color_left = 263
cube_color_right = 262
cube_color_sample = 69
quit_game = 256
volume_up = 334
volume_down = 333
view_score = 258
change_team = 44
change_weapon = 46
screenshot = 294
fullscreen = 300
chat_global = 84
10 changes: 7 additions & 3 deletions src/cameracontroller.c
Expand Up @@ -93,10 +93,14 @@ void cameracontroller_fps(float dt) {
float ly = players[local_player_id].orientation_smooth.y*pow(0.7F,dt*60.0F)+(cos(camera_rot_y))*pow(0.3F,dt*60.0F);
float lz = players[local_player_id].orientation_smooth.z*pow(0.7F,dt*60.0F)+(cos(camera_rot_x)*sin(camera_rot_y))*pow(0.3F,dt*60.0F);

players[local_player_id].orientation_smooth.x = lx;
players[local_player_id].orientation_smooth.y = ly;
players[local_player_id].orientation_smooth.z = lz;

float len = sqrt(lx*lx+ly*ly+lz*lz);
players[local_player_id].orientation.x = players[local_player_id].orientation_smooth.x = lx/len;
players[local_player_id].orientation.y = players[local_player_id].orientation_smooth.y = ly/len;
players[local_player_id].orientation.z = players[local_player_id].orientation_smooth.z = lz/len;
players[local_player_id].orientation.x = lx/len;
players[local_player_id].orientation.y = ly/len;
players[local_player_id].orientation.z = lz/len;

camera_vx = players[local_player_id].physics.velocity.x;
camera_vy = players[local_player_id].physics.velocity.y;
Expand Down
77 changes: 77 additions & 0 deletions src/config.c
Expand Up @@ -20,6 +20,7 @@
#include "common.h"

struct RENDER_OPTIONS settings;
struct list config_keys;

static int config_read_key(void* user, const char* section, const char* name, const char* value) {
if(!strcmp(section,"client")) {
Expand Down Expand Up @@ -48,9 +49,85 @@ static int config_read_key(void* user, const char* section, const char* name, co
settings.mouse_sensitivity = atof(value)/5.0F*MOUSE_SENSITIVITY;
}
}
if(!strcmp(section,"controls")) {
for(int k=0;k<list_size(&config_keys);k++) {
struct config_key_pair* key = list_get(&config_keys,k);
if(!strcmp(name,key->name)) {
//printf("found override for %s, from %i to %i\n",key->name,key->def,atoi(value));
key->def = atoi(value);
break;
}
}
}
return 1;
}

void config_register_key(int internal, int def, const char* name) {
struct config_key_pair key;
key.internal = internal;
key.def = def;
if(name)
strcpy(key.name,name);
else
*key.name = 0;
list_add(&config_keys,&key);
}

int config_key_translate(int key, int dir) {
for(int k=0;k<list_size(&config_keys);k++) {
struct config_key_pair* a = list_get(&config_keys,k);
if(dir && a->internal==key)
return a->def;
if(!dir && a->def==key)
return a->internal;
}
return -1;
}

void config_reload() {
if(!list_created(&config_keys))
list_create(&config_keys,sizeof(struct config_key_pair));
else
list_clear(&config_keys);

config_register_key(WINDOW_KEY_UP,GLFW_KEY_W,"move_forward");
config_register_key(WINDOW_KEY_DOWN,GLFW_KEY_S,"move_backward");
config_register_key(WINDOW_KEY_LEFT,GLFW_KEY_A,"move_left");
config_register_key(WINDOW_KEY_RIGHT,GLFW_KEY_D,"move_right");
config_register_key(WINDOW_KEY_SPACE,GLFW_KEY_SPACE,"jump");
config_register_key(WINDOW_KEY_SPRINT,GLFW_KEY_LEFT_SHIFT,"sprint");
config_register_key(WINDOW_KEY_CURSOR_UP,GLFW_KEY_UP,"cube_color_up");
config_register_key(WINDOW_KEY_CURSOR_DOWN,GLFW_KEY_DOWN,"cube_color_down");
config_register_key(WINDOW_KEY_CURSOR_LEFT,GLFW_KEY_LEFT,"cube_color_left");
config_register_key(WINDOW_KEY_CURSOR_RIGHT,GLFW_KEY_RIGHT,"cube_color_right");
config_register_key(WINDOW_KEY_BACKSPACE,GLFW_KEY_BACKSPACE,NULL);
config_register_key(WINDOW_KEY_TOOL1,GLFW_KEY_1,NULL);
config_register_key(WINDOW_KEY_TOOL2,GLFW_KEY_2,NULL);
config_register_key(WINDOW_KEY_TOOL3,GLFW_KEY_3,NULL);
config_register_key(WINDOW_KEY_TOOL4,GLFW_KEY_4,NULL);
config_register_key(WINDOW_KEY_TAB,GLFW_KEY_TAB,"view_score");
config_register_key(WINDOW_KEY_ESCAPE,GLFW_KEY_ESCAPE,"quit_game");
config_register_key(WINDOW_KEY_MAP,GLFW_KEY_M,"view_map");
config_register_key(WINDOW_KEY_CROUCH,GLFW_KEY_LEFT_CONTROL,"crouch");
config_register_key(WINDOW_KEY_SNEAK,GLFW_KEY_V,"sneak");
config_register_key(WINDOW_KEY_ENTER,GLFW_KEY_ENTER,NULL);
config_register_key(WINDOW_KEY_F1,GLFW_KEY_F1,NULL);
config_register_key(WINDOW_KEY_F2,GLFW_KEY_F2,NULL);
config_register_key(WINDOW_KEY_F3,GLFW_KEY_F3,NULL);
config_register_key(WINDOW_KEY_F4,GLFW_KEY_F4,NULL);
config_register_key(WINDOW_KEY_YES,GLFW_KEY_Y,NULL);
config_register_key(WINDOW_KEY_YES,GLFW_KEY_Z,NULL);
config_register_key(WINDOW_KEY_NO,GLFW_KEY_N,NULL);
config_register_key(WINDOW_KEY_VOLUME_UP,GLFW_KEY_KP_ADD,"volume_up");
config_register_key(WINDOW_KEY_VOLUME_DOWN,GLFW_KEY_KP_SUBTRACT,"volume_down");
config_register_key(WINDOW_KEY_V,GLFW_KEY_V,NULL);
config_register_key(WINDOW_KEY_RELOAD,GLFW_KEY_R,"reload");
config_register_key(WINDOW_KEY_CHAT,GLFW_KEY_T,"chat_global");
config_register_key(WINDOW_KEY_FULLSCREEN,GLFW_KEY_F11,"fullscreen");
config_register_key(WINDOW_KEY_SCREENSHOT,GLFW_KEY_F5,"screenshot");
config_register_key(WINDOW_KEY_CHANGETEAM,GLFW_KEY_COMMA,"change_team");
config_register_key(WINDOW_KEY_CHANGEWEAPON,GLFW_KEY_PERIOD,"change_weapon");
config_register_key(WINDOW_KEY_PICKCOLOR,GLFW_KEY_E,"cube_color_sample");

ini_parse("config.ini",config_read_key,NULL);
}
10 changes: 10 additions & 0 deletions src/config.h
Expand Up @@ -34,4 +34,14 @@ extern struct RENDER_OPTIONS {
float mouse_sensitivity;
} settings;

extern struct list config_keys;

struct config_key_pair {
int internal;
int def;
char name[32];
};

void config_register_key(int internal, int def, const char* name);
int config_key_translate(int key, int dir);
void config_reload(void);
4 changes: 4 additions & 0 deletions src/list.c
@@ -1,5 +1,9 @@
#include "common.h"

int list_created(struct list* l) {
return l->element_size>0;
}

void list_create(struct list* l, int element_size) {
l->data = NULL;
l->elements = 0;
Expand Down
1 change: 1 addition & 0 deletions src/list.h
Expand Up @@ -3,6 +3,7 @@ struct list {
int elements, element_size, mem_size;
};

int list_created(struct list* l);
void list_create(struct list* l, int element_size);
void* list_get(struct list* l, int i);
void* list_add(struct list* l, void* e);
Expand Down
51 changes: 1 addition & 50 deletions src/window.c
Expand Up @@ -82,56 +82,7 @@ const char* window_clipboard() {
}

int window_key_translate(int key, int dir) {
int table[128] = {
WINDOW_KEY_UP,GLFW_KEY_W,
WINDOW_KEY_DOWN,GLFW_KEY_S,
WINDOW_KEY_LEFT,GLFW_KEY_A,
WINDOW_KEY_RIGHT,GLFW_KEY_D,
WINDOW_KEY_SPACE,GLFW_KEY_SPACE,
WINDOW_KEY_SPRINT,GLFW_KEY_LEFT_SHIFT,
WINDOW_KEY_CURSOR_UP,GLFW_KEY_UP,
WINDOW_KEY_CURSOR_DOWN,GLFW_KEY_DOWN,
WINDOW_KEY_CURSOR_LEFT,GLFW_KEY_LEFT,
WINDOW_KEY_CURSOR_RIGHT,GLFW_KEY_RIGHT,
WINDOW_KEY_BACKSPACE,GLFW_KEY_BACKSPACE,
WINDOW_KEY_TOOL1,GLFW_KEY_1,
WINDOW_KEY_TOOL2,GLFW_KEY_2,
WINDOW_KEY_TOOL3,GLFW_KEY_3,
WINDOW_KEY_TOOL4,GLFW_KEY_4,
WINDOW_KEY_TAB,GLFW_KEY_TAB,
WINDOW_KEY_ESCAPE,GLFW_KEY_ESCAPE,
WINDOW_KEY_MAP,GLFW_KEY_M,
WINDOW_KEY_CROUCH,GLFW_KEY_LEFT_CONTROL,
WINDOW_KEY_SNEAK,GLFW_KEY_V,
WINDOW_KEY_ENTER,GLFW_KEY_ENTER,
WINDOW_KEY_F1,GLFW_KEY_F1,
WINDOW_KEY_F2,GLFW_KEY_F2,
WINDOW_KEY_F3,GLFW_KEY_F3,
WINDOW_KEY_F4,GLFW_KEY_F4,
WINDOW_KEY_YES,GLFW_KEY_Y,
WINDOW_KEY_YES,GLFW_KEY_Z,
WINDOW_KEY_NO,GLFW_KEY_N,
WINDOW_KEY_VOLUME_UP,GLFW_KEY_KP_ADD,
WINDOW_KEY_VOLUME_DOWN,GLFW_KEY_KP_SUBTRACT,
WINDOW_KEY_V,GLFW_KEY_V,
WINDOW_KEY_RELOAD,GLFW_KEY_R,
WINDOW_KEY_CHAT,GLFW_KEY_T,
WINDOW_KEY_FULLSCREEN,GLFW_KEY_F11,
WINDOW_KEY_SCREENSHOT,GLFW_KEY_F5,
WINDOW_KEY_CHANGETEAM,GLFW_KEY_COMMA,
WINDOW_KEY_CHANGEWEAPON,GLFW_KEY_PERIOD,
WINDOW_KEY_PICKCOLOR,GLFW_KEY_E,
};
if(dir) {
for(int k=0;k<128;k+=2)
if(table[k]==key)
return table[k+1];
} else {
for(int k=0;k<128;k+=2)
if(table[k+1]==key)
return table[k];
}
return -1;
return config_key_translate(key,dir);
}

int window_key_down(int key) {
Expand Down

0 comments on commit 7872396

Please sign in to comment.