Started simplifying DJUI panels

This commit is contained in:
MysterD 2023-03-31 02:23:27 -07:00
parent 63f2166bab
commit 2f59539d37
45 changed files with 328 additions and 780 deletions

View file

@ -65,7 +65,7 @@ s16 gChangeActNum = -1;
static bool sFirstCastleGroundsMenu = true;
bool isDemoActive = false;
bool inPlayerMenu = false;
bool gInPlayerMenu = false;
static u16 gDemoCountdown = 0;
int demoNumber = -1;
@ -1194,13 +1194,13 @@ s32 play_mode_normal(void) {
}
}
} else {
if (gDjuiInMainMenu && gCurrDemoInput == NULL && configMenuDemos && !inPlayerMenu) {
if (gDjuiInMainMenu && gCurrDemoInput == NULL && configMenuDemos && !gInPlayerMenu) {
if ((++gDemoCountdown) == PRESS_START_DEMO_TIMER && (find_demo_number() && (demoNumber <= 6 || demoNumber > -1))) {
start_demo();
}
}
if (((gCurrDemoInput != NULL) && (gPlayer1Controller->buttonPressed & END_DEMO || !isDemoActive || !gDjuiInMainMenu || gNetworkType != NT_NONE || inPlayerMenu)) || (gCurrDemoInput == NULL && isDemoActive)) {
if (((gCurrDemoInput != NULL) && (gPlayer1Controller->buttonPressed & END_DEMO || !isDemoActive || !gDjuiInMainMenu || gNetworkType != NT_NONE || gInPlayerMenu)) || (gCurrDemoInput == NULL && isDemoActive)) {
gPlayer1Controller->buttonPressed &= ~END_DEMO;
stop_demo(NULL);
}

View file

@ -128,7 +128,7 @@ extern s8 gNeverEnteredCastle;
extern u32 gControlTimerStartNat;
extern u32 gControlTimerStopNat;
extern bool inPlayerMenu;
extern bool gInPlayerMenu;
enum HUDDisplayFlag {
HUD_DISPLAY_FLAG_LIVES = 0x0001,

View file

@ -78,14 +78,13 @@ struct DjuiBind* djui_bind_create(struct DjuiBase* parent, const char* message,
for (int i = 0; i < MAX_BINDS; i++) {
#if defined(CAPI_SDL1) || defined(CAPI_SDL2)
unsigned int key = configKey[i];
struct DjuiButton* button = djui_button_create(&rect->base, translate_bind_to_name(key));
struct DjuiButton* button = djui_button_create(&rect->base, translate_bind_to_name(key), DJUI_BUTTON_STYLE_NORMAL, djui_bind_button_on_click);
#else
struct DjuiButton* button = djui_button_create(&rect->base, "???");
struct DjuiButton* button = djui_button_create(&rect->base, "???", DJUI_BUTTON_STYLE_NORMAL, djui_bind_button_on_click);
#endif
djui_base_set_size_type(&button->base, DJUI_SVT_RELATIVE, DJUI_SVT_RELATIVE);
djui_base_set_size(&button->base, 0.33f, 1.0f);
button->base.tag = i;
djui_interactable_hook_click(&button->base, djui_bind_button_on_click);
djui_interactable_hook_bind(&button->base, djui_bind_button_on_bind);
enum DjuiHAlign hAlign = DJUI_HALIGN_LEFT;

View file

@ -25,7 +25,7 @@ static void djui_button_update_style(struct DjuiBase* base) {
}
}
void djui_button_set_style(struct DjuiButton* button, u8 style) {
void djui_button_set_style(struct DjuiButton* button, enum DjuiButtonStyle style) {
button->style = style;
djui_button_update_style(&button->base);
}
@ -35,7 +35,7 @@ static void djui_button_destroy(struct DjuiBase* base) {
free(button);
}
struct DjuiButton* djui_button_create(struct DjuiBase* parent, const char* message) {
struct DjuiButton* djui_button_create(struct DjuiBase* parent, const char* message, enum DjuiButtonStyle style, void (*on_click)(struct DjuiBase*)) {
struct DjuiButton* button = calloc(1, sizeof(struct DjuiButton));
struct DjuiBase* base = &button->base;
@ -58,7 +58,25 @@ struct DjuiButton* djui_button_create(struct DjuiBase* parent, const char* messa
djui_text_set_drop_shadow(text, 0, 0, 0, 64);
button->text = text;
djui_base_set_size_type(base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(base, 1.0f, 64);
djui_interactable_hook_click(base, on_click);
button->style = style;
djui_button_update_style(base);
return button;
}
struct DjuiButton* djui_button_left_create(struct DjuiBase* parent, const char* message, enum DjuiButtonStyle style, void (*on_click)(struct DjuiBase*)) {
struct DjuiButton* button = djui_button_create(parent, message, style, on_click);
djui_base_set_size(&button->base, 0.485f, 64);
djui_base_set_alignment(&button->base, DJUI_HALIGN_LEFT, DJUI_VALIGN_TOP);
return button;
}
struct DjuiButton* djui_button_right_create(struct DjuiBase* parent, const char* message, enum DjuiButtonStyle style, void (*on_click)(struct DjuiBase*)) {
struct DjuiButton* button = djui_button_create(parent, message, style, on_click);
djui_base_set_size(&button->base, 0.485f, 64);
djui_base_set_alignment(&button->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_TOP);
return button;
}

View file

@ -8,6 +8,13 @@ struct DjuiButton {
u8 style;
};
void djui_button_set_style(struct DjuiButton* button, u8 style);
enum DjuiButtonStyle {
DJUI_BUTTON_STYLE_NORMAL,
DJUI_BUTTON_STYLE_BACK,
};
struct DjuiButton* djui_button_create(struct DjuiBase* parent, const char* message);
void djui_button_set_style(struct DjuiButton* button, enum DjuiButtonStyle style);
struct DjuiButton* djui_button_create(struct DjuiBase* parent, const char* message, enum DjuiButtonStyle style, void (*on_click)(struct DjuiBase*));
struct DjuiButton* djui_button_left_create(struct DjuiBase* parent, const char* message, enum DjuiButtonStyle style, void (*on_click)(struct DjuiBase*));
struct DjuiButton* djui_button_right_create(struct DjuiBase* parent, const char* message, enum DjuiButtonStyle style, void (*on_click)(struct DjuiBase*));

View file

@ -47,7 +47,7 @@ static void djui_checkbox_destroy(struct DjuiBase* base) {
free(checkbox);
}
struct DjuiCheckbox* djui_checkbox_create(struct DjuiBase* parent, const char* message, bool* value) {
struct DjuiCheckbox* djui_checkbox_create(struct DjuiBase* parent, const char* message, bool* value, void (*on_value_change)(struct DjuiBase*)) {
struct DjuiCheckbox* checkbox = calloc(1, sizeof(struct DjuiCheckbox));
struct DjuiBase* base = &checkbox->base;
@ -83,6 +83,9 @@ struct DjuiCheckbox* djui_checkbox_create(struct DjuiBase* parent, const char* m
base->get_cursor_hover_location = djui_checkbox_get_cursor_hover_location;
djui_checkbox_update_style(base);
djui_base_set_size_type(base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(base, 1.0f, 32);
djui_interactable_hook_value_change(base, on_value_change);
return checkbox;
}

View file

@ -9,4 +9,4 @@ struct DjuiCheckbox {
bool* value;
};
struct DjuiCheckbox* djui_checkbox_create(struct DjuiBase* parent, const char* message, bool* value);
struct DjuiCheckbox* djui_checkbox_create(struct DjuiBase* parent, const char* message, bool* value, void (*on_value_change)(struct DjuiBase*));

View file

@ -495,7 +495,7 @@ void djui_interactable_create(struct DjuiBase* base, void (*update_style)(struct
}
struct DjuiInteractable* interactable = calloc(1, sizeof(struct DjuiInteractable));
memset(interactable, 0, sizeof(struct DjuiInteractable));
interactable->enabled = true;
base->interactable = interactable;
base->interactable->update_style = update_style;

View file

@ -113,16 +113,15 @@ struct DjuiPaginated* djui_paginated_create(struct DjuiBase* parent, u32 showCou
}
{
struct DjuiButton* button = djui_button_create(&paginated->base, "<");
struct DjuiButton* button = djui_button_create(&paginated->base, "<", DJUI_BUTTON_STYLE_NORMAL, djui_paginated_prev);
djui_base_set_alignment(&button->base, DJUI_HALIGN_LEFT, DJUI_VALIGN_BOTTOM);
djui_base_set_size_type(&button->base, DJUI_SVT_ABSOLUTE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button->base, 128, 32);
djui_interactable_hook_click(&button->base, djui_paginated_prev);
paginated->prevButton = button;
}
{
struct DjuiButton* button = djui_button_create(&paginated->base, ">");
struct DjuiButton* button = djui_button_create(&paginated->base, ">", DJUI_BUTTON_STYLE_NORMAL, djui_paginated_next);
djui_base_set_alignment(&button->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_BOTTOM);
djui_base_set_size_type(&button->base, DJUI_SVT_ABSOLUTE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button->base, 128, 32);

View file

@ -4,12 +4,6 @@
#include "audio/external.h"
#include "src/game/bettercamera.h"
struct DjuiPanel {
struct DjuiBase* base;
struct DjuiPanel* parent;
struct DjuiBase* defaultElementBase;
};
static struct DjuiPanel* sPanelList = NULL;
static struct DjuiPanel* sPanelRemoving = NULL;
static f32 sMoveAmount = 0;
@ -18,8 +12,20 @@ bool djui_panel_is_active(void) {
return (sPanelList != NULL);
}
void djui_panel_add(struct DjuiBase* caller, struct DjuiBase* panelBase, struct DjuiBase* defaultElementBase) {
if (sPanelRemoving != NULL) { return; }
struct DjuiBase* djui_panel_find_first_interactable(struct DjuiBaseChild* child) {
while (child) {
if (child->base->interactable && child->base->interactable->enabled) {
return child->base;
}
struct DjuiBase* check = djui_panel_find_first_interactable(child->base->child);
if (check) { return check; }
child = child->next;
}
}
struct DjuiPanel* djui_panel_add(struct DjuiBase* caller, struct DjuiThreePanel* threePanel, struct DjuiBase* defaultElementBase) {
if (sPanelRemoving != NULL) { return NULL; }
struct DjuiBase* panelBase = &threePanel->base;
bool firstPanel = (sPanelList == NULL);
gDjuiPanelJoinMessageVisible = false;
@ -33,13 +39,23 @@ void djui_panel_add(struct DjuiBase* caller, struct DjuiBase* panelBase, struct
djui_base_set_visible(sPanelList->parent->base, false);
}
// calculate 3panel body height
djui_three_panel_recalculate_body_size(threePanel);
// allocate panel
struct DjuiPanel* panel = calloc(1, sizeof(struct DjuiPanel));
panel->parent = sPanelList;
panel->base = panelBase;
panel->defaultElementBase = defaultElementBase;
panel->on_panel_destroy = NULL;
sPanelList = panel;
// find better defaultElementBase
if (panel->defaultElementBase == NULL) {
panel->defaultElementBase = djui_panel_find_first_interactable(panel->base->child);
}
// deselect cursor input
djui_cursor_input_controlled_center(NULL);
@ -63,6 +79,8 @@ void djui_panel_add(struct DjuiBase* caller, struct DjuiBase* panelBase, struct
} else {
play_sound(SOUND_MENU_CLICK_FILE_SELECT, gGlobalSoundSource);
}
return panel;
}
void djui_panel_back(void) {
@ -126,6 +144,9 @@ void djui_panel_update(void) {
djui_cursor_input_controlled_center(sPanelList->defaultElementBase);
if (removingBase != NULL) {
if (sPanelRemoving->on_panel_destroy) {
sPanelRemoving->on_panel_destroy(NULL);
}
djui_base_destroy(removingBase);
free(sPanelRemoving);
sPanelRemoving = NULL;
@ -147,12 +168,18 @@ void djui_panel_shutdown(void) {
struct DjuiPanel* panel = sPanelList;
while (panel != NULL) {
struct DjuiPanel* next = panel->parent;
if (panel->on_panel_destroy) {
panel->on_panel_destroy(NULL);
}
djui_base_destroy(panel->base);
free(panel);
panel = next;
}
if (sPanelRemoving != NULL) {
if (sPanelRemoving->on_panel_destroy) {
sPanelRemoving->on_panel_destroy(NULL);
}
djui_base_destroy(sPanelRemoving->base);
free(sPanelRemoving);
}

View file

@ -4,8 +4,15 @@
#define DJUI_DEFAULT_PANEL_WIDTH (410.0f + (16 * 2.0f))
#define DJUI_PANEL_HEADER_OFFSET (-8)
struct DjuiPanel {
struct DjuiBase* base;
struct DjuiPanel* parent;
struct DjuiBase* defaultElementBase;
void (*on_panel_destroy)(struct DjuiBase*);
};
bool djui_panel_is_active(void);
void djui_panel_add(struct DjuiBase* caller, struct DjuiBase* panelBase, struct DjuiBase* defaultElementBase);
struct DjuiPanel* djui_panel_add(struct DjuiBase* caller, struct DjuiThreePanel* threePanel, struct DjuiBase* defaultElementBase);
void djui_panel_back(void);
void djui_panel_update(void);
void djui_panel_shutdown(void);

View file

@ -8,72 +8,24 @@ void djui_panel_camera_value_changed(UNUSED struct DjuiBase* caller) {
}
void djui_panel_camera_create(struct DjuiBase* caller) {
f32 bodyHeight = 32 * 10 + 64 * 1 + 16 * 10;
struct DjuiBase* defaultBase = NULL;
struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\C\\#1be700\\A\\#00b3ff\\M\\#ffef00\\E\\#ff0800\\R\\#1be700\\A");
struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\C\\#1be700\\A\\#00b3ff\\M\\#ffef00\\E\\#ff0800\\R\\#1be700\\A");
struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel);
{
struct DjuiCheckbox* checkbox1 = djui_checkbox_create(&body->base, "Free Camera", &configEnableCamera);
djui_base_set_size_type(&checkbox1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox1->base, 1.0f, 32);
djui_interactable_hook_value_change(&checkbox1->base, djui_panel_camera_value_changed);
defaultBase = &checkbox1->base;
struct DjuiCheckbox* checkbox2 = djui_checkbox_create(&body->base, "Analog Camera", &configCameraAnalog);
djui_base_set_size_type(&checkbox2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_interactable_hook_value_change(&checkbox2->base, djui_panel_camera_value_changed);
djui_base_set_size(&checkbox2->base, 1.0f, 32);
djui_checkbox_create(&body->base, "Free Camera", &configEnableCamera, djui_panel_camera_value_changed);
djui_checkbox_create(&body->base, "Analog Camera", &configCameraAnalog, djui_panel_camera_value_changed);
#ifdef BETTERCAMERA
struct DjuiCheckbox* checkbox3 = djui_checkbox_create(&body->base, "Mouse Look", &configCameraMouse);
djui_base_set_size_type(&checkbox3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_interactable_hook_value_change(&checkbox3->base, djui_panel_camera_value_changed);
djui_base_set_size(&checkbox3->base, 1.0f, 32);
djui_checkbox_create(&body->base, "Mouse Look", &configCameraMouse, djui_panel_camera_value_changed);
#endif
djui_checkbox_create(&body->base, "Invert X", &configCameraInvertX, djui_panel_camera_value_changed);
djui_checkbox_create(&body->base, "Invert Y", &configCameraInvertY, djui_panel_camera_value_changed);
djui_slider_create(&body->base, "X Sensitivity", &configCameraXSens, 1, 100, djui_panel_camera_value_changed);
djui_slider_create(&body->base, "Y Sensitivity", &configCameraYSens, 1, 100, djui_panel_camera_value_changed);
djui_slider_create(&body->base, "Aggression", &configCameraAggr, 0, 100, djui_panel_camera_value_changed);
djui_slider_create(&body->base, "Pan Level", &configCameraPan, 0, 100, djui_panel_camera_value_changed);
djui_slider_create(&body->base, "Deceleration", &configCameraDegrade, 0, 100, djui_panel_camera_value_changed);
struct DjuiCheckbox* checkbox4 = djui_checkbox_create(&body->base, "Invert X", &configCameraInvertX);
djui_base_set_size_type(&checkbox4->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_interactable_hook_value_change(&checkbox4->base, djui_panel_camera_value_changed);
djui_base_set_size(&checkbox4->base, 1.0f, 32);
struct DjuiCheckbox* checkbox5 = djui_checkbox_create(&body->base, "Invert Y", &configCameraInvertY);
djui_base_set_size_type(&checkbox5->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_interactable_hook_value_change(&checkbox5->base, djui_panel_camera_value_changed);
djui_base_set_size(&checkbox5->base, 1.0f, 32);
struct DjuiSlider* slider1 = djui_slider_create(&body->base, "X Sensitivity", &configCameraXSens, 1, 100);
djui_base_set_size_type(&slider1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_interactable_hook_value_change(&slider1->base, djui_panel_camera_value_changed);
djui_base_set_size(&slider1->base, 1.0f, 32);
struct DjuiSlider* slider2 = djui_slider_create(&body->base, "Y Sensitivity", &configCameraYSens, 1, 100);
djui_base_set_size_type(&slider2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_interactable_hook_value_change(&slider2->base, djui_panel_camera_value_changed);
djui_base_set_size(&slider2->base, 1.0f, 32);
struct DjuiSlider* slider3 = djui_slider_create(&body->base, "Aggression", &configCameraAggr, 0, 100);
djui_base_set_size_type(&slider3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_interactable_hook_value_change(&slider3->base, djui_panel_camera_value_changed);
djui_base_set_size(&slider3->base, 1.0f, 32);
struct DjuiSlider* slider4 = djui_slider_create(&body->base, "Pan Level", &configCameraPan, 0, 100);
djui_base_set_size_type(&slider4->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_interactable_hook_value_change(&slider4->base, djui_panel_camera_value_changed);
djui_base_set_size(&slider4->base, 1.0f, 32);
struct DjuiSlider* slider5 = djui_slider_create(&body->base, "Deceleration", &configCameraDegrade, 0, 100);
djui_base_set_size_type(&slider5->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_interactable_hook_value_change(&slider5->base, djui_panel_camera_value_changed);
djui_base_set_size(&slider5->base, 1.0f, 32);
struct DjuiButton* button6 = djui_button_create(&body->base, "Back");
djui_base_set_size_type(&button6->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button6->base, 1.0f, 64);
djui_button_set_style(button6, 1);
djui_interactable_hook_click(&button6->base, djui_panel_menu_back);
djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
}
djui_panel_add(caller, &panel->base, defaultBase);
djui_panel_add(caller, panel, NULL);
}

View file

@ -2,61 +2,20 @@
#include "pc/cheats.h"
void djui_panel_cheats_create(struct DjuiBase* caller) {
f32 bodyHeight = 32 * 8 + 64 * 1 + 16 * 9;
struct DjuiBase* defaultBase = NULL;
struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\C\\#1be700\\H\\#00b3ff\\E\\#ffef00\\A\\#ff0800\\T\\#1be700\\S");
struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\C\\#1be700\\H\\#00b3ff\\E\\#ffef00\\A\\#ff0800\\T\\#1be700\\S");
struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel);
{
{
struct DjuiCheckbox* checkbox = djui_checkbox_create(&body->base, "Moon Jump", &gCheats.moonJump);
djui_base_set_size_type(&checkbox->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox->base, 1.0f, 32);
defaultBase = &checkbox->base;
}
{
struct DjuiCheckbox* checkbox = djui_checkbox_create(&body->base, "God Mode", &gCheats.godMode);
djui_base_set_size_type(&checkbox->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox->base, 1.0f, 32);
}
{
struct DjuiCheckbox* checkbox = djui_checkbox_create(&body->base, "Infinite Lives", &gCheats.infiniteLives);
djui_base_set_size_type(&checkbox->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox->base, 1.0f, 32);
}
{
struct DjuiCheckbox* checkbox = djui_checkbox_create(&body->base, "Super Speed", &gCheats.superSpeed);
djui_base_set_size_type(&checkbox->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox->base, 1.0f, 32);
}
{
struct DjuiCheckbox* checkbox = djui_checkbox_create(&body->base, "Responsive Controls", &gCheats.responsiveControls);
djui_base_set_size_type(&checkbox->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox->base, 1.0f, 32);
}
{
struct DjuiCheckbox* checkbox = djui_checkbox_create(&body->base, "Rapid Fire (A)", &gCheats.rapidFireA);
djui_base_set_size_type(&checkbox->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox->base, 1.0f, 32);
}
{
struct DjuiCheckbox* checkbox = djui_checkbox_create(&body->base, "BLJ Anywhere", &gCheats.bljAnywhere);
djui_base_set_size_type(&checkbox->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox->base, 1.0f, 32);
}
{
struct DjuiCheckbox* checkbox = djui_checkbox_create(&body->base, "Always Triple Jump", &gCheats.alwaysTripleJump);
djui_base_set_size_type(&checkbox->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox->base, 1.0f, 32);
}
djui_checkbox_create(&body->base, "Moon Jump", &gCheats.moonJump, NULL);
djui_checkbox_create(&body->base, "God Mode", &gCheats.godMode, NULL);
djui_checkbox_create(&body->base, "Infinite Lives", &gCheats.infiniteLives, NULL);
djui_checkbox_create(&body->base, "Super Speed", &gCheats.superSpeed, NULL);
djui_checkbox_create(&body->base, "Responsive Controls", &gCheats.responsiveControls, NULL);
djui_checkbox_create(&body->base, "Rapid Fire (A)", &gCheats.rapidFireA, NULL);
djui_checkbox_create(&body->base, "BLJ Anywhere", &gCheats.bljAnywhere, NULL);
djui_checkbox_create(&body->base, "Always Triple Jump", &gCheats.alwaysTripleJump, NULL);
struct DjuiButton* button1 = djui_button_create(&body->base, "Back");
djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button1->base, 1.0f, 64);
djui_button_set_style(button1, 1);
djui_interactable_hook_click(&button1->base, djui_panel_menu_back);
djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
}
djui_panel_add(caller, &panel->base, defaultBase);
djui_panel_add(caller, panel, NULL);
}

View file

@ -2,10 +2,7 @@
#include "src/pc/utils/misc.h"
void djui_panel_confirm_create(struct DjuiBase* caller, char* title, char* message, void (*on_yes_click)(struct DjuiBase*)) {
f32 bodyHeight = 64 * 2 + 16 * 1;
struct DjuiBase* defaultBase = NULL;
struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, title);
struct DjuiThreePanel* panel = djui_panel_menu_create(title);
struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel);
{
struct DjuiText* text = djui_text_create(&body->base, message);
@ -14,25 +11,12 @@ void djui_panel_confirm_create(struct DjuiBase* caller, char* title, char* messa
djui_base_set_color(&text->base, 200, 200, 200, 255);
djui_text_set_alignment(text, DJUI_HALIGN_CENTER, DJUI_VALIGN_CENTER);
struct DjuiRect* rect1 = djui_rect_create(&body->base);
djui_base_set_size_type(&rect1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&rect1->base, 1.0f, 64);
djui_base_set_color(&rect1->base, 0, 0, 0, 0);
struct DjuiRect* rect1 = djui_rect_container_create(&body->base, 64);
{
struct DjuiButton* button1 = djui_button_create(&rect1->base, "No");
djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button1->base, 0.485f, 64);
djui_base_set_alignment(&button1->base, DJUI_HALIGN_LEFT, DJUI_VALIGN_TOP);
djui_interactable_hook_click(&button1->base, djui_panel_menu_back);
defaultBase = &button1->base;
struct DjuiButton* button2 = djui_button_create(&rect1->base, "Yes");
djui_base_set_size_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button2->base, 0.485f, 64);
djui_base_set_alignment(&button2->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_TOP);
djui_interactable_hook_click(&button2->base, on_yes_click);
djui_button_left_create(&rect1->base, "No", DJUI_BUTTON_STYLE_NORMAL, djui_panel_menu_back);
djui_button_right_create(&rect1->base, "Yes", DJUI_BUTTON_STYLE_NORMAL, on_yes_click);
}
}
djui_panel_add(caller, &panel->base, defaultBase);
djui_panel_add(caller, panel, NULL);
}

View file

@ -9,26 +9,12 @@ void djui_panel_controls_value_change(UNUSED struct DjuiBase* caller) {
}
void djui_panel_controls_create(struct DjuiBase* caller) {
f32 bodyHeight = 16 * 6 + 32 * 2 + 64 * 4;
struct DjuiBase* defaultBase = NULL;
struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\C\\#1be700\\O\\#00b3ff\\N\\#ffef00\\T\\#ff0800\\R\\#1be700\\O\\#00b3ff\\L\\#ffef00\\S");
struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\C\\#1be700\\O\\#00b3ff\\N\\#ffef00\\T\\#ff0800\\R\\#1be700\\O\\#00b3ff\\L\\#ffef00\\S");
struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel);
{
struct DjuiButton* button1 = djui_button_create(&body->base, "N64 Binds");
djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button1->base, 1.0f, 64);
djui_interactable_hook_click(&button1->base, djui_panel_controls_n64_create);
defaultBase = &button1->base;
struct DjuiButton* button2 = djui_button_create(&body->base, "Extra Binds");
djui_base_set_size_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button2->base, 1.0f, 64);
djui_interactable_hook_click(&button2->base, djui_panel_controls_extra_create);
struct DjuiCheckbox* checkboxGB = djui_checkbox_create(&body->base, "Background Gamepad (must restart)", &configBackgroundGamepad);
djui_base_set_size_type(&checkboxGB->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkboxGB->base, 1.0f, 32);
djui_button_create(&body->base, "N64 Binds", DJUI_BUTTON_STYLE_NORMAL, djui_panel_controls_n64_create);
djui_button_create(&body->base, "Extra Binds", DJUI_BUTTON_STYLE_NORMAL, djui_panel_controls_extra_create);
djui_checkbox_create(&body->base, "Background Gamepad (must restart)", &configBackgroundGamepad, NULL);
#ifdef HAVE_SDL2
int numJoys = SDL_NumJoysticks();
@ -45,27 +31,14 @@ void djui_panel_controls_create(struct DjuiBase* caller) {
sprintf(&gamepadChoicesLong[index], "%d", i);
gamepadChoices[i] = &gamepadChoicesLong[index];
}
struct DjuiSelectionbox* selectionboxGamepad = djui_selectionbox_create(&body->base, "Gamepad", gamepadChoices, numJoys, &configGamepadNumber);
djui_base_set_size_type(&selectionboxGamepad->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&selectionboxGamepad->base, 1.0f, 32);
djui_selectionbox_create(&body->base, "Gamepad", gamepadChoices, numJoys, &configGamepadNumber, NULL);
#endif
struct DjuiSlider* slider1 = djui_slider_create(&body->base, "Deadzone", &configStickDeadzone, 0, 100);
djui_base_set_size_type(&slider1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&slider1->base, 1.0f, 32);
djui_interactable_hook_value_change(&slider1->base, djui_panel_controls_value_change);
djui_slider_create(&body->base, "Deadzone", &configStickDeadzone, 0, 100, djui_panel_controls_value_change);
djui_slider_create(&body->base, "Rumble Strength", &configRumbleStrength, 0, 100, djui_panel_controls_value_change);
struct DjuiSlider* slider2 = djui_slider_create(&body->base, "Rumble Strength", &configRumbleStrength, 0, 100);
djui_base_set_size_type(&slider2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&slider2->base, 1.0f, 32);
djui_interactable_hook_value_change(&slider2->base, djui_panel_controls_value_change);
struct DjuiButton* button6 = djui_button_create(&body->base, "Back");
djui_base_set_size_type(&button6->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button6->base, 1.0f, 64);
djui_button_set_style(button6, 1);
djui_interactable_hook_click(&button6->base, djui_panel_menu_back);
djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
}
djui_panel_add(caller, &panel->base, defaultBase);
djui_panel_add(caller, panel, NULL);
}

View file

@ -3,10 +3,8 @@
void djui_panel_controls_extra_create(struct DjuiBase* caller) {
f32 bindBodyHeight = 28 * 8 + 1 * 7;
f32 bodyHeight = bindBodyHeight + 16 + 64;
struct DjuiBase* defaultBase = NULL;
struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\C\\#1be700\\O\\#00b3ff\\N\\#ffef00\\T\\#ff0800\\R\\#1be700\\O\\#00b3ff\\L\\#ffef00\\S");
struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\C\\#1be700\\O\\#00b3ff\\N\\#ffef00\\T\\#ff0800\\R\\#1be700\\O\\#00b3ff\\L\\#ffef00\\S");
struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel);
{
struct DjuiFlowLayout* bindBody = djui_flow_layout_create(&body->base);
@ -25,13 +23,8 @@ void djui_panel_controls_extra_create(struct DjuiBase* caller) {
djui_bind_create(&bindBody->base, "Y", configKeyY);
}
struct DjuiButton* buttonBack = djui_button_create(&body->base, "Back");
djui_base_set_size_type(&buttonBack->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&buttonBack->base, 1.0f, 64);
djui_button_set_style(buttonBack, 1);
djui_interactable_hook_click(&buttonBack->base, djui_panel_menu_back);
defaultBase = &buttonBack->base;
djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
}
djui_panel_add(caller, &panel->base, defaultBase);
djui_panel_add(caller, panel, NULL);
}

View file

@ -3,10 +3,8 @@
void djui_panel_controls_n64_create(struct DjuiBase* caller) {
f32 bindBodyHeight = 28 * 14 + 1 * 13;
f32 bodyHeight = bindBodyHeight + 16 + 64;
struct DjuiBase* defaultBase = NULL;
struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\C\\#1be700\\O\\#00b3ff\\N\\#ffef00\\T\\#ff0800\\R\\#1be700\\O\\#00b3ff\\L\\#ffef00\\S");
struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\C\\#1be700\\O\\#00b3ff\\N\\#ffef00\\T\\#ff0800\\R\\#1be700\\O\\#00b3ff\\L\\#ffef00\\S");
struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel);
{
struct DjuiFlowLayout* bindBody = djui_flow_layout_create(&body->base);
@ -31,13 +29,8 @@ void djui_panel_controls_n64_create(struct DjuiBase* caller) {
djui_bind_create(&bindBody->base, "C Right", configKeyCRight);
}
struct DjuiButton* buttonBack = djui_button_create(&body->base, "Back");
djui_base_set_size_type(&buttonBack->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&buttonBack->base, 1.0f, 64);
djui_button_set_style(buttonBack, 1);
djui_interactable_hook_click(&buttonBack->base, djui_panel_menu_back);
defaultBase = &buttonBack->base;
djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
}
djui_panel_add(caller, &panel->base, defaultBase);
djui_panel_add(caller, panel, NULL);
}

View file

@ -2,26 +2,6 @@
#include "src/pc/utils/misc.h"
#include "src/pc/configfile.h"
// The checkbox size is determined by the base size they all have and the amount.
#define CHECKBOXES_SIZE 32 * 5
// The checkbox pad size is determined by half the base size they all have and the amount plus one.
#define CHECKBOXES_PAD_SIZE 16 * 7
// The accumulative size of both the padding size and normal size for the checkboxes.
#define CHECKBOXES_FULL_SIZE CHECKBOXES_SIZE + CHECKBOXES_PAD_SIZE
// The selection box size is determined by the base size they all have and the amount.
#define SELECTION_BOXES_SIZE 32 * 3
// The selection box pad size is determined by half the base size they all have and the amount plus one.
#define SELECTION_BOXES_PAD_SIZE 16 * 4
// The accumulative size of both the padding size and normal size for the selection boxes.
#define SELECTION_BOXES_FULL_SIZE SELECTION_BOXES_SIZE + SELECTION_BOXES_PAD_SIZE
// The button size is determined by the base size they all have and the amount.
#define BUTTON_SIZES 64 * 2
// The full height for the body.
#define BODY_HEIGHT CHECKBOXES_FULL_SIZE + SELECTION_BOXES_FULL_SIZE + BUTTON_SIZES
static struct DjuiInputbox* sFrameLimitInput = NULL;
static struct DjuiSelectionbox* sInterpolationSelectionBox = NULL;
@ -47,39 +27,20 @@ static void djui_panel_display_frame_limit_text_change(struct DjuiBase* caller)
}
void djui_panel_display_create(struct DjuiBase* caller) {
f32 bodyHeight = BODY_HEIGHT;
struct DjuiBase* defaultBase = NULL;
struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\D\\#1be700\\I\\#00b3ff\\S\\#ffef00\\P\\#ff0800\\L\\#1be700\\A\\#00b3ff\\Y");
struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\D\\#1be700\\I\\#00b3ff\\S\\#ffef00\\P\\#ff0800\\L\\#1be700\\A\\#00b3ff\\Y");
struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel);
{
struct DjuiCheckbox* checkbox1 = djui_checkbox_create(&body->base, "Fullscreen", &configWindow.fullscreen);
djui_base_set_size_type(&checkbox1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox1->base, 1.0f, 32);
djui_interactable_hook_value_change(&checkbox1->base, djui_panel_display_apply);
defaultBase = &checkbox1->base;
djui_checkbox_create(&body->base, "Fullscreen", &configWindow.fullscreen, djui_panel_display_apply);
#ifdef EXTERNAL_DATA
struct DjuiCheckbox* checkbox7 = djui_checkbox_create(&body->base, "Preload Textures", &configPrecacheRes);
djui_base_set_size_type(&checkbox7->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox7->base, 1.0f, 32);
djui_checkbox_create(&body->base, "Preload Textures", &configPrecacheRes, NULL);
#endif
struct DjuiCheckbox* checkbox2 = djui_checkbox_create(&body->base, "VSync", &configWindow.vsync);
djui_base_set_size_type(&checkbox2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox2->base, 1.0f, 32);
djui_interactable_hook_value_change(&checkbox2->base, djui_panel_display_apply);
djui_checkbox_create(&body->base, "VSync", &configWindow.vsync, djui_panel_display_apply);
djui_checkbox_create(&body->base, "Uncapped Framerate", &configUncappedFramerate, djui_panel_display_apply);
struct DjuiCheckbox* checkbox3 = djui_checkbox_create(&body->base, "Uncapped Framerate", &configUncappedFramerate);
djui_base_set_size_type(&checkbox3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox3->base, 1.0f, 32);
djui_interactable_hook_value_change(&checkbox3->base, djui_panel_display_uncapped_change);
struct DjuiRect* rect1 = djui_rect_create(&body->base);
djui_base_set_size_type(&rect1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&rect1->base, 1.0f, 32);
djui_base_set_color(&rect1->base, 0, 0, 0, 0);
struct DjuiRect* rect1 = djui_rect_container_create(&body->base, 32);
{
if (configFrameLimit < 30) { configFrameLimit = 30; }
if (configFrameLimit > 3000) { configFrameLimit = 3000; }
@ -102,33 +63,20 @@ void djui_panel_display_create(struct DjuiBase* caller) {
}
char* interpChoices[2] = { "Fast", "Accurate" };
struct DjuiSelectionbox* selectionbox1 = djui_selectionbox_create(&body->base, "Interpolation", interpChoices, 2, &configInterpolationMode);
djui_base_set_size_type(&selectionbox1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&selectionbox1->base, 1.0f, 32);
struct DjuiSelectionbox* selectionbox1 = djui_selectionbox_create(&body->base, "Interpolation", interpChoices, 2, &configInterpolationMode, NULL);
djui_base_set_enabled(&selectionbox1->base, (configFrameLimit > 30 || (configFrameLimit <= 30 && configUncappedFramerate)));
sInterpolationSelectionBox = selectionbox1;
char* filterChoices[3] = { "Nearest", "Linear", "Tripoint" };
struct DjuiSelectionbox* selectionbox2 = djui_selectionbox_create(&body->base, "Filtering", filterChoices, 3, &configFiltering);
djui_base_set_size_type(&selectionbox2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&selectionbox2->base, 1.0f, 32);
djui_selectionbox_create(&body->base, "Filtering", filterChoices, 3, &configFiltering, NULL);
char* drawDistanceChoices[6] = { "0.5x", "1x", "1.5x", "3x", "10x", "100x" };
struct DjuiSelectionbox* selectionbox3 = djui_selectionbox_create(&body->base, "Draw Distance", drawDistanceChoices, 6, &configDrawDistance);
djui_base_set_size_type(&selectionbox3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&selectionbox3->base, 1.0f, 32);
djui_selectionbox_create(&body->base, "Draw Distance", drawDistanceChoices, 6, &configDrawDistance, NULL);
struct DjuiButton* button1 = djui_button_create(&body->base, "DynOS Packs");
djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button1->base, 1.0f, 64);
djui_interactable_hook_click(&button1->base, djui_panel_dynos_create);
djui_button_create(&body->base, "DynOS Packs", DJUI_BUTTON_STYLE_NORMAL, djui_panel_dynos_create);
struct DjuiButton* button2 = djui_button_create(&body->base, "Back");
djui_base_set_size_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button2->base, 1.0f, 64);
djui_button_set_style(button2, 1);
djui_interactable_hook_click(&button2->base, djui_panel_menu_back);
djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
}
djui_panel_add(caller, &panel->base, defaultBase);
djui_panel_add(caller, panel, NULL);
}

View file

@ -9,10 +9,7 @@ static void djui_panel_dynos_apply(struct DjuiBase* caller) {
void djui_panel_dynos_create(struct DjuiBase* caller) {
int packCount = dynos_pack_get_count();
f32 bodyHeight = (416) + 64 * 1 + 16 * 1;
struct DjuiBase* defaultBase = NULL;
struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\D\\#1be700\\Y\\#00b3ff\\N\\#ffef00\\O\\#ff0800\\S");
struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\D\\#1be700\\Y\\#00b3ff\\N\\#ffef00\\O\\#ff0800\\S");
struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel);
{
@ -22,27 +19,17 @@ void djui_panel_dynos_create(struct DjuiBase* caller) {
bool tmp = dynos_pack_get_enabled(i);
const char* pack = dynos_pack_get_name(i);
struct DjuiCheckbox* checkbox1 = djui_checkbox_create(layoutBase, pack, &tmp);
struct DjuiCheckbox* checkbox1 = djui_checkbox_create(layoutBase, pack, &tmp, djui_panel_dynos_apply);
checkbox1->base.tag = i;
checkbox1->base.bTag = tmp;
checkbox1->value = &checkbox1->base.bTag;
djui_base_set_size_type(&checkbox1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox1->base, 1.0f, 32);
djui_interactable_hook_value_change(&checkbox1->base, djui_panel_dynos_apply);
if (i == 0) { defaultBase = &checkbox1->base; }
}
djui_paginated_calculate_height(paginated);
struct DjuiButton* button6 = djui_button_create(&body->base, "Back");
djui_base_set_size_type(&button6->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button6->base, 1.0f, 64);
djui_button_set_style(button6, 1);
djui_interactable_hook_click(&button6->base, djui_panel_menu_back);
if (defaultBase == NULL) { defaultBase = &button6->base; }
djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
panel->bodySize.value = paginated->base.height.value + 16 + 64;
}
djui_panel_add(caller, &panel->base, defaultBase);
djui_panel_add(caller, panel, NULL);
}

View file

@ -65,31 +65,22 @@ static void djui_panel_host_do_host(struct DjuiBase* caller) {
}
void djui_panel_host_create(struct DjuiBase* caller) {
f32 bodyHeight = 32 * 4 + 64 * 4 + 16 * 5;
struct DjuiBase* defaultBase = NULL;
struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight,
(gNetworkType == NT_SERVER)
struct DjuiThreePanel* panel = djui_panel_menu_create((gNetworkType == NT_SERVER)
? "\\#ff0800\\S\\#1be700\\E\\#00b3ff\\R\\#ffef00\\V\\#ff0800\\E\\#1be700\\R"
: "\\#ff0800\\H\\#1be700\\O\\#00b3ff\\S\\#ffef00\\T");
struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel);
{
#ifdef DISCORD_SDK
char* nChoices[2] = { "Discord", "Direct Connection" };
struct DjuiSelectionbox* selectionbox1 = djui_selectionbox_create(&body->base, "Network system", nChoices, 2, &configNetworkSystem);
djui_base_set_size_type(&selectionbox1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&selectionbox1->base, 1.0f, 32);
djui_interactable_hook_value_change(&selectionbox1->base, djui_panel_host_network_system_change);
struct DjuiSelectionbox* selectionbox1 = djui_selectionbox_create(&body->base, "Network system", nChoices, 2, &configNetworkSystem, djui_panel_host_network_system_change);
if (gNetworkType == NT_SERVER) {
djui_base_set_enabled(&selectionbox1->base, false);
}
#endif
struct DjuiRect* rect1 = djui_rect_create(&body->base);
djui_base_set_size_type(&rect1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&rect1->base, 1.0f, 32);
djui_base_set_color(&rect1->base, 0, 0, 0, 0);
struct DjuiRect* rect1 = djui_rect_container_create(&body->base, 32);
{
struct DjuiText* text1 = djui_text_create(&rect1->base, "Port");
djui_base_set_size_type(&text1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
@ -118,10 +109,7 @@ void djui_panel_host_create(struct DjuiBase* caller) {
sInputboxPort = inputbox1;
}
struct DjuiRect* rect2 = djui_rect_create(&body->base);
djui_base_set_size_type(&rect2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&rect2->base, 1.0f, 32);
djui_base_set_color(&rect2->base, 0, 0, 0, 0);
struct DjuiRect* rect2 = djui_rect_container_create(&body->base, 32);
{
struct DjuiText* text1 = djui_text_create(&rect2->base, "Save Slot");
djui_base_set_size_type(&text1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
@ -131,50 +119,28 @@ void djui_panel_host_create(struct DjuiBase* caller) {
char starString[32] = { 0 };
snprintf(starString, 32, "%c x%d", '~' + 1, save_file_get_total_star_count(configHostSaveSlot - 1, 0, 24));
struct DjuiButton* button1 = djui_button_create(&rect2->base, starString);
djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
struct DjuiButton* button1 = djui_button_create(&rect2->base, starString, DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_save_create);
djui_base_set_size(&button1->base, 0.5f, 32);
djui_base_set_alignment(&button1->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_TOP);
djui_interactable_hook_click(&button1->base, djui_panel_host_save_create);
}
struct DjuiButton* button1 = djui_button_create(&body->base, "Settings");
djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button1->base, 1.0f, 64);
djui_base_set_alignment(&button1->base, DJUI_HALIGN_CENTER, DJUI_VALIGN_TOP);
djui_interactable_hook_click(&button1->base, djui_panel_host_settings_create);
djui_button_create(&body->base, "Settings", DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_settings_create);
struct DjuiButton* button2 = djui_button_create(&body->base, "Mods");
djui_base_set_size_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button2->base, 1.0f, 64);
djui_base_set_alignment(&button2->base, DJUI_HALIGN_CENTER, DJUI_VALIGN_TOP);
djui_interactable_hook_click(&button2->base, djui_panel_host_mods_create);
struct DjuiButton* button2 = djui_button_create(&body->base, "Mods", DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_mods_create);
button2->base.tag = 0;
struct DjuiButton* button3 = djui_button_create(&body->base, "Rom-Hacks");
djui_base_set_size_type(&button3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button3->base, 1.0f, 64);
djui_base_set_alignment(&button3->base, DJUI_HALIGN_CENTER, DJUI_VALIGN_TOP);
djui_interactable_hook_click(&button3->base, djui_panel_host_mods_create);
struct DjuiButton* button3 = djui_button_create(&body->base, "Rom-Hacks", DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_mods_create);
button3->base.tag = 1;
struct DjuiRect* rect3 = djui_rect_create(&body->base);
djui_base_set_size_type(&rect3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&rect3->base, 1.0f, 64);
djui_base_set_color(&rect3->base, 0, 0, 0, 0);
struct DjuiRect* rect3 = djui_rect_container_create(&body->base, 64);
{
struct DjuiButton* button1 = djui_button_create(&rect3->base, (gNetworkType == NT_SERVER) ? "Cancel" : "Back");
djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
struct DjuiButton* button1 = djui_button_create(&rect3->base, (gNetworkType == NT_SERVER) ? "Cancel" : "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
djui_base_set_size(&button1->base, 0.485f, 64);
djui_base_set_alignment(&button1->base, DJUI_HALIGN_LEFT, DJUI_VALIGN_TOP);
djui_button_set_style(button1, 1);
djui_interactable_hook_click(&button1->base, djui_panel_menu_back);
struct DjuiButton* button2 = djui_button_create(&rect3->base, (gNetworkType == NT_SERVER) ? "Apply" : "Host");
djui_base_set_size_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
struct DjuiButton* button2 = djui_button_create(&rect3->base, (gNetworkType == NT_SERVER) ? "Apply" : "Host", DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_do_host);
djui_base_set_size(&button2->base, 0.485f, 64);
djui_base_set_alignment(&button2->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_TOP);
djui_interactable_hook_click(&button2->base, djui_panel_host_do_host);
defaultBase = (gNetworkType == NT_SERVER)
? &button1->base
@ -182,5 +148,5 @@ void djui_panel_host_create(struct DjuiBase* caller) {
}
}
djui_panel_add(caller, &panel->base, defaultBase);
djui_panel_add(caller, panel, defaultBase);
}

View file

@ -83,10 +83,8 @@ void djui_panel_host_message_create(struct DjuiBase* caller) {
}
f32 textHeight = 32 * 0.8125f * warningLines + 8;
f32 bodyHeight = textHeight + 16 + 64;
struct DjuiBase* defaultBase = NULL;
struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\I\\#1be700\\N\\#00b3ff\\F\\#ffef00\\O");
struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\I\\#1be700\\N\\#00b3ff\\F\\#ffef00\\O");
struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel);
{
struct DjuiText* text1 = djui_text_create(&body->base, warningMessage);
@ -94,36 +92,20 @@ void djui_panel_host_message_create(struct DjuiBase* caller) {
djui_base_set_size(&text1->base, 1.0f, textHeight);
djui_base_set_color(&text1->base, 200, 200, 200, 255);
struct DjuiRect* rect1 = djui_rect_create(&body->base);
djui_base_set_size_type(&rect1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&rect1->base, 1.0f, 64);
djui_base_set_color(&rect1->base, 0, 0, 0, 0);
struct DjuiRect* rect1 = djui_rect_container_create(&body->base, 64);
{
struct DjuiButton* button1 = djui_button_create(&rect1->base, "Back");
djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button1->base, 0.485f, 64);
djui_base_set_alignment(&button1->base, DJUI_HALIGN_LEFT, DJUI_VALIGN_TOP);
djui_button_set_style(button1, 1);
djui_interactable_hook_click(&button1->base, djui_panel_menu_back);
struct DjuiButton* button2 = djui_button_create(&rect1->base, "Host");
djui_base_set_size_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button2->base, 0.485f, 64);
djui_base_set_alignment(&button2->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_TOP);
djui_interactable_hook_click(&button2->base, djui_panel_host_message_do_host);
defaultBase = &button2->base;
struct DjuiButton* btnHost = djui_button_right_create(&rect1->base, "Host", DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_message_do_host);
struct DjuiButton* btnBack = djui_button_left_create(&rect1->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
if (hideHostButton) {
djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button1->base, 1.0f, 64);
defaultBase = &button1->base;
djui_base_set_visible(&button2->base, false);
djui_base_set_enabled(&button2->base, false);
djui_base_set_size(&btnBack->base, 1.0f, 64);
djui_base_set_visible(&btnHost->base, false);
djui_base_set_enabled(&btnHost->base, false);
}
}
}
djui_panel_add(caller, &panel->base, defaultBase);
djui_panel_add(caller, panel, NULL);
#ifdef DISCORD_SDK
if (configNetworkSystem)
#endif

View file

@ -69,7 +69,7 @@ static void djui_mod_checkbox_on_value_change(UNUSED struct DjuiBase* base) {
struct Mod* mod = gLocalMods.entries[index];
djui_base_set_enabled(node->base, mod->selectable);
// iterate
node = node->next;
}
@ -86,13 +86,11 @@ static void djui_panel_host_mods_destroy(struct DjuiBase* base) {
}
void djui_panel_host_mods_create(struct DjuiBase* caller) {
f32 bodyHeight = (416) + 64 * 1 + 16 * 1;
bool isRomHacks = (caller->tag == 1);
mods_update_selectable();
struct DjuiBase* defaultBase = NULL;
struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, isRomHacks ?
struct DjuiThreePanel* panel = djui_panel_menu_create(isRomHacks ?
"\\#ff0800\\R\\#1be700\\O\\#00b3ff\\M \\#ffef00\\H\\#ff0800\\A\\#1be700\\C\\#00b3ff\\K\\#ffef00\\S" :
"\\#ff0800\\M\\#1be700\\O\\#00b3ff\\D\\#ffef00\\S"
);
@ -106,29 +104,20 @@ void djui_panel_host_mods_create(struct DjuiBase* caller) {
if (isRomHacks != (mod->incompatible && strstr(mod->incompatible, "romhack"))) {
continue;
}
struct DjuiCheckbox* checkbox = djui_checkbox_create(layoutBase, mod->name, &mod->enabled);
struct DjuiCheckbox* checkbox = djui_checkbox_create(layoutBase, mod->name, &mod->enabled, djui_mod_checkbox_on_value_change);
checkbox->base.tag = i;
djui_base_set_size_type(&checkbox->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox->base, 1.0f, 32);
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_interactable_hook_value_change(&checkbox->base, djui_mod_checkbox_on_value_change);
if (i == 0) { defaultBase = &checkbox->base; }
}
djui_paginated_calculate_height(paginated);
struct DjuiButton* button1 = djui_button_create(&body->base, "Back");
djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button1->base, 1.0f, 64);
djui_button_set_style(button1, 1);
djui_interactable_hook_click(&button1->base, djui_panel_menu_back);
if (defaultBase == NULL) { defaultBase = &button1->base; }
djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
panel->bodySize.value = paginated->base.height.value + 16 + 64;
}
panel->base.destroy = djui_panel_host_mods_destroy;
djui_panel_add(caller, &panel->base, defaultBase);
djui_panel_add(caller, panel, NULL);
djui_panel_host_mods_description_create();
}

View file

@ -34,37 +34,27 @@ static void djui_panel_host_save_erase(struct DjuiBase* caller) {
}
void djui_panel_host_save_create(struct DjuiBase* caller) {
f32 bodyHeight = 32 * 4 + 64 * 1 + 16 * 5;
sSaveButtonCaller = caller;
struct DjuiBase* defaultBase = NULL;
struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\S\\#1be700\\A\\#00b3ff\\V\\#ffef00\\E");
struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\S\\#1be700\\A\\#00b3ff\\V\\#ffef00\\E");
struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel);
{
for (int i = 0; i < 4; i++) {
struct DjuiRect* rect1 = djui_rect_create(&body->base);
djui_base_set_size_type(&rect1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&rect1->base, 1.0f, 32);
djui_base_set_color(&rect1->base, 0, 0, 0, 0);
struct DjuiRect* rect1 = djui_rect_container_create(&body->base, 32);
{
struct DjuiButton* button1 = djui_button_create(&rect1->base, "");
struct DjuiButton* button1 = djui_button_create(&rect1->base, "", DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_save_button_click);
djui_panel_host_save_update_button(button1, i);
djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button1->base, 0.74f, 32);
djui_interactable_hook_click(&button1->base, djui_panel_host_save_button_click);
button1->base.tag = i;
if (i == (int)(configHostSaveSlot - 1)) { defaultBase = &button1->base; }
sSaveButtons[i] = button1;
struct DjuiButton* button2 = djui_button_create(&rect1->base, "erase");
struct DjuiButton* button2 = djui_button_create(&rect1->base, "erase", DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_save_erase);
button2->base.tag = i;
djui_base_set_size_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button2->base, 0.24f, 32);
djui_base_set_alignment(&button2->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_TOP);
djui_interactable_hook_click(&button2->base, djui_panel_host_save_erase);
}
}
}
djui_panel_add(caller, &panel->base, defaultBase);
djui_panel_add(caller, panel, NULL);
}

View file

@ -43,51 +43,27 @@ static void djui_panel_host_player_text_change(struct DjuiBase* caller) {
}
void djui_panel_host_settings_create(struct DjuiBase* caller) {
f32 bodyHeight = 32 * 8 + 64 * 1 + 16 * 8;
struct DjuiBase* defaultBase = NULL;
struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\S\\#1be700\\E\\#00b3ff\\T\\#ffef00\\T\\#ff0800\\I\\#1be700\\N\\#00b3ff\\G\\#ffef00\\S");
struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\S\\#1be700\\E\\#00b3ff\\T\\#ffef00\\T\\#ff0800\\I\\#1be700\\N\\#00b3ff\\G\\#ffef00\\S");
struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel);
{
char* iChoices[3] = { "Non-solid", "Solid", "Friendly Fire" };
struct DjuiSelectionbox* selectionbox1 = djui_selectionbox_create(&body->base, "Player interaction", iChoices, 3, &configPlayerInteraction);
djui_base_set_size_type(&selectionbox1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&selectionbox1->base, 1.0f, 32);
djui_selectionbox_create(&body->base, "Player interaction", iChoices, 3, &configPlayerInteraction, NULL);
char* kChoices[3] = { "Weak", "Normal", "Too much" };
sKnockbackIndex = (configPlayerKnockbackStrength <= 20)
? 0
: ((configPlayerKnockbackStrength <= 40) ? 1 : 2);
struct DjuiSelectionbox* selectionbox2 = djui_selectionbox_create(&body->base, "Knockback strength", kChoices, 3, &sKnockbackIndex);
djui_base_set_size_type(&selectionbox2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&selectionbox2->base, 1.0f, 32);
djui_interactable_hook_value_change(&selectionbox2->base, djui_panel_host_settings_knockback_change);
char* kChoices[3] = { "Weak", "Normal", "Too much" };
djui_selectionbox_create(&body->base, "Knockback strength", kChoices, 3, &sKnockbackIndex, djui_panel_host_settings_knockback_change);
char* lChoices[3] = { "Leave level", "Stay in level", "Non-stop" };
struct DjuiSelectionbox* selectionbox3 = djui_selectionbox_create(&body->base, "On star collection", lChoices, 3, &configStayInLevelAfterStar);
djui_base_set_size_type(&selectionbox3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&selectionbox3->base, 1.0f, 32);
djui_selectionbox_create(&body->base, "On star collection", lChoices, 3, &configStayInLevelAfterStar, NULL);
struct DjuiCheckbox* checkbox2 = djui_checkbox_create(&body->base, "Skip intro cutscene", &configSkipIntro);
djui_base_set_size_type(&checkbox2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox2->base, 1.0f, 32);
djui_checkbox_create(&body->base, "Skip intro cutscene", &configSkipIntro, NULL);
djui_checkbox_create(&body->base, "Share lives", &configShareLives, NULL);
djui_checkbox_create(&body->base, "Enable cheats", &configEnableCheats, NULL);
djui_checkbox_create(&body->base, "Bubble on death", &configBubbleDeath, NULL);
struct DjuiCheckbox* checkbox3 = djui_checkbox_create(&body->base, "Share lives", &configShareLives);
djui_base_set_size_type(&checkbox3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox3->base, 1.0f, 32);
struct DjuiCheckbox* checkbox4 = djui_checkbox_create(&body->base, "Enable cheats", &configEnableCheats);
djui_base_set_size_type(&checkbox4->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox4->base, 1.0f, 32);
struct DjuiCheckbox* checkbox5 = djui_checkbox_create(&body->base, "Bubble on death", &configBubbleDeath);
djui_base_set_size_type(&checkbox5->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox5->base, 1.0f, 32);
struct DjuiRect* rect1 = djui_rect_create(&body->base);
djui_base_set_size_type(&rect1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&rect1->base, 1.0f, 32);
djui_base_set_color(&rect1->base, 0, 0, 0, 0);
struct DjuiRect* rect1 = djui_rect_container_create(&body->base, 32);
{
struct DjuiText* text1 = djui_text_create(&rect1->base, "Amount of players");
djui_base_set_size_type(&text1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
@ -106,11 +82,7 @@ void djui_panel_host_settings_create(struct DjuiBase* caller) {
sPlayerAmount = inputbox1;
}
struct DjuiButton* button1 = djui_button_create(&body->base, "Back");
djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button1->base, 1.0f, 64);
djui_button_set_style(button1, 1);
djui_interactable_hook_click(&button1->base, djui_panel_menu_back);
djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
}
djui_panel_add(caller, &panel->base, defaultBase);
djui_panel_add(caller, panel, NULL);
}

View file

@ -157,20 +157,16 @@ void djui_panel_join_do_join(struct DjuiBase* caller) {
}
void djui_panel_join_create(struct DjuiBase* caller) {
f32 bodyHeight = 2 + 32 + 16 * 2 + 64;
u16 directLines = 1;
f32 directTextHeight = 32 * 0.8125f * directLines + 8;
bodyHeight += directTextHeight + 16;
#ifdef DISCORD_SDK
u16 discordLines = 8;
f32 discordTextHeight = 32 * 0.8125f * discordLines + 8;
bodyHeight += discordTextHeight + 16;
#endif
struct DjuiBase* defaultBase = NULL;
struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\J\\#1be700\\O\\#00b3ff\\I\\#ffef00\\N");
struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\J\\#1be700\\O\\#00b3ff\\I\\#ffef00\\N");
struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel);
{
#ifdef DISCORD_SDK
@ -196,26 +192,18 @@ void djui_panel_join_create(struct DjuiBase* caller) {
sInputboxIp = inputbox1;
djui_panel_join_ip_text_set(inputbox1);
struct DjuiRect* rect2 = djui_rect_create(&body->base);
djui_base_set_size_type(&rect2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&rect2->base, 1.0f, 64);
djui_base_set_color(&rect2->base, 0, 0, 0, 0);
struct DjuiRect* rect2 = djui_rect_container_create(&body->base, 64);
{
struct DjuiButton* button1 = djui_button_create(&rect2->base, "Back");
djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
struct DjuiButton* button1 = djui_button_create(&rect2->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
djui_base_set_size(&button1->base, 0.485f, 64);
djui_base_set_alignment(&button1->base, DJUI_HALIGN_LEFT, DJUI_VALIGN_TOP);
djui_button_set_style(button1, 1);
djui_interactable_hook_click(&button1->base, djui_panel_menu_back);
struct DjuiButton* button2 = djui_button_create(&rect2->base, "Join");
djui_base_set_size_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
struct DjuiButton* button2 = djui_button_create(&rect2->base, "Join", DJUI_BUTTON_STYLE_NORMAL, djui_panel_join_do_join);
djui_base_set_size(&button2->base, 0.485f, 64);
djui_base_set_alignment(&button2->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_TOP);
djui_interactable_hook_click(&button2->base, djui_panel_join_do_join);
defaultBase = &button2->base;
}
}
djui_panel_add(caller, &panel->base, defaultBase);
djui_panel_add(caller, panel, defaultBase);
}

View file

@ -44,14 +44,10 @@ void djui_panel_join_message_create(struct DjuiBase* caller) {
// don't recreate panel if it's already visible
if (gDjuiPanelJoinMessageVisible) { return; }
f32 bodyHeight = 64 + 16 + 16;
u16 directLines = 8;
f32 directTextHeight = 32 * 0.8125f * directLines + 8;
bodyHeight += directTextHeight + 16;
struct DjuiBase* defaultBase = NULL;
struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\J\\#1be700\\O\\#00b3ff\\I\\#ffef00\\N\\#1be700\\I\\#00b3ff\\N\\#ffef00\\G");
struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\J\\#1be700\\O\\#00b3ff\\I\\#ffef00\\N\\#1be700\\I\\#00b3ff\\N\\#ffef00\\G");
struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel);
{
struct DjuiText* text1 = djui_text_create(&body->base, "...");
@ -66,16 +62,10 @@ void djui_panel_join_message_create(struct DjuiBase* caller) {
gDownloadProgress = 0;
djui_progress_bar_create(&body->base, &gDownloadProgress, 0.0f, 1.0f);
struct DjuiButton* button1 = djui_button_create(&body->base, "Cancel");
djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button1->base, 1.0f, 64);
djui_base_set_alignment(&button1->base, DJUI_HALIGN_LEFT, DJUI_VALIGN_TOP);
djui_button_set_style(button1, 1);
djui_interactable_hook_click(&button1->base, djui_panel_join_message_cancel);
defaultBase = &button1->base;
djui_button_create(&body->base, "Cancel", DJUI_BUTTON_STYLE_BACK, djui_panel_join_message_cancel);
}
djui_panel_add(caller, &panel->base, defaultBase);
djui_panel_add(caller, panel, NULL);
gDjuiPanelJoinMessageVisible = true;
sDisplayingError = false;
}

View file

@ -16,35 +16,16 @@ static void djui_panel_main_quit(struct DjuiBase* caller) {
}
void djui_panel_main_create(struct DjuiBase* caller) {
f32 bodyHeight = 64 * 4 + 16 * 3;
struct DjuiBase* defaultBase = NULL;
struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\SM\\#1be700\\64\\#00b3ff\\EX\n\\#ffef00\\COOP");
struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\SM\\#1be700\\64\\#00b3ff\\EX\n\\#ffef00\\COOP");
{
struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel);
{
struct DjuiButton* button1 = djui_button_create(&body->base, "Host");
djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button1->base, 1.0f, 64);
struct DjuiButton* button1 = djui_button_create(&body->base, "Host", DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_create);
djui_cursor_input_controlled_center(&button1->base);
djui_interactable_hook_click(&button1->base, djui_panel_host_create);
defaultBase = &button1->base;
struct DjuiButton* button2 = djui_button_create(&body->base, "Join");
djui_base_set_size_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button2->base, 1.0f, 64);
djui_interactable_hook_click(&button2->base, djui_panel_join_create);
struct DjuiButton* button3 = djui_button_create(&body->base, "Options");
djui_base_set_size_type(&button3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button3->base, 1.0f, 64);
djui_interactable_hook_click(&button3->base, djui_panel_options_create);
struct DjuiButton* button4 = djui_button_create(&body->base, "Quit");
djui_base_set_size_type(&button4->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button4->base, 1.0f, 64);
djui_button_set_style(button4, 1);
djui_interactable_hook_click(&button4->base, djui_panel_main_quit);
djui_button_create(&body->base, "Join", DJUI_BUTTON_STYLE_NORMAL, djui_panel_join_create);
djui_button_create(&body->base, "Options", DJUI_BUTTON_STYLE_NORMAL, djui_panel_options_create);
djui_button_create(&body->base, "Quit", DJUI_BUTTON_STYLE_BACK, djui_panel_main_quit);
}
char* version = get_version_local();
@ -55,7 +36,7 @@ void djui_panel_main_create(struct DjuiBase* caller) {
djui_text_set_alignment(footer, DJUI_HALIGN_CENTER, DJUI_VALIGN_BOTTOM);
}
djui_panel_add(caller, &panel->base, defaultBase);
djui_panel_add(caller, panel, NULL);
gInteractableOverridePad = true;
gDjuiPanelMainCreated = true;
}

View file

@ -6,8 +6,8 @@ void djui_panel_menu_back(UNUSED struct DjuiBase* base) {
djui_panel_back();
}
struct DjuiThreePanel* djui_panel_menu_create(f32 bodyHeight, char* headerText) {
struct DjuiThreePanel* panel = djui_three_panel_create(&gDjuiRoot->base, 64, bodyHeight, 0);
struct DjuiThreePanel* djui_panel_menu_create(char* headerText) {
struct DjuiThreePanel* panel = djui_three_panel_create(&gDjuiRoot->base, 64, 0, 0);
djui_base_set_size_type(&panel->base, DJUI_SVT_ABSOLUTE, DJUI_SVT_RELATIVE);
djui_base_set_size(&panel->base, DJUI_DEFAULT_PANEL_WIDTH, 1.0f);
djui_base_set_color(&panel->base, 0, 0, 0, 240);
@ -27,7 +27,7 @@ struct DjuiThreePanel* djui_panel_menu_create(f32 bodyHeight, char* headerText)
struct DjuiFlowLayout* body = djui_flow_layout_create(&panel->base);
djui_base_set_alignment(&body->base, DJUI_HALIGN_CENTER, DJUI_VALIGN_CENTER);
djui_base_set_size_type(&body->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&body->base, 1.0f, bodyHeight);
djui_base_set_size(&body->base, 1.0f, 0);
djui_base_set_color(&body->base, 0, 0, 0, 0);
djui_flow_layout_set_margin(body, 16);
djui_flow_layout_set_flow_direction(body, DJUI_FLOW_DIR_DOWN);

View file

@ -2,4 +2,4 @@
#include "djui.h"
void djui_panel_menu_back(struct DjuiBase* base);
struct DjuiThreePanel* djui_panel_menu_create(f32 bodyHeight, char* headerText);
struct DjuiThreePanel* djui_panel_menu_create(char* headerText);

View file

@ -10,10 +10,7 @@ static void djui_panel_random_menu(UNUSED struct DjuiBase* caller) {
}
void djui_panel_main_menu_create(struct DjuiBase* caller) {
f32 bodyHeight = 32 * 4 + 64 * 1 + 16 * 4;
struct DjuiBase* defaultBase = NULL;
struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\M\\#1be700\\A\\#00b3ff\\I\\#ffef00\\N \\#ff0800\\M\\#ff0800\\E\\#1be700\\N\\#ffef00\\U\\#ff0800\\");
struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\M\\#1be700\\A\\#00b3ff\\I\\#ffef00\\N \\#ff0800\\M\\#ff0800\\E\\#1be700\\N\\#ffef00\\U\\#ff0800\\");
struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel);
{
@ -36,33 +33,16 @@ void djui_panel_main_menu_create(struct DjuiBase* caller) {
"PSS",
"TTC",
};
struct DjuiSelectionbox* selectionbox1 = djui_selectionbox_create(&body->base, "Level", levelChoices, 17, &configMenuLevel);
djui_base_set_size_type(&selectionbox1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&selectionbox1->base, 1.0f, 32);
struct DjuiSelectionbox* selectionbox1 = djui_selectionbox_create(&body->base, "Level", levelChoices, 17, &configMenuLevel, NULL);
djui_base_set_enabled(&selectionbox1->base, !configMenuRandom);
sLevelBox = selectionbox1;
defaultBase = &selectionbox1->base;
struct DjuiCheckbox* checkbox1 = djui_checkbox_create(&body->base, "Use Stage Music", &configMenuSound);
djui_base_set_size_type(&checkbox1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox1->base, 1.0f, 32);
struct DjuiCheckbox* checkbox2 = djui_checkbox_create(&body->base, "Random Stage", &configMenuRandom);
djui_base_set_size_type(&checkbox2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox2->base, 1.0f, 32);
djui_interactable_hook_value_change(&checkbox2->base, djui_panel_random_menu);
djui_checkbox_create(&body->base, "Use Stage Music", &configMenuSound, NULL);
djui_checkbox_create(&body->base, "Random Stage", &configMenuRandom, djui_panel_random_menu);
djui_checkbox_create(&body->base, "Play Vanilla Demos", &configMenuDemos, stop_demo);
struct DjuiCheckbox* checkbox3 = djui_checkbox_create(&body->base, "Play Vanilla Demos", &configMenuDemos);
djui_base_set_size_type(&checkbox3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox3->base, 1.0f, 32);
djui_interactable_hook_value_change(&checkbox3->base, stop_demo);
struct DjuiButton* button1 = djui_button_create(&body->base, "Back");
djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button1->base, 1.0f, 64);
djui_button_set_style(button1, 1);
djui_interactable_hook_click(&button1->base, djui_panel_menu_back);
djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
}
djui_panel_add(caller, &panel->base, defaultBase);
djui_panel_add(caller, panel, NULL);
}

View file

@ -5,88 +5,39 @@
#ifdef DEVELOPMENT
void djui_panel_options_debug_create(struct DjuiBase* caller) {
f32 bodyHeight = 32 * 7 + 64 * 1 + 16 * 1;
struct DjuiBase* defaultBase = NULL;
struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\D\\#1be700\\E\\#00b3ff\\B\\#ffef00\\U\\#ff0800\\G");
struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\D\\#1be700\\E\\#00b3ff\\B\\#ffef00\\U\\#ff0800\\G");
struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel);
{
struct DjuiCheckbox* checkbox1 = djui_checkbox_create(&body->base, "Fixed Collisions", (bool*)&gLevelValues.fixCollisionBugs);
djui_base_set_size_type(&checkbox1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox1->base, 1.0f, 32);
defaultBase = &checkbox1->base;
djui_checkbox_create(&body->base, "Fixed Collisions", (bool*)&gLevelValues.fixCollisionBugs, NULL);
djui_checkbox_create(&body->base, "Lua Profiler", &configLuaProfiler, NULL);
djui_checkbox_create(&body->base, "Debug Print", &configDebugPrint, NULL);
djui_checkbox_create(&body->base, "Debug Info", &configDebugInfo, NULL);
djui_checkbox_create(&body->base, "Debug Errors", &configDebugError, NULL);
struct DjuiCheckbox* checkbox2 = djui_checkbox_create(&body->base, "Lua Profiler", &configLuaProfiler);
djui_base_set_size_type(&checkbox2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox2->base, 1.0f, 32);
defaultBase = &checkbox2->base;
struct DjuiCheckbox* checkbox3 = djui_checkbox_create(&body->base, "Debug Print", &configDebugPrint);
djui_base_set_size_type(&checkbox3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox3->base, 1.0f, 32);
defaultBase = &checkbox3->base;
struct DjuiCheckbox* checkbox4 = djui_checkbox_create(&body->base, "Debug Info", &configDebugInfo);
djui_base_set_size_type(&checkbox4->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox4->base, 1.0f, 32);
defaultBase = &checkbox4->base;
struct DjuiCheckbox* checkbox5 = djui_checkbox_create(&body->base, "Debug Errors", &configDebugError);
djui_base_set_size_type(&checkbox5->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox5->base, 1.0f, 32);
defaultBase = &checkbox5->base;
struct DjuiButton* button1 = djui_button_create(&body->base, "Back");
djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button1->base, 1.0f, 64);
djui_button_set_style(button1, 1);
djui_interactable_hook_click(&button1->base, djui_panel_menu_back);
djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
}
djui_panel_add(caller, &panel->base, defaultBase);
djui_panel_add(caller, panel, NULL);
}
#endif
void djui_panel_misc_create(struct DjuiBase* caller) {
#ifdef DEVELOPMENT
f32 bodyHeight = 64 * 5 + 16 * 4;
#else
f32 bodyHeight = 64 * 4 + 16 * 3;
#endif
struct DjuiBase* defaultBase = NULL;
struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\M\\#1be700\\I\\#00b3ff\\S\\#ffef00\\C");
struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\M\\#1be700\\I\\#00b3ff\\S\\#ffef00\\C");
struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel);
{
struct DjuiCheckbox* checkbox1 = djui_checkbox_create(&body->base, "Pause In Singleplayer", &configSingleplayerPause);
djui_base_set_size_type(&checkbox1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox1->base, 1.0f, 32);
defaultBase = &checkbox1->base;
djui_checkbox_create(&body->base, "Pause In Singleplayer", &configSingleplayerPause, NULL);
djui_checkbox_create(&body->base, "Disable Popups", &configDisablePopups, NULL);
struct DjuiCheckbox* checkbox2 = djui_checkbox_create(&body->base, "Disable Popups", &configDisablePopups);
djui_base_set_size_type(&checkbox2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&checkbox2->base, 1.0f, 32);
struct DjuiButton* button1 = djui_button_create(&body->base, "Menu Options");
djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button1->base, 1.0f, 64);
djui_interactable_hook_click(&button1->base, djui_panel_main_menu_create);
djui_button_create(&body->base, "Menu Options", DJUI_BUTTON_STYLE_NORMAL, djui_panel_main_menu_create);
#ifdef DEVELOPMENT
struct DjuiButton* button2 = djui_button_create(&body->base, "Debug");
djui_base_set_size_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button2->base, 1.0f, 64);
djui_interactable_hook_click(&button2->base, djui_panel_options_debug_create);
djui_button_create(&body->base, "Debug", DJUI_BUTTON_STYLE_NORMAL, djui_panel_options_debug_create);
#endif
struct DjuiButton* button3 = djui_button_create(&body->base, "Back");
djui_base_set_size_type(&button3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button3->base, 1.0f, 64);
djui_button_set_style(button3, 1);
djui_interactable_hook_click(&button3->base, djui_panel_menu_back);
djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
}
djui_panel_add(caller, &panel->base, defaultBase);
djui_panel_add(caller, panel, NULL);
}

View file

@ -20,7 +20,8 @@ void djui_panel_modlist_create(UNUSED struct DjuiBase* caller) {
if (gActiveMods.entryCount == 0) { return; }
f32 bodyHeight = (gActiveMods.entryCount * 32) + (gActiveMods.entryCount - 1) * 4;
struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\M\\#1be700\\O\\#00b3ff\\D\\#ffef00\\S");
struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\M\\#1be700\\O\\#00b3ff\\D\\#ffef00\\S");
djui_three_panel_set_body_size(panel, bodyHeight);
gDjuiModList = panel;
djui_base_set_alignment(&panel->base, DJUI_HALIGN_CENTER, DJUI_VALIGN_CENTER);

View file

@ -8,52 +8,17 @@ void djui_panel_options_back(struct DjuiBase* caller) {
}
void djui_panel_options_create(struct DjuiBase* caller) {
f32 bodyHeight = 64 * 7 + 16 * 6;
struct DjuiBase* defaultBase = NULL;
struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\O\\#1be700\\P\\#00b3ff\\T\\#ffef00\\I\\#ff0800\\O\\#1be700\\N\\#00b3ff\\S");
struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\O\\#1be700\\P\\#00b3ff\\T\\#ffef00\\I\\#ff0800\\O\\#1be700\\N\\#00b3ff\\S");
struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel);
{
struct DjuiButton* button1 = djui_button_create(&body->base, "Player");
djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button1->base, 1.0f, 64);
djui_interactable_hook_click(&button1->base, djui_panel_player_create);
defaultBase = &button1->base;
struct DjuiButton* button2 = djui_button_create(&body->base, "Camera");
djui_base_set_size_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button2->base, 1.0f, 64);
djui_interactable_hook_click(&button2->base, djui_panel_camera_create);
if (defaultBase == NULL) {
defaultBase = &button2->base;
}
struct DjuiButton* button3 = djui_button_create(&body->base, "Controls");
djui_base_set_size_type(&button3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button3->base, 1.0f, 64);
djui_interactable_hook_click(&button3->base, djui_panel_controls_create);
struct DjuiButton* button4 = djui_button_create(&body->base, "Display");
djui_base_set_size_type(&button4->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button4->base, 1.0f, 64);
djui_interactable_hook_click(&button4->base, djui_panel_display_create);
struct DjuiButton* button5 = djui_button_create(&body->base, "Sound");
djui_base_set_size_type(&button5->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button5->base, 1.0f, 64);
djui_interactable_hook_click(&button5->base, djui_panel_sound_create);
struct DjuiButton* button6 = djui_button_create(&body->base, "Misc");
djui_base_set_size_type(&button6->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button6->base, 1.0f, 64);
djui_interactable_hook_click(&button6->base, djui_panel_misc_create);
struct DjuiButton* button7 = djui_button_create(&body->base, "Back");
djui_base_set_size_type(&button7->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button7->base, 1.0f, 64);
djui_button_set_style(button7, 1);
djui_interactable_hook_click(&button7->base, djui_panel_options_back);
djui_button_create(&body->base, "Player", DJUI_BUTTON_STYLE_NORMAL, djui_panel_player_create);
djui_button_create(&body->base, "Camera", DJUI_BUTTON_STYLE_NORMAL, djui_panel_camera_create);
djui_button_create(&body->base, "Controls", DJUI_BUTTON_STYLE_NORMAL, djui_panel_controls_create);
djui_button_create(&body->base, "Display", DJUI_BUTTON_STYLE_NORMAL, djui_panel_display_create);
djui_button_create(&body->base, "Sound", DJUI_BUTTON_STYLE_NORMAL, djui_panel_sound_create);
djui_button_create(&body->base, "Misc", DJUI_BUTTON_STYLE_NORMAL, djui_panel_misc_create);
djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_options_back);
}
djui_panel_add(caller, &panel->base, defaultBase);
djui_panel_add(caller, panel, NULL);
}

View file

@ -36,69 +36,38 @@ static void djui_panel_pause_quit(struct DjuiBase* caller) {
void djui_panel_pause_create(struct DjuiBase* caller) {
if (gDjuiChatBoxFocus) { djui_chat_box_toggle(); }
f32 bodyHeight = 64 * 4 + 16 * 3;
if (gServerSettings.enableCheats) { bodyHeight += 64 + 16; }
if (gNetworkType == NT_SERVER) { bodyHeight += 64 + 16; }
struct DjuiBase* defaultBase = NULL;
struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\P\\#1be700\\A\\#00b3ff\\U\\#ffef00\\S\\#ff0800\\E");
struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\P\\#1be700\\A\\#00b3ff\\U\\#ffef00\\S\\#ff0800\\E");
struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel);
{
struct DjuiRect* rect1 = djui_rect_create(&body->base);
djui_base_set_size_type(&rect1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&rect1->base, 1.0f, 64);
djui_base_set_color(&rect1->base, 0, 0, 0, 0);
struct DjuiRect* rect1 = djui_rect_container_create(&body->base, 64);
{
djui_button_left_create(&rect1->base, "Player", DJUI_BUTTON_STYLE_NORMAL, djui_panel_player_create);
djui_button_right_create(&rect1->base, "DynOS Packs", DJUI_BUTTON_STYLE_NORMAL, djui_panel_dynos_create);
}
struct DjuiButton* button1 = djui_button_create(&rect1->base, "Player");
djui_base_set_size_type(&button1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button1->base, 0.47f, 64);
djui_interactable_hook_click(&button1->base, djui_panel_player_create);
struct DjuiButton* button2 = djui_button_create(&rect1->base, "DynOS Packs");
djui_base_set_size_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button2->base, 0.5f, 64);
djui_base_set_alignment(&button2->base, DJUI_HALIGN_RIGHT, DJUI_VALIGN_TOP);
djui_interactable_hook_click(&button2->base, djui_panel_dynos_create);
struct DjuiButton* button3 = djui_button_create(&body->base, "Options");
djui_base_set_size_type(&button3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button3->base, 1.0f, 64);
djui_interactable_hook_click(&button3->base, djui_panel_options_create);
struct DjuiButton* button3 = djui_button_create(&body->base, "Options", DJUI_BUTTON_STYLE_NORMAL, djui_panel_options_create);
defaultBase = &button3->base;
if (gServerSettings.enableCheats) {
struct DjuiButton* button4 = djui_button_create(&body->base, "Cheats");
djui_base_set_size_type(&button4->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button4->base, 1.0f, 64);
djui_interactable_hook_click(&button4->base, djui_panel_cheats_create);
djui_button_create(&body->base, "Cheats", DJUI_BUTTON_STYLE_NORMAL, djui_panel_cheats_create);
}
struct DjuiButton* button5 = djui_button_create(&body->base, "Resume");
djui_base_set_size_type(&button5->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button5->base, 1.0f, 64);
djui_interactable_hook_click(&button5->base, djui_panel_pause_resume);
if (gNetworkType == NT_SERVER) {
struct DjuiButton* button6 = djui_button_create(&body->base, "Server Settings");
djui_base_set_size_type(&button6->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button6->base, 1.0f, 64);
djui_interactable_hook_click(&button6->base, djui_panel_host_create);
djui_button_create(&body->base, "Server Settings", DJUI_BUTTON_STYLE_NORMAL, djui_panel_host_create);
}
struct DjuiButton* button7;
djui_button_create(&body->base, "Resume", DJUI_BUTTON_STYLE_NORMAL, djui_panel_pause_resume);
if (gNetworkType == NT_SERVER) {
button7 = djui_button_create(&body->base, "Stop Hosting");
djui_button_create(&body->base, "Stop Hosting", DJUI_BUTTON_STYLE_BACK, djui_panel_pause_quit);
} else {
button7 = djui_button_create(&body->base, "Disconnect");
djui_button_create(&body->base, "Disconnect", DJUI_BUTTON_STYLE_BACK, djui_panel_pause_quit);
}
djui_base_set_size_type(&button7->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button7->base, 1.0f, 64);
djui_interactable_hook_click(&button7->base, djui_panel_pause_quit);
djui_button_set_style(button7, 1);
}
djui_panel_add(caller, &panel->base, defaultBase);
djui_panel_add(caller, panel, defaultBase);
gInteractableOverridePad = true;
gDjuiPanelPauseCreated = true;
}

View file

@ -14,7 +14,6 @@ static unsigned int sSliderChannels[3] = {0};
static struct DjuiSelectionbox* sPalettePresetSelection;
static struct DjuiSelectionbox* sPartSelection;
static struct DjuiInputbox* sHexColorTextBox;
static struct DjuiSlider *sSliderR, *sSliderG, *sSliderB;
@ -117,10 +116,7 @@ void djui_panel_player_edit_palette_destroy(struct DjuiBase* caller) {
static void djui_panel_player_edit_palette_create(struct DjuiBase* caller) {
char* sPartStrings[PLAYER_PART_MAX] = { "Overalls", "Shirt", "Gloves", "Shoes", "Hair", "Skin", "Cap" };
f32 bodyHeight = 32 * 5 + 64 * 1 + 16 * 5;
struct DjuiBase* defaultBase = NULL;
struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\P\\#1be700\\A\\#00b3ff\\L\\#ffef00\\E\\#ff0800\\T\\#1be700\\T\\#00b3ff\\E");
struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\P\\#1be700\\A\\#00b3ff\\L\\#ffef00\\E\\#ff0800\\T\\#1be700\\T\\#00b3ff\\E");
// Set current palette to custom when clicking on Edit Palette
sPalettePresetIndex = PALETTE_CUSTOM;
@ -136,15 +132,9 @@ static void djui_panel_player_edit_palette_create(struct DjuiBase* caller) {
{
sCurrentPlayerPart = SHIRT;
sPartSelection = djui_selectionbox_create(&body->base, "Part", sPartStrings, PLAYER_PART_MAX, &sCurrentPlayerPart);
djui_base_set_size_type(&sPartSelection->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&sPartSelection->base, 1.0f, 32);
djui_interactable_hook_value_change(&sPartSelection->base, djui_panel_player_edit_palette_part_changed);
djui_selectionbox_create(&body->base, "Part", sPartStrings, PLAYER_PART_MAX, &sCurrentPlayerPart, djui_panel_player_edit_palette_part_changed);
struct DjuiRect* rect1 = djui_rect_create(&body->base);
djui_base_set_size_type(&rect1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&rect1->base, 1.0f, 32);
djui_base_set_color(&rect1->base, 0, 0, 0, 0);
struct DjuiRect* rect1 = djui_rect_container_create(&body->base, 32);
{
struct DjuiText* text1 = djui_text_create(&rect1->base, "Hex Code");
djui_base_set_size_type(&text1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
@ -162,29 +152,14 @@ static void djui_panel_player_edit_palette_create(struct DjuiBase* caller) {
for (int i = 0; i < 3; i++) sSliderChannels[i] = configCustomPalette.parts[SHIRT][i];
sSliderR = djui_slider_create(&body->base, "Red", &sSliderChannels[0], 0, 255);
djui_base_set_size_type(&sSliderR->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_interactable_hook_value_change(&sSliderR->base, djui_panel_player_edit_palette_red_changed);
djui_base_set_size(&sSliderR->base, 1.0f, 32);
sSliderR = djui_slider_create(&body->base, "Red", &sSliderChannels[0], 0, 255, djui_panel_player_edit_palette_red_changed);
sSliderG = djui_slider_create(&body->base, "Green", &sSliderChannels[1], 0, 255, djui_panel_player_edit_palette_green_changed);
sSliderB = djui_slider_create(&body->base, "Blue", &sSliderChannels[2], 0, 255, djui_panel_player_edit_palette_blue_changed);
sSliderG = djui_slider_create(&body->base, "Green", &sSliderChannels[1], 0, 255);
djui_base_set_size_type(&sSliderG->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_interactable_hook_value_change(&sSliderG->base, djui_panel_player_edit_palette_green_changed);
djui_base_set_size(&sSliderG->base, 1.0f, 32);
sSliderB = djui_slider_create(&body->base, "Blue", &sSliderChannels[2], 0, 255);
djui_base_set_size_type(&sSliderB->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_interactable_hook_value_change(&sSliderB->base, djui_panel_player_edit_palette_blue_changed);
djui_base_set_size(&sSliderB->base, 1.0f, 32);
struct DjuiButton* button6 = djui_button_create(&body->base, "Back");
djui_base_set_size_type(&button6->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button6->base, 1.0f, 64);
djui_button_set_style(button6, 1);
djui_interactable_hook_click(&button6->base, djui_panel_menu_back);
djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
}
djui_panel_add(caller, &panel->base, defaultBase);
djui_panel_add(caller, panel, NULL);
}
static bool djui_panel_player_name_valid(char* buffer) {
@ -245,31 +220,22 @@ static void djui_panel_player_prevent_demo(struct DjuiBase* caller) {
if (caller != NULL) {
djui_panel_menu_back(NULL);
}
return;
}
if (inPlayerMenu) {
inPlayerMenu = false;
djui_panel_menu_back(NULL);
} else {
inPlayerMenu = true;
}
}
static void djui_panel_player_destroy(UNUSED struct DjuiBase* caller) {
gInPlayerMenu = false;
}
void djui_panel_player_create(struct DjuiBase* caller) {
f32 bodyHeight = 32 * 3 + 64 * 2 + 16 * 5;
djui_panel_player_prevent_demo(NULL);
gInPlayerMenu = true;
struct DjuiBase* defaultBase = NULL;
struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\P\\#1be700\\L\\#00b3ff\\A\\#ffef00\\Y\\#ff0800\\E\\#1be700\\R");
struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\P\\#1be700\\L\\#00b3ff\\A\\#ffef00\\Y\\#ff0800\\E\\#1be700\\R");
struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel);
{
struct DjuiRect* rect1 = djui_rect_create(&body->base);
djui_base_set_size_type(&rect1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&rect1->base, 1.0f, 32);
djui_base_set_color(&rect1->base, 0, 0, 0, 0);
struct DjuiRect* rect1 = djui_rect_container_create(&body->base, 32);
{
struct DjuiText* text1 = djui_text_create(&rect1->base, "Name");
djui_base_set_size_type(&text1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
@ -294,10 +260,7 @@ void djui_panel_player_create(struct DjuiBase* caller) {
for (int i = 0; i < CT_MAX; i++) {
modelChoices[i] = gCharacters[i].name;
}
struct DjuiSelectionbox* selectionbox1 = djui_selectionbox_create(&body->base, "Model", modelChoices, CT_MAX, &configPlayerModel);
djui_base_set_size_type(&selectionbox1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&selectionbox1->base, 1.0f, 32);
djui_interactable_hook_value_change(&selectionbox1->base, djui_panel_player_value_changed);
djui_selectionbox_create(&body->base, "Model", modelChoices, CT_MAX, &configPlayerModel, djui_panel_player_value_changed);
char* paletteChoices[PALETTE_PRESET_MAX+1] = {
"Mario",
@ -342,22 +305,12 @@ void djui_panel_player_create(struct DjuiBase* caller) {
}
}
sPalettePresetSelection = djui_selectionbox_create(&body->base, "Palette Preset", paletteChoices, PALETTE_PRESET_MAX+1, &sPalettePresetIndex);
djui_base_set_size_type(&sPalettePresetSelection->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&sPalettePresetSelection->base, 1.0f, 32);
djui_interactable_hook_value_change(&sPalettePresetSelection->base, djui_panel_player_value_changed);
sPalettePresetSelection = djui_selectionbox_create(&body->base, "Palette Preset", paletteChoices, PALETTE_PRESET_MAX+1, &sPalettePresetIndex, djui_panel_player_value_changed);
struct DjuiButton* editPaletteButton = djui_button_create(&body->base, "Edit Palette");
djui_base_set_size_type(&editPaletteButton->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&editPaletteButton->base, 1.0f, 64);
djui_interactable_hook_click(&editPaletteButton->base, djui_panel_player_edit_palette_create);
struct DjuiButton* button6 = djui_button_create(&body->base, "Back");
djui_base_set_size_type(&button6->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button6->base, 1.0f, 64);
djui_button_set_style(button6, 1);
djui_interactable_hook_click(&button6->base, djui_panel_player_prevent_demo);
djui_button_create(&body->base, "Edit Palette", DJUI_BUTTON_STYLE_NORMAL, djui_panel_player_edit_palette_create);
djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
}
djui_panel_add(caller, &panel->base, defaultBase);
struct DjuiPanel* p = djui_panel_add(caller, panel, NULL);
p->on_panel_destroy = djui_panel_player_destroy;
}

View file

@ -66,7 +66,8 @@ void djui_panel_playerlist_on_render_pre(UNUSED struct DjuiBase* base, UNUSED bo
void djui_panel_playerlist_create(UNUSED struct DjuiBase* caller) {
f32 bodyHeight = (MAX_PLAYERS * 32) + (MAX_PLAYERS - 1) * 4;
struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\P\\#1be700\\L\\#00b3ff\\A\\#ffef00\\Y\\#ff0800\\E\\#1be700\\R\\#00b3ff\\S");
struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\P\\#1be700\\L\\#00b3ff\\A\\#ffef00\\Y\\#ff0800\\E\\#1be700\\R\\#00b3ff\\S");
djui_three_panel_set_body_size(panel, bodyHeight);
gDjuiPlayerList = panel;
panel->base.on_render_pre = djui_panel_playerlist_on_render_pre;
djui_base_set_alignment(&panel->base, DJUI_HALIGN_CENTER, DJUI_VALIGN_CENTER);

View file

@ -3,36 +3,16 @@
#include "src/pc/configfile.h"
void djui_panel_sound_create(struct DjuiBase* caller) {
f32 bodyHeight = 32 * 4 + 64 * 1 + 16 * 4;
struct DjuiBase* defaultBase = NULL;
struct DjuiThreePanel* panel = djui_panel_menu_create(bodyHeight, "\\#ff0800\\S\\#1be700\\O\\#00b3ff\\U\\#ffef00\\N\\#ff0800\\D");
struct DjuiThreePanel* panel = djui_panel_menu_create("\\#ff0800\\S\\#1be700\\O\\#00b3ff\\U\\#ffef00\\N\\#ff0800\\D");
struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel);
{
struct DjuiSlider* slider1 = djui_slider_create(&body->base, "Master Volume", &configMasterVolume, 0, 127);
djui_base_set_size_type(&slider1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&slider1->base, 1.0f, 32);
defaultBase = &slider1->base;
struct DjuiSlider* slider2 = djui_slider_create(&body->base, "Music Volume", &configMusicVolume, 0, 127);
djui_base_set_size_type(&slider2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&slider2->base, 1.0f, 32);
struct DjuiSlider* slider3 = djui_slider_create(&body->base, "Sfx Volume", &configSfxVolume, 0, 127);
djui_base_set_size_type(&slider3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&slider3->base, 1.0f, 32);
struct DjuiSlider* slider4 = djui_slider_create(&body->base, "Env Volume", &configEnvVolume, 0, 127);
djui_base_set_size_type(&slider4->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&slider4->base, 1.0f, 32);
struct DjuiButton* button6 = djui_button_create(&body->base, "Back");
djui_base_set_size_type(&button6->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&button6->base, 1.0f, 64);
djui_button_set_style(button6, 1);
djui_interactable_hook_click(&button6->base, djui_panel_menu_back);
djui_slider_create(&body->base, "Master Volume", &configMasterVolume, 0, 127, NULL);
djui_slider_create(&body->base, "Music Volume", &configMusicVolume, 0, 127, NULL);
djui_slider_create(&body->base, "Sfx Volume", &configSfxVolume, 0, 127, NULL);
djui_slider_create(&body->base, "Env Volume", &configEnvVolume, 0, 127, NULL);
djui_button_create(&body->base, "Back", DJUI_BUTTON_STYLE_BACK, djui_panel_menu_back);
}
djui_panel_add(caller, &panel->base, defaultBase);
djui_panel_add(caller, panel, NULL);
}

View file

@ -40,3 +40,11 @@ struct DjuiRect* djui_rect_create(struct DjuiBase* parent) {
return rect;
}
struct DjuiRect* djui_rect_container_create(struct DjuiBase* parent, f32 height) {
struct DjuiRect* rect = djui_rect_create(parent);
djui_base_set_size_type(&rect->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(&rect->base, 1.0f, height);
djui_base_set_color(&rect->base, 0, 0, 0, 0);
return rect;
}

View file

@ -7,3 +7,4 @@ struct DjuiRect {
bool djui_rect_render(struct DjuiBase* base);
struct DjuiRect* djui_rect_create(struct DjuiBase* parent);
struct DjuiRect* djui_rect_container_create(struct DjuiBase* parent, f32 height);

View file

@ -72,7 +72,7 @@ static void djui_selectionbox_destroy(struct DjuiBase* base) {
free(selectionbox);
}
struct DjuiSelectionbox* djui_selectionbox_create(struct DjuiBase* parent, const char* message, char* choices[], u8 choiceCount, unsigned int* value) {
struct DjuiSelectionbox* djui_selectionbox_create(struct DjuiBase* parent, const char* message, char* choices[], u8 choiceCount, unsigned int* value, void (*on_value_change)(struct DjuiBase*)) {
struct DjuiSelectionbox* selectionbox = calloc(1, sizeof(struct DjuiSelectionbox));
struct DjuiBase* base = &selectionbox->base;
@ -124,5 +124,9 @@ struct DjuiSelectionbox* djui_selectionbox_create(struct DjuiBase* parent, const
base->get_cursor_hover_location = djui_selectionbox_get_cursor_hover_location;
djui_base_set_size_type(base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_base_set_size(base, 1.0f, 32);
djui_interactable_hook_value_change(base, on_value_change);
return selectionbox;
}

View file

@ -12,5 +12,5 @@ struct DjuiSelectionbox {
u8 choiceCount;
};
struct DjuiSelectionbox* djui_selectionbox_create(struct DjuiBase* parent, const char* message, char* choices[], u8 choiceCount, unsigned int* value);
struct DjuiSelectionbox* djui_selectionbox_create(struct DjuiBase* parent, const char* message, char* choices[], u8 choiceCount, unsigned int* value, void (*on_value_change)(struct DjuiBase*));
void djui_selectionbox_update_value(struct DjuiBase* base);

View file

@ -98,7 +98,7 @@ static void djui_slider_destroy(struct DjuiBase* base) {
free(slider);
}
struct DjuiSlider* djui_slider_create(struct DjuiBase* parent, const char* message, unsigned int* value, unsigned int min, unsigned int max) {
struct DjuiSlider* djui_slider_create(struct DjuiBase* parent, const char* message, unsigned int* value, unsigned int min, unsigned int max, void (*on_value_change)(struct DjuiBase*)) {
struct DjuiSlider* slider = calloc(1, sizeof(struct DjuiSlider));
struct DjuiBase* base = &slider->base;
@ -136,5 +136,9 @@ struct DjuiSlider* djui_slider_create(struct DjuiBase* parent, const char* messa
base->get_cursor_hover_location = djui_slider_get_cursor_hover_location;
djui_base_set_size_type(base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
djui_interactable_hook_value_change(base, on_value_change);
djui_base_set_size(base, 1.0f, 32);
return slider;
}

View file

@ -11,5 +11,5 @@ struct DjuiSlider {
unsigned int max;
};
struct DjuiSlider* djui_slider_create(struct DjuiBase* parent, const char* message, unsigned int* value, unsigned int min, unsigned int max);
struct DjuiSlider* djui_slider_create(struct DjuiBase* parent, const char* message, unsigned int* value, unsigned int min, unsigned int max, void (*on_value_change)(struct DjuiBase*));
void djui_slider_update_value(struct DjuiBase* base);

View file

@ -57,6 +57,29 @@ void djui_three_panel_set_min_footer_size(struct DjuiThreePanel* threePanel, f32
threePanel->minFooterSize.value = minFooterSize;
}
void djui_three_panel_recalculate_body_size(struct DjuiThreePanel* threePanel) {
struct DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(threePanel);
struct DjuiBaseChild* child = body->base.child;
if (threePanel->bodySize.value != 0) { return; }
if (body->margin.type != DJUI_SVT_ABSOLUTE) {
return;
}
f32 bodyHeight = body->margin.value;
while (child != NULL) {
bodyHeight += body->margin.value;
bodyHeight += child->base->height.value;
if (child->base->height.type != DJUI_SVT_ABSOLUTE) {
return;
}
child = child->next;
}
if (bodyHeight < 0) { bodyHeight = 0; }
djui_three_panel_set_body_size(threePanel, bodyHeight);
}
////////////
// events //
////////////

View file

@ -18,5 +18,6 @@ void djui_three_panel_set_body_size_type(struct DjuiThreePanel* threePanel, enum
void djui_three_panel_set_body_size(struct DjuiThreePanel* threePanel, f32 bodySize);
void djui_three_panel_set_min_footer_size_type(struct DjuiThreePanel* threePanel, enum DjuiScreenValueType minFooterSizeType);
void djui_three_panel_set_min_footer_size(struct DjuiThreePanel* threePanel, f32 minFooterSize);
void djui_three_panel_recalculate_body_size(struct DjuiThreePanel* threePanel);
struct DjuiThreePanel* djui_three_panel_create(struct DjuiBase* parent, f32 minHeaderSize, f32 bodySize, f32 minFooterSize);