From 29681a699cbf95d51774ab889a5c0d29dbdc578b Mon Sep 17 00:00:00 2001 From: xtreme8000 Date: Fri, 13 Jul 2018 23:05:28 +0200 Subject: [PATCH] controls gui --- src/config.c | 204 +++++++++++++++++++++++++++------------------------ src/config.h | 11 +-- src/hud.c | 136 ++++++++++++++++++++++++---------- src/hud.h | 2 +- src/main.c | 2 - src/window.c | 4 + src/window.h | 1 + 7 files changed, 217 insertions(+), 143 deletions(-) diff --git a/src/config.c b/src/config.c index dd066aa..5664550 100644 --- a/src/config.c +++ b/src/config.c @@ -60,6 +60,11 @@ void config_save() { config_seti("vol",settings.volume); config_seti("show_fps",settings.show_fps); + for(int k=0;kname,e->def); + } + FILE* f = fopen("config.ini","w"); char last_section[32] = {0}; @@ -133,16 +138,21 @@ static int config_read_key(void* user, const char* section, const char* name, co return 1; } -void config_register_key(int internal, int def, const char* name, int toggle) { - struct config_key_pair key; - key.internal = internal; - key.def = def; - key.toggle = toggle; - if(name) - strcpy(key.name,name); - else - *key.name = 0; - list_add(&config_keys,&key); +void config_register_key(int internal, int def, const char* name, int toggle, const char* display) { + struct config_key_pair key; + key.internal = internal; + key.def = def; + key.toggle = toggle; + if(display) + strncpy(key.display,display,sizeof(key.display)-1); + else + *key.display = 0; + + if(name) + strncpy(key.name,name,sizeof(key.name)-1); + else + *key.name = 0; + list_add(&config_keys,&key); } int config_key_translate(int key, int dir) { @@ -175,100 +185,100 @@ void config_key_reset_togglestates() { void config_reload() { if(!list_created(&config_file)) - list_create(&config_file,sizeof(struct config_file_entry)); - else - list_clear(&config_file); + list_create(&config_file,sizeof(struct config_file_entry)); + else + list_clear(&config_file); - if(!list_created(&config_keys)) - list_create(&config_keys,sizeof(struct config_key_pair)); - else - list_clear(&config_keys); + if(!list_created(&config_keys)) + list_create(&config_keys,sizeof(struct config_key_pair)); + else + list_clear(&config_keys); #ifdef USE_SDL - config_register_key(WINDOW_KEY_UP,SDLK_w,"move_forward",0); - config_register_key(WINDOW_KEY_DOWN,SDLK_s,"move_backward",0); - config_register_key(WINDOW_KEY_LEFT,SDLK_a,"move_left",0); - config_register_key(WINDOW_KEY_RIGHT,SDLK_d,"move_right",0); - config_register_key(WINDOW_KEY_SPACE,SDLK_SPACE,"jump",0); - config_register_key(WINDOW_KEY_SPRINT,SDLK_LSHIFT,"sprint",0); - config_register_key(WINDOW_KEY_CURSOR_UP,SDLK_UP,"cube_color_up",0); - config_register_key(WINDOW_KEY_CURSOR_DOWN,SDLK_DOWN,"cube_color_down",0); - config_register_key(WINDOW_KEY_CURSOR_LEFT,SDLK_LEFT,"cube_color_left",0); - config_register_key(WINDOW_KEY_CURSOR_RIGHT,SDLK_RIGHT,"cube_color_right",0); - config_register_key(WINDOW_KEY_BACKSPACE,SDLK_BACKSPACE,NULL,0); - config_register_key(WINDOW_KEY_TOOL1,SDLK_1,NULL,0); - config_register_key(WINDOW_KEY_TOOL2,SDLK_2,NULL,0); - config_register_key(WINDOW_KEY_TOOL3,SDLK_3,NULL,0); - config_register_key(WINDOW_KEY_TOOL4,SDLK_4,NULL,0); - config_register_key(WINDOW_KEY_TAB,SDLK_TAB,"view_score",0); - config_register_key(WINDOW_KEY_ESCAPE,SDLK_ESCAPE,"quit_game",0); - config_register_key(WINDOW_KEY_MAP,SDLK_m,"view_map",1); - config_register_key(WINDOW_KEY_CROUCH,SDLK_LCTRL,"crouch",0); - config_register_key(WINDOW_KEY_SNEAK,SDLK_v,"sneak",0); - config_register_key(WINDOW_KEY_ENTER,SDLK_RETURN,NULL,0); - config_register_key(WINDOW_KEY_F1,SDLK_F1,NULL,0); - config_register_key(WINDOW_KEY_F2,SDLK_F2,NULL,0); - config_register_key(WINDOW_KEY_F3,SDLK_F3,NULL,0); - config_register_key(WINDOW_KEY_F4,SDLK_F4,NULL,0); - config_register_key(WINDOW_KEY_YES,SDLK_y,NULL,0); - config_register_key(WINDOW_KEY_YES,SDLK_z,NULL,0); - config_register_key(WINDOW_KEY_NO,SDLK_n,NULL,0); - config_register_key(WINDOW_KEY_VOLUME_UP,SDLK_KP_PLUS,"volume_up",0); - config_register_key(WINDOW_KEY_VOLUME_DOWN,SDLK_KP_MINUS,"volume_down",0); - config_register_key(WINDOW_KEY_V,SDLK_v,NULL,0); - config_register_key(WINDOW_KEY_RELOAD,SDLK_r,"reload",0); - config_register_key(WINDOW_KEY_CHAT,SDLK_t,"chat_global",0); - config_register_key(WINDOW_KEY_FULLSCREEN,SDLK_F11,"fullscreen",0); - config_register_key(WINDOW_KEY_SCREENSHOT,SDLK_F5,"screenshot",0); - config_register_key(WINDOW_KEY_CHANGETEAM,SDLK_COMMA,"change_team",0); - config_register_key(WINDOW_KEY_CHANGEWEAPON,SDLK_PERIOD,"change_weapon",0); - config_register_key(WINDOW_KEY_PICKCOLOR,SDLK_e,"cube_color_sample",0); - config_register_key(WINDOW_KEY_COMMAND,SDLK_SLASH,"chat_command",0); - config_register_key(WINDOW_KEY_HIDEHUD,SDLK_F6,"hide_hud",1); + config_register_key(WINDOW_KEY_UP,SDLK_w,"move_forward",0,"Forward"); + config_register_key(WINDOW_KEY_DOWN,SDLK_s,"move_backward",0,"Backward"); + config_register_key(WINDOW_KEY_LEFT,SDLK_a,"move_left",0,"Left"); + config_register_key(WINDOW_KEY_RIGHT,SDLK_d,"move_right",0,"Right"); + config_register_key(WINDOW_KEY_SPACE,SDLK_SPACE,"jump",0,"Jump"); + config_register_key(WINDOW_KEY_SPRINT,SDLK_LSHIFT,"sprint",0,"Sprint"); + config_register_key(WINDOW_KEY_CURSOR_UP,SDLK_UP,"cube_color_up",0,"Color up"); + config_register_key(WINDOW_KEY_CURSOR_DOWN,SDLK_DOWN,"cube_color_down",0,"Color down"); + config_register_key(WINDOW_KEY_CURSOR_LEFT,SDLK_LEFT,"cube_color_left",0,"Color left"); + config_register_key(WINDOW_KEY_CURSOR_RIGHT,SDLK_RIGHT,"cube_color_right",0,"Color right"); + config_register_key(WINDOW_KEY_BACKSPACE,SDLK_BACKSPACE,NULL,0); + config_register_key(WINDOW_KEY_TOOL1,SDLK_1,NULL,0); + config_register_key(WINDOW_KEY_TOOL2,SDLK_2,NULL,0); + config_register_key(WINDOW_KEY_TOOL3,SDLK_3,NULL,0); + config_register_key(WINDOW_KEY_TOOL4,SDLK_4,NULL,0); + config_register_key(WINDOW_KEY_TAB,SDLK_TAB,"view_score",0,"Score"); + config_register_key(WINDOW_KEY_ESCAPE,SDLK_ESCAPE,"quit_game",0,"Quit"); + config_register_key(WINDOW_KEY_MAP,SDLK_m,"view_map",1,"Map"); + config_register_key(WINDOW_KEY_CROUCH,SDLK_LCTRL,"crouch",0,"Crouch"); + config_register_key(WINDOW_KEY_SNEAK,SDLK_v,"sneak",0,"Sneak"); + config_register_key(WINDOW_KEY_ENTER,SDLK_RETURN,NULL,0); + config_register_key(WINDOW_KEY_F1,SDLK_F1,NULL,0); + config_register_key(WINDOW_KEY_F2,SDLK_F2,NULL,0); + config_register_key(WINDOW_KEY_F3,SDLK_F3,NULL,0); + config_register_key(WINDOW_KEY_F4,SDLK_F4,NULL,0); + config_register_key(WINDOW_KEY_YES,SDLK_y,NULL,0); + config_register_key(WINDOW_KEY_YES,SDLK_z,NULL,0); + config_register_key(WINDOW_KEY_NO,SDLK_n,NULL,0); + config_register_key(WINDOW_KEY_VOLUME_UP,SDLK_KP_PLUS,"volume_up",0,"Volume up"); + config_register_key(WINDOW_KEY_VOLUME_DOWN,SDLK_KP_MINUS,"volume_down",0,"Volume down"); + config_register_key(WINDOW_KEY_V,SDLK_v,NULL,0); + config_register_key(WINDOW_KEY_RELOAD,SDLK_r,"reload",0,"Reload"); + config_register_key(WINDOW_KEY_CHAT,SDLK_t,"chat_global",0,"Chat"); + config_register_key(WINDOW_KEY_FULLSCREEN,SDLK_F11,"fullscreen",0,"Fullscreen"); + config_register_key(WINDOW_KEY_SCREENSHOT,SDLK_F5,"screenshot",0,"Screenshot"); + config_register_key(WINDOW_KEY_CHANGETEAM,SDLK_COMMA,"change_team",0,"Team select"); + config_register_key(WINDOW_KEY_CHANGEWEAPON,SDLK_PERIOD,"change_weapon",0,"Gun select"); + config_register_key(WINDOW_KEY_PICKCOLOR,SDLK_e,"cube_color_sample","Pick color"); + config_register_key(WINDOW_KEY_COMMAND,SDLK_SLASH,"chat_command",0,"Command"); + config_register_key(WINDOW_KEY_HIDEHUD,SDLK_F6,"hide_hud",1,"Hide HUD"); #endif #ifdef USE_GLFW - config_register_key(WINDOW_KEY_UP,GLFW_KEY_W,"move_forward",0); - config_register_key(WINDOW_KEY_DOWN,GLFW_KEY_S,"move_backward",0); - config_register_key(WINDOW_KEY_LEFT,GLFW_KEY_A,"move_left",0); - config_register_key(WINDOW_KEY_RIGHT,GLFW_KEY_D,"move_right",0); - config_register_key(WINDOW_KEY_SPACE,GLFW_KEY_SPACE,"jump",0); - config_register_key(WINDOW_KEY_SPRINT,GLFW_KEY_LEFT_SHIFT,"sprint",0); - config_register_key(WINDOW_KEY_CURSOR_UP,GLFW_KEY_UP,"cube_color_up",0); - config_register_key(WINDOW_KEY_CURSOR_DOWN,GLFW_KEY_DOWN,"cube_color_down",0); - config_register_key(WINDOW_KEY_CURSOR_LEFT,GLFW_KEY_LEFT,"cube_color_left",0); - config_register_key(WINDOW_KEY_CURSOR_RIGHT,GLFW_KEY_RIGHT,"cube_color_right",0); - config_register_key(WINDOW_KEY_BACKSPACE,GLFW_KEY_BACKSPACE,NULL,0); - config_register_key(WINDOW_KEY_TOOL1,GLFW_KEY_1,NULL,0); - config_register_key(WINDOW_KEY_TOOL2,GLFW_KEY_2,NULL,0); - config_register_key(WINDOW_KEY_TOOL3,GLFW_KEY_3,NULL,0); - config_register_key(WINDOW_KEY_TOOL4,GLFW_KEY_4,NULL,0); - config_register_key(WINDOW_KEY_TAB,GLFW_KEY_TAB,"view_score",0); - config_register_key(WINDOW_KEY_ESCAPE,GLFW_KEY_ESCAPE,"quit_game",0); - config_register_key(WINDOW_KEY_MAP,GLFW_KEY_M,"view_map",1); - config_register_key(WINDOW_KEY_CROUCH,GLFW_KEY_LEFT_CONTROL,"crouch",0); - config_register_key(WINDOW_KEY_SNEAK,GLFW_KEY_V,"sneak",0); - config_register_key(WINDOW_KEY_ENTER,GLFW_KEY_ENTER,NULL,0); - config_register_key(WINDOW_KEY_F1,GLFW_KEY_F1,NULL,0); - config_register_key(WINDOW_KEY_F2,GLFW_KEY_F2,NULL,0); - config_register_key(WINDOW_KEY_F3,GLFW_KEY_F3,NULL,0); - config_register_key(WINDOW_KEY_F4,GLFW_KEY_F4,NULL,0); - config_register_key(WINDOW_KEY_YES,GLFW_KEY_Y,NULL,0); - config_register_key(WINDOW_KEY_YES,GLFW_KEY_Z,NULL,0); - config_register_key(WINDOW_KEY_NO,GLFW_KEY_N,NULL,0); - config_register_key(WINDOW_KEY_VOLUME_UP,GLFW_KEY_KP_ADD,"volume_up",0); - config_register_key(WINDOW_KEY_VOLUME_DOWN,GLFW_KEY_KP_SUBTRACT,"volume_down",0); - config_register_key(WINDOW_KEY_V,GLFW_KEY_V,NULL,0); - config_register_key(WINDOW_KEY_RELOAD,GLFW_KEY_R,"reload",0); - config_register_key(WINDOW_KEY_CHAT,GLFW_KEY_T,"chat_global",0); - config_register_key(WINDOW_KEY_FULLSCREEN,GLFW_KEY_F11,"fullscreen",0); - config_register_key(WINDOW_KEY_SCREENSHOT,GLFW_KEY_F5,"screenshot",0); - config_register_key(WINDOW_KEY_CHANGETEAM,GLFW_KEY_COMMA,"change_team",0); - config_register_key(WINDOW_KEY_CHANGEWEAPON,GLFW_KEY_PERIOD,"change_weapon",0); - config_register_key(WINDOW_KEY_PICKCOLOR,GLFW_KEY_E,"cube_color_sample",0); - config_register_key(WINDOW_KEY_COMMAND,GLFW_KEY_SLASH,"chat_command",0); - config_register_key(WINDOW_KEY_HIDEHUD,GLFW_KEY_F6,"hide_hud",1); + config_register_key(WINDOW_KEY_UP,GLFW_KEY_W,"move_forward",0,"Forward"); + config_register_key(WINDOW_KEY_DOWN,GLFW_KEY_S,"move_backward",0,"Backward"); + config_register_key(WINDOW_KEY_LEFT,GLFW_KEY_A,"move_left",0,"Left"); + config_register_key(WINDOW_KEY_RIGHT,GLFW_KEY_D,"move_right",0,"Right"); + config_register_key(WINDOW_KEY_SPACE,GLFW_KEY_SPACE,"jump",0,"Jump"); + config_register_key(WINDOW_KEY_SPRINT,GLFW_KEY_LEFT_SHIFT,"sprint",0,"Sprint"); + config_register_key(WINDOW_KEY_CURSOR_UP,GLFW_KEY_UP,"cube_color_up",0,"Color up"); + config_register_key(WINDOW_KEY_CURSOR_DOWN,GLFW_KEY_DOWN,"cube_color_down",0,"Color down"); + config_register_key(WINDOW_KEY_CURSOR_LEFT,GLFW_KEY_LEFT,"cube_color_left",0,"Color left"); + config_register_key(WINDOW_KEY_CURSOR_RIGHT,GLFW_KEY_RIGHT,"cube_color_right",0,"Color right"); + config_register_key(WINDOW_KEY_BACKSPACE,GLFW_KEY_BACKSPACE,NULL,0,NULL); + config_register_key(WINDOW_KEY_TOOL1,GLFW_KEY_1,NULL,0,NULL); + config_register_key(WINDOW_KEY_TOOL2,GLFW_KEY_2,NULL,0,NULL); + config_register_key(WINDOW_KEY_TOOL3,GLFW_KEY_3,NULL,0,NULL); + config_register_key(WINDOW_KEY_TOOL4,GLFW_KEY_4,NULL,0,NULL); + config_register_key(WINDOW_KEY_TAB,GLFW_KEY_TAB,"view_score",0,"Score"); + config_register_key(WINDOW_KEY_ESCAPE,GLFW_KEY_ESCAPE,"quit_game",0,"Quit"); + config_register_key(WINDOW_KEY_MAP,GLFW_KEY_M,"view_map",1,"Map"); + config_register_key(WINDOW_KEY_CROUCH,GLFW_KEY_LEFT_CONTROL,"crouch",0,"Crouch"); + config_register_key(WINDOW_KEY_SNEAK,GLFW_KEY_V,"sneak",0,"Sneak"); + config_register_key(WINDOW_KEY_ENTER,GLFW_KEY_ENTER,NULL,0,NULL); + config_register_key(WINDOW_KEY_F1,GLFW_KEY_F1,NULL,0,NULL); + config_register_key(WINDOW_KEY_F2,GLFW_KEY_F2,NULL,0,NULL); + config_register_key(WINDOW_KEY_F3,GLFW_KEY_F3,NULL,0,NULL); + config_register_key(WINDOW_KEY_F4,GLFW_KEY_F4,NULL,0,NULL); + config_register_key(WINDOW_KEY_YES,GLFW_KEY_Y,NULL,0,NULL); + config_register_key(WINDOW_KEY_YES,GLFW_KEY_Z,NULL,0,NULL); + config_register_key(WINDOW_KEY_NO,GLFW_KEY_N,NULL,0,NULL); + config_register_key(WINDOW_KEY_VOLUME_UP,GLFW_KEY_KP_ADD,"volume_up",0,"Volume up"); + config_register_key(WINDOW_KEY_VOLUME_DOWN,GLFW_KEY_KP_SUBTRACT,"volume_down",0,"Volume down"); + config_register_key(WINDOW_KEY_V,GLFW_KEY_V,NULL,0,NULL); + config_register_key(WINDOW_KEY_RELOAD,GLFW_KEY_R,"reload",0,"Reload"); + config_register_key(WINDOW_KEY_CHAT,GLFW_KEY_T,"chat_global",0,"Chat"); + config_register_key(WINDOW_KEY_FULLSCREEN,GLFW_KEY_F11,"fullscreen",0,"Fullscreen"); + config_register_key(WINDOW_KEY_SCREENSHOT,GLFW_KEY_F5,"screenshot",0,"Screenshot"); + config_register_key(WINDOW_KEY_CHANGETEAM,GLFW_KEY_COMMA,"change_team",0,"Team select"); + config_register_key(WINDOW_KEY_CHANGEWEAPON,GLFW_KEY_PERIOD,"change_weapon",0,"Gun select"); + config_register_key(WINDOW_KEY_PICKCOLOR,GLFW_KEY_E,"cube_color_sample",0,"Pick color"); + config_register_key(WINDOW_KEY_COMMAND,GLFW_KEY_SLASH,"chat_command",0,"Command"); + config_register_key(WINDOW_KEY_HIDEHUD,GLFW_KEY_F6,"hide_hud",1,"Hide HUD"); #endif ini_parse("config.ini",config_read_key,NULL); diff --git a/src/config.h b/src/config.h index 99965d3..c8a6e52 100644 --- a/src/config.h +++ b/src/config.h @@ -46,10 +46,11 @@ extern struct RENDER_OPTIONS { extern struct list config_keys; struct config_key_pair { - int internal; - int def; - int toggle; - char name[32]; + int internal; + int def; + int toggle; + char name[24]; + char display[16]; }; enum { @@ -70,7 +71,7 @@ struct config_setting { extern struct list config_settings; -void config_register_key(int internal, int def, const char* name, int toggle); +void config_register_key(int internal, int def, const char* name, int toggle, const char* display); int config_key_translate(int key, int dir); struct config_key_pair* config_key(int key); void config_key_reset_togglestates(); diff --git a/src/hud.c b/src/hud.c index bf568f9..100bbea 100644 --- a/src/hud.c +++ b/src/hud.c @@ -1040,7 +1040,7 @@ static const char* hud_ingame_completeword(const char* s) { return (strlen(candidates[0].str)>0 && candidates[0].acceptance>0)?candidates[0].str:NULL; } -static void hud_ingame_keyboard(int key, int action, int mods) { +static void hud_ingame_keyboard(int key, int action, int mods, int internal) { if(chat_input_mode!=CHAT_NO_INPUT && action==WINDOW_PRESS && key==WINDOW_KEY_TAB && strlen(chat[0][0])>0) { //autocomplete word char* incomplete = strrchr(chat[0][0],' ')+1; @@ -1629,7 +1629,7 @@ static void hud_serverlist_mouseclick(int button, int action, int mods) { } } -static void hud_serverlist_keyboard(int key, int action, int mods) { +static void hud_serverlist_keyboard(int key, int action, int mods, int internal) { if(action!=WINDOW_RELEASE) { if(key==WINDOW_KEY_UP || key==WINDOW_KEY_CURSOR_UP) { serverlist_scroll += 20.0F; @@ -1771,7 +1771,7 @@ static int is_float(char* x) { } } -static void hud_settings_keyboard(int key, int action, int mods) { +static void hud_settings_keyboard(int key, int action, int mods, int internal) { if(hud_settings_edit && action!=WINDOW_RELEASE && key==WINDOW_KEY_BACKSPACE) { size_t text_len = strlen(chat[0][0]); if(text_len>0) { @@ -1916,51 +1916,111 @@ struct hud hud_settings = { /* HUD_CONTROLS START */ +static struct config_key_pair* hud_controls_edit = NULL; + static void hud_controls_render(float scalex, float scaley) { - glColor3f(0.5F,0.5F,0.5F); - float t = window_time()*0.03125F; - texture_draw_sector(&texture_ui_bg,0.0F,settings.window_height,settings.window_width,settings.window_height,t,t,settings.window_width/512.0F,settings.window_height/512.0F); + glColor3f(0.5F,0.5F,0.5F); + float t = window_time()*0.03125F; + texture_draw_sector(&texture_ui_bg,0.0F,settings.window_height,settings.window_width,settings.window_height,t,t,settings.window_width/512.0F,settings.window_height/512.0F); - glColor4f(0.0F,0.0F,0.0F,0.66F); - glEnable(GL_BLEND); - texture_draw_empty((settings.window_width-640*scaley)/2.0F,550*scaley,640*scaley,600*scaley); - glDisable(GL_BLEND); + glColor4f(0.0F,0.0F,0.0F,0.66F); + glEnable(GL_BLEND); + texture_draw_empty((settings.window_width-640*scaley)/2.0F,550*scaley,640*scaley,600*scaley); + glDisable(GL_BLEND); - glColor3f(1.0F,1.0F,0.0F); - font_render((settings.window_width-600*scaley)/2.0F+0*scaley,535*scaley,36*scaley,"Controls"); - glColor3f(0.5F,0.5F,0.5F); - font_centered((settings.window_width-600*scaley)/2.0F+225*scaley,535*scaley-12*scaley,20*scaley,"Server list"); - font_centered((settings.window_width-600*scaley)/2.0F+340*scaley,535*scaley-12*scaley,20*scaley,"Settings"); + glColor3f(1.0F,1.0F,0.0F); + font_render((settings.window_width-600*scaley)/2.0F+0*scaley,535*scaley,36*scaley,"Controls"); + glColor3f(0.5F,0.5F,0.5F); + font_centered((settings.window_width-600*scaley)/2.0F+225*scaley,535*scaley-12*scaley,20*scaley,"Server list"); + font_centered((settings.window_width-600*scaley)/2.0F+340*scaley,535*scaley-12*scaley,20*scaley,"Settings"); + + int x_off = 0; + int y_off = 0; + for(int k=0;kdisplay) { + glColor3f(1.0F,1.0F,1.0F); + font_render((settings.window_width-600*scaley)/2.0F+200*x_off*scaley,(460-40*y_off)*scaley,16*scaley,a->display); + + texture_draw_sector(&texture_ui_input,(settings.window_width-600*scaley)/2.0F+(200*x_off+110)*scaley,(466-40*y_off)*scaley,8*scaley,32*scaley,0.0F,0.0F,0.25F,1.0F); + texture_draw_sector(&texture_ui_input,(settings.window_width-600*scaley)/2.0F+(200*x_off+118)*scaley,(466-40*y_off)*scaley,64*scaley,32*scaley,0.25F,0.0F,0.5F,1.0F); + texture_draw_sector(&texture_ui_input,(settings.window_width-600*scaley)/2.0F+(200*x_off+182)*scaley,(466-40*y_off)*scaley,8*scaley,32*scaley,0.75F,0.0F,0.25F,1.0F); + + if(hud_controls_edit==a) + glColor3f(1.0F,0.0F,0.0F); + font_centered((settings.window_width-600*scaley)/2.0F+(200*x_off+150)*scaley,(460-40*y_off)*scaley,20*scaley,glfwGetKeyName(a->def,0)!=NULL?(char*)glfwGetKeyName(a->def,0):"?"); + + y_off++; + if(y_off>10) { + y_off = 0; + x_off++; + } + } + } } static void hud_controls_mouseclick(int button, int action, int mods) { - if(action==WINDOW_PRESS) { - double x,y; - window_mouseloc(&x,&y); - float scaley = settings.window_height/600.0F; + if(action==WINDOW_PRESS) { + if(hud_controls_edit) + hud_controls_edit = NULL; + + double x,y; + window_mouseloc(&x,&y); + float scaley = settings.window_height/600.0F; + + if(x>=(settings.window_width-600*scaley)/2.0F+225*scaley-font_length(20*scaley,"Server list")/2 + && x<(settings.window_width-600*scaley)/2.0F+225*scaley+font_length(20*scaley,"Server list")/2 + && y>=77*scaley && y<97*scaley) { + hud_change(&hud_serverlist); + } - if(x>=(settings.window_width-600*scaley)/2.0F+225*scaley-font_length(20*scaley,"Server list")/2 - && x<(settings.window_width-600*scaley)/2.0F+225*scaley+font_length(20*scaley,"Server list")/2 - && y>=77*scaley && y<97*scaley) { - hud_change(&hud_serverlist); - } + if(x>=(settings.window_width-600*scaley)/2.0F+340*scaley-font_length(20*scaley,"Settings")/2 + && x<(settings.window_width-600*scaley)/2.0F+340*scaley+font_length(20*scaley,"Settings")/2 + && y>=77*scaley && y<97*scaley) { + hud_change(&hud_settings); + } - if(x>=(settings.window_width-600*scaley)/2.0F+340*scaley-font_length(20*scaley,"Settings")/2 - && x<(settings.window_width-600*scaley)/2.0F+340*scaley+font_length(20*scaley,"Settings")/2 - && y>=77*scaley && y<97*scaley) { - hud_change(&hud_settings); - } + y = settings.window_height-y; + + int x_off = 0; + int y_off = 0; + for(int k=0;kdisplay) { + + if(is_inside(x,y, + (settings.window_width-600*scaley)/2.0F+(200*x_off+110)*scaley, + (434-40*y_off)*scaley,80*scaley,32*scaley)) { + hud_controls_edit = a; + break; + } + + y_off++; + if(y_off>10) { + y_off = 0; + x_off++; + } + } + } } } +static void hud_controls_keyboard(int key, int action, int mods, int internal) { + if(hud_controls_edit) { + hud_controls_edit->def = internal; + hud_controls_edit = NULL; + config_save(); + } +} + struct hud hud_controls = { - (void*)NULL, - (void*)NULL, - hud_controls_render, - (void*)NULL, - (void*)NULL, - hud_controls_mouseclick, - (void*)NULL, - 0, - 0 + (void*)NULL, + (void*)NULL, + hud_controls_render, + hud_controls_keyboard, + (void*)NULL, + hud_controls_mouseclick, + (void*)NULL, + 0, + 0 }; diff --git a/src/hud.h b/src/hud.h index 921e438..bf95caa 100644 --- a/src/hud.h +++ b/src/hud.h @@ -21,7 +21,7 @@ struct hud { void (*init) (); void (*render_3D) (); void (*render_2D) (float scalex, float scaley); - void (*input_keyboard) (int key, int action, int mods); + void (*input_keyboard) (int key, int action, int mods, int internal); void (*input_mouselocation) (double x, double y); void (*input_mouseclick) (int button, int action, int mods); void (*input_mousescroll) (double yoffset); diff --git a/src/main.c b/src/main.c index 6377785..1b42e6c 100644 --- a/src/main.c +++ b/src/main.c @@ -491,8 +491,6 @@ void keys(struct window_instance* window, int key, int scancode, int action, int } if(action==WINDOW_RELEASE && !config_key(key)->toggle) window_pressed_keys[key] = 0; - if(hud_active->input_keyboard) - hud_active->input_keyboard(key,action,mods); #ifdef USE_GLFW if(key==WINDOW_KEY_FULLSCREEN && action==GLFW_PRESS) { //switch between fullscreen diff --git a/src/window.c b/src/window.c index 5a43f26..0e1a113 100644 --- a/src/window.c +++ b/src/window.c @@ -73,6 +73,10 @@ static void window_impl_keys(GLFWwindow* window, int key, int scancode, int acti int tr = window_key_translate(key,0); if(tr>=0) keys(hud_window,tr,scancode,a,mods>0); + else + tr = WINDOW_KEY_UNKNOWN; + if(hud_active->input_keyboard) + hud_active->input_keyboard(tr,action,mods,key); } float window_time() { diff --git a/src/window.h b/src/window.h index d6ddb9f..b2927de 100644 --- a/src/window.h +++ b/src/window.h @@ -28,6 +28,7 @@ enum { }; enum window_keys { + WINDOW_KEY_UNKNOWN, WINDOW_KEY_UP, WINDOW_KEY_DOWN, WINDOW_KEY_LEFT,