mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-23 23:54:45 +00:00
* Painting improvement: Added a palette component for spraycans and palette items. (#65577) * Painting improvement: Added a palette component for spraycans and palettes. * Painting improvement: Added a palette component for spraycans and palette items. Co-authored-by: Ghom <42542238+Ghommie@users.noreply.github.com>
80 lines
2.7 KiB
Plaintext
80 lines
2.7 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)
|
|
|
|
|
|
/datum/radial_menu/persistent/proc/change_choices(list/newchoices, tooltips = FALSE, animate = FALSE, keep_same_page = FALSE)
|
|
if(!newchoices.len)
|
|
return
|
|
entry_animation = FALSE
|
|
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()
|
|
QDEL_NULL(select_proc_callback)
|
|
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")
|
|
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
|
|
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)
|
|
return menu
|
|
|