(WIP) DJUI Scaling setting, moved menu-related options to "menu options" instead of "misc"

This commit is contained in:
eros71-dev 2023-11-23 05:25:33 +01:00
parent 5c8621f408
commit e3d57c01cc
18 changed files with 101 additions and 38 deletions

View File

@ -144,6 +144,7 @@ MUST_RESTART = "Musíte restartovat hru pro aplikování změn."
DJUI_THEMES = "TÉMATA DJUI"
CENTER = "Střed"
DJUI_THEME = "Téma DJUI"
DJUI_SCALE = "Stupnice DJUI"
CENTER = "Střed"
LIGHT_THEME = "Světlo"
DARK_THEME = "Tmavý"

View File

@ -144,6 +144,7 @@ MUST_RESTART = "Je moet de game opnieuw opstarten voor sommige veranderingen om
DJUI_THEMES = "DJUI THEMA'S"
CENTER = "Centreren"
DJUI_THEME = "DJUI Thema"
DJUI_SCALE = "DJUI Schaal"
CENTER = "Centreren"
LIGHT_THEME = "Licht"
DARK_THEME = "Donker"

View File

@ -144,6 +144,7 @@ MUST_RESTART = "Restart the game to apply changes."
DJUI_THEMES = "DJUI THEMES"
CENTER = "Center"
DJUI_THEME = "DJUI Theme"
DJUI_SCALE = "DJUI Scale"
CENTER = "Center"
LIGHT_THEME = "Light"
DARK_THEME = "Dark"

View File

@ -145,6 +145,7 @@ MUST_RESTART = "Vous devez relancer le jeu pour que certains changements prennen
DJUI_THEMES = "THÈMES DJUI"
CENTER = "Centrer"
DJUI_THEME = "Thème DJUI"
DJUI_SCALE = "Échelle DJUI"
CENTER = "Centrer"
LIGHT_THEME = "Lumière"
DARK_THEME = "Sombre"

View File

@ -144,6 +144,7 @@ MUST_RESTART = "Um einige Änderungen zu übernehmen, muss das Spiel neugestarte
DJUI_THEMES = "DJUI-THEMEN"
CENTER = "Zentrieren"
DJUI_THEME = "DJUI-Thema"
DJUI_SCALE = "DJUI-Skala"
CENTER = "Zentrieren"
LIGHT_THEME = "Litch"
DARK_THEME = "Dunkel"

View File

@ -142,6 +142,7 @@ MUST_RESTART = "You must restart the game for some changes to take effect."
DJUI_THEMES = "TEMI DJUI"
CENTER = "Centrare"
DJUI_THEME = "Tema DJUI"
DJUI_SCALE = "Scala DJUI"
CENTER = "Centrare"
LIGHT_THEME = "Luce"
DARK_THEME = "Scuro"

View File

@ -144,6 +144,7 @@ MUST_RESTART = "Musisz zrestartowac gre, aby zmiany zaczely obowiazywac."
DJUI_THEMES = "TEMATY DJUI"
CENTER = "Środek"
DJUI_THEME = "Motyw DJUI"
DJUI_SCALE = "Skala DJUI"
CENTER = "Środek"
LIGHT_THEME = "Światło"
DARK_THEME = "Ciemny"

View File

@ -144,6 +144,7 @@ MUST_RESTART = "Você precisará reiniciar o jogo para algumas alterações sere
DJUI_THEMES = "TEMAS DJUI"
CENTER = "Centralizar"
DJUI_THEME = "Tema DJUI"
DJUI_SCALE = "Tamanho da DJUI"
CENTER = "Centralizar"
LIGHT_THEME = "Claro"
DARK_THEME = "Escuro"

View File

@ -143,6 +143,7 @@ MUST_RESTART = "Перезапустите игру, чтобы изменени
DJUI_THEMES = "ТЕМЫ DJUI"
CENTER = "Центр"
DJUI_THEME = "Темы DJUI"
DJUI_SCALE = "Шкала DJUI"
CENTER = "Центр"
LIGHT_THEME = "Свет"
DARK_THEME = "Темный"

View File

@ -144,6 +144,7 @@ MUST_RESTART = "Tienes que reiniciar el juego para que algunos cambios surtan ef
DJUI_THEMES = "TEMAS de DJUI"
CENTER = "Centrar"
DJUI_THEME = "Tema de DJUI"
DJUI_SCALE = "Tamaño de DJUI"
CENTER = "Centrar"
LIGHT_THEME = "Claro"
DARK_THEME = "Oscuro"

View File

@ -144,6 +144,7 @@ MUST_RESTART = "Tienes que reiniciar el juego para que algunos cambios surtan ef
DJUI_THEMES = "TEMAS de DJUI"
CENTER = "Centrar"
DJUI_THEME = "Tema de DJUI"
DJUI_SCALE = "Tamaño de DJUI"
CENTER = "Centrar"
LIGHT_THEME = "Claro"
DARK_THEME = "Oscuro"

View File

@ -161,6 +161,7 @@ char configDestId[MAX_CONFIG_STRING] = "0";
bool configFadeoutDistantSounds = false;
unsigned int configDjuiTheme = DJUI_THEME_DARK;
bool configDjuiThemeCenter = true;
unsigned int configDjuiScale = 1;
bool configCoopCompatibility = true;
static const struct ConfigOption options[] = {
@ -275,7 +276,8 @@ static const struct ConfigOption options[] = {
{.name = "coopnet_dest", .type = CONFIG_TYPE_STRING, .stringValue = (char*)&configDestId, .maxStringLength = MAX_CONFIG_STRING},
{.name = "fade_distant_sounds", .type = CONFIG_TYPE_BOOL , .boolValue = &configFadeoutDistantSounds},
{.name = "djui_theme", .type = CONFIG_TYPE_UINT , .uintValue = &configDjuiTheme},
{.name = "djui_theme_center", .type = CONFIG_TYPE_BOOL , .boolValue = &configDjuiThemeCenter}
{.name = "djui_theme_center", .type = CONFIG_TYPE_BOOL , .boolValue = &configDjuiThemeCenter},
{.name = "djui_scale", .type = CONFIG_TYPE_UINT , .uintValue = &configDjuiScale}
};
// FunctionConfigOption functions

View File

@ -118,6 +118,7 @@ extern char configDestId[];
extern bool configFadeoutDistantSounds;
extern unsigned int configDjuiTheme;
extern bool configDjuiThemeCenter;
extern unsigned int configDjuiScale;
extern bool configCoopCompatibility;
void enable_queued_mods();

View File

@ -47,12 +47,23 @@ const Gfx dl_djui_simple_rect[] = {
f32 djui_gfx_get_scale(void) {
u32 windowWidth, windowHeight;
wm_api->get_dimensions(&windowWidth, &windowHeight);
if (windowHeight < 768) {
return 0.5f;
} else if (windowHeight < 1440) {
switch (gDjuiScale)
{
case 0:
return 0.85f;
break;
case 1:
return 1.0f;
} else {
return 2.0f;
break;
case 2:
return 1.5f;
break;
default:
wm_api->get_dimensions(&windowWidth, &windowHeight);
break;
}
}
/////////////////////////////////////////////

View File

@ -1,16 +1,49 @@
#include "djui.h"
#include "djui_theme.h"
#include "djui_panel.h"
#include "djui_panel_menu.h"
#include "djui_panel_pause.h"
#include "src/pc/utils/misc.h"
#include "src/pc/configfile.h"
#include "src/game/level_update.h"
static struct DjuiText* sRestartText = NULL;
bool changedScale = false;
static struct DjuiSelectionbox* sLevelBox = NULL;
static void djui_panel_random_menu(UNUSED struct DjuiBase* caller) {
djui_base_set_enabled(&sLevelBox->base, !configMenuRandom);
}
static void djui_panel_misc_djui_theme_change(UNUSED struct DjuiBase* caller) {
// god this is so hacky and terrible - djoslin0, 2023
if (gDjuiInMainMenu) {
djui_panel_shutdown();
gDjuiInMainMenu = true;
djui_panel_main_create(NULL);
djui_panel_options_create(NULL);
djui_panel_misc_create(NULL);
} else if (gDjuiPanelPauseCreated) {
djui_panel_shutdown();
djui_panel_pause_create(NULL);
djui_panel_options_create(NULL);
djui_panel_misc_create(NULL);
} else {
djui_panel_shutdown();
}
}
static void djui_panel_misc_djui_scale_change(UNUSED struct DjuiBase* caller) {
if (changedScale) {
djui_text_set_text(sRestartText, DLANG(DISPLAY, MUST_RESTART));
} else {
changedScale = true;
}
}
void djui_panel_main_menu_create(struct DjuiBase* caller) {
struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(MENU_OPTIONS, MAIN_MENU));
struct DjuiBase* body = djui_three_panel_get_body(panel);
@ -36,6 +69,9 @@ void djui_panel_main_menu_create(struct DjuiBase* caller) {
"TTC",
"WDW"
};
char* djuiScaleChoices[3] = {"x0.85", "x1.0", "x1.5"};
struct DjuiSelectionbox* selectionbox1 = djui_selectionbox_create(body, DLANG(MENU_OPTIONS, LEVEL), levelChoices, 18, &configMenuLevel, NULL);
djui_base_set_enabled(&selectionbox1->base, !configMenuRandom);
sLevelBox = selectionbox1;
@ -44,8 +80,31 @@ void djui_panel_main_menu_create(struct DjuiBase* caller) {
djui_checkbox_create(body, DLANG(MENU_OPTIONS, RANDOM_STAGE), &configMenuRandom, djui_panel_random_menu);
djui_checkbox_create(body, DLANG(MENU_OPTIONS, PLAY_VANILLA_DEMOS), &configMenuDemos, stop_demo);
char* themeChoices[DJUI_THEME_MAX];
for (int i = 0; i < DJUI_THEME_MAX; i++) {
themeChoices[i] = (char*)gDjuiThemes[i]->name;
}
djui_selectionbox_create(body, DLANG(DJUI_THEMES, DJUI_THEME), themeChoices, DJUI_THEME_MAX, &configDjuiTheme, djui_panel_misc_djui_theme_change);
djui_checkbox_create(body, DLANG(DJUI_THEMES, CENTER), &configDjuiThemeCenter, djui_panel_misc_djui_theme_change);
djui_selectionbox_create(body, DLANG(DJUI_THEMES, DJUI_SCALE), djuiScaleChoices, 3, &configDjuiScale, djui_panel_misc_djui_scale_change);
djui_button_create(body, DLANG(MENU, BACK), DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
// Must restart text
sRestartText = djui_text_create(body, "");
djui_text_set_alignment(sRestartText, DJUI_HALIGN_CENTER, DJUI_VALIGN_TOP);
djui_base_set_color(&sRestartText->base, 255, 100, 100, 255);
djui_base_set_size_type(&sRestartText->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&sRestartText->base, 1.0f, 64);
// force the restart text to update
if (changedScale) {
djui_text_set_text(sRestartText, DLANG(DISPLAY, MUST_RESTART));
} else {
djui_text_set_text(sRestartText, "");
}
}
djui_panel_add(caller, panel, NULL);

View File

@ -1,11 +1,10 @@
#include "djui.h"
#include "djui_theme.h"
#include "djui_panel.h"
#include "djui_panel_menu.h"
#include "djui_panel_menu_options.h"
#include "djui_panel_main.h"
#include "djui_panel_options.h"
#include "djui_panel_pause.h"
//#include "djui_panel_pause.h"
#include "djui_panel_language.h"
#include "djui_panel_info.h"
#include "pc/utils/misc.h"
@ -25,25 +24,6 @@ static void djui_panel_compatibility_checkbox_on_value_change(UNUSED struct Djui
void djui_panel_misc_create(struct DjuiBase* caller);
static void djui_panel_misc_djui_theme_change(UNUSED struct DjuiBase* caller) {
// god this is so hacky and terrible - djoslin0, 2023
if (gDjuiInMainMenu) {
djui_panel_shutdown();
gDjuiInMainMenu = true;
djui_panel_main_create(NULL);
djui_panel_options_create(NULL);
djui_panel_misc_create(NULL);
} else if (gDjuiPanelPauseCreated) {
djui_panel_shutdown();
djui_panel_pause_create(NULL);
djui_panel_options_create(NULL);
djui_panel_misc_create(NULL);
} else {
djui_panel_shutdown();
}
}
#ifdef DEVELOPMENT
void djui_panel_options_debug_create(struct DjuiBase* caller) {
struct DjuiThreePanel* panel = djui_panel_menu_create(DLANG(MISC, DEBUG_TITLE));
@ -74,14 +54,6 @@ void djui_panel_misc_create(struct DjuiBase* caller) {
djui_checkbox_create(body, DLANG(MISC, PAUSE_IN_SINGLEPLAYER), &configSingleplayerPause, NULL);
djui_checkbox_create(body, DLANG(MISC, DISABLE_POPUPS), &configDisablePopups, NULL);
char* themeChoices[DJUI_THEME_MAX];
for (int i = 0; i < DJUI_THEME_MAX; i++) {
themeChoices[i] = (char*)gDjuiThemes[i]->name;
}
djui_selectionbox_create(body, DLANG(DJUI_THEMES, DJUI_THEME), themeChoices, DJUI_THEME_MAX, &configDjuiTheme, djui_panel_misc_djui_theme_change);
djui_checkbox_create(body, DLANG(DJUI_THEMES, CENTER), &configDjuiThemeCenter, djui_panel_misc_djui_theme_change);
djui_checkbox_create(body, DLANG(MISC, COOP_COMPATIBILITY), &configCoopCompatibility, djui_panel_compatibility_checkbox_on_value_change);
djui_button_create(body, DLANG(MISC, LANGUAGE), DJUI_BUTTON_STYLE_NORMAL, djui_panel_language_create);

View File

@ -73,6 +73,7 @@ u8 gRenderingInterpolated = 0;
f32 gRenderingDelta = 0;
f64 gGameSpeed = 1.0f; // TODO: should probably remove
u32 gDjuiScale = 1; //0 = 0.85, 1 = 1.0, 2 = 1.5
#define FRAMERATE 30
static const f64 sFrameTime = (1.0 / ((double)FRAMERATE));
@ -263,6 +264,11 @@ void game_exit(void) {
}
void* main_game_init(UNUSED void* arg) {
if (gDjuiScale != 0 || gDjuiScale != 1 || gDjuiScale != 2) {
gDjuiScale = 1;
configDjuiScale = 1;
}
const char *gamedir = gCLIOpts.GameDir[0] ? gCLIOpts.GameDir : FS_BASEDIR;
const char *userpath = gCLIOpts.SavePath[0] ? gCLIOpts.SavePath : sys_user_path();
fs_init(sys_ropaths, gamedir, userpath);

View File

@ -16,6 +16,7 @@ extern "C" {
#include "gfx/gfx_dummy.h"
extern bool gCoopCompatibility;
extern u32 gDjuiScale;
#if defined(WAPI_SDL1) || defined(WAPI_SDL2)
# define WAPI gfx_sdl