Migrate to SDL2 and deploy as WASM
All checks were successful
Build & deploy web version / Build WebAssembly & deploy (push) Successful in 1m8s
All checks were successful
Build & deploy web version / Build WebAssembly & deploy (push) Successful in 1m8s
This commit is contained in:
parent
81f4f20899
commit
c9b542eccf
3 changed files with 1411 additions and 483 deletions
|
|
@ -11,13 +11,12 @@ static void drawMenuParticles(int deltaTime) {
|
|||
|
||||
///A főmenüt rajzolja.
|
||||
void drawMainMenu(int deltaTime) {
|
||||
Uint16 menuOptions[][50] = {
|
||||
wchar_t menuOptions[][50] = {
|
||||
L"Indítás",
|
||||
L"Betöltés",
|
||||
L"Beállítások",
|
||||
L"Ranglista",
|
||||
L"Leírás",
|
||||
L"Kilépés",
|
||||
L""
|
||||
};
|
||||
|
||||
|
|
@ -37,7 +36,7 @@ static inline void printBack() {
|
|||
|
||||
///A beállítások menüpont rajzolása, a beállításokat a betöltött mentések is befolyásolják. Figyelni kell, hogy a belépés kattintását ne érzékelje csúszka kattintásnak.
|
||||
void drawOptionsMenu(int deltaTime, int currentOptions[], bool click) {
|
||||
Uint16 optionsMenuOptions[][50] = {
|
||||
wchar_t optionsMenuOptions[][50] = {
|
||||
L"Világ szélessége",
|
||||
L"Világ magassága",
|
||||
L"Részecskék száma",
|
||||
|
|
@ -60,10 +59,10 @@ 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), 20, 0xFFFFFFFF
|
||||
(float) screen -> h / 100 * (optionsStart + i * optionsTav), larger(4, 20 * screen -> h / designHeight), 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), 20, 0xFFFFFFFF
|
||||
(float) screen -> h / 100 * (optionsStart + i * optionsTav), larger(4, 20 * screen -> h / designHeight), 0xFFFFFFFF
|
||||
);
|
||||
|
||||
i++;
|
||||
|
|
@ -84,7 +83,7 @@ void drawOptionsMenu(int deltaTime, int currentOptions[], bool click) {
|
|||
///A játék leírását rajzolja meg.
|
||||
void drawInfoMenu(int deltaTime) {
|
||||
|
||||
Uint16 info[][150] = {
|
||||
wchar_t info[][150] = {
|
||||
L"Ebben a játékban pontokat szerezni és költeni",
|
||||
L"is tudsz. Minden megtalált kék kockáért jár egy pont.",
|
||||
L"Mozogni a WAD billentyűk, szóköz, vagy a nyilak",
|
||||
|
|
@ -106,16 +105,16 @@ void drawInfoMenu(int deltaTime) {
|
|||
drawMenuParticles(deltaTime);
|
||||
}
|
||||
|
||||
Uint16 names[topListItemsMax][100];
|
||||
int points[topListItemsMax];
|
||||
int namesIndex;
|
||||
static wchar_t names[topListItemsMax][100];
|
||||
static int points[topListItemsMax];
|
||||
static int namesIndex;
|
||||
|
||||
///Ha megtelt a toplista, rendezi, és az utolsó elemét lecseréli. A ranglista fájlt se kéne nagyon piszkálni a felhasználónak.
|
||||
static void sortTopList() {
|
||||
|
||||
int i, j;
|
||||
int tmpInt;
|
||||
Uint16 tmpStr[100];
|
||||
wchar_t tmpStr[100];
|
||||
|
||||
for(i = 0; i < namesIndex; i++) {
|
||||
int maxIndex = i;
|
||||
|
|
@ -140,23 +139,19 @@ void loadTopList() {
|
|||
int i;
|
||||
|
||||
if(topList != NULL) {
|
||||
char lineName[400];
|
||||
namesIndex = 0;
|
||||
while(true) {
|
||||
i = 0;
|
||||
do {
|
||||
if(fwscanf(topList, L"%lc", &names[namesIndex][i]) == 0) goto end;
|
||||
}
|
||||
while(names[namesIndex][i++] != L',');
|
||||
names[namesIndex][i] = 0;
|
||||
while(fscanf(topList, " %399[^,\n],%d", lineName, &points[namesIndex]) == 2) {
|
||||
i = strlen(lineName);
|
||||
lineName[i] = ',';
|
||||
lineName[i + 1] = 0;
|
||||
utf8ToWide(lineName, names[namesIndex], 100);
|
||||
|
||||
fwscanf(topList, L"%d", &points[namesIndex]);
|
||||
fwscanf(topList, L"\n");
|
||||
if(namesIndex < topListItemsMax - 1) namesIndex++;
|
||||
else sortTopList();
|
||||
}
|
||||
end:
|
||||
sortTopList();
|
||||
fclose(topList);
|
||||
sortTopList();
|
||||
fclose(topList);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -164,9 +159,10 @@ void loadTopList() {
|
|||
void drawTopList(int deltaTime) {
|
||||
int i;
|
||||
for(i = 0; i < namesIndex; i++) {
|
||||
Uint16 nameWScore[600];
|
||||
swprintf(nameWScore, L"%ls %d", names[i], points[i]);
|
||||
unicodePrintCentered(nameWScore, 50, 20 + ((i == 0) ? 0 : (i + 1)*infoTav), (i == 0) ? large : (i == 1) ? small : tiny);
|
||||
char storedName[400], nameWScore[600];
|
||||
wideToUtf8(names[i], storedName, sizeof(storedName));
|
||||
snprintf(nameWScore, sizeof(nameWScore), "%s %d", storedName, points[i]);
|
||||
utf8PrintCentered(nameWScore, 50, 20 + ((i == 0) ? 0 : (i + 1)*infoTav), (i == 0) ? large : (i == 1) ? small : tiny);
|
||||
}
|
||||
|
||||
printBack();
|
||||
|
|
@ -175,7 +171,7 @@ void drawTopList(int deltaTime) {
|
|||
|
||||
///Ha a játékos szüneteltei a játékot(ESC) ezt fogja látni. Elég drága az átlátszó box, szóval csak óvatosan a méretével.
|
||||
void drawPauseMenu(bool saved) {
|
||||
Uint16 pauseOptions[][100] = {
|
||||
wchar_t pauseOptions[][100] = {
|
||||
L"Játék folytatása",
|
||||
L"Pálya elmentése",
|
||||
L"Mentés betöltése",
|
||||
|
|
@ -201,14 +197,14 @@ void drawLoadMenu(int deltaTime) {
|
|||
|
||||
|
||||
int i;
|
||||
Uint16 timeStrings[][50] = {
|
||||
L"másodperccel",
|
||||
L"perccel",
|
||||
L"órával",
|
||||
L"nappal",
|
||||
L"héttel",
|
||||
L"hónappal",
|
||||
L"évvel"
|
||||
const char* timeStrings[] = {
|
||||
"másodperccel",
|
||||
"perccel",
|
||||
"órával",
|
||||
"nappal",
|
||||
"héttel",
|
||||
"hónappal",
|
||||
"évvel"
|
||||
};
|
||||
int timeConversion[] = {
|
||||
1, 60, 60*60, 60*60*24, 60*60*24*7, 60*60*24*30, 60*60*24*365
|
||||
|
|
@ -224,9 +220,9 @@ void drawLoadMenu(int deltaTime) {
|
|||
break;
|
||||
|
||||
int elapsedSaveTime = deltaRealTime / timeConversion[timeStringsIndex];
|
||||
Uint16 save[200];
|
||||
swprintf(save, L"%d %ls ezelőtti mentés, %d ponttal", elapsedSaveTime, timeStrings[timeStringsIndex], points[i]);
|
||||
unicodePrintCentered(save, 50, loadStart + k * loadTav, isMouseOverRect(50, loadStart + loadTav*k, 25, 3) ? smallBold : small);
|
||||
char save[300];
|
||||
snprintf(save, sizeof(save), "%d %s ezelőtti mentés, %d ponttal", elapsedSaveTime, timeStrings[timeStringsIndex], points[i]);
|
||||
utf8PrintCentered(save, 50, loadStart + k * loadTav, isMouseOverRect(50, loadStart + loadTav*k, 25, 3) ? smallBold : small);
|
||||
unicodePrintCentered(L"Törlés", 50, loadStart + k * loadTav + 5, isMouseOverRect(50, loadStart + loadTav*k + 5, 25, 2) ? smallBold : small);
|
||||
k++;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,8 +4,8 @@
|
|||
int currentOptions[] = {2000, 2000, 3, 450, 6000};
|
||||
int currentSpawnRate, fadeStartTime, elapsedTime = 0, nameIndex = 0, cursorBlinking = 0;
|
||||
|
||||
bool prematureClick, isDollying, saved = false;
|
||||
Uint16 name[100] = {0};
|
||||
bool isDollying, saved = false;
|
||||
wchar_t name[100] = {0};
|
||||
FILE* topList;
|
||||
|
||||
states gameState = mainMenu; /**< Kezdőállapot. */
|
||||
|
|
@ -39,9 +39,6 @@ void handleClicks(bool* prematureClick) {
|
|||
}
|
||||
else if(isMouseOverRect(50, menuStart + menuTav*4, 15, menuTav / 2))
|
||||
gameState = infoMenu;
|
||||
else if(isMouseOverRect(50, menuStart + menuTav*5, 15, menuTav / 2)) {
|
||||
gameState = quit;
|
||||
}
|
||||
break;
|
||||
case pauseMenu:
|
||||
if(isMouseOverRect(50, menuStart - 5, 15, menuTav/2)) {
|
||||
|
|
@ -181,11 +178,10 @@ void doStuff(bool isLMBDown, bool isRMBDown, bool prematureClick) {
|
|||
boxRGBA(screen, 0, 0, screen -> w, screen -> h, 0, 0, 0, 255);
|
||||
cursorBlinking += deltaTime;
|
||||
if(cursorBlinking > 1000) cursorBlinking = 0;
|
||||
Uint16 loseText[300];
|
||||
swprintf(loseText, L"%ls vesztett, a pontszáma %d.", cursorBlinking > 500 ? L"|" : L"", getPoints());
|
||||
Uint16* endText = concatUnicode(name, loseText);
|
||||
unicodePrintCentered(endText, 50, 50, small);
|
||||
free(endText);
|
||||
char typedName[400], loseText[600];
|
||||
wideToUtf8(name, typedName, sizeof(typedName));
|
||||
snprintf(loseText, sizeof(loseText), "%s%s vesztett, a pontszáma %d.", typedName, cursorBlinking > 500 ? "|" : "", getPoints());
|
||||
utf8PrintCentered(loseText, 50, 50, small);
|
||||
break;
|
||||
}
|
||||
if(isAlive()) drawMouse(isInSlowMo);
|
||||
|
|
@ -199,7 +195,9 @@ static void escapeFromNameInput() {
|
|||
createMenuWorld();
|
||||
topList = fopen("rang.lst", "a");
|
||||
if(topList != NULL) {
|
||||
fwprintf(topList, L"%ls,%d\n", name[0] == 0 ? L"Névtelen" : name, getPoints());
|
||||
char utf8[400];
|
||||
wideToUtf8(name[0] == 0 ? L"Névtelen" : name, utf8, sizeof(utf8));
|
||||
fprintf(topList, "%s,%d\n", utf8, getPoints());
|
||||
fclose(topList);
|
||||
}
|
||||
}
|
||||
|
|
@ -218,9 +216,6 @@ void whatToDoOnEscape() {
|
|||
saved = false;
|
||||
}
|
||||
break;
|
||||
case mainMenu:
|
||||
gameState = quit;
|
||||
break;
|
||||
case fading:
|
||||
gameState = nameInput;
|
||||
break;
|
||||
|
|
@ -233,13 +228,27 @@ void whatToDoOnEscape() {
|
|||
}
|
||||
}
|
||||
|
||||
///A szöveges bemenetet továbbítja egy Uint16-os stringbe.
|
||||
///A szöveges bemenetet továbbítja egy wchar_t-os stringbe.
|
||||
void processTyping(SDL_Event event) {
|
||||
if(gameState == nameInput) {
|
||||
Uint16 chr = event.key.keysym.unicode;
|
||||
if(strcmp(SDL_GetKeyName(chr), "backspace") == 0) name[--nameIndex] = 0;
|
||||
else if(strcmp(SDL_GetKeyName(chr), "return") == 0) escapeFromNameInput();
|
||||
else if(isValidChar(chr)) name[nameIndex++] = chr;
|
||||
SDL_Keycode key = event.key.keysym.sym;
|
||||
if(key == SDLK_BACKSPACE) { if(nameIndex > 0) name[--nameIndex] = 0; }
|
||||
else if(key == SDLK_RETURN || key == SDLK_KP_ENTER) escapeFromNameInput();
|
||||
name[nameIndex] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
///A beírt karaktereket utf-8-ból átalakítva fűzi a névhez.
|
||||
void processTextInput(const char* utf8) {
|
||||
if(gameState == nameInput) {
|
||||
wchar_t typed[16];
|
||||
int count = utf8ToWide(utf8, typed, sizeof(typed) / sizeof(wchar_t));
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,5 +17,6 @@
|
|||
void doStuff(bool isLMBDown, bool isRMBDown, bool prematureClick);
|
||||
void whatToDoOnEscape();
|
||||
void processTyping(SDL_Event event);
|
||||
void processTextInput(const char* utf8);
|
||||
|
||||
#endif // MENUFSM_H_INCLUDED
|
||||
|
|
|
|||
Loading…
Reference in a new issue