mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2025-10-30 08:01:01 +00:00
DJUI: Added join panel
This commit is contained in:
parent
b4418bbd4f
commit
1b1ed0038f
8 changed files with 118 additions and 12 deletions
|
|
@ -3950,6 +3950,7 @@
|
||||||
<ClCompile Include="..\src\pc\djui\djui_panel_controls.c" />
|
<ClCompile Include="..\src\pc\djui\djui_panel_controls.c" />
|
||||||
<ClCompile Include="..\src\pc\djui\djui_panel_host.c" />
|
<ClCompile Include="..\src\pc\djui\djui_panel_host.c" />
|
||||||
<ClCompile Include="..\src\pc\djui\djui_panel_host_message.c" />
|
<ClCompile Include="..\src\pc\djui\djui_panel_host_message.c" />
|
||||||
|
<ClCompile Include="..\src\pc\djui\djui_panel_join.c" />
|
||||||
<ClCompile Include="..\src\pc\djui\djui_panel_menu.c" />
|
<ClCompile Include="..\src\pc\djui\djui_panel_menu.c" />
|
||||||
<ClCompile Include="..\src\pc\djui\djui_selectionbox.c" />
|
<ClCompile Include="..\src\pc\djui\djui_selectionbox.c" />
|
||||||
<ClCompile Include="..\src\pc\djui\djui_cursor.c" />
|
<ClCompile Include="..\src\pc\djui\djui_cursor.c" />
|
||||||
|
|
@ -4392,6 +4393,7 @@
|
||||||
<ClInclude Include="..\src\pc\djui\djui_panel_controls.h" />
|
<ClInclude Include="..\src\pc\djui\djui_panel_controls.h" />
|
||||||
<ClInclude Include="..\src\pc\djui\djui_panel_host.h" />
|
<ClInclude Include="..\src\pc\djui\djui_panel_host.h" />
|
||||||
<ClInclude Include="..\src\pc\djui\djui_panel_host_message.h" />
|
<ClInclude Include="..\src\pc\djui\djui_panel_host_message.h" />
|
||||||
|
<ClInclude Include="..\src\pc\djui\djui_panel_join.h" />
|
||||||
<ClInclude Include="..\src\pc\djui\djui_panel_menu.h" />
|
<ClInclude Include="..\src\pc\djui\djui_panel_menu.h" />
|
||||||
<ClInclude Include="..\src\pc\djui\djui_selectionbox.h" />
|
<ClInclude Include="..\src\pc\djui\djui_selectionbox.h" />
|
||||||
<ClInclude Include="..\src\pc\djui\djui_cursor.h" />
|
<ClInclude Include="..\src\pc\djui\djui_cursor.h" />
|
||||||
|
|
|
||||||
|
|
@ -15252,6 +15252,9 @@
|
||||||
<ClCompile Include="..\src\pc\djui\djui_inputbox.c">
|
<ClCompile Include="..\src\pc\djui\djui_inputbox.c">
|
||||||
<Filter>Source Files\src\pc\djui\component\compound</Filter>
|
<Filter>Source Files\src\pc\djui\component\compound</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\src\pc\djui\djui_panel_join.c">
|
||||||
|
<Filter>Source Files\src\pc\djui\panel</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClCompile Include="..\actors\common0.h">
|
<ClCompile Include="..\actors\common0.h">
|
||||||
|
|
@ -16324,5 +16327,8 @@
|
||||||
<ClInclude Include="..\src\pc\djui\djui_inputbox.h">
|
<ClInclude Include="..\src\pc\djui\djui_inputbox.h">
|
||||||
<Filter>Source Files\src\pc\djui\component\compound</Filter>
|
<Filter>Source Files\src\pc\djui\component\compound</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\src\pc\djui\djui_panel_join.h">
|
||||||
|
<Filter>Source Files\src\pc\djui\panel</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
||||||
|
|
@ -34,6 +34,7 @@
|
||||||
#include "djui_panel_main.h"
|
#include "djui_panel_main.h"
|
||||||
#include "djui_panel_host.h"
|
#include "djui_panel_host.h"
|
||||||
#include "djui_panel_host_message.h"
|
#include "djui_panel_host_message.h"
|
||||||
|
#include "djui_panel_join.h"
|
||||||
#include "djui_panel_options.h"
|
#include "djui_panel_options.h"
|
||||||
#include "djui_panel_camera.h"
|
#include "djui_panel_camera.h"
|
||||||
#include "djui_panel_controls.h"
|
#include "djui_panel_controls.h"
|
||||||
|
|
|
||||||
|
|
@ -15,6 +15,15 @@ static u8 sHeldShift = 0;
|
||||||
static u8 sHeldControl = 0;
|
static u8 sHeldControl = 0;
|
||||||
static u8 sCursorBlink = 0;
|
static u8 sCursorBlink = 0;
|
||||||
|
|
||||||
|
void djui_inputbox_set_text(struct DjuiInputbox* inputbox, char* text) {
|
||||||
|
snprintf(inputbox->buffer, inputbox->bufferSize, "%s", text);
|
||||||
|
}
|
||||||
|
|
||||||
|
void djui_inputbox_select_all(struct DjuiInputbox* inputbox) {
|
||||||
|
inputbox->selection[1] = 0;
|
||||||
|
inputbox->selection[0] = strlen(inputbox->buffer);
|
||||||
|
}
|
||||||
|
|
||||||
void djui_inputbox_hook_enter_press(struct DjuiInputbox* inputbox, void (*on_enter_press)(void)) {
|
void djui_inputbox_hook_enter_press(struct DjuiInputbox* inputbox, void (*on_enter_press)(void)) {
|
||||||
inputbox->on_enter_press = on_enter_press;
|
inputbox->on_enter_press = on_enter_press;
|
||||||
}
|
}
|
||||||
|
|
@ -54,15 +63,6 @@ static u16 djui_inputbox_get_cursor_index(struct DjuiInputbox* inputbox) {
|
||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void djui_inputbox_on_cursor_down_begin(struct DjuiBase* base, bool inputCursor) {
|
|
||||||
struct DjuiInputbox* inputbox = (struct DjuiInputbox*)base;
|
|
||||||
u16 index = djui_inputbox_get_cursor_index(inputbox);
|
|
||||||
inputbox->selection[0] = index;
|
|
||||||
inputbox->selection[1] = index;
|
|
||||||
sCursorBlink = 0;
|
|
||||||
djui_interactable_set_input_focus(base);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void djui_inputbox_on_cursor_down(struct DjuiBase* base) {
|
static void djui_inputbox_on_cursor_down(struct DjuiBase* base) {
|
||||||
struct DjuiInputbox* inputbox = (struct DjuiInputbox*)base;
|
struct DjuiInputbox* inputbox = (struct DjuiInputbox*)base;
|
||||||
u16 index = djui_inputbox_get_cursor_index(inputbox);
|
u16 index = djui_inputbox_get_cursor_index(inputbox);
|
||||||
|
|
@ -73,6 +73,21 @@ static void djui_inputbox_on_cursor_down_end(struct DjuiBase* base) {
|
||||||
djui_inputbox_set_default_style(base);
|
djui_inputbox_set_default_style(base);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void djui_inputbox_on_cursor_down_begin(struct DjuiBase* base, bool inputCursor) {
|
||||||
|
struct DjuiInputbox* inputbox = (struct DjuiInputbox*)base;
|
||||||
|
u16 index = djui_inputbox_get_cursor_index(inputbox);
|
||||||
|
u16 selLength = abs(inputbox->selection[0] - inputbox->selection[1]);
|
||||||
|
if (selLength != strlen(inputbox->buffer) || djui_interactable_is_input_focus(base)) {
|
||||||
|
inputbox->selection[0] = index;
|
||||||
|
inputbox->selection[1] = index;
|
||||||
|
djui_interactable_hook_cursor_down(base, djui_inputbox_on_cursor_down_begin, djui_inputbox_on_cursor_down, djui_inputbox_on_cursor_down_end);
|
||||||
|
} else {
|
||||||
|
djui_interactable_hook_cursor_down(base, djui_inputbox_on_cursor_down_begin, NULL, djui_inputbox_on_cursor_down_end);
|
||||||
|
}
|
||||||
|
sCursorBlink = 0;
|
||||||
|
djui_interactable_set_input_focus(base);
|
||||||
|
}
|
||||||
|
|
||||||
static u16 djui_inputbox_jump_word_left(char* msg, u16 len, u16 i) {
|
static u16 djui_inputbox_jump_word_left(char* msg, u16 len, u16 i) {
|
||||||
if (i == 0) { return i; }
|
if (i == 0) { return i; }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,8 @@ struct DjuiInputbox {
|
||||||
void (*on_enter_press)(void);
|
void (*on_enter_press)(void);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void djui_inputbox_set_text(struct DjuiInputbox* inputbox, char* text);
|
||||||
|
void djui_inputbox_select_all(struct DjuiInputbox* inputbox);
|
||||||
void djui_inputbox_hook_enter_press(struct DjuiInputbox* inputbox, void (*on_enter_press)(void));
|
void djui_inputbox_hook_enter_press(struct DjuiInputbox* inputbox, void (*on_enter_press)(void));
|
||||||
|
|
||||||
struct DjuiInputbox* djui_inputbox_create(struct DjuiBase* parent, u16 bufferSize);
|
struct DjuiInputbox* djui_inputbox_create(struct DjuiBase* parent, u16 bufferSize);
|
||||||
|
|
|
||||||
78
src/pc/djui/djui_panel_join.c
Normal file
78
src/pc/djui/djui_panel_join.c
Normal file
|
|
@ -0,0 +1,78 @@
|
||||||
|
#include "djui.h"
|
||||||
|
#include "src/pc/utils/misc.h"
|
||||||
|
#include "src/pc/configfile.h"
|
||||||
|
|
||||||
|
#ifdef DISCORD_SDK
|
||||||
|
static char* sJoiningDiscord = "\
|
||||||
|
To join a \\#d0d0ff\\Discord\\#c8c8c8\\ lobby:\n\n\
|
||||||
|
Keep the game open and click the join button on the invite.\n\n\
|
||||||
|
If the invite says that the game has ended, click the name of the person that sent the invite to refresh it.\
|
||||||
|
";
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static char* sJoiningDirect = "\
|
||||||
|
Enter \\#d0d0ff\\direct connection\\#c8c8c8\\ IP and port:\
|
||||||
|
";
|
||||||
|
|
||||||
|
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 DjuiFlowLayout* body = (struct DjuiFlowLayout*)djui_three_panel_get_body(panel);
|
||||||
|
{
|
||||||
|
#ifdef DISCORD_SDK
|
||||||
|
struct DjuiText* text1 = djui_text_create(&body->base, sJoiningDiscord);
|
||||||
|
djui_base_set_size_type(&text1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
|
||||||
|
djui_base_set_size(&text1->base, 1.0f, discordTextHeight);
|
||||||
|
djui_base_set_color(&text1->base, 200, 200, 200, 255);
|
||||||
|
#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, 2);
|
||||||
|
djui_base_set_color(&rect1->base, 150, 150, 150, 255);
|
||||||
|
|
||||||
|
struct DjuiText* text2 = djui_text_create(&body->base, sJoiningDirect);
|
||||||
|
djui_base_set_size_type(&text2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
|
||||||
|
djui_base_set_size(&text2->base, 1.0f, directTextHeight);
|
||||||
|
djui_base_set_color(&text2->base, 200, 200, 200, 255);
|
||||||
|
|
||||||
|
struct DjuiInputbox* inputbox1 = djui_inputbox_create(&body->base, 256);
|
||||||
|
djui_base_set_size_type(&inputbox1->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
|
||||||
|
djui_base_set_size(&inputbox1->base, 1.0f, 32.0f);
|
||||||
|
djui_inputbox_set_text(inputbox1, configJoinIp);
|
||||||
|
djui_inputbox_select_all(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 DjuiButton* button1 = djui_button_create(&rect2->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(&rect2->base, "Join");
|
||||||
|
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_menu_back);
|
||||||
|
defaultBase = &button2->base;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
djui_panel_add(caller, &panel->base, defaultBase);
|
||||||
|
}
|
||||||
4
src/pc/djui/djui_panel_join.h
Normal file
4
src/pc/djui/djui_panel_join.h
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
#pragma once
|
||||||
|
#include "djui.h"
|
||||||
|
|
||||||
|
void djui_panel_join_create(struct DjuiBase* caller);
|
||||||
|
|
@ -25,6 +25,7 @@ void djui_panel_main_create(struct DjuiBase* caller) {
|
||||||
struct DjuiButton* button2 = djui_button_create(&body->base, "Join");
|
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_type(&button2->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
|
||||||
djui_base_set_size(&button2->base, 1.0f, 64);
|
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");
|
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_type(&button3->base, DJUI_SVT_RELATIVE, DJUI_SVT_ABSOLUTE);
|
||||||
|
|
@ -46,9 +47,6 @@ void djui_panel_main_create(struct DjuiBase* caller) {
|
||||||
djui_text_set_alignment(footer, DJUI_HALIGN_CENTER, DJUI_VALIGN_BOTTOM);
|
djui_text_set_alignment(footer, DJUI_HALIGN_CENTER, DJUI_VALIGN_BOTTOM);
|
||||||
}
|
}
|
||||||
|
|
||||||
struct DjuiInputbox* inputbox = djui_inputbox_create(&gDjuiRoot->base, 256);
|
|
||||||
djui_base_set_location(&inputbox->base, 400, 100);
|
|
||||||
|
|
||||||
djui_panel_add(caller, &panel->base, defaultBase);
|
djui_panel_add(caller, &panel->base, defaultBase);
|
||||||
gInteractableOverridePad = true;
|
gInteractableOverridePad = true;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue