mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-07-20 20:37:34 +01:00
Extension additions and multitool menu tweaks.
Relocates obj extension code to the extension file. Adds a support method, set_extension, to ensure that proper cleanup occurs in the case of multiple additions to the same extension type. The default multitool menu title is now much shorter. The cloning computer multitool menu now lists all connected cloning pods.
This commit is contained in:
@@ -1,7 +1,5 @@
|
||||
/datum/expansion
|
||||
|
||||
/datum/expansion
|
||||
var/atom/holder = null // The holder
|
||||
var/datum/holder = null // The holder
|
||||
|
||||
/datum/expansion/New(var/atom/holder)
|
||||
if(!istype(holder))
|
||||
@@ -22,3 +20,18 @@
|
||||
if(CanUseTopic(usr) != STATUS_INTERACTIVE)
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj
|
||||
var/list/datum/expansion/expansions = list()
|
||||
|
||||
/obj/Destroy()
|
||||
if(expansions)
|
||||
for(var/expansion in expansions)
|
||||
qdel(expansions[expansion])
|
||||
expansions.Cut()
|
||||
return ..()
|
||||
|
||||
/obj/proc/set_expansion(var/type, var/instance)
|
||||
if(expansions[type])
|
||||
qdel(expansions[type])
|
||||
expansions[type] = instance
|
||||
|
||||
@@ -1,5 +1,9 @@
|
||||
/datum/expansion/multitool/cryo/get_interact_window(var/obj/item/device/multitool/M, var/mob/user)
|
||||
return buffer(M)
|
||||
. += buffer(M)
|
||||
. += "<HR><b>Connected Cloning Pods:</b><br>"
|
||||
var/obj/machinery/computer/cloning/C = holder
|
||||
for(var/atom/cloning_pod in C.pods)
|
||||
. += "[cloning_pod.name]<br>"
|
||||
|
||||
/datum/expansion/multitool/cryo/receive_buffer(var/obj/item/device/multitool/M, var/atom/buffer, var/mob/user)
|
||||
var/obj/machinery/clonepod/P = buffer
|
||||
|
||||
@@ -17,9 +17,9 @@
|
||||
|
||||
var/html = get_interact_window(M, user)
|
||||
if(html)
|
||||
var/datum/browser/popup = new(usr, "multitool", holder.name, window_x, window_y)
|
||||
var/datum/browser/popup = new(usr, "multitool", "Multitool Menu", window_x, window_y)
|
||||
popup.set_content(html)
|
||||
popup.set_title_image(user.browse_rsc_icon(holder.icon, holder.icon_state))
|
||||
popup.set_title_image(user.browse_rsc_icon(M.icon, M.icon_state))
|
||||
popup.open()
|
||||
else
|
||||
close_window(usr)
|
||||
@@ -32,8 +32,9 @@
|
||||
|
||||
/datum/expansion/multitool/proc/buffer(var/obj/item/device/multitool/multitool)
|
||||
. += "<b>Buffer Memory:</b><br>"
|
||||
if(multitool.buffer_name)
|
||||
. += "[multitool.buffer_name] <a href='?src=\ref[src];send=\ref[multitool.buffer_object]'>Send</a> <a href='?src=\ref[src];purge=1'>Purge</a><br>"
|
||||
var/buffer_name = multitool.get_buffer_name()
|
||||
if(buffer_name)
|
||||
. += "[buffer_name] <a href='?src=\ref[src];send=\ref[multitool.buffer_object]'>Send</a> <a href='?src=\ref[src];purge=1'>Purge</a><br>"
|
||||
else
|
||||
. += "No connection stored in the buffer."
|
||||
|
||||
@@ -78,8 +79,10 @@
|
||||
return MT_NOACTION
|
||||
|
||||
/datum/expansion/multitool/proc/send_buffer(var/obj/item/device/multitool/M, var/atom/buffer, var/mob/user)
|
||||
if(M.get_buffer() == buffer)
|
||||
if(M.get_buffer() == buffer && buffer)
|
||||
receive_buffer(M, buffer, user)
|
||||
else if(!buffer)
|
||||
user << "<span class='warning'>Unable to acquire data from the buffered object. Purging from memory.</span>"
|
||||
return MT_REFRESH
|
||||
|
||||
/datum/expansion/multitool/proc/receive_buffer(var/obj/item/device/multitool/M, var/atom/buffer, var/mob/user)
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
|
||||
RefreshParts()
|
||||
update_icon()
|
||||
expansions[/datum/expansion/multitool] = new/datum/expansion/multitool/store(src)
|
||||
set_expansion(/datum/expansion/multitool, new/datum/expansion/multitool/store(src))
|
||||
|
||||
/obj/machinery/clonepod/Destroy()
|
||||
if(connected)
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
/obj/machinery/computer/cloning/initialize()
|
||||
..()
|
||||
expansions[/datum/expansion/multitool] = new/datum/expansion/multitool/cryo(src, list(/proc/is_operable))
|
||||
set_expansion(/datum/expansion/multitool, new/datum/expansion/multitool/cryo(src, list(/proc/is_operable)))
|
||||
updatemodules()
|
||||
|
||||
/obj/machinery/computer/cloning/Destroy()
|
||||
|
||||
@@ -24,12 +24,19 @@
|
||||
var/atom/buffer_object
|
||||
|
||||
/obj/item/device/multitool/proc/get_buffer(var/typepath)
|
||||
// Update the buffer name only when someone fetches the buffer.
|
||||
// Only allow clearing the buffer name when someone fetches the buffer.
|
||||
// Means you cannot be sure the source hasn't been destroyed until the very moment it's needed.
|
||||
buffer_name = buffer_object ? buffer_object.name : null
|
||||
get_buffer_name(TRUE)
|
||||
if(buffer_object && (!typepath || istype(buffer_object, typepath)))
|
||||
return buffer_object
|
||||
|
||||
/obj/item/device/multitool/proc/get_buffer_name(var/null_name_if_missing = FALSE)
|
||||
if(buffer_object)
|
||||
buffer_name = buffer_object.name
|
||||
else if(null_name_if_missing)
|
||||
buffer_name = null
|
||||
return buffer_name
|
||||
|
||||
/obj/item/device/multitool/proc/set_buffer(var/atom/buffer)
|
||||
if(!buffer || istype(buffer))
|
||||
buffer_name = buffer ? buffer.name : null
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
/obj/item/weapon/circuitboard/stationalert/New()
|
||||
alarm_handlers = new()
|
||||
expansions[/datum/expansion/multitool] = new /datum/expansion/multitool/circuitboards/stationalert(src)
|
||||
set_expansion(/datum/expansion/multitool, new/datum/expansion/multitool/circuitboards/stationalert(src))
|
||||
..()
|
||||
|
||||
/obj/item/weapon/circuitboard/stationalert/construct(var/obj/machinery/computer/station_alert/SA)
|
||||
|
||||
@@ -14,14 +14,8 @@
|
||||
var/force = 0
|
||||
var/armor_penetration = 0
|
||||
|
||||
var/list/datum/expansion/expansions = list()
|
||||
|
||||
/obj/Destroy()
|
||||
processing_objects -= src
|
||||
for(var/expansion in expansions)
|
||||
qdel(expansions[expansion])
|
||||
if(expansions)
|
||||
expansions.Cut()
|
||||
return ..()
|
||||
|
||||
/obj/Topic(href, href_list, var/datum/topic_state/state = default_state)
|
||||
|
||||
Reference in New Issue
Block a user