Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /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
Add Comment
Please, Sign In to add comment