Can now connect cryo pods and computers with each other using the new multitool methodology.

Also cleans up Destroys().
This commit is contained in:
PsiOmegaDelta
2015-11-17 22:58:10 +01:00
parent 6370705c02
commit 8a4250ddcd
15 changed files with 214 additions and 23 deletions
+10
View File
@@ -12,3 +12,13 @@
/datum/expansion/Destroy()
holder = null
return ..()
/datum/expansion/CanUseTopic(var/mob/user)
return holder && user && !user.incapacitated() ? STATUS_INTERACTIVE : STATUS_CLOSE
/datum/expansion/Topic()
if(..())
return 1
if(CanUseTopic(usr) != STATUS_INTERACTIVE)
return 1
return 0
@@ -0,0 +1,3 @@
#define MT_NOACTION 0
#define MT_REFRESH 1
#define MT_CLOSE 2
@@ -0,0 +1,24 @@
/datum/expansion/multitool/cryo/get_interact_window(var/obj/item/device/multitool/M, var/mob/user)
return buffer(M)
/datum/expansion/multitool/cryo/receive_buffer(var/obj/item/device/multitool/M, var/atom/buffer, var/mob/user)
var/obj/machinery/clonepod/P = M.get_buffer(/obj/machinery/clonepod)
var/obj/machinery/computer/cloning/C = holder
if(!P)
user << "<span class='warning'>No valid connection data in \the [M] buffer.</span>"
return MT_NOACTION
var/is_connected = (P in C.pods)
if(!is_connected)
if(C.connect_pod(P))
user << "<span class='notice'>You connect \the [P] to \the [C].</span>"
else
user << "<span class='warning'>You failed to connect \the [P] to \the [C].</span>"
return MT_REFRESH
if(C.release_pod(P))
user << "<span class='notice'>You disconnect \the [P] from \the [C].</span>"
else
user << "<span class='notice'>You failed to disconnect \the [P] from \the [C].</span>"
return MT_REFRESH
+68 -1
View File
@@ -1,2 +1,69 @@
/datum/expansion/multitool/proc/interact()
/datum/expansion/multitool
var/window_x = 370
var/window_y = 470
/datum/expansion/multitool/proc/interact(var/obj/item/device/multitool/M, var/mob/user)
if(!CanUseTopic(user))
return
var/html = get_interact_window(M, user)
if(html)
var/datum/browser/popup = new(usr, "multitool", holder.name, window_x, window_y)
popup.set_content(html)
popup.set_title_image(user.browse_rsc_icon(holder.icon, holder.icon_state))
popup.open()
else
close_window(usr)
/datum/expansion/multitool/proc/get_interact_window(var/obj/item/device/multitool/M, var/mob/user)
return
/datum/expansion/multitool/proc/close_window(var/mob/user)
user << browse(null, "window=multitool")
/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>"
else
. += "No connection stored in the buffer."
/datum/expansion/multitool/CanUseTopic(var/mob/user)
. = ..()
if(. == STATUS_CLOSE)
return
return user.get_multitool() && user.Adjacent(holder) ? STATUS_INTERACTIVE : STATUS_CLOSE
/datum/expansion/multitool/Topic(href, href_list)
if(..())
close_window(usr)
return 1
var/mob/user = usr
var/obj/item/device/multitool/M = user.get_multitool()
if(href_list["send"])
var/atom/buffer = locate(href_list["send"])
. = send_buffer(M, buffer, user)
else if(href_list["purge"])
M.set_buffer(null)
. = MT_REFRESH
else
. = OnTopic(href, href_list, user)
switch(.)
if(MT_REFRESH)
interact(M, user)
if(MT_CLOSE)
close_window(user)
return 1
/datum/expansion/multitool/proc/OnTopic(href, href_list, usr)
return
/datum/expansion/multitool/proc/send_buffer(var/obj/item/device/multitool/M, var/atom/buffer, var/mob/user)
if(M.buffer_object == buffer)
receive_buffer(M, buffer, user)
/datum/expansion/multitool/proc/receive_buffer(var/obj/item/device/multitool/M, var/atom/buffer, var/mob/user)
return
+22
View File
@@ -0,0 +1,22 @@
/datum/expansion/multitool/store
var/can_load_connection
/datum/expansion/multitool/store/New(var/atom/holder, var/can_load_connection)
..()
src.can_load_connection = can_load_connection
/datum/expansion/multitool/store/CanUseTopic()
if(can_load_connection && !call(src, can_load_connection)())
return STATUS_CLOSE
return ..()
/datum/expansion/multitool/store/interact(var/obj/item/device/multitool/M, var/mob/user)
if(!CanUseTopic(user))
return
if(M.get_buffer() == holder)
M.set_buffer(null)
user << "<span class='warning'>You purge the connection data of \the [holder] from \the [M].</span>"
else
M.set_buffer(holder)
user << "<span class='notice'>You load connection data from \the [holder] to \the [M].</span>"
@@ -0,0 +1,3 @@
#undef MT_NOACTION
#undef MT_REFRESH
#undef MT_CLOSE