refactored mod categories and refresh button

no longer restarts djui
This commit is contained in:
Isaac0-dev 2024-11-26 14:37:37 +10:00
parent cd6cb12df6
commit bf2d7b629e
14 changed files with 98 additions and 71 deletions

View file

@ -174,6 +174,7 @@ HOST = "Hostovat"
MODS = "MODY"
CATEGORIES = "Kategorie"
WARNING = "\\#ffffa0\\Varování:\\#dcdcdc\\ Máte povoleno 10 nebo více módů, vypněte prosím některé, abyste zabránili nestabilitě nebo zpoždění."
NO_MODS_FOUND = "Nebyly nalezeny žádné úpravy."
[HOST_MOD_CATEGORIES]
ALL = "Všechny"
@ -382,7 +383,7 @@ REFRESH = "Obnovit"
REFRESHING = "Obnovování..."
ENTER_PASSWORD = "Zadejte heslo soukromé hry:"
SEARCH = "Hledat"
NONE_FOUND = "Nebyly nalezeny žádné hry."
NO_LOBBIES_FOUND = "Nebyly nalezeny žádné hry."
[CHANGELOG]
CHANGELOG_TITLE = "ZÁZNAM ZMĚN"

View file

@ -174,6 +174,7 @@ HOST = "Organisator"
MODS = "MODS"
CATEGORIES = "Categorieën"
WARNING = "\\#ffffa0\\Waarschuwing:\\#dcdcdc\\ Je hebt 10 of meer mods ingeschakeld, schakel er een paar uit om instabiliteit of lag te voorkomen."
NO_MODS_FOUND = "Er zijn geen mods gevonden."
[HOST_MOD_CATEGORIES]
ALL = "Alle"
@ -382,7 +383,7 @@ REFRESH = "Herlaad"
REFRESHING = "herladen..."
ENTER_PASSWORD = "Typ het wachtwoord van de privé lobby:"
SEARCH = "Zoek"
NONE_FOUND = "Er zijn geen lobby's gevonden."
NO_LOBBIES_FOUND = "Er zijn geen lobby's gevonden."
[CHANGELOG]
CHANGELOG_TITLE = "WIJZIGINGENLOGBOEK"

View file

@ -174,6 +174,7 @@ HOST = "Host"
MODS = "MODS"
CATEGORIES = "Categories"
WARNING = "\\#ffffa0\\Warning:\\#dcdcdc\\ You have 10 or more mods enabled, please disable some to prevent instability or lag."
NO_MODS_FOUND = "No mods were found."
[HOST_MOD_CATEGORIES]
ALL = "All"
@ -385,7 +386,7 @@ REFRESH = "Refresh"
REFRESHING = "Refreshing..."
ENTER_PASSWORD = "Enter the private lobby's password:"
SEARCH = "Search"
NONE_FOUND = "No lobbies were found."
NO_LOBBIES_FOUND = "No lobbies were found."
[CHANGELOG]
CHANGELOG_TITLE = "CHANGELOG"

View file

@ -174,6 +174,7 @@ HOST = "Héberger"
MODS = "MODS"
CATEGORIES = "Catégories"
WARNING = "\\#ffffa0\\Avertissement :\\#dcdcdc\\ 10 mods ou plus sont activés, veuillez en désactiver certains pour éviter l'instabilité ou le lag."
NO_MODS_FOUND = "Aucun mod n'a été trouvé."
[HOST_MOD_CATEGORIES]
ALL = "Tous"
@ -382,7 +383,7 @@ REFRESH = "Actualiser"
REFRESHING = "Actualisation..."
ENTER_PASSWORD = "Entrez le mot de passe de la partie:"
SEARCH = "Rechercher"
NONE_FOUND = "Aucune partie n'a été trouvée."
NO_LOBBIES_FOUND = "Aucune partie n'a été trouvée."
[CHANGELOG]
CHANGELOG_TITLE = "MODIFICATIONS"

View file

@ -174,6 +174,7 @@ HOST = "Hosten"
MODS = "MODS"
CATEGORIES = "Kategorien"
WARNING = "\\#ffffa0\\Warnung:\\#dcdcdc\\ Du hast 10 oder mehr Mods aktiviert, bitte deaktiviere einige, um Instabilität oder Lag zu vermeiden."
NO_MODS_FOUND = "Es wurden keine Mods gefunden."
[HOST_MOD_CATEGORIES]
ALL = "Alle"
@ -382,7 +383,7 @@ REFRESH = "Aktualisieren"
REFRESHING = "Aktualisiere..."
ENTER_PASSWORD = "Gib das Passwort für die Lobby ein:"
SEARCH = "Suchen"
NONE_FOUND = "Keine Lobbys gefunden."
NO_LOBBIES_FOUND = "Keine Lobbys gefunden."
[CHANGELOG]
CHANGELOG_TITLE = "ÄNDERUNGSPROTOKOLL"

View file

@ -172,6 +172,7 @@ HOST = "Crea"
MODS = "MODS"
CATEGORIES = "Categorie"
WARNING = "\\#ffffa0\\Attenzione:\\#dcdcdc\\ Sono state attivate 10 o più mod, disabilitarne alcune per evitare instabilità o lag."
NO_MODS_FOUND = "Non è stata trovata alcuna modifica."
[HOST_MOD_CATEGORIES]
ALL = "Tutti"
@ -380,7 +381,7 @@ REFRESH = "Refresh"
REFRESHING = "Refreshing..."
ENTER_PASSWORD = "Enter the private lobby's password:"
SEARCH = "Search"
NONE_FOUND = "No lobbies were found."
NO_LOBBIES_FOUND = "No lobbies were found."
[CHANGELOG]
CHANGELOG_TITLE = "REGISTRO DELLE MODIFICHE"

View file

@ -174,6 +174,7 @@ HOST = "Hostuj"
MODS = "MODYFIKACJE"
CATEGORIES = "Kategorie"
WARNING = "\\#ffffa0\\Ostrzeżenie:\\#dcdcdc\\ Masz włączonych 10 lub więcej Modyfikacji. Wyłącz niektóre, aby zapobiec niestabilności lub opóźnieniom."
NO_MODS_FOUND = "Nie znaleziono żadnych modów."
[HOST_MOD_CATEGORIES]
ALL = "Wszystkie"
@ -382,7 +383,7 @@ REFRESH = "Odśwież"
REFRESHING = "Odświeżanie..."
ENTER_PASSWORD = "Wprowadź hasło do prywatnego lobby:"
SEARCH = "Szukaj"
NONE_FOUND = "Nie znaleziono żadnego lobby."
NO_LOBBIES_FOUND = "Nie znaleziono żadnego lobby."
[CHANGELOG]
CHANGELOG_TITLE = "REJESTR ZMIAN"

View file

@ -174,6 +174,7 @@ HOST = "Criar"
MODS = "MODS"
CATEGORIES = "Categorias"
WARNING = "\\#ffffa0\\Aviso:\\#dcdcdc\\ Você tem 10 ou mais mods ativados, desative alguns para evitar instabilidade ou lag."
NO_MODS_FOUND = "Não foram encontrados mods."
[HOST_MOD_CATEGORIES]
ALL = "Todos"
@ -382,7 +383,7 @@ REFRESH = "Recarregar"
REFRESHING = "Recarregando..."
ENTER_PASSWORD = "Digite a senha da partida privada:"
SEARCH = "Pesquisar"
NONE_FOUND = "Nenhuma partida foi encontrada."
NO_LOBBIES_FOUND = "Nenhuma partida foi encontrada."
[CHANGELOG]
CHANGELOG_TITLE = "ALTERAÇÕES"

View file

@ -173,6 +173,7 @@ HOST = "Хост"
MODS = "MODS"
CATEGORIES = "Категории"
WARNING = "\\#ffffa0\\Внимание:\\#dcdcdc\\ У вас включено 10 или более модов, пожалуйста, отключите некоторые из них, чтобы предотвратить нестабильность или лаги."
NO_MODS_FOUND = "Модов не обнаружено."
[HOST_MOD_CATEGORIES]
ALL = "Все"
@ -381,7 +382,7 @@ REFRESH = "Обновить"
REFRESHING = "Обновление..."
ENTER_PASSWORD = "Введите пароль закрытой группы:"
SEARCH = "Поиск"
NONE_FOUND = "Группы не найдены."
NO_LOBBIES_FOUND = "Группы не найдены."
[CHANGELOG]
CHANGELOG_TITLE = "ЖУРНАЛ ИЗМЕНЕНИЙ"

View file

@ -174,6 +174,7 @@ HOST = "Crear"
MODS = "MODS"
CATEGORIES = "Categorías"
WARNING = "\\#ffffa0\\Advertencia:\\#dcdcdc\\ Tienes 10 o más mods activados, por favor desactiva algunos para prevenir inestabilidad o lag."
NO_MODS_FOUND = "No se han encontrado mods."
[HOST_MOD_CATEGORIES]
ALL = "Todos"
@ -382,7 +383,7 @@ REFRESH = "Refrescar"
REFRESHING = "Refrescando..."
ENTER_PASSWORD = "Introduce la contraseña de la partida privada:"
SEARCH = "Buscar"
NONE_FOUND = "No se han encontrado partidas."
NO_LOBBIES_FOUND = "No se han encontrado partidas."
[CHANGELOG]
CHANGELOG_TITLE = "REGISTRO DE CAMBIOS"

View file

@ -28,7 +28,7 @@ static s32 djui_paginated_get_count(struct DjuiPaginated* paginated) {
void djui_paginated_update_page_buttons(struct DjuiPaginated* paginated) {
s32 count = djui_paginated_get_count(paginated);
paginated->startIndex = MIN(paginated->startIndex, count);
paginated->startIndex = MIN(paginated->startIndex, count) & ~(paginated->showCount - 1);
char pageNumString[32] = { 0 };
snprintf(pageNumString, 32, "%d/%d", paginated->startIndex / paginated->showCount + 1, (count - 1) / paginated->showCount + 1);
@ -64,6 +64,10 @@ void djui_paginated_calculate_height(struct DjuiPaginated* paginated) {
f32 height = 0;
s32 count = 0;
if (paginated->showMaxCount) {
height = paginated->showCount * (32 + paginated->layout->margin.value);
count = paginated->showCount + 1;
} else {
while (dbc != NULL) {
struct DjuiBase* cbase = dbc->base;
if (count < paginated->showCount) {
@ -75,6 +79,7 @@ void djui_paginated_calculate_height(struct DjuiPaginated* paginated) {
count++;
dbc = dbc->next;
}
}
if (count <= paginated->showCount) {
djui_base_set_visible(&paginated->prevButton->base, false);

View file

@ -9,6 +9,7 @@ struct DjuiPaginated {
struct DjuiText* pageNumText;
s32 startIndex;
s32 showCount;
bool showMaxCount;
};
void djui_paginated_update_page_buttons(struct DjuiPaginated* paginated);

View file

@ -14,24 +14,27 @@
#include "djui_panel_pause.h"
#define DJUI_MOD_PANEL_WIDTH (410.0f + (16 * 2.0f))
#define MOD_CATEGORY_ALL "MOD_CATEGORY_ALL"
#define MOD_CATEGORY_MISC "MOD_CATEGORY_MISC"
#define MOD_CATEGORY_ALL 0
#define MOD_CATEGORY_MISC 1
#define MOD_CATEGORY_START 2
static struct DjuiFlowLayout* sModLayout = NULL;
static struct DjuiThreePanel* sDescriptionPanel = NULL;
static struct DjuiText* sTooltip = NULL;
unsigned int selectedCategory = 0;
static struct DjuiPaginated* sModPaginated = NULL;
unsigned int selectedCategory = MOD_CATEGORY_ALL;
static bool sWarned = false;
struct ModCategory sCategories[] = {
// lang key, mod category
{ "ALL", MOD_CATEGORY_ALL },
{ "ALL", NULL },
{ "MISC", NULL },
{ "ROMHACKS", "romhack" },
{ "GAMEMODES", "gamemode" },
{ "MOVESETS", "moveset" },
{ "CHARACTER_SELECT", "cs" },
{ "MISC", MOD_CATEGORY_MISC },
};
static const int numCategories = sizeof(sCategories) / sizeof(sCategories[0]);
void djui_panel_host_mods_create(struct DjuiBase* caller);
@ -110,16 +113,6 @@ static void djui_mod_checkbox_on_value_change(UNUSED struct DjuiBase* base) {
}
}
static void djui_panel_menu_refresh(UNUSED struct DjuiBase* base) {
mods_refresh_local();
djui_panel_shutdown();
gDjuiInMainMenu = true;
djui_panel_main_create(NULL);
djui_panel_host_create(NULL);
djui_panel_host_mods_create(NULL);
}
static void djui_panel_host_mods_destroy(struct DjuiBase* base) {
struct DjuiThreePanel* threePanel = (struct DjuiThreePanel*)base;
free(threePanel);
@ -132,19 +125,58 @@ static void djui_panel_host_mods_destroy(struct DjuiBase* base) {
sTooltip = NULL;
}
void djui_panel_on_categories_change(UNUSED struct DjuiBase* caller) {
if (gDjuiInMainMenu) {
djui_panel_shutdown();
gDjuiInMainMenu = true;
djui_panel_main_create(NULL);
djui_panel_host_create(NULL);
djui_panel_host_mods_create(NULL);
} else {
djui_panel_shutdown();
djui_panel_pause_create(NULL);
djui_panel_host_create(NULL);
djui_panel_host_mods_create(NULL);
void djui_panel_host_mods_add_mods(struct DjuiBase* layoutBase) {
bool foundAny = false;
for (int i = 0; i < gLocalMods.entryCount; i++) {
struct Mod* mod = gLocalMods.entries[i];
char* category = mod->category != NULL ? mod->category : mod->incompatible;
switch (selectedCategory) {
case MOD_CATEGORY_ALL: { break; }
case MOD_CATEGORY_MISC: {
bool doContinue = false;
if (category) {
for (int i = MOD_CATEGORY_START; i < numCategories; i++) {
if (strstr(category, sCategories[i].category)) {
doContinue = true;
break;
}
}
}
if (doContinue) { continue; }
break;
}
default: {
if (!category || !strstr(category, sCategories[selectedCategory].category)) {
continue;
}
break;
}
}
struct DjuiCheckbox* checkbox = djui_checkbox_create(layoutBase, mod->name, &mod->enabled, djui_mod_checkbox_on_value_change);
checkbox->base.tag = i;
djui_base_set_enabled(&checkbox->base, mod->selectable);
djui_interactable_hook_hover(&checkbox->base, djui_mod_checkbox_on_hover, djui_mod_checkbox_on_hover_end);
foundAny = true;
}
if (!foundAny) {
struct DjuiText* text = djui_text_create(layoutBase, DLANG(HOST_MODS, NO_MODS_FOUND));
djui_base_set_size_type(&text->base, DJUI_SVT_RELATIVE, DJUI_SVT_RELATIVE);
djui_base_set_size(&text->base, 1, 1);
djui_text_set_alignment(text, DJUI_HALIGN_CENTER, DJUI_VALIGN_CENTER);
djui_text_set_drop_shadow(text, 64, 64, 64, 100);
}
}
static void djui_panel_on_categories_change(UNUSED struct DjuiBase* caller) {
djui_base_destroy_children(&sModLayout->base);
djui_panel_host_mods_add_mods(&sModLayout->base);
djui_paginated_calculate_height(sModPaginated);
}
static void djui_panel_menu_refresh(UNUSED struct DjuiBase* base) {
mods_refresh_local();
mods_update_selectable();
djui_panel_on_categories_change(NULL);
}
void djui_panel_host_mods_create(struct DjuiBase* caller) {
@ -157,7 +189,6 @@ void djui_panel_host_mods_create(struct DjuiBase* caller) {
struct DjuiBase* body = djui_three_panel_get_body(panel);
{
// copy category choices from sCategories
int numCategories = sizeof(sCategories) / sizeof(sCategories[0]);
char* categoryChoices[sizeof(sCategories)];
// loop thru all categories names, and add those to the categoryChoices string array
@ -166,31 +197,11 @@ void djui_panel_host_mods_create(struct DjuiBase* caller) {
}
djui_selectionbox_create(body, DLANG(HOST_MODS, CATEGORIES), categoryChoices, numCategories, &selectedCategory, djui_panel_on_categories_change);
struct DjuiPaginated* paginated = djui_paginated_create(body, 8);
paginated->showMaxCount = true;
sModLayout = paginated->layout;
struct DjuiBase* layoutBase = &paginated->layout->base;
for (int i = 0; i < gLocalMods.entryCount; i++) {
struct Mod* mod = gLocalMods.entries[i];
char* category = mod->category;
if (!category) { category = mod->incompatible; }
if (!strstr(sCategories[selectedCategory].category, MOD_CATEGORY_ALL) && !strstr(sCategories[selectedCategory].category, MOD_CATEGORY_MISC) && (!category || !strstr(category, sCategories[selectedCategory].category))) {
continue;
} else if (!strstr(sCategories[selectedCategory].category, MOD_CATEGORY_ALL) && strstr(sCategories[selectedCategory].category, MOD_CATEGORY_MISC)) {
bool doContinue = false;
for (int i = 0; i < numCategories; i++) {
if (strstr(sCategories[selectedCategory].category, MOD_CATEGORY_MISC) && (category && strstr(category, sCategories[i].category))) {
doContinue = true;
break;
}
}
if (doContinue) { continue; }
}
struct DjuiCheckbox* checkbox = djui_checkbox_create(layoutBase, mod->name, &mod->enabled, djui_mod_checkbox_on_value_change);
checkbox->base.tag = i;
djui_base_set_enabled(&checkbox->base, mod->selectable);
djui_interactable_hook_hover(&checkbox->base, djui_mod_checkbox_on_hover, djui_mod_checkbox_on_hover_end);
}
djui_panel_host_mods_add_mods(&paginated->layout->base);
djui_paginated_calculate_height(paginated);
sModPaginated = paginated;
if (gNetworkType == NT_NONE) {
struct DjuiRect* rect1 = djui_rect_container_create(body, 64);

View file

@ -107,7 +107,7 @@ void djui_panel_join_query_finish(void) {
djui_base_set_enabled(&sRefreshButton->base, true);
if (sLobbyLayout->base.child == NULL) {
struct DjuiText* text = djui_text_create(&sLobbyLayout->base, DLANG(LOBBIES, NONE_FOUND));
struct DjuiText* text = djui_text_create(&sLobbyLayout->base, DLANG(LOBBIES, NO_LOBBIES_FOUND));
djui_base_set_size_type(&text->base, DJUI_SVT_RELATIVE, DJUI_SVT_RELATIVE);
djui_base_set_size(&text->base, 1, 1);
djui_text_set_alignment(text, DJUI_HALIGN_CENTER, DJUI_VALIGN_CENTER);