- [FIX] Ja eix correctament del editor

- [NEW] Més gràfics
- [NEW] Ara es pot modificar el valor dels camps escribint el numero
This commit is contained in:
2024-07-10 19:44:23 +02:00
parent 2a629529fd
commit 7365d72360
8 changed files with 229 additions and 35 deletions

View File

@@ -6,7 +6,14 @@
namespace ui
{
static bool select = false;
static int current_spin = -1;
static int selected_spin = -1;
static int hovering_spin = -1;
void start()
{
current_spin = -1;
}
void label(const char *label, const int x, const int y, const int w, const int h, const int color)
{
@@ -121,14 +128,20 @@ namespace ui
const char *spin(const char *lbl, const int x, const int y, const int w, const int h)
{
current_spin++;
const int mx = draw::getLocalX(input::mouseX());
const int my = draw::getLocalY(input::mouseY());
//const bool btnDown = input::mouseBtn(1) || input::mouseBtn(3);
const bool inside = (mx>=x) && (mx<x+w) && (my>=y) && (my<y+h);
if (inside && current_spin!=hovering_spin)
{
hovering_spin=current_spin;
selected_spin=-1;
}
//const int txt_size = strlen(label)*4;
//const int txt_x = x+(w-txt_size)/2;
char label[100];
if (!select) {
if (current_spin!=selected_spin) {
label[0]='0'; label[1]='\0';
} else {
strcpy(label, lbl);
@@ -138,7 +151,7 @@ namespace ui
draw::fillrect(x, y, w, h);
draw::color(WHITE);
draw::rect(x, y, w, h);
draw::print(label, x+3, y+3, PAPER, 0);
draw::print(lbl, x+3, y+3, PAPER, 0);
if (inside)
{
@@ -146,20 +159,24 @@ namespace ui
draw::rect(x+1, y+1, w-2, h-2);
const uint8_t key = input::getKeyPressed();
if (key==SDL_SCANCODE_BACKSPACE) {
selected_spin=current_spin;
strcpy(temp, label); const int size = strlen(label);
temp[size-1] = '\0';
return temp;
} else if (key==SDL_SCANCODE_0) {
} else if (key==SDL_SCANCODE_0 || key==SDL_SCANCODE_KP_0) {
selected_spin=current_spin;
strcpy(temp, label); const int size = strlen(label);
temp[size] = '0'; temp[size+1] = '\0';
return temp;
} else if (key>=SDL_SCANCODE_1 && key<=SDL_SCANCODE_9) {
} else if ( (key>=SDL_SCANCODE_1 && key<=SDL_SCANCODE_9) || (key>=SDL_SCANCODE_KP_1 && key<=SDL_SCANCODE_KP_9) ) {
selected_spin=current_spin;
strcpy(temp, label); const int size = strlen(label);
temp[size] = key+19; temp[size+1] = '\0';
temp[size] = key<40 ? key+19 : key-40; temp[size+1] = '\0';
return temp;
}
const int wheel = input::mouseWheel();
if (wheel != 0) {
selected_spin=current_spin;
const int value = SDL_atoi(lbl)+wheel*(input::keyDown(SDL_SCANCODE_LCTRL)?32:1);
SDL_itoa(value, temp, 10);
return temp;
@@ -191,10 +208,4 @@ namespace ui
}
return 0;
}
void selected(const bool value)
{
select = value;
}
}

View File

@@ -4,12 +4,11 @@
namespace ui
{
void start();
void label(const char *label, const int x, const int y, const int w, const int h, const int color=WHITE+LIGHT);
const bool button(const char *label, const int x, const int y, const int w, const int h, const bool pressed=false);
const int check(const char *label, const int x, const int y, const int w, const int h, const bool checked);
const int combo(const char *label, const int x, const int y, const int w, const int h);
const char *spin(const char *lbl, const int x, const int y, const int w, const int h);
const int textbox(const char *label, const int x, const int y, const int w, const int h);
void selected(const bool value);
}

View File

@@ -16,8 +16,6 @@ namespace modules
std::vector<std::string> gifs;
int treeview_scroll = 0;
int *current_field = nullptr;
void init()
{
actor::clear(true);
@@ -63,18 +61,11 @@ namespace modules
const bool btn_small(const int x, const int y, int &var, int min, int max)
{
char buffer[100];
if (current_field == &var) {
ui::selected(false);
} else {
ui::selected(true);
}
const char *result=ui::spin(SDL_itoa(var, buffer, 10), x, y, 17, 11);
ui::selected(false);
if (result)
{
const int value = SDL_atoi(result);
var=SDL_max(min, SDL_min(max, value));
current_field = &var;
return true;
}
return false;
@@ -338,7 +329,7 @@ namespace modules
ui::start();
actor::actor_t *act = nullptr;

View File

@@ -109,7 +109,13 @@ bool game::loop()
}
break;
case M_GAME:
if (!modules::game::loop()) { modules::ingame::init(); current_module = M_INGAME; }
if (!modules::game::loop()) {
if (editor::isDevMode()) {
return false;
} else {
modules::ingame::init(); current_module = M_INGAME;
}
}
break;
case M_INGAME:
option = modules::ingame::loop();