mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2025-12-02 14:12:39 +00:00
refactored mod categories and refresh button
no longer restarts djui
This commit is contained in:
parent
cd6cb12df6
commit
bf2d7b629e
14 changed files with 98 additions and 71 deletions
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
@ -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 = "ЖУРНАЛ ИЗМЕНЕНИЙ"
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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,16 +64,21 @@ void djui_paginated_calculate_height(struct DjuiPaginated* paginated) {
|
|||
f32 height = 0;
|
||||
s32 count = 0;
|
||||
|
||||
while (dbc != NULL) {
|
||||
struct DjuiBase* cbase = dbc->base;
|
||||
if (count < paginated->showCount) {
|
||||
if (height != 0) {
|
||||
height += paginated->layout->margin.value;
|
||||
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) {
|
||||
if (height != 0) {
|
||||
height += paginated->layout->margin.value;
|
||||
}
|
||||
height += cbase->height.value;
|
||||
}
|
||||
height += cbase->height.value;
|
||||
count++;
|
||||
dbc = dbc->next;
|
||||
}
|
||||
count++;
|
||||
dbc = dbc->next;
|
||||
}
|
||||
|
||||
if (count <= paginated->showCount) {
|
||||
|
|
|
|||
|
|
@ -9,6 +9,7 @@ struct DjuiPaginated {
|
|||
struct DjuiText* pageNumText;
|
||||
s32 startIndex;
|
||||
s32 showCount;
|
||||
bool showMaxCount;
|
||||
};
|
||||
|
||||
void djui_paginated_update_page_buttons(struct DjuiPaginated* paginated);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue