- [NEW] Afegit menu per a redefinir els botons del gamepad
This commit is contained in:
@@ -7,6 +7,7 @@ namespace config
|
|||||||
bool musicEnabled = true;
|
bool musicEnabled = true;
|
||||||
int soundMode = SOUND_ALL;
|
int soundMode = SOUND_ALL;
|
||||||
uint8_t keys[6] = {SDL_SCANCODE_UP, SDL_SCANCODE_DOWN, SDL_SCANCODE_LEFT, SDL_SCANCODE_RIGHT, SDL_SCANCODE_SPACE, SDL_SCANCODE_RETURN};
|
uint8_t keys[6] = {SDL_SCANCODE_UP, SDL_SCANCODE_DOWN, SDL_SCANCODE_LEFT, SDL_SCANCODE_RIGHT, SDL_SCANCODE_SPACE, SDL_SCANCODE_RETURN};
|
||||||
|
int8_t pad_btns[6] = {0, 1, 2, 3, 4, 5};
|
||||||
|
|
||||||
void setMusic(const bool value)
|
void setMusic(const bool value)
|
||||||
{
|
{
|
||||||
@@ -55,4 +56,17 @@ namespace config
|
|||||||
{
|
{
|
||||||
return keys[which];
|
return keys[which];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void definePadBtn(const int which, const int btn)
|
||||||
|
{
|
||||||
|
static const char* nomtecles[6] = {"btnup", "btndown", "btnleft", "btnright", "btnjump", "btnpick"};
|
||||||
|
pad_btns[which] = btn;
|
||||||
|
char tmp[5];
|
||||||
|
file::setConfigValue(nomtecles[which], SDL_itoa(btn, tmp, 10));
|
||||||
|
}
|
||||||
|
|
||||||
|
const int getPadBtn(const int which)
|
||||||
|
{
|
||||||
|
return keys[which];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,4 +24,7 @@ namespace config
|
|||||||
void defineKey(const int which, const int key);
|
void defineKey(const int which, const int key);
|
||||||
const int getKey(const int which);
|
const int getKey(const int which);
|
||||||
|
|
||||||
|
void definePadBtn(const int which, const int btn);
|
||||||
|
const int getPadBtn(const int which);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -34,10 +34,10 @@ namespace modules
|
|||||||
return OPTION_EIXIR;
|
return OPTION_EIXIR;
|
||||||
}
|
}
|
||||||
if (input::keyPressed(SDL_SCANCODE_DOWN) || input::keyPressed(config::getKey(KEY_DOWN)))
|
if (input::keyPressed(SDL_SCANCODE_DOWN) || input::keyPressed(config::getKey(KEY_DOWN)))
|
||||||
selected_option = (selected_option+1)&3;
|
selected_option++; if (selected_option==5) selected_option=0;
|
||||||
|
|
||||||
if (input::keyPressed(SDL_SCANCODE_UP) || input::keyPressed(config::getKey(KEY_UP)))
|
if (input::keyPressed(SDL_SCANCODE_UP) || input::keyPressed(config::getKey(KEY_UP)))
|
||||||
selected_option = (selected_option-1)&3;
|
selected_option--; if (selected_option<0) selected_option=4;
|
||||||
|
|
||||||
if (input::keyPressed(SDL_SCANCODE_SPACE) || input::keyPressed(SDL_SCANCODE_RETURN) ||
|
if (input::keyPressed(SDL_SCANCODE_SPACE) || input::keyPressed(SDL_SCANCODE_RETURN) ||
|
||||||
input::keyPressed(config::getKey(KEY_JUMP)) || input::keyPressed(config::getKey(KEY_PICK))) {
|
input::keyPressed(config::getKey(KEY_JUMP)) || input::keyPressed(config::getKey(KEY_PICK))) {
|
||||||
@@ -60,26 +60,37 @@ namespace modules
|
|||||||
case OPTION_JUGAR:
|
case OPTION_JUGAR:
|
||||||
draw::print2("fg JUGAR AL JOC", 11, 14, YELLOW, FONT_ZOOM_VERTICAL);
|
draw::print2("fg JUGAR AL JOC", 11, 14, YELLOW, FONT_ZOOM_VERTICAL);
|
||||||
draw::print2("de REDEFINIR TECLES", 11, 17, GREEN, FONT_ZOOM_NONE);
|
draw::print2("de REDEFINIR TECLES", 11, 17, GREEN, FONT_ZOOM_NONE);
|
||||||
draw::print2("de CONFIGURAR AUDIO", 11, 19, GREEN, FONT_ZOOM_NONE);
|
draw::print2("de REDEFINIR GAMEPAD", 11, 19, GREEN, FONT_ZOOM_NONE);
|
||||||
draw::print2("de EIXIR", 11, 21, GREEN, FONT_ZOOM_NONE);
|
draw::print2("de CONFIGURAR AUDIO", 11, 21, GREEN, FONT_ZOOM_NONE);
|
||||||
|
draw::print2("de EIXIR", 11, 23, GREEN, FONT_ZOOM_NONE);
|
||||||
break;
|
break;
|
||||||
case OPTION_TECLES:
|
case OPTION_TECLES:
|
||||||
draw::print2("de JUGAR AL JOC", 11, 14, GREEN, FONT_ZOOM_NONE);
|
draw::print2("de JUGAR AL JOC", 11, 14, GREEN, FONT_ZOOM_NONE);
|
||||||
draw::print2("fg REDEFINIR TECLES", 11, 16, YELLOW, FONT_ZOOM_VERTICAL);
|
draw::print2("fg REDEFINIR TECLES", 11, 16, YELLOW, FONT_ZOOM_VERTICAL);
|
||||||
draw::print2("de CONFIGURAR AUDIO", 11, 19, GREEN, FONT_ZOOM_NONE);
|
draw::print2("de REDEFINIR GAMEPAD", 11, 19, GREEN, FONT_ZOOM_NONE);
|
||||||
draw::print2("de EIXIR", 11, 21, GREEN, FONT_ZOOM_NONE);
|
draw::print2("de CONFIGURAR AUDIO", 11, 21, GREEN, FONT_ZOOM_NONE);
|
||||||
|
draw::print2("de EIXIR", 11, 23, GREEN, FONT_ZOOM_NONE);
|
||||||
|
break;
|
||||||
|
case OPTION_GAMEPAD:
|
||||||
|
draw::print2("de JUGAR AL JOC", 11, 14, GREEN, FONT_ZOOM_NONE);
|
||||||
|
draw::print2("de REDEFINIR TECLES", 11, 16, GREEN, FONT_ZOOM_NONE);
|
||||||
|
draw::print2("fg REDEFINIR GAMEPAD", 11, 18, YELLOW, FONT_ZOOM_VERTICAL);
|
||||||
|
draw::print2("de CONFIGURAR AUDIO", 11, 21, GREEN, FONT_ZOOM_NONE);
|
||||||
|
draw::print2("de EIXIR", 11, 23, GREEN, FONT_ZOOM_NONE);
|
||||||
break;
|
break;
|
||||||
case OPTION_AUDIO:
|
case OPTION_AUDIO:
|
||||||
draw::print2("de JUGAR AL JOC", 11, 14, GREEN, FONT_ZOOM_NONE);
|
draw::print2("de JUGAR AL JOC", 11, 14, GREEN, FONT_ZOOM_NONE);
|
||||||
draw::print2("de REDEFINIR TECLES", 11, 16, GREEN, FONT_ZOOM_NONE);
|
draw::print2("de REDEFINIR TECLES", 11, 16, GREEN, FONT_ZOOM_NONE);
|
||||||
draw::print2("fg CONFIGURAR AUDIO", 11, 18, YELLOW, FONT_ZOOM_VERTICAL);
|
draw::print2("de REDEFINIR GAMEPAD", 11, 18, GREEN, FONT_ZOOM_NONE);
|
||||||
draw::print2("de EIXIR", 11, 21, GREEN, FONT_ZOOM_NONE);
|
draw::print2("fg CONFIGURAR AUDIO", 11, 20, YELLOW, FONT_ZOOM_VERTICAL);
|
||||||
|
draw::print2("de EIXIR", 11, 23, GREEN, FONT_ZOOM_NONE);
|
||||||
break;
|
break;
|
||||||
case OPTION_EIXIR:
|
case OPTION_EIXIR:
|
||||||
draw::print2("de JUGAR AL JOC", 11, 14, GREEN, FONT_ZOOM_NONE);
|
draw::print2("de JUGAR AL JOC", 11, 14, GREEN, FONT_ZOOM_NONE);
|
||||||
draw::print2("de REDEFINIR TECLES", 11, 16, GREEN, FONT_ZOOM_NONE);
|
draw::print2("de REDEFINIR TECLES", 11, 16, GREEN, FONT_ZOOM_NONE);
|
||||||
draw::print2("de CONFIGURAR AUDIO", 11, 18, GREEN, FONT_ZOOM_NONE);
|
draw::print2("de REDEFINIR GAMEPAD", 11, 18, GREEN, FONT_ZOOM_NONE);
|
||||||
draw::print2("fg EIXIR", 11, 20, YELLOW, FONT_ZOOM_VERTICAL);
|
draw::print2("de CONFIGURAR AUDIO", 11, 20, GREEN, FONT_ZOOM_NONE);
|
||||||
|
draw::print2("fg EIXIR", 11, 22, YELLOW, FONT_ZOOM_VERTICAL);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -7,8 +7,9 @@ namespace modules
|
|||||||
#define OPTION_NONE -1
|
#define OPTION_NONE -1
|
||||||
#define OPTION_JUGAR 0
|
#define OPTION_JUGAR 0
|
||||||
#define OPTION_TECLES 1
|
#define OPTION_TECLES 1
|
||||||
#define OPTION_AUDIO 2
|
#define OPTION_GAMEPAD 2
|
||||||
#define OPTION_EIXIR 3
|
#define OPTION_AUDIO 3
|
||||||
|
#define OPTION_EIXIR 4
|
||||||
|
|
||||||
void init();
|
void init();
|
||||||
int loop();
|
int loop();
|
||||||
|
|||||||
85
source/m_menu_gamepad.cpp
Normal file
85
source/m_menu_gamepad.cpp
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
#include "m_menu_gamepad.h"
|
||||||
|
#include "jdraw.h"
|
||||||
|
#include "jinput.h"
|
||||||
|
#include "config.h"
|
||||||
|
#include <SDL2/SDL.h>
|
||||||
|
|
||||||
|
namespace modules
|
||||||
|
{
|
||||||
|
namespace menu_gamepad
|
||||||
|
{
|
||||||
|
enum states { STATE_SELECTING, STATE_REDEFINING };
|
||||||
|
|
||||||
|
int selected_option = MENU_GAMEPAD_AMUNT;
|
||||||
|
states state = STATE_SELECTING;
|
||||||
|
char name[6] = "PAD00";
|
||||||
|
|
||||||
|
const char *getPadBtnName(const int8_t key)
|
||||||
|
{
|
||||||
|
name[3] = (key/10)+48;
|
||||||
|
name[4] = (key%10)+48;
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
void init()
|
||||||
|
{
|
||||||
|
selected_option = MENU_GAMEPAD_AMUNT;
|
||||||
|
}
|
||||||
|
|
||||||
|
int loop()
|
||||||
|
{
|
||||||
|
if (state == STATE_SELECTING)
|
||||||
|
{
|
||||||
|
if (input::keyPressed(SDL_SCANCODE_ESCAPE)) {
|
||||||
|
return MENU_GAMEPAD_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_SPACE) || input::keyPressed(SDL_SCANCODE_RETURN) ||
|
||||||
|
input::keyPressed(config::getKey(KEY_JUMP)) || input::keyPressed(config::getKey(KEY_PICK))) {
|
||||||
|
if (selected_option==MENU_GAMEPAD_TORNAR)
|
||||||
|
return MENU_GAMEPAD_TORNAR;
|
||||||
|
else
|
||||||
|
state = STATE_REDEFINING;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
const int8_t btn = input::getPadBtnPressed();
|
||||||
|
if (btn != SDL_CONTROLLER_BUTTON_INVALID) {
|
||||||
|
config::definePadBtn(selected_option, btn);
|
||||||
|
state = STATE_SELECTING;
|
||||||
|
}
|
||||||
|
if (input::keyPressed(SDL_SCANCODE_ESCAPE)) state = STATE_SELECTING;
|
||||||
|
}
|
||||||
|
|
||||||
|
draw::cls(2);
|
||||||
|
draw::color(1);
|
||||||
|
|
||||||
|
draw::print2("REDEFINIR GAMEPAD", 12, 3, TEAL, FONT_ZOOM_VERTICAL);
|
||||||
|
|
||||||
|
int pos = 10;
|
||||||
|
static const char *textos[6] = { "AMUNT:", "AVALL:", "ESQUERRA:", "DRETA:", "BOTAR: ", "AGAFAR: " };
|
||||||
|
|
||||||
|
for (int i=0; i<6; ++i)
|
||||||
|
{
|
||||||
|
const bool selected = (i==selected_option);
|
||||||
|
draw::print2(selected?"fg":"de", 8, pos, selected?YELLOW:GREEN, selected?FONT_ZOOM_VERTICAL:FONT_ZOOM_NONE);
|
||||||
|
draw::print2(textos[i], 13, pos, selected?YELLOW:GREEN, selected?FONT_ZOOM_VERTICAL:FONT_ZOOM_NONE);
|
||||||
|
if (!selected || state == STATE_SELECTING) draw::print2(getPadBtnName(config::getPadBtn(i)), 23, pos, selected?YELLOW:GREEN, selected?FONT_ZOOM_VERTICAL:FONT_ZOOM_NONE);
|
||||||
|
pos += selected?3:2;
|
||||||
|
}
|
||||||
|
|
||||||
|
const bool selected = (selected_option==MENU_GAMEPAD_TORNAR);
|
||||||
|
draw::print2(selected?"fg":"de", 8, pos, selected?YELLOW:GREEN, selected?FONT_ZOOM_VERTICAL:FONT_ZOOM_NONE);
|
||||||
|
draw::print2("TORNAR", 13, pos, selected?YELLOW:GREEN, selected?FONT_ZOOM_VERTICAL:FONT_ZOOM_NONE);
|
||||||
|
|
||||||
|
draw::print2("(C) JAILDOCTOR 2024", 11, 28, TEAL, FONT_ZOOM_NONE);
|
||||||
|
|
||||||
|
draw::render();
|
||||||
|
return MENU_GAMEPAD_NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
19
source/m_menu_gamepad.h
Normal file
19
source/m_menu_gamepad.h
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace modules
|
||||||
|
{
|
||||||
|
namespace menu_gamepad
|
||||||
|
{
|
||||||
|
#define MENU_GAMEPAD_NONE -1
|
||||||
|
#define MENU_GAMEPAD_AMUNT 0
|
||||||
|
#define MENU_GAMEPAD_AVALL 1
|
||||||
|
#define MENU_GAMEPAD_ESQUERRA 2
|
||||||
|
#define MENU_GAMEPAD_DRETA 3
|
||||||
|
#define MENU_GAMEPAD_BOTAR 4
|
||||||
|
#define MENU_GAMEPAD_AGAFAR 5
|
||||||
|
#define MENU_GAMEPAD_TORNAR 6
|
||||||
|
|
||||||
|
void init();
|
||||||
|
int loop();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -50,8 +50,6 @@ namespace modules
|
|||||||
|
|
||||||
if (input::keyPressed(SDL_SCANCODE_SPACE) || input::keyPressed(SDL_SCANCODE_RETURN) ||
|
if (input::keyPressed(SDL_SCANCODE_SPACE) || input::keyPressed(SDL_SCANCODE_RETURN) ||
|
||||||
input::keyPressed(config::getKey(KEY_JUMP)) || input::keyPressed(config::getKey(KEY_PICK))) {
|
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)
|
if (selected_option==MENU_TECLES_TORNAR)
|
||||||
return MENU_TECLES_TORNAR;
|
return MENU_TECLES_TORNAR;
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
#include "m_gameover.h"
|
#include "m_gameover.h"
|
||||||
#include "m_catslife.h"
|
#include "m_catslife.h"
|
||||||
#include "m_menu_tecles.h"
|
#include "m_menu_tecles.h"
|
||||||
|
#include "m_menu_gamepad.h"
|
||||||
#include "m_menu_audio.h"
|
#include "m_menu_audio.h"
|
||||||
#include "m_editor_map.h"
|
#include "m_editor_map.h"
|
||||||
#include "m_editor_templates.h"
|
#include "m_editor_templates.h"
|
||||||
@@ -32,12 +33,13 @@
|
|||||||
#define M_GAMEOVER 4
|
#define M_GAMEOVER 4
|
||||||
#define M_CATSLIFE 5
|
#define M_CATSLIFE 5
|
||||||
#define M_MENU_TECLES 6
|
#define M_MENU_TECLES 6
|
||||||
#define M_MENU_AUDIO 7
|
#define M_MENU_GAMEPAD 7
|
||||||
#define M_EDITOR_MAP 8
|
#define M_MENU_AUDIO 8
|
||||||
#define M_EDITOR_TEMPLATES 9
|
#define M_EDITOR_MAP 9
|
||||||
#define M_EDITOR_COLORS 10
|
#define M_EDITOR_TEMPLATES 10
|
||||||
#define M_EDITOR_BITMAP_FILE 11
|
#define M_EDITOR_COLORS 11
|
||||||
#define M_EDITOR_BITMAP 12
|
#define M_EDITOR_BITMAP_FILE 12
|
||||||
|
#define M_EDITOR_BITMAP 13
|
||||||
|
|
||||||
|
|
||||||
int current_module = M_LOGO;
|
int current_module = M_LOGO;
|
||||||
@@ -69,6 +71,13 @@ void loadConfig()
|
|||||||
const int value = SDL_atoi( file::getConfigValue(nomtecles[i]).c_str() );
|
const int value = SDL_atoi( file::getConfigValue(nomtecles[i]).c_str() );
|
||||||
if (value != 0) config::defineKey(i, value);
|
if (value != 0) config::defineKey(i, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char* nombotons[6] = {"btnup", "btndown", "btnleft", "btnright", "btnjump", "btnpick"};
|
||||||
|
for (int i=0; i<6; ++i)
|
||||||
|
{
|
||||||
|
const int value = SDL_atoi( file::getConfigValue(nombotons[i]).c_str() );
|
||||||
|
if (value != 0) config::defineKey(i, value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void game::init()
|
void game::init()
|
||||||
@@ -127,6 +136,7 @@ bool game::loop()
|
|||||||
if (option == OPTION_EIXIR) return false;
|
if (option == OPTION_EIXIR) return false;
|
||||||
if (option == OPTION_JUGAR) { modules::game::init(); current_module = M_GAME; }
|
if (option == OPTION_JUGAR) { modules::game::init(); current_module = M_GAME; }
|
||||||
if (option == OPTION_TECLES) { modules::menu_tecles::init(); current_module = M_MENU_TECLES; }
|
if (option == OPTION_TECLES) { modules::menu_tecles::init(); current_module = M_MENU_TECLES; }
|
||||||
|
if (option == OPTION_GAMEPAD) { modules::menu_gamepad::init(); current_module = M_MENU_GAMEPAD; }
|
||||||
if (option == OPTION_AUDIO) { modules::menu_audio::init(); current_module = M_MENU_AUDIO; }
|
if (option == OPTION_AUDIO) { modules::menu_audio::init(); current_module = M_MENU_AUDIO; }
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -210,6 +220,11 @@ bool game::loop()
|
|||||||
modules::menu::init(); current_module = M_MENU;
|
modules::menu::init(); current_module = M_MENU;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case M_MENU_GAMEPAD:
|
||||||
|
if (modules::menu_gamepad::loop() == MENU_GAMEPAD_TORNAR) {
|
||||||
|
modules::menu::init(); current_module = M_MENU;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case M_MENU_AUDIO:
|
case M_MENU_AUDIO:
|
||||||
if (modules::menu_audio::loop() == MENU_AUDIO_TORNAR) {
|
if (modules::menu_audio::loop() == MENU_AUDIO_TORNAR) {
|
||||||
modules::menu::init(); current_module = M_MENU;
|
modules::menu::init(); current_module = M_MENU;
|
||||||
|
|||||||
Reference in New Issue
Block a user