move allow known keys option to new tab...

on multiplayer window
This commit is contained in:
Ted John 2016-05-26 19:34:37 +01:00 committed by Michał Janiszewski
parent 7b09b16255
commit 62636f39b6
5 changed files with 179 additions and 81 deletions

View File

@ -4170,8 +4170,9 @@ STR_5858 :{SMALLFONT}{BLACK}Use GPU for displaying instead of CPU. Improves c
STR_5859 :{SMALLFONT}{BLACK}Enables frame tweening for visually{NEWLINE}smoother gameplay. When disabled,{NEWLINE}the game will run at 40 FPS.
STR_5860 :Toggle original/decompiled track drawing
STR_5861 :Key verification failure.
STR_5862 :Allow joining with known keys only.
STR_5863 :This host only allows known keys to connect.
STR_5862 :Block unknown players.
STR_5863 :{SMALLFONT}{BLACK}Only allow players with known keys to join.
STR_5864 :This server only allows whitelisted players to connect.
#############
# Scenarios #

View File

@ -2635,7 +2635,8 @@ enum {
STR_MULTIPLAYER_VERIFICATION_FAILURE = 5861,
STR_ALLOW_KNOWN_KEYS_ONLY = 5862,
STR_MULTIPLAYER_UNKNOWN_KEY_DISALLOWED = 5863,
STR_ALLOW_KNOWN_KEYS_ONLY_TIP = 5863,
STR_MULTIPLAYER_UNKNOWN_KEY_DISALLOWED = 5864,
// Have to include resource strings (from scenarios and objects) for the time being now that language is partially working
STR_COUNT = 32768

View File

@ -98,6 +98,11 @@ enum {
SPR_PARK_ENTRANCE = 5197,
SPR_TAB_GEARS_0 = 5201,
SPR_TAB_GEARS_1 = SPR_TAB_GEARS_0 + 1,
SPR_TAB_GEARS_2 = SPR_TAB_GEARS_0 + 2,
SPR_TAB_GEARS_3 = SPR_TAB_GEARS_0 + 3,
SPR_TAB_GRAPH_0 = 5245,
SPR_TAB_GRAPH_1 = SPR_TAB_GRAPH_0 + 1,
SPR_TAB_GRAPH_2 = SPR_TAB_GRAPH_0 + 2,

View File

@ -14,6 +14,7 @@
*****************************************************************************/
#pragma endregion
#include "../config.h"
#include "../interface/themes.h"
#include "../interface/widget.h"
#include "../interface/window.h"
@ -25,7 +26,8 @@
enum {
WINDOW_MULTIPLAYER_PAGE_PLAYERS,
WINDOW_MULTIPLAYER_PAGE_GROUPS
WINDOW_MULTIPLAYER_PAGE_GROUPS,
WINDOW_MULTIPLAYER_PAGE_OPTIONS
};
enum WINDOW_MULTIPLAYER_WIDGET_IDX {
@ -35,10 +37,11 @@ enum WINDOW_MULTIPLAYER_WIDGET_IDX {
WIDX_CONTENT_PANEL,
WIDX_TAB1,
WIDX_TAB2,
WIDX_TAB3,
WIDX_LIST = 6,
WIDX_LIST = 7,
WIDX_DEFAULT_GROUP = 6,
WIDX_DEFAULT_GROUP = 7,
WIDX_DEFAULT_GROUP_DROPDOWN,
WIDX_ADD_GROUP,
WIDX_REMOVE_GROUP,
@ -46,52 +49,60 @@ enum WINDOW_MULTIPLAYER_WIDGET_IDX {
WIDX_SELECTED_GROUP,
WIDX_SELECTED_GROUP_DROPDOWN,
WIDX_PERMISSIONS_LIST,
WIDX_KNOWN_KEYS_ONLY_CHECKBOX = 7,
};
#define MAIN_MULTIPLAYER_WIDGETS \
{ WWT_FRAME, 0, 0, 339, 0, 239, 0x0FFFFFFFF, STR_NONE }, /* panel / background */ \
{ WWT_CAPTION, 0, 1, 338, 1, 14, STR_MULTIPLAYER, STR_WINDOW_TITLE_TIP }, /* title bar */ \
{ WWT_CLOSEBOX, 0, 327, 337, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, /* close x button */ \
{ WWT_RESIZE, 1, 0, 339, 43, 239, 0x0FFFFFFFF, STR_NONE }, /* content panel */ \
{ WWT_TAB, 1, 3, 33, 17, 43, 0x02000144E, STR_PLAYERS_TIP }, /* tab */ \
{ WWT_TAB, 1, 3, 33, 17, 43, 0x02000144E, STR_GROUPS_TIP }, /* tab */ \
{ WWT_TAB, 1, 3, 33, 17, 43, 0x02000144E, STR_OPTIONS_TIP } /* tab */ \
static rct_widget window_multiplayer_players_widgets[] = {
{ WWT_FRAME, 0, 0, 339, 0, 239, 0x0FFFFFFFF, STR_NONE }, // panel / background
{ WWT_CAPTION, 0, 1, 338, 1, 14, STR_MULTIPLAYER, STR_WINDOW_TITLE_TIP }, // title bar
{ WWT_CLOSEBOX, 0, 327, 337, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // close x button
{ WWT_RESIZE, 1, 0, 339, 43, 239, 0x0FFFFFFFF, STR_NONE }, // content panel
{ WWT_TAB, 1, 3, 33, 17, 43, 0x02000144E, STR_PLAYERS_TIP }, // tab
{ WWT_TAB, 1, 3, 33, 17, 43, 0x02000144E, STR_GROUPS_TIP }, // tab
{ WWT_SCROLL, 1, 3, 336, 60, 236, 2, STR_NONE }, // list
MAIN_MULTIPLAYER_WIDGETS,
{ WWT_SCROLL, 1, 3, 336, 60, 236, 2, STR_NONE }, // list
{ WIDGETS_END }
};
static rct_widget window_multiplayer_groups_widgets[] = {
{ WWT_FRAME, 0, 0, 339, 0, 239, 0x0FFFFFFFF, STR_NONE }, // panel / background
{ WWT_CAPTION, 0, 1, 338, 1, 14, STR_MULTIPLAYER, STR_WINDOW_TITLE_TIP }, // title bar
{ WWT_CLOSEBOX, 0, 327, 337, 2, 13, STR_CLOSE_X, STR_CLOSE_WINDOW_TIP }, // close x button
{ WWT_RESIZE, 1, 0, 339, 43, 239, 0x0FFFFFFFF, STR_NONE }, // content panel
{ WWT_TAB, 1, 3, 33, 17, 43, 0x02000144E, STR_PLAYERS_TIP }, // tab
{ WWT_TAB, 1, 3, 33, 17, 43, 0x02000144E, STR_GROUPS_TIP }, // tab
{ WWT_DROPDOWN, 1, 141, 315, 46, 57, 0x0FFFFFFFF, STR_NONE }, // default group
{ WWT_DROPDOWN_BUTTON, 1, 305, 315, 47, 56, 876, STR_NONE }, //
{ WWT_DROPDOWN_BUTTON, 1, 11, 102, 65, 76, STR_ADD_GROUP, STR_NONE }, // add group button
{ WWT_DROPDOWN_BUTTON, 1, 113, 204, 65, 76, STR_REMOVE_GROUP, STR_NONE }, // remove group button
{ WWT_DROPDOWN_BUTTON, 1, 215, 306, 65, 76, STR_RENAME_GROUP, STR_NONE }, // rename group button
{ WWT_DROPDOWN, 1, 72, 246, 80, 91, 0x0FFFFFFFF, STR_NONE }, // selected group
{ WWT_DROPDOWN_BUTTON, 1, 236, 246, 81, 90, 876, STR_NONE }, //
{ WWT_SCROLL, 1, 3, 316, 94, 300, 2, STR_NONE }, // permissions list
MAIN_MULTIPLAYER_WIDGETS,
{ WWT_DROPDOWN, 1, 141, 315, 46, 57, 0x0FFFFFFFF, STR_NONE }, // default group
{ WWT_DROPDOWN_BUTTON, 1, 305, 315, 47, 56, 876, STR_NONE }, //
{ WWT_DROPDOWN_BUTTON, 1, 11, 102, 65, 76, STR_ADD_GROUP, STR_NONE }, // add group button
{ WWT_DROPDOWN_BUTTON, 1, 113, 204, 65, 76, STR_REMOVE_GROUP, STR_NONE }, // remove group button
{ WWT_DROPDOWN_BUTTON, 1, 215, 306, 65, 76, STR_RENAME_GROUP, STR_NONE }, // rename group button
{ WWT_DROPDOWN, 1, 72, 246, 80, 91, 0x0FFFFFFFF, STR_NONE }, // selected group
{ WWT_DROPDOWN_BUTTON, 1, 236, 246, 81, 90, 876, STR_NONE }, //
{ WWT_SCROLL, 1, 3, 316, 94, 300, 2, STR_NONE }, // permissions list
{ WIDGETS_END }
};
static rct_widget window_multiplayer_options_widgets[] = {
MAIN_MULTIPLAYER_WIDGETS,
{ WWT_CHECKBOX, 1, 3, 297, 50, 61, STR_ALLOW_KNOWN_KEYS_ONLY, STR_ALLOW_KNOWN_KEYS_ONLY_TIP },
{ WIDGETS_END }
};
static rct_widget *window_multiplayer_page_widgets[] = {
window_multiplayer_players_widgets,
window_multiplayer_groups_widgets
window_multiplayer_groups_widgets,
window_multiplayer_options_widgets
};
const uint64 window_multiplayer_page_enabled_widgets[] = {
(1 << WIDX_CLOSE) | (1 << WIDX_TAB1) | (1 << WIDX_TAB2),
(1 << WIDX_CLOSE) | (1 << WIDX_TAB1) | (1 << WIDX_TAB2) | (1 << WIDX_DEFAULT_GROUP) | (1 << WIDX_DEFAULT_GROUP_DROPDOWN) | (1 << WIDX_ADD_GROUP) | (1 << WIDX_REMOVE_GROUP) | (1 << WIDX_RENAME_GROUP) | (1 << WIDX_SELECTED_GROUP) | (1 << WIDX_SELECTED_GROUP_DROPDOWN)
(1 << WIDX_CLOSE) | (1 << WIDX_TAB1) | (1 << WIDX_TAB2) | (1 << WIDX_TAB3),
(1 << WIDX_CLOSE) | (1 << WIDX_TAB1) | (1 << WIDX_TAB2) | (1 << WIDX_TAB3) | (1 << WIDX_DEFAULT_GROUP) | (1 << WIDX_DEFAULT_GROUP_DROPDOWN) | (1 << WIDX_ADD_GROUP) | (1 << WIDX_REMOVE_GROUP) | (1 << WIDX_RENAME_GROUP) | (1 << WIDX_SELECTED_GROUP) | (1 << WIDX_SELECTED_GROUP_DROPDOWN),
(1 << WIDX_CLOSE) | (1 << WIDX_TAB1) | (1 << WIDX_TAB2) | (1 << WIDX_TAB3) | (1 << WIDX_KNOWN_KEYS_ONLY_CHECKBOX),
};
static uint8 _selectedGroup = 0;
static void window_multiplayer_players_mouseup(rct_window *w, int widgetIndex);
static void window_multiplayer_players_resize(rct_window *w);
static void window_multiplayer_players_mousedown(int widgetIndex, rct_window* w, rct_widget* widget);
static void window_multiplayer_players_update(rct_window *w);
static void window_multiplayer_players_scrollgetsize(rct_window *w, int scrollIndex, int *width, int *height);
static void window_multiplayer_players_scrollmousedown(rct_window *w, int scrollIndex, int x, int y);
@ -113,11 +124,17 @@ static void window_multiplayer_groups_invalidate(rct_window *w);
static void window_multiplayer_groups_paint(rct_window *w, rct_drawpixelinfo *dpi);
static void window_multiplayer_groups_scrollpaint(rct_window *w, rct_drawpixelinfo *dpi, int scrollIndex);
static void window_multiplayer_options_mouseup(rct_window *w, int widgetIndex);
static void window_multiplayer_options_resize(rct_window *w);
static void window_multiplayer_options_update(rct_window *w);
static void window_multiplayer_options_invalidate(rct_window *w);
static void window_multiplayer_options_paint(rct_window *w, rct_drawpixelinfo *dpi);
static rct_window_event_list window_multiplayer_players_events = {
NULL,
window_multiplayer_players_mouseup,
window_multiplayer_players_resize,
window_multiplayer_players_mousedown,
NULL,
NULL,
NULL,
window_multiplayer_players_update,
@ -175,13 +192,45 @@ static rct_window_event_list window_multiplayer_groups_events = {
window_multiplayer_groups_scrollpaint
};
static rct_window_event_list *window_multiplayer_page_events[] = {
&window_multiplayer_players_events,
&window_multiplayer_groups_events
static rct_window_event_list window_multiplayer_options_events = {
NULL,
window_multiplayer_options_mouseup,
window_multiplayer_options_resize,
NULL,
NULL,
NULL,
window_multiplayer_options_update,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
window_multiplayer_options_invalidate,
window_multiplayer_options_paint,
NULL
};
static const int window_multiplayer_animation_divisor[] = { 4, 2 };
static const int window_multiplayer_animation_frames[] = { 8, 7 };
static rct_window_event_list *window_multiplayer_page_events[] = {
&window_multiplayer_players_events,
&window_multiplayer_groups_events,
&window_multiplayer_options_events
};
static const int window_multiplayer_animation_divisor[] = { 4, 2, 2 };
static const int window_multiplayer_animation_frames[] = { 8, 7, 4 };
static void window_multiplayer_draw_tab_images(rct_window *w, rct_drawpixelinfo *dpi);
static void window_multiplayer_set_page(rct_window* w, int page);
@ -214,6 +263,12 @@ static void window_multiplayer_set_page(rct_window* w, int page){
w->event_handlers = window_multiplayer_page_events[page];
w->pressed_widgets = 0;
w->widgets = window_multiplayer_page_widgets[page];
if (network_get_mode() == NETWORK_MODE_CLIENT) {
w->widgets[WIDX_TAB3].type = WWT_EMPTY;
w->disabled_widgets |= (1 << WIDX_TAB3);
}
window_event_resize_call(w);
window_event_invalidate_call(w);
window_init_scroll_widgets(w);
@ -270,12 +325,21 @@ static void window_multiplayer_groups_show_group_dropdown(rct_window *w, rct_wid
}
}
#pragma region Players page
static void window_multiplayer_players_mouseup(rct_window *w, int widgetIndex)
{
switch (widgetIndex) {
case WIDX_CLOSE:
window_close(w);
break;
case WIDX_TAB1:
case WIDX_TAB2:
case WIDX_TAB3:
if (w->page != widgetIndex - WIDX_TAB1) {
window_multiplayer_set_page(w, widgetIndex - WIDX_TAB1);
}
break;
}
}
@ -290,18 +354,6 @@ static void window_multiplayer_players_resize(rct_window *w)
window_invalidate(w);
}
static void window_multiplayer_players_mousedown(int widgetIndex, rct_window* w, rct_widget* widget)
{
switch (widgetIndex) {
case WIDX_TAB1:
case WIDX_TAB2:
if (w->page != widgetIndex - WIDX_TAB1) {
window_multiplayer_set_page(w, widgetIndex - WIDX_TAB1);
}
break;
}
}
static void window_multiplayer_players_update(rct_window *w)
{
w->frame_no++;
@ -361,7 +413,7 @@ static void window_multiplayer_players_invalidate(rct_window *w)
window_multiplayer_anchor_border_widgets(w);
window_multiplayer_players_widgets[WIDX_LIST].right = w->width - 4;
window_multiplayer_players_widgets[WIDX_LIST].bottom = w->height - 0x0F;
window_align_tabs(w, WIDX_TAB1, WIDX_TAB2);
window_align_tabs(w, WIDX_TAB1, WIDX_TAB3);
}
static void window_multiplayer_players_paint(rct_window *w, rct_drawpixelinfo *dpi)
@ -452,12 +504,23 @@ static void window_multiplayer_players_scrollpaint(rct_window *w, rct_drawpixeli
}
}
#pragma endregion
#pragma region Groups page
static void window_multiplayer_groups_mouseup(rct_window *w, int widgetIndex)
{
switch (widgetIndex) {
case WIDX_CLOSE:
window_close(w);
break;
case WIDX_TAB1:
case WIDX_TAB2:
case WIDX_TAB3:
if (w->page != widgetIndex - WIDX_TAB1) {
window_multiplayer_set_page(w, widgetIndex - WIDX_TAB1);
}
break;
case WIDX_ADD_GROUP:
game_do_command(0, GAME_COMMAND_FLAG_APPLY, 0, 0, GAME_COMMAND_MODIFY_GROUPS, 0, 0);
break;
@ -486,12 +549,6 @@ static void window_multiplayer_groups_resize(rct_window *w)
static void window_multiplayer_groups_mousedown(int widgetIndex, rct_window* w, rct_widget* widget)
{
switch (widgetIndex) {
case WIDX_TAB1:
case WIDX_TAB2:
if (w->page != widgetIndex - WIDX_TAB1) {
window_multiplayer_set_page(w, widgetIndex - WIDX_TAB1);
}
break;
case WIDX_DEFAULT_GROUP_DROPDOWN:
window_multiplayer_groups_show_group_dropdown(w, widget);
break;
@ -589,7 +646,7 @@ static void window_multiplayer_groups_invalidate(rct_window *w)
window_multiplayer_anchor_border_widgets(w);
window_multiplayer_groups_widgets[WIDX_PERMISSIONS_LIST].right = w->width - 4;
window_multiplayer_groups_widgets[WIDX_PERMISSIONS_LIST].bottom = w->height - 0x0F;
window_align_tabs(w, WIDX_TAB1, WIDX_TAB2);
window_align_tabs(w, WIDX_TAB1, WIDX_TAB3);
// select other group if one is removed
while (network_get_group_index(_selectedGroup) == -1 && _selectedGroup > 0) {
@ -687,11 +744,63 @@ static void window_multiplayer_groups_scrollpaint(rct_window *w, rct_drawpixelin
}
}
#pragma endregion
#pragma region Options page
static void window_multiplayer_options_mouseup(rct_window *w, int widgetIndex)
{
switch (widgetIndex) {
case WIDX_CLOSE:
window_close(w);
break;
case WIDX_TAB1:
case WIDX_TAB2:
case WIDX_TAB3:
if (w->page != widgetIndex - WIDX_TAB1) {
window_multiplayer_set_page(w, widgetIndex - WIDX_TAB1);
}
break;
case WIDX_KNOWN_KEYS_ONLY_CHECKBOX:
gConfigNetwork.known_keys_only = !gConfigNetwork.known_keys_only;
config_save_default();
break;
}
}
static void window_multiplayer_options_resize(rct_window *w)
{
window_set_resize(w, 300, 100, 300, 100);
}
static void window_multiplayer_options_update(rct_window *w)
{
w->frame_no++;
widget_invalidate(w, WIDX_TAB1 + w->page);
}
static void window_multiplayer_options_invalidate(rct_window *w)
{
window_multiplayer_set_pressed_tab(w);
window_multiplayer_anchor_border_widgets(w);
window_align_tabs(w, WIDX_TAB1, WIDX_TAB3);
widget_set_checkbox_value(w, WIDX_KNOWN_KEYS_ONLY_CHECKBOX, gConfigNetwork.known_keys_only);
}
static void window_multiplayer_options_paint(rct_window *w, rct_drawpixelinfo *dpi)
{
window_draw_widgets(w, dpi);
window_multiplayer_draw_tab_images(w, dpi);
}
#pragma endregion
static void window_multiplayer_draw_tab_image(rct_window *w, rct_drawpixelinfo *dpi, int page, int spriteIndex)
{
int widgetIndex = WIDX_TAB1 + page;
if (!(w->disabled_widgets & (1LL << widgetIndex))) {
if (!widget_is_disabled(w, widgetIndex)) {
if (w->page == page) {
int numFrames = window_multiplayer_animation_frames[w->page];
if (numFrames > 1) {
@ -706,6 +815,7 @@ static void window_multiplayer_draw_tab_image(rct_window *w, rct_drawpixelinfo *
static void window_multiplayer_draw_tab_images(rct_window *w, rct_drawpixelinfo *dpi)
{
window_multiplayer_draw_tab_image(w, dpi, 0, SPR_TAB_GUESTS_0);
window_multiplayer_draw_tab_image(w, dpi, 1, SPR_TAB_STAFF_OPTIONS_0);
window_multiplayer_draw_tab_image(w, dpi, WINDOW_MULTIPLAYER_PAGE_PLAYERS, SPR_TAB_GUESTS_0);
window_multiplayer_draw_tab_image(w, dpi, WINDOW_MULTIPLAYER_PAGE_GROUPS, SPR_TAB_STAFF_OPTIONS_0);
window_multiplayer_draw_tab_image(w, dpi, WINDOW_MULTIPLAYER_PAGE_OPTIONS, SPR_TAB_GEARS_0);
}

View File

@ -109,9 +109,7 @@ typedef enum {
} TOP_TOOLBAR_DEBUG_DDIDX;
typedef enum {
DDIDX_MULTIPLAYER = 0,
// separator
DDIDX_KNOWN_KEYS_ONLY = 2
DDIDX_MULTIPLAYER = 0
} TOP_TOOLBAR_NETWORK_DDIDX;
enum {
@ -2957,15 +2955,6 @@ void top_toolbar_init_debug_menu(rct_window* w, rct_widget* widget)
void top_toolbar_init_network_menu(rct_window* w, rct_widget* widget)
{
gDropdownItemsFormat[0] = STR_MULTIPLAYER;
int num_items = 1;
if (network_get_mode() == NETWORK_MODE_SERVER) {
gDropdownItemsFormat[DDIDX_KNOWN_KEYS_ONLY - 1] = 0;
gDropdownItemsFormat[DDIDX_KNOWN_KEYS_ONLY] = 1156;
gDropdownItemsArgs[DDIDX_KNOWN_KEYS_ONLY] = STR_ALLOW_KNOWN_KEYS_ONLY;
// includes separator
num_items += 2;
}
window_dropdown_show_text(
w->x + widget->left,
@ -2973,13 +2962,9 @@ void top_toolbar_init_network_menu(rct_window* w, rct_widget* widget)
widget->bottom - widget->top + 1,
w->colours[0] | 0x80,
0,
num_items
1
);
if (network_get_mode() == NETWORK_MODE_SERVER && gConfigNetwork.known_keys_only) {
dropdown_set_checked(DDIDX_KNOWN_KEYS_ONLY, true);
}
gDropdownDefaultIndex = DDIDX_MULTIPLAYER;
}
@ -3016,10 +3001,6 @@ void top_toolbar_network_menu_dropdown(short dropdownIndex)
case DDIDX_MULTIPLAYER:
window_multiplayer_open();
break;
case DDIDX_KNOWN_KEYS_ONLY:
gConfigNetwork.known_keys_only = !gConfigNetwork.known_keys_only;
config_save_default();
break;
}
}
}