Merge pull request #15990 from SandPoot/lobby-collapse
Collapsible lobby buttons
This commit is contained in:
+135
-22
@@ -1,12 +1,20 @@
|
||||
#define SHUTTER_MOVEMENT_DURATION 0.4 SECONDS
|
||||
#define SHUTTER_WAIT_DURATION 0.2 SECONDS
|
||||
|
||||
/datum/hud/new_player
|
||||
///Whether the menu is currently on the client's screen or not
|
||||
var/menu_hud_status = TRUE
|
||||
|
||||
/datum/hud/new_player/proc/populate_buttons(mob/dead/new_player/owner)
|
||||
var/list/buttons = subtypesof(/atom/movable/screen/lobby)
|
||||
for(var/button_type in buttons)
|
||||
var/atom/movable/screen/lobby/lobbyscreen = new button_type()
|
||||
var/atom/movable/screen/lobby/lobbyscreen = new button_type(our_hud = src)
|
||||
lobbyscreen.SlowInit()
|
||||
lobbyscreen.hud = src
|
||||
static_inventory += lobbyscreen
|
||||
if(!lobbyscreen.always_shown)
|
||||
lobbyscreen.RegisterSignal(src, COMSIG_HUD_LOBBY_COLLAPSED, TYPE_PROC_REF(/atom/movable/screen/lobby, collapse_button))
|
||||
lobbyscreen.RegisterSignal(src, COMSIG_HUD_LOBBY_EXPANDED, TYPE_PROC_REF(/atom/movable/screen/lobby, expand_button))
|
||||
if(istype(lobbyscreen, /atom/movable/screen/lobby/button))
|
||||
var/atom/movable/screen/lobby/button/lobby_button = lobbyscreen
|
||||
lobby_button.owner = REF(owner)
|
||||
@@ -14,15 +22,35 @@
|
||||
|
||||
/atom/movable/screen/lobby
|
||||
plane = SPLASHSCREEN_PLANE
|
||||
layer = LOBBY_BUTTON_LAYER
|
||||
layer = LOBBY_MENU_LAYER
|
||||
screen_loc = "TOP,CENTER"
|
||||
///Whether this HUD element can be hidden from the client's "screen" (moved off-screen) or not
|
||||
var/always_shown = FALSE
|
||||
|
||||
/atom/movable/screen/lobby/New(loc, datum/hud/our_hud, ...)
|
||||
if(our_hud)
|
||||
hud = our_hud
|
||||
return ..()
|
||||
|
||||
/// Run sleeping actions after initialize
|
||||
/atom/movable/screen/lobby/proc/SlowInit()
|
||||
return
|
||||
|
||||
///Animates moving the button off-screen
|
||||
/atom/movable/screen/lobby/proc/collapse_button()
|
||||
SIGNAL_HANDLER
|
||||
//wait for the shutter to come down
|
||||
animate(src, transform = transform, time = SHUTTER_MOVEMENT_DURATION + SHUTTER_WAIT_DURATION)
|
||||
//then pull the buttons up with the shutter
|
||||
animate(transform = transform.Translate(x = 0, y = 146), time = SHUTTER_MOVEMENT_DURATION, easing = CUBIC_EASING|EASE_IN)
|
||||
|
||||
///Animates moving the button back into place
|
||||
/atom/movable/screen/lobby/proc/expand_button()
|
||||
SIGNAL_HANDLER
|
||||
//the buttons are off-screen, so we sync them up to come down with the shutter
|
||||
animate(src, transform = matrix(), time = SHUTTER_MOVEMENT_DURATION, easing = CUBIC_EASING|EASE_OUT)
|
||||
|
||||
/atom/movable/screen/lobby/background
|
||||
layer = LOBBY_BACKGROUND_LAYER
|
||||
icon = 'icons/hud/lobby/background.dmi'
|
||||
icon_state = "background"
|
||||
screen_loc = "TOP,CENTER:-61"
|
||||
@@ -73,6 +101,7 @@
|
||||
return
|
||||
icon_state = base_icon_state
|
||||
|
||||
///Updates the button's status: TRUE to enable interaction with the button, FALSE to disable
|
||||
/atom/movable/screen/lobby/button/proc/set_button_status(status)
|
||||
if(status == enabled)
|
||||
return FALSE
|
||||
@@ -82,6 +111,7 @@
|
||||
|
||||
///Prefs menu
|
||||
/atom/movable/screen/lobby/button/character_setup
|
||||
name = "View Character Setup"
|
||||
screen_loc = "TOP:-70,CENTER:-54"
|
||||
icon = 'icons/hud/lobby/character_setup.dmi'
|
||||
icon_state = "character_setup"
|
||||
@@ -96,10 +126,12 @@
|
||||
|
||||
///Button that appears before the game has started
|
||||
/atom/movable/screen/lobby/button/ready
|
||||
name = "Toggle Readiness"
|
||||
screen_loc = "TOP:-8,CENTER:-65"
|
||||
icon = 'icons/hud/lobby/ready.dmi'
|
||||
icon_state = "not_ready"
|
||||
base_icon_state = "not_ready"
|
||||
///Whether we are readied up for the round or not
|
||||
var/ready = FALSE
|
||||
|
||||
/atom/movable/screen/lobby/button/ready/Initialize(mapload)
|
||||
@@ -141,6 +173,7 @@
|
||||
|
||||
///Shown when the game has started
|
||||
/atom/movable/screen/lobby/button/join
|
||||
name = "Join Game"
|
||||
screen_loc = "TOP:-13,CENTER:-58"
|
||||
icon = 'icons/hud/lobby/join.dmi'
|
||||
icon_state = "" //Default to not visible
|
||||
@@ -204,6 +237,7 @@
|
||||
RegisterSignal(SSticker, COMSIG_TICKER_ENTER_SETTING_UP, .proc/show_join_button)
|
||||
|
||||
/atom/movable/screen/lobby/button/observe
|
||||
name = "Observe"
|
||||
screen_loc = "TOP:-40,CENTER:-54"
|
||||
icon = 'icons/hud/lobby/observe.dmi'
|
||||
icon_state = "observe_disabled"
|
||||
@@ -230,13 +264,18 @@
|
||||
set_button_status(TRUE)
|
||||
UnregisterSignal(SSticker, COMSIG_TICKER_ENTER_PREGAME, .proc/enable_observing)
|
||||
|
||||
/atom/movable/screen/lobby/button/settings
|
||||
//Subtype the bottom buttons away so the collapse/expand shutter goes behind them
|
||||
/atom/movable/screen/lobby/button/bottom
|
||||
layer = LOBBY_BOTTOM_BUTTON_LAYER
|
||||
icon = 'icons/hud/lobby/bottom_buttons.dmi'
|
||||
|
||||
/atom/movable/screen/lobby/button/bottom/settings
|
||||
name = "View Game Preferences"
|
||||
icon_state = "settings"
|
||||
base_icon_state = "settings"
|
||||
screen_loc = "TOP:-122,CENTER:+30"
|
||||
screen_loc = "TOP:-122,CENTER:+29"
|
||||
|
||||
/atom/movable/screen/lobby/button/settings/Click(location, control, params)
|
||||
/atom/movable/screen/lobby/button/bottom/settings/Click(location, control, params)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
@@ -244,39 +283,38 @@
|
||||
hud.mymob.client.prefs.current_tab = GAME_PREFERENCES_TAB
|
||||
hud.mymob.client.prefs.ShowChoices(hud.mymob)
|
||||
|
||||
/atom/movable/screen/lobby/button/changelog_button
|
||||
icon = 'icons/hud/lobby/bottom_buttons.dmi'
|
||||
/atom/movable/screen/lobby/button/bottom/changelog_button
|
||||
name = "View Changelog"
|
||||
icon_state = "changelog"
|
||||
base_icon_state = "changelog"
|
||||
screen_loc ="TOP:-122,CENTER:+58"
|
||||
screen_loc ="TOP:-122,CENTER:+57"
|
||||
|
||||
/atom/movable/screen/lobby/button/bottom/changelog_button/Click(location, control, params)
|
||||
. = ..()
|
||||
usr.client?.changelog()
|
||||
|
||||
/atom/movable/screen/lobby/button/crew_manifest
|
||||
icon = 'icons/hud/lobby/bottom_buttons.dmi'
|
||||
/atom/movable/screen/lobby/button/bottom/crew_manifest
|
||||
name = "View Crew Manifest"
|
||||
icon_state = "crew_manifest"
|
||||
base_icon_state = "crew_manifest"
|
||||
screen_loc = "TOP:-122,CENTER:+2"
|
||||
|
||||
/atom/movable/screen/lobby/button/crew_manifest/Click(location, control, params)
|
||||
/atom/movable/screen/lobby/button/bottom/crew_manifest/Click(location, control, params)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
var/mob/dead/new_player/new_player = hud.mymob
|
||||
new_player.ViewManifest()
|
||||
|
||||
/atom/movable/screen/lobby/button/changelog_button/Click(location, control, params)
|
||||
. = ..()
|
||||
usr.client?.changelog()
|
||||
|
||||
/atom/movable/screen/lobby/button/poll
|
||||
icon = 'icons/hud/lobby/bottom_buttons.dmi'
|
||||
/atom/movable/screen/lobby/button/bottom/poll
|
||||
name = "View Available Polls"
|
||||
icon_state = "poll"
|
||||
base_icon_state = "poll"
|
||||
screen_loc = "TOP:-122,CENTER:-26"
|
||||
|
||||
///Whether the button should have a New Poll notification overlay
|
||||
var/new_poll = FALSE
|
||||
|
||||
/atom/movable/screen/lobby/button/poll/SlowInit(mapload)
|
||||
/atom/movable/screen/lobby/button/bottom/poll/SlowInit(mapload)
|
||||
. = ..()
|
||||
if(!usr)
|
||||
return
|
||||
@@ -320,14 +358,89 @@
|
||||
set_button_status(FALSE)
|
||||
return
|
||||
|
||||
/atom/movable/screen/lobby/button/poll/update_overlays()
|
||||
/atom/movable/screen/lobby/button/bottom/poll/update_overlays()
|
||||
. = ..()
|
||||
if(new_poll)
|
||||
. += mutable_appearance('icons/hud/lobby/poll_overlay.dmi', "new_poll")
|
||||
|
||||
/atom/movable/screen/lobby/button/poll/Click(location, control, params)
|
||||
/atom/movable/screen/lobby/button/bottom/poll/Click(location, control, params)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
var/mob/dead/new_player/new_player = hud.mymob
|
||||
new_player.handle_player_polling()
|
||||
|
||||
/atom/movable/screen/lobby/button/collapse
|
||||
name = "Collapse Lobby Menu"
|
||||
icon = 'icons/hud/lobby/collapse_expand.dmi'
|
||||
icon_state = "collapse"
|
||||
base_icon_state = "collapse"
|
||||
layer = LOBBY_BELOW_MENU_LAYER
|
||||
screen_loc = "TOP:-82,CENTER:-54"
|
||||
always_shown = TRUE
|
||||
|
||||
/atom/movable/screen/lobby/button/collapse/Click(location, control, params)
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
|
||||
if(!istype(hud, /datum/hud/new_player))
|
||||
return
|
||||
var/datum/hud/new_player/our_hud = hud
|
||||
base_icon_state = our_hud.menu_hud_status ? "expand" : "collapse"
|
||||
name = "[our_hud.menu_hud_status ? "Expand" : "Collapse"] Lobby Menu"
|
||||
set_button_status(FALSE)
|
||||
|
||||
//get the shutter object used by our hud
|
||||
var/atom/movable/screen/lobby/shutter/menu_shutter = locate(/atom/movable/screen/lobby/shutter) in hud.static_inventory
|
||||
|
||||
//animate the shutter
|
||||
menu_shutter.setup_shutter_animation()
|
||||
//animate bottom buttons' movement
|
||||
if(our_hud.menu_hud_status)
|
||||
collapse_menu()
|
||||
else
|
||||
expand_menu()
|
||||
our_hud.menu_hud_status = !our_hud.menu_hud_status
|
||||
|
||||
//re-enable clicking the button when the shutter animation finishes
|
||||
//we use sleep here so it can work during game setup, as addtimer would not work until the game would finish setting up
|
||||
sleep(2 * SHUTTER_MOVEMENT_DURATION + SHUTTER_WAIT_DURATION)
|
||||
set_button_status(TRUE)
|
||||
|
||||
///Moves the button to the top of the screen, leaving only the screen part in view
|
||||
///Sends a signal on the hud for the menu hud elements to listen to
|
||||
/atom/movable/screen/lobby/button/collapse/proc/collapse_menu()
|
||||
SEND_SIGNAL(hud, COMSIG_HUD_LOBBY_COLLAPSED)
|
||||
//wait for the shutter to come down
|
||||
animate(src, transform = transform, time = SHUTTER_MOVEMENT_DURATION + SHUTTER_WAIT_DURATION)
|
||||
//then pull the button up with the shutter and leave it on the edge of the screen
|
||||
animate(transform = transform.Translate(x = 0, y = 134), time = SHUTTER_MOVEMENT_DURATION, easing = CUBIC_EASING|EASE_IN)
|
||||
|
||||
///Extends the button back to its usual spot
|
||||
///Sends a signal on the hud for the menu hud elements to listen to
|
||||
/atom/movable/screen/lobby/button/collapse/proc/expand_menu()
|
||||
SEND_SIGNAL(hud, COMSIG_HUD_LOBBY_EXPANDED)
|
||||
animate(src, transform = matrix(), time = SHUTTER_MOVEMENT_DURATION, easing = CUBIC_EASING|EASE_OUT)
|
||||
|
||||
/atom/movable/screen/lobby/shutter
|
||||
icon = 'icons/hud/lobby/shutter.dmi'
|
||||
icon_state = "shutter"
|
||||
base_icon_state = "shutter"
|
||||
screen_loc = "TOP:+143,CENTER:-73" //"home" position is off-screen
|
||||
layer = LOBBY_SHUTTER_LAYER
|
||||
always_shown = TRUE
|
||||
|
||||
///Sets up the shutter pulling down and up. It's the same animation for both collapsing and expanding the menu.
|
||||
/atom/movable/screen/lobby/shutter/proc/setup_shutter_animation()
|
||||
//bring down the shutter
|
||||
animate(src, transform = transform.Translate(x = 0, y = -143), time = SHUTTER_MOVEMENT_DURATION, easing = CUBIC_EASING|EASE_OUT)
|
||||
|
||||
//wait a little bit before bringing the shutter up
|
||||
animate(transform = transform, time = SHUTTER_WAIT_DURATION)
|
||||
|
||||
//pull the shutter back off-screen
|
||||
animate(transform = matrix(), time = SHUTTER_MOVEMENT_DURATION, easing = CUBIC_EASING|EASE_IN)
|
||||
|
||||
#undef SHUTTER_MOVEMENT_DURATION
|
||||
#undef SHUTTER_WAIT_DURATION
|
||||
|
||||
Reference in New Issue
Block a user