mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-10 07:41:16 +01:00
21b4095dfd
Upstream 04/17/2026 fixes https://github.com/Bubberstation/Bubberstation/issues/5549 --------- Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: tgstation-ci[bot] <179393467+tgstation-ci[bot]@users.noreply.github.com> Co-authored-by: ArcaneMusic <41715314+ArcaneMusic@users.noreply.github.com> Co-authored-by: MrMelbert <51863163+MrMelbert@users.noreply.github.com> Co-authored-by: Rhials <28870487+Rhials@users.noreply.github.com> Co-authored-by: rageguy505 <54517726+rageguy505@users.noreply.github.com> Co-authored-by: LemonInTheDark <58055496+LemonInTheDark@users.noreply.github.com> Co-authored-by: John Willard <53777086+JohnFulpWillard@users.noreply.github.com> Co-authored-by: Aliceee2ch <160794176+Aliceee2ch@users.noreply.github.com> Co-authored-by: Time-Green <7501474+Time-Green@users.noreply.github.com> Co-authored-by: Tsar-Salat <62388554+Tsar-Salat@users.noreply.github.com> Co-authored-by: SmArtKar <44720187+SmArtKar@users.noreply.github.com> Co-authored-by: Maxipat <108554989+Maxipat112@users.noreply.github.com> Co-authored-by: SyncIt21 <110812394+SyncIt21@users.noreply.github.com> Co-authored-by: deltanedas <39013340+deltanedas@users.noreply.github.com> Co-authored-by: SimplyLogan <47579821+loganuk@users.noreply.github.com> Co-authored-by: loganuk <fakeemail123@aol.com> Co-authored-by: Leland Kemble <70413276+lelandkemble@users.noreply.github.com> Co-authored-by: FalloutFalcon <86381784+FalloutFalcon@users.noreply.github.com> Co-authored-by: Roxy <75404941+TealSeer@users.noreply.github.com> Co-authored-by: Lucy <lucy@absolucy.moe> Co-authored-by: siliconOpossum <138069572+siliconOpossum@users.noreply.github.com> Co-authored-by: Isratosh <Isratosh@hotmail.com> Co-authored-by: TheRyeGuyWhoWillNowDie <70169560+TheRyeGuyWhoWillNowDie@users.noreply.github.com> Co-authored-by: Neocloudy <88008002+Neocloudy@users.noreply.github.com> Co-authored-by: Alexander V. <volas@ya.ru> Co-authored-by: ElGitificador <168473461+ElGitificador@users.noreply.github.com> Co-authored-by: Twaticus <46540570+Twaticus@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Bloop <13398309+vinylspiders@users.noreply.github.com> Co-authored-by: Cameron Lennox <killer65311@gmail.com> Co-authored-by: Tim <timothymtorres@gmail.com> Co-authored-by: Iamgoofball <iamgoofball@gmail.com> Co-authored-by: Layzu666 <121319428+Layzu666@users.noreply.github.com> Co-authored-by: Arturlang <24881678+Arturlang@users.noreply.github.com> Co-authored-by: _0Steven <42909981+00-Steven@users.noreply.github.com> Co-authored-by: mrmanlikesbt <99309552+mrmanlikesbt@users.noreply.github.com> Co-authored-by: Ben10Omintrix <138636438+Ben10Omintrix@users.noreply.github.com> Co-authored-by: John F. Kennedy <54908920+MacaroniCritter@users.noreply.github.com> Co-authored-by: Cursor <102828457+theselfish@users.noreply.github.com> Co-authored-by: Josh <josh.adam.powell@gmail.com> Co-authored-by: Josh Powell <josh.powell@softwire.com> Co-authored-by: Yobrocharlie <Charliemiller5617@gmail.com> Co-authored-by: Hardly3D <66234359+Hardly3D@users.noreply.github.com> Co-authored-by: shayoki <96078776+shayoki@users.noreply.github.com> Co-authored-by: LT3 <83487515+lessthnthree@users.noreply.github.com>
91 lines
3.2 KiB
Plaintext
91 lines
3.2 KiB
Plaintext
/*
|
|
A derivative of radial menu which persists onscreen until closed and invokes a callback each time an element is clicked
|
|
*/
|
|
|
|
/atom/movable/screen/radial/persistent/center
|
|
name = "Close Menu"
|
|
icon_state = "radial_center"
|
|
|
|
/atom/movable/screen/radial/persistent/center/Click(location, control, params)
|
|
if(usr.client == parent.current_user)
|
|
parent.element_chosen(null, usr, params)
|
|
|
|
/atom/movable/screen/radial/persistent/center/MouseEntered(location, control, params)
|
|
. = ..()
|
|
icon_state = "radial_center_focus"
|
|
|
|
/atom/movable/screen/radial/persistent/center/MouseExited(location, control, params)
|
|
. = ..()
|
|
icon_state = "radial_center"
|
|
|
|
|
|
|
|
/datum/radial_menu/persistent
|
|
var/uniqueid
|
|
var/datum/callback/select_proc_callback
|
|
|
|
/datum/radial_menu/persistent/New()
|
|
close_button = new /atom/movable/screen/radial/persistent/center
|
|
close_button.set_parent(src)
|
|
|
|
|
|
/datum/radial_menu/persistent/element_chosen(choice_id, mob/user, params)
|
|
select_proc_callback.Invoke(choices_values[choice_id], params)
|
|
|
|
///Version of wait used by persistent radial menus.
|
|
/datum/radial_menu/persistent/wait()
|
|
while(!QDELETED(src))
|
|
if(custom_check_callback && next_check < world.time)
|
|
custom_check_callback.Invoke()
|
|
next_check = world.time + check_delay
|
|
stoplag(1)
|
|
|
|
/datum/radial_menu/persistent/proc/change_choices(list/newchoices, tooltips = FALSE, animate = FALSE, keep_same_page = FALSE)
|
|
if(!newchoices.len)
|
|
return
|
|
button_animation_flags = NONE
|
|
var/target_page = keep_same_page ? current_page : 1 //Stores the current_page value before it's set back to 1 on Reset()
|
|
Reset()
|
|
set_choices(newchoices,tooltips, set_page = target_page)
|
|
|
|
/datum/radial_menu/persistent/Destroy()
|
|
select_proc_callback = null
|
|
GLOB.radial_menus -= uniqueid
|
|
Reset()
|
|
hide()
|
|
. = ..()
|
|
|
|
/*
|
|
Creates a persistent radial menu and shows it to the user, anchored to anchor (or user if the anchor is currently in users screen).
|
|
Choices should be a list where list keys are movables or text used for element names and return value
|
|
and list values are movables/icons/images used for element icons
|
|
Select_proc is the proc to be called each time an element on the menu is clicked, and should accept the chosen element as its final argument
|
|
Clicking the center button will return a choice of null
|
|
*/
|
|
/proc/show_radial_menu_persistent(mob/user, atom/anchor, list/choices, datum/callback/select_proc, uniqueid, radius, tooltips = FALSE, radial_slice_icon = "radial_slice", datum/callback/custom_check)
|
|
if(!user || !anchor || !length(choices) || !select_proc)
|
|
return
|
|
if(!uniqueid)
|
|
uniqueid = "defmenu_[REF(user)]_[REF(anchor)]"
|
|
|
|
if(GLOB.radial_menus[uniqueid])
|
|
return
|
|
|
|
var/datum/radial_menu/persistent/menu = new
|
|
menu.uniqueid = uniqueid
|
|
GLOB.radial_menus[uniqueid] = menu
|
|
if(radius)
|
|
menu.radius = radius
|
|
menu.radial_slice_icon = radial_slice_icon
|
|
menu.select_proc_callback = select_proc
|
|
if(istype(custom_check))
|
|
menu.custom_check_callback = custom_check
|
|
menu.anchor = anchor
|
|
menu.check_screen_border(user) //Do what's needed to make it look good near borders or on hud
|
|
menu.set_choices(choices, tooltips)
|
|
menu.show_to(user)
|
|
if(menu.custom_check_callback)
|
|
menu.next_check = world.time + menu.check_delay
|
|
INVOKE_ASYNC(menu, TYPE_PROC_REF(/datum/radial_menu, wait))
|
|
return menu
|