Add mobile support
All checks were successful
Build & deploy web version / Build WebAssembly & deploy (push) Successful in 1m1s

This commit is contained in:
Andras Schmelczer 2026-08-09 20:39:30 +01:00
commit c4f7565d18
3 changed files with 567 additions and 69 deletions

View file

@ -59,25 +59,27 @@ void drawOptionsMenu(int deltaTime, int currentOptions[], bool click) {
);
filledCircleColor(screen, (float) screen -> w / 100 * (30 + 0.4 * 100 * (float)(currentOptions[i] - minOptions[i]) / (maxOptions[i] - minOptions[i])),
(float) screen -> h / 100 * (optionsStart + i * optionsTav), larger(4, 20 * screen -> h / designHeight), 0xFFFFFFFF
(float) screen -> h / 100 * (optionsStart + i * optionsTav), larger(4, (int)(20 * uiScale())), 0xFFFFFFFF
);
aacircleColor(screen, (float) screen -> w / 100 * (30 + 0.4 * 100 * (float)(currentOptions[i] - minOptions[i]) / (maxOptions[i] - minOptions[i])),
(float) screen -> h / 100 * (optionsStart + i * optionsTav), larger(4, 20 * screen -> h / designHeight), 0xFFFFFFFF
(float) screen -> h / 100 * (optionsStart + i * optionsTav), larger(4, (int)(20 * uiScale())), 0xFFFFFFFF
);
i++;
}
if(click)
for(i = 0; i < 5; i++)
if(click) {
for(i = 0; i < 5; i++) {
if(isMouseOverRect(50, optionsStart + optionsTav * i, 50, optionsTav / 2)) {
//Ezek nem magic számok, csak egy kicsit.
currentOptions[i] = minOptions[i] + (int)((maxOptions[i] - minOptions[i]) * (getMousePosition().x - screen -> w * 0.3) / (screen -> w * 0.4) );
putInsideInterval(minOptions[i], &currentOptions[i], maxOptions[i]);
//Ezek nem magic számok, csak egy kicsit.
currentOptions[i] = minOptions[i] + (int)((maxOptions[i] - minOptions[i]) * (getMousePosition().x - screen -> w * 0.3) / (screen -> w * 0.4) );
putInsideInterval(minOptions[i], &currentOptions[i], maxOptions[i]);
}
}
}
printBack();
drawMenuParticles(deltaTime);
printBack();
drawMenuParticles(deltaTime);
}
///A játék leírását rajzolja meg.

View file

@ -1,4 +1,5 @@
#include "menuFSM.h"
#include "../touch.h"
int currentOptions[] = {2000, 2000, 3, 450, 6000};
@ -86,6 +87,14 @@ void handleClicks(bool* prematureClick) {
if(isMouseOverRect(50, menuStart + menuTav*5, 15, menuTav/2))
gameState = mainMenu;
break;
case nameInput:
case fading:
case initGame:
case initLoadedGame:
case quit:
//ezekben az állapotokban a kattintásnak nincs hatása
break;
}
}
@ -183,8 +192,16 @@ void doStuff(bool isLMBDown, bool isRMBDown, bool prematureClick) {
snprintf(loseText, sizeof(loseText), "%s%s vesztett, a pontszáma %d.", typedName, cursorBlinking > 500 ? "|" : "", getPoints());
utf8PrintCentered(loseText, 50, 50, small);
break;
case quit:
//a kilépésről a main gondoskodik, itt már nincs mit rajzolni
break;
}
//érintéssel nincs kurzor, helyette a képernyőre rajzolt gombok látszanak
if(isAlive()) {
drawTouchControls();
if(shouldDrawCursor()) drawMouse(isInSlowMo);
}
if(isAlive()) drawMouse(isInSlowMo);
}
///A nameInputból returnnel és ESC-vel is ki lehet lépni, ezért kell ez a függvény rá, amit mindkét esetben meg lehet hívni.
@ -238,6 +255,30 @@ void processTyping(SDL_Event event) {
}
}
/** \brief A név teljes tartalmát cseréli le, a böngésző beviteli mezőjéhez.
* A mobilos billentyűzet nem karakterenként érkezik: a html mező mindig a teljes szövegét
* küldi el, mert így a törlés, a javítás és a szövegbeillesztés is magától jó lesz.
*/
void setNameInput(const char* utf8) {
if(gameState != nameInput) return;
wchar_t typed[sizeof(name) / sizeof(wchar_t)];
int count = utf8ToWide(utf8, typed, sizeof(typed) / sizeof(wchar_t));
nameIndex = 0;
int i;
for(i = 0; i < count; i++)
if(isValidChar(typed[i]) && nameIndex < (int) (sizeof(name) / sizeof(wchar_t)) - 1)
name[nameIndex++] = typed[i];
name[nameIndex] = 0;
}
///A böngésző beviteli mezőjének lezárása ugyanaz, mint az enter megnyomása.
void submitNameInput() {
escapeFromNameInput();
}
///A beírt karaktereket utf-8-ból átalakítva fűzi a névhez.
void processTextInput(const char* utf8) {
if(gameState == nameInput) {

View file

@ -18,5 +18,7 @@
void whatToDoOnEscape();
void processTyping(SDL_Event event);
void processTextInput(const char* utf8);
void setNameInput(const char* utf8);
void submitNameInput();
#endif // MENUFSM_H_INCLUDED