/obj/machinery/computer/launchpad
name = "launchpad control console"
desc = "Used to teleport objects to and from a launchpad."
icon_screen = "teleport"
icon_keyboard = "teleport_key"
circuit = /obj/item/circuitboard/computer/launchpad_console
var/selected_id
var/list/obj/machinery/launchpad/launchpads
var/maximum_pads = 4
// NO LOOKIE HERE
/obj/machinery/computer/launchpad/Initialize()
launchpads = list()
. = ..()
AddComponent(/datum/component/usb_port, list(
/obj/item/circuit_component/bluespace_launchpad,
))
/obj/item/circuit_component/bluespace_launchpad
display_name = "Bluespace Launchpad Console"
display_desc = "Teleports anything to and from any location on the station. Doesn't use actual GPS coordinates, but rather offsets from the launchpad itself."
circuit_flags = CIRCUIT_FLAG_OUTPUT_SIGNAL
var/list/obj/machinery/launchpad/launchpads
var/datum/port/input/launchpad_id
var/datum/port/input/x_pos
var/datum/port/input/y_pos
var/datum/port/input/send_trigger
var/datum/port/input/retrieve_trigger
var/datum/port/output/on_fail
var/obj/machinery/computer/launchpad/attached_console
/obj/item/circuit_component/bluespace_launchpad/Initialize()
. = ..()
launchpad_id = add_input_port("Launchpad ID", PORT_TYPE_NUMBER)
x_pos = add_input_port("X offset", PORT_TYPE_NUMBER)
y_pos = add_input_port("Y offset", PORT_TYPE_NUMBER)
send_trigger = add_input_port("Send", PORT_TYPE_SIGNAL)
retrieve_trigger = add_input_port("Retrieve", PORT_TYPE_SIGNAL)
on_fail = add_output_port("Failed", PORT_TYPE_SIGNAL)
/obj/item/circuit_component/bluespace_launchpad/Destroy()
launchpad_id = null
x_pos = null
y_pos = null
send_trigger = null
retrieve_trigger = null
on_fail = null
return ..()
/obj/item/circuit_component/bluespace_launchpad/register_usb_parent(atom/movable/parent)
. = ..()
if(istype(parent, /obj/machinery/computer/launchpad))
attached_console = parent
/obj/item/circuit_component/bluespace_launchpad/unregister_usb_parent(atom/movable/parent)
attached_console = null
return ..()
/obj/item/circuit_component/bluespace_launchpad/input_received(datum/port/input/port)
. = ..()
if(.)
return
if(!attached_console || length(launchpads) == 0)
on_fail.set_output(COMPONENT_SIGNAL)
return
var/current_launchpad = launchpad_id.input_value
if(isnull(current_launchpad))
return
var/obj/machinery/launchpad/the_pad = launchpads[current_launchpad]
if(isnull(the_pad))
on_fail.set_output(COMPONENT_SIGNAL)
return
var/x_dest = x_pos.input_value
if(isnull(x_dest))
return
var/y_dest = y_pos.input_value
if(isnull(y_dest))
return
the_pad.set_offset(x_dest, y_dest)
if(COMPONENT_TRIGGERED_BY(send_trigger, port))
teleport(usr, the_pad, TRUE) //DOES NOT WORK
if(COMPONENT_TRIGGERED_BY(retrieve_trigger, port))
teleport(usr, the_pad, FALSE) //DOES NOT WORK
// NO LOOKIE HERE
/obj/machinery/computer/launchpad/attack_paw(mob/user, list/modifiers)
to_chat(user, span_warning("You are too primitive to use this computer!"))
return
/obj/machinery/computer/launchpad/attackby(obj/item/W, mob/user, params)
if(W.tool_behaviour == TOOL_MULTITOOL)
if(!multitool_check_buffer(user, W))
return
var/obj/item/multitool/M = W
if(M.buffer && istype(M.buffer, /obj/machinery/launchpad))
if(LAZYLEN(launchpads) < maximum_pads)
launchpads |= M.buffer
M.buffer = null
to_chat(user, span_notice("You upload the data from the [W.name]'s buffer."))
else
to_chat(user, span_warning("[src] cannot handle any more connections!"))
else
return ..()
/obj/machinery/computer/launchpad/proc/pad_exists(number)
var/obj/machinery/launchpad/pad = launchpads[number]
if(QDELETED(pad))
return FALSE
return TRUE
/obj/machinery/computer/launchpad/proc/teleport(mob/user, obj/machinery/launchpad/pad, sending)
if(QDELETED(pad))
to_chat(user, span_warning("ERROR: Launchpad not responding. Check launchpad integrity."))
return
if(!pad.isAvailable())
to_chat(user, span_warning("ERROR: Launchpad not operative. Make sure the launchpad is ready and powered."))
return
pad.doteleport(user, sending)
/obj/machinery/computer/launchpad/proc/get_pad(number)
var/obj/machinery/launchpad/pad = launchpads[number]
return pad
/obj/machinery/computer/launchpad/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "LaunchpadConsole", name)
ui.open()
/obj/machinery/computer/launchpad/ui_data(mob/user)
var/list/data = list()
var/list/pad_list = list()
for(var/i in 1 to LAZYLEN(launchpads))
if(pad_exists(i))
var/obj/machinery/launchpad/pad = get_pad(i)
var/list/this_pad = list()
this_pad["name"] = pad.display_name
this_pad["id"] = i
if(pad.machine_stat & NOPOWER)
this_pad["inactive"] = TRUE
pad_list += list(this_pad)
else
launchpads -= get_pad(i)
data["launchpads"] = pad_list
data["selected_id"] = selected_id
if(selected_id)
var/obj/machinery/launchpad/current_pad = launchpads[selected_id]
data["x"] = current_pad.x_offset
data["y"] = current_pad.y_offset
data["pad_name"] = current_pad.display_name
data["range"] = current_pad.range
data["selected_pad"] = current_pad
if(QDELETED(current_pad) || (current_pad.machine_stat & NOPOWER))
data["pad_active"] = FALSE
return data
data["pad_active"] = TRUE
return data
/obj/machinery/computer/launchpad/ui_act(action, params)
. = ..()
if(.)
return
var/obj/machinery/launchpad/current_pad = launchpads[selected_id]
switch(action)
if("select_pad")
selected_id = text2num(params["id"])
. = TRUE
if("set_pos")
var/new_x = text2num(params["x"])
var/new_y = text2num(params["y"])
current_pad.set_offset(new_x, new_y)
. = TRUE
if("move_pos")
var/plus_x = text2num(params["x"])
var/plus_y = text2num(params["y"])
current_pad.set_offset(
x = current_pad.x_offset + plus_x,
y = current_pad.y_offset + plus_y
)
. = TRUE
if("rename")
. = TRUE
var/new_name = params["name"]
if(!new_name)
return
current_pad.display_name = new_name
if("remove")
if(usr && tgui_alert(usr, "Are you sure?", "Unlink Launchpad", list("I'm Sure", "Abort")) != "Abort")
launchpads -= current_pad
selected_id = null
. = TRUE
if("launch")
teleport(usr, current_pad, TRUE)
. = TRUE
if("pull")
teleport(usr, current_pad, FALSE)
. = TRUE
. = TRUE