Files
bbd6e42354 codebase reorganization of some folders (#5717)
moves & renames _onclick and _rendering to click and rendering and moves
_onclick/hud to rendering/legacy_hud
moves those to game folder

## Why?

because i don't think the root /code folder having them is correct
what the idea is is that:
- /code/game has 'whole game' stuff that should depend on as little else
as possible (can't avoid stuff like subsystems atmos and tgui obviously
so this is a loose suggestion); this is more aimed at that we shouldn't
have, say, a hypospray in here when hyposprays are logically part of the
reagents module since hyposprays don't work without reagents and are
primarily content for engaging with the reagents module
- /code/modules are standalone 'modules' that contain a tightly related
subset of the game, e.g. chemistry, maploader/management systems, etc.
- /code/controllers are core systems; many of them rely on / utilize
stuff from game/modules (duh) but they're here forever since they're
important
- /code/datums are mostly just helper datums;
object/item/whatever-specific datums should be stored in their given
files.

---------

Co-authored-by: silicons <no@you.cat>
2023-07-20 19:13:11 +01:00

76 lines
2.4 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)
/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.parent = src
/datum/radial_menu/persistent/element_chosen(choice_id,mob/user)
select_proc_callback.Invoke(choices_values[choice_id])
/datum/radial_menu/persistent/proc/change_choices(list/newchoices, tooltips)
if(!newchoices.len)
return
Reset()
set_choices(newchoices,tooltips)
/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)
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.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