From b6e9310a38e6b4c6a2f5d63982ee375a4d0fefed Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Tue, 9 Jul 2024 09:41:53 +0200 Subject: [PATCH] =?UTF-8?q?-=20[NEW]=20Men=C3=BA=20de=20redefinici=C3=B3?= =?UTF-8?q?=20de=20tecles=20acabat=20-=20[NEW]=20Les=20tecles=20es=20guard?= =?UTF-8?q?en=20al=20arxiu=20de=20config?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/font2.gif | Bin 627 -> 649 bytes source/config.cpp | 3 ++ source/m_menu_tecles.cpp | 65 +++++++++++++++++++++++++++++---------- source/main.cpp | 33 ++++++++++++-------- 4 files changed, 72 insertions(+), 29 deletions(-) diff --git a/data/font2.gif b/data/font2.gif index 68266daea86de177d9ad51d0e8fe120622cbfcc7..9ef50679dbf71f063b5c178e2f7451f5e56c98dc 100644 GIT binary patch delta 118 zcmV-+0Ez$e1c?Q(8v<^w3fEW=kzIfJLDOI#Q=dkkEjJ$`!@!pmdz%C}RDHy;r{9C> zIAz~bYB0!CPQt;1ntm|o#$82mFo@oW8(^b delta 96 zcmV-m0H6Pf1@i>38v-|dhk6(b(=*P=^pwZVJHU$YN;8y$`}Y@h?KbZ8-ELykz$N8BK28!(ai`#0RTI{ CA1#Ie diff --git a/source/config.cpp b/source/config.cpp index cde7478..0c4e309 100644 --- a/source/config.cpp +++ b/source/config.cpp @@ -45,7 +45,10 @@ namespace config void defineKey(const int which, const int key) { + static const char* nomtecles[6] = {"keyup", "keydown", "keyleft", "keyright", "keyjump", "keypick"}; keys[which] = key; + char tmp[5]; + file::setConfigValue(nomtecles[which], SDL_itoa(key, tmp, 10)); } const int getKey(const int which) diff --git a/source/m_menu_tecles.cpp b/source/m_menu_tecles.cpp index 6155df4..3be5836 100644 --- a/source/m_menu_tecles.cpp +++ b/source/m_menu_tecles.cpp @@ -8,7 +8,27 @@ namespace modules { namespace menu_tecles { + enum states { STATE_SELECTING, STATE_REDEFINING }; + + const char *nom_tecles[] = {"?", "?", "?", "?", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0", + "RETURN", "ESC", "BORRAR", "TAB", "ESPAI", "'", "j", "[", "]", "l", "?", "m", "k", "\\", ",", ".", "-", "BLOQMAYS", "F1", "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9", "F10", "F11", "F12", + "PRNTSCR", "SCRLOCK", "PAUSE", "INSERT", "INICI", "REPAG", "SUPR", "FIN", "AVPAG", "CUR-DRETA", "CUR-ESQ", "CUR-AVALL", "CUR-AMUNT", + "NUM-LOCK", "NUM-DIV", "NUM-MUL", "NUM-MENYS", "NUM-SUM", "NUM-INTRO", "NUM-1", "NUM-2", "NUM-3", "NUM-4", "NUM-5", "NUM-6", "NUM-7", "NUM-8", "NUM-9", "NUM-0", "NUM-PUNT", "<", "MENU", + // 101 << -- >> 224 (if num>101 then num-=122) + "LCTRL", "LMAYUS", "LALT", "LGUI", "RCTRL", "RMAYUS", "RALT", "RGUI" }; + int selected_option = MENU_TECLES_AMUNT; + states state = STATE_SELECTING; + + const char *getKeyName(const uint8_t key) + { + if (key-122>110) return nom_tecles[0]; + + if (key>101) + return nom_tecles[key-122]; + else + return nom_tecles[key]; + } void init() { @@ -17,20 +37,32 @@ namespace modules int loop() { - if (input::keyPressed(SDL_SCANCODE_ESCAPE)) { - return MENU_TECLES_TORNAR; - } - if (input::keyPressed(SDL_SCANCODE_DOWN) || input::keyPressed(config::getKey(KEY_DOWN))) - { selected_option++; if (selected_option>6) selected_option=0; } + if (state == STATE_SELECTING) + { + if (input::keyPressed(SDL_SCANCODE_ESCAPE)) { + return MENU_TECLES_TORNAR; + } + if (input::keyPressed(SDL_SCANCODE_DOWN) || input::keyPressed(config::getKey(KEY_DOWN))) + { selected_option++; if (selected_option>6) selected_option=0; } - if (input::keyPressed(SDL_SCANCODE_UP) || input::keyPressed(config::getKey(KEY_UP))) - { selected_option--; if (selected_option<0) selected_option=6; } + if (input::keyPressed(SDL_SCANCODE_UP) || input::keyPressed(config::getKey(KEY_UP))) + { selected_option--; if (selected_option<0) selected_option=6; } - if (input::keyPressed(SDL_SCANCODE_SPACE) || input::keyPressed(SDL_SCANCODE_RETURN) || - input::keyPressed(config::getKey(KEY_JUMP)) || input::keyPressed(config::getKey(KEY_PICK))) { - //if (selected_option==MENU_AUDIO_MUSICA) config::toggleMusic(); - //if (selected_option==MENU_AUDIO_SO) config::toggleSound(); - if (selected_option==MENU_TECLES_TORNAR) return MENU_TECLES_TORNAR; + if (input::keyPressed(SDL_SCANCODE_SPACE) || input::keyPressed(SDL_SCANCODE_RETURN) || + input::keyPressed(config::getKey(KEY_JUMP)) || input::keyPressed(config::getKey(KEY_PICK))) { + //if (selected_option==MENU_AUDIO_MUSICA) config::toggleMusic(); + //if (selected_option==MENU_AUDIO_SO) config::toggleSound(); + if (selected_option==MENU_TECLES_TORNAR) + return MENU_TECLES_TORNAR; + else + state = STATE_REDEFINING; + } + } else { + const uint8_t key = input::getKeyPressed(); + if (key != SDL_SCANCODE_UNKNOWN) { + if (key != SDL_SCANCODE_ESCAPE) config::defineKey(selected_option, key); + state = STATE_SELECTING; + } } draw::cls(2); @@ -44,14 +76,15 @@ namespace modules for (int i=0; i<6; ++i) { const bool selected = (i==selected_option); - draw::print2(selected?"fg":"de", 13, pos, selected?YELLOW:TEAL, selected?FONT_ZOOM_VERTICAL:FONT_ZOOM_NONE); - draw::print2(textos[i], 18, pos, selected?YELLOW:TEAL, selected?FONT_ZOOM_VERTICAL:FONT_ZOOM_NONE); + draw::print2(selected?"fg":"de", 8, pos, selected?YELLOW:TEAL, selected?FONT_ZOOM_VERTICAL:FONT_ZOOM_NONE); + draw::print2(textos[i], 13, pos, selected?YELLOW:TEAL, selected?FONT_ZOOM_VERTICAL:FONT_ZOOM_NONE); + if (!selected || state == STATE_SELECTING) draw::print2(getKeyName(config::getKey(i)), 23, pos, selected?YELLOW:TEAL, selected?FONT_ZOOM_VERTICAL:FONT_ZOOM_NONE); pos += selected?3:2; } const bool selected = (selected_option==MENU_TECLES_TORNAR); - draw::print2(selected?"fg":"de", 13, pos, selected?YELLOW:TEAL, selected?FONT_ZOOM_VERTICAL:FONT_ZOOM_NONE); - draw::print2("TORNAR", 18, pos, selected?YELLOW:TEAL, selected?FONT_ZOOM_VERTICAL:FONT_ZOOM_NONE); + draw::print2(selected?"fg":"de", 8, pos, selected?YELLOW:TEAL, selected?FONT_ZOOM_VERTICAL:FONT_ZOOM_NONE); + draw::print2("TORNAR", 13, pos, selected?YELLOW:TEAL, selected?FONT_ZOOM_VERTICAL:FONT_ZOOM_NONE); draw::print2("(C) JAILDOCTOR 2024", 11, 28, TEAL, FONT_ZOOM_NONE); diff --git a/source/main.cpp b/source/main.cpp index 7023b06..e5b83ef 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -29,21 +29,28 @@ char tmp[100]; void loadConfig() { - file::setConfigFolder("thepool"); + file::setConfigFolder("thepool"); - if (strcmp(file::getConfigValue("music").c_str(), "no")==0) config::setMusic(false); + if (strcmp(file::getConfigValue("music").c_str(), "no")==0) config::setMusic(false); - const char *so = file::getConfigValue("sound").c_str(); - if (strcmp(so, "basic")==0) - config::setSound(SOUND_BASIC); - else if (strcmp(so, "none")==0) - config::setSound(SOUND_NONE); - - std::string txt_zoom = file::getConfigValue("zoom"); - if (txt_zoom!="") zoom = SDL_atoi(txt_zoom.c_str()); - - std::string txt_fullscreen = file::getConfigValue("fullscreen"); - if (txt_fullscreen=="yes") fullscreen = true; + const char *so = file::getConfigValue("sound").c_str(); + if (strcmp(so, "basic")==0) + config::setSound(SOUND_BASIC); + else if (strcmp(so, "none")==0) + config::setSound(SOUND_NONE); + + std::string txt_zoom = file::getConfigValue("zoom"); + if (txt_zoom!="") zoom = SDL_atoi(txt_zoom.c_str()); + + std::string txt_fullscreen = file::getConfigValue("fullscreen"); + if (txt_fullscreen=="yes") fullscreen = true; + + static const char* nomtecles[6] = {"keyup", "keydown", "keyleft", "keyright", "keyjump", "keypick"}; + for (int i=0; i<6; ++i) + { + const int value = SDL_atoi( file::getConfigValue(nomtecles[i]).c_str() ); + if (value != 0) config::defineKey(i, value); + } } void game::init()