diff --git a/code/modules/escape_menu/escape_menu.dm b/code/modules/escape_menu/escape_menu.dm index 6e07f7ceba0..842d70a8c77 100644 --- a/code/modules/escape_menu/escape_menu.dm +++ b/code/modules/escape_menu/escape_menu.dm @@ -17,6 +17,7 @@ GLOBAL_LIST_EMPTY(escape_menus) #define PAGE_HOME "PAGE_HOME" #define PAGE_LEAVE_BODY "PAGE_LEAVE_BODY" +#define PAGE_QUIT_GAME "PAGE_QUIT_GAME" /datum/escape_menu /// The client that owns this escape menu @@ -91,7 +92,7 @@ GLOBAL_LIST_EMPTY(escape_menus) SIGNAL_HANDLER PRIVATE_PROC(TRUE) - if (menu_page == PAGE_LEAVE_BODY) + if (menu_page != PAGE_HOME) qdel(src) else // Otherwise our client just switched bodies, let's update our hud @@ -117,6 +118,8 @@ GLOBAL_LIST_EMPTY(escape_menus) show_home_page() if (PAGE_LEAVE_BODY) show_leave_body_page() + if(PAGE_QUIT_GAME) + show_quit_game_page() else CRASH("Unknown escape menu page: [menu_page]") @@ -138,6 +141,12 @@ GLOBAL_LIST_EMPTY(escape_menus) menu_page = PAGE_LEAVE_BODY show_page() +/datum/escape_menu/proc/quit_game_prompt() + PRIVATE_PROC(TRUE) + + menu_page = PAGE_QUIT_GAME + show_page() + /atom/movable/screen/escape_menu plane = ESCAPE_MENU_PLANE clear_with_screen = FALSE @@ -147,3 +156,4 @@ INITIALIZE_IMMEDIATE(/atom/movable/screen/escape_menu) #undef PAGE_HOME #undef PAGE_LEAVE_BODY +#undef PAGE_QUIT_GAME diff --git a/code/modules/escape_menu/home_page.dm b/code/modules/escape_menu/home_page.dm index 1c8b2e7a44b..641be0d3a34 100644 --- a/code/modules/escape_menu/home_page.dm +++ b/code/modules/escape_menu/home_page.dm @@ -66,7 +66,7 @@ /* button_text = */ "Quit", /* offset = */ list(-311, 30), /* font_size = */ 24, - /* on_click_callback = */ CALLBACK(src, PROC_REF(home_quit)), + /* on_click_callback = */ CALLBACK(src, PROC_REF(quit_game_prompt)), ) ) @@ -197,12 +197,6 @@ /datum/escape_menu/proc/home_resume() qdel(src) -/datum/escape_menu/proc/home_quit() - var/confirmquit = tgui_alert(usr, "Are you sure you want to quit?", "Quit", list("Yes", "No")) - if(confirmquit != "Yes") - return - winset(usr, null, list("command"=".quit")) - /datum/escape_menu/proc/home_open_character_settings() client?.prefs.current_window = PREFERENCE_TAB_CHARACTER_PREFERENCES client?.prefs.update_static_data(client?.mob) diff --git a/code/modules/escape_menu/quit_game.dm b/code/modules/escape_menu/quit_game.dm new file mode 100644 index 00000000000..5acbfc95135 --- /dev/null +++ b/code/modules/escape_menu/quit_game.dm @@ -0,0 +1,42 @@ +/datum/escape_menu/proc/show_quit_game_page() + PRIVATE_PROC(TRUE) + + page_holder.give_screen_object( + new /atom/movable/screen/escape_menu/text/center( + null, + /* hud_owner = */ null, + /* escape_menu = */ src, + /* button_text = */ "Are you sure you \n wish to quit?", + /* offset = */ list(-160, -80), + /* font_size = */ 24, + ) + ) + + page_holder.give_screen_object( + new /atom/movable/screen/escape_menu/text/clickable/center( + null, + /* hud_owner = */ null, + /* escape_menu = */ src, + /* button_text = */ "Yes", + /* offset = */ list(-250, -60), + /* font_size = */ 24, + /* on_click_callback = */ CALLBACK(src, PROC_REF(quit_game)), + ) + ) + + page_holder.give_screen_object( + new /atom/movable/screen/escape_menu/text/clickable/center( + null, + /* hud_owner = */ null, + /* escape_menu = */ src, + /* button_text = */ "No", + /* offset = */ list(-250, 60), + /* font_size = */ 24, + /* on_click_callback = */ CALLBACK(src, PROC_REF(open_home_page)), + ) + ) + +/datum/escape_menu/proc/quit_game() + PRIVATE_PROC(TRUE) + + winset(usr, null, list("command"=".quit")) diff --git a/code/modules/escape_menu/screen_objects/text.dm b/code/modules/escape_menu/screen_objects/text.dm index 6e2c1423cfb..fe08bd021dc 100644 --- a/code/modules/escape_menu/screen_objects/text.dm +++ b/code/modules/escape_menu/screen_objects/text.dm @@ -3,6 +3,7 @@ maptext_width = 100 maptext_height = 8 + VAR_PROTECTED/list/screen_directions = list("NORTH", "WEST") VAR_PRIVATE/datum/escape_menu/escape_menu VAR_PRIVATE/button_text VAR_PRIVATE/font_size @@ -23,10 +24,11 @@ //this decides how far out you can 'click' on this, so it's important to keep it short. //yes even here, maptext can still embed links without using clickable subtype. src.maptext_width = round((max(length(button_text), 20) * (font_size / 2.25)), 1) - src.maptext_height = maptext_height * (font_size / 5) + src.maptext_height = (maptext_height * (font_size / 5)) + src.maptext_height *= length(splittext(button_text, "\n")) update_text() - screen_loc = "NORTH:[offset[1]],WEST:[offset[2]]" + screen_loc = "[screen_directions[1]]:[offset[1]],[screen_directions[2]]:[offset[2]]" /atom/movable/screen/escape_menu/text/proc/update_text() SHOULD_CALL_PARENT(TRUE) @@ -82,3 +84,9 @@ src.hovered = hovered update_text() + +/atom/movable/screen/escape_menu/text/clickable/center + screen_directions = list("NORTH", "CENTER") + +/atom/movable/screen/escape_menu/text/center + screen_directions = list("NORTH", "CENTER") diff --git a/tgstation.dme b/tgstation.dme index 4368fc80796..b75023926d7 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -4316,6 +4316,7 @@ #include "code\modules\escape_menu\escape_menu.dm" #include "code\modules\escape_menu\home_page.dm" #include "code\modules\escape_menu\leave_body.dm" +#include "code\modules\escape_menu\quit_game.dm" #include "code\modules\escape_menu\subsystem.dm" #include "code\modules\escape_menu\title.dm" #include "code\modules\escape_menu\screen_objects\admin_text.dm"