- [NEW] Afegit menu per a redefinir els botons del gamepad
This commit is contained in:
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user