SmallBlue

Code

Jul 16th, 2021 (edited)
351
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.46 KB | None | 0 0
  1. /obj/machinery/computer/launchpad
  2. name = "launchpad control console"
  3. desc = "Used to teleport objects to and from a launchpad."
  4. icon_screen = "teleport"
  5. icon_keyboard = "teleport_key"
  6. circuit = /obj/item/circuitboard/computer/launchpad_console
  7.  
  8. var/selected_id
  9. var/list/obj/machinery/launchpad/launchpads
  10. var/maximum_pads = 4
  11.  
  12. // NO LOOKIE HERE
  13.  
  14. /obj/machinery/computer/launchpad/Initialize()
  15. launchpads = list()
  16. . = ..()
  17. AddComponent(/datum/component/usb_port, list(
  18. /obj/item/circuit_component/bluespace_launchpad,
  19. ))
  20.  
  21. /obj/item/circuit_component/bluespace_launchpad
  22. display_name = "Bluespace Launchpad Console"
  23. 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."
  24. circuit_flags = CIRCUIT_FLAG_OUTPUT_SIGNAL
  25.  
  26. var/list/obj/machinery/launchpad/launchpads
  27.  
  28. var/datum/port/input/launchpad_id
  29.  
  30. var/datum/port/input/x_pos
  31.  
  32. var/datum/port/input/y_pos
  33.  
  34. var/datum/port/input/send_trigger
  35.  
  36. var/datum/port/input/retrieve_trigger
  37.  
  38. var/datum/port/output/on_fail
  39.  
  40. var/obj/machinery/computer/launchpad/attached_console
  41.  
  42. /obj/item/circuit_component/bluespace_launchpad/Initialize()
  43. . = ..()
  44. launchpad_id = add_input_port("Launchpad ID", PORT_TYPE_NUMBER)
  45. x_pos = add_input_port("X offset", PORT_TYPE_NUMBER)
  46. y_pos = add_input_port("Y offset", PORT_TYPE_NUMBER)
  47. send_trigger = add_input_port("Send", PORT_TYPE_SIGNAL)
  48. retrieve_trigger = add_input_port("Retrieve", PORT_TYPE_SIGNAL)
  49. on_fail = add_output_port("Failed", PORT_TYPE_SIGNAL)
  50.  
  51. /obj/item/circuit_component/bluespace_launchpad/Destroy()
  52. launchpad_id = null
  53. x_pos = null
  54. y_pos = null
  55. send_trigger = null
  56. retrieve_trigger = null
  57. on_fail = null
  58. return ..()
  59.  
  60. /obj/item/circuit_component/bluespace_launchpad/register_usb_parent(atom/movable/parent)
  61. . = ..()
  62. if(istype(parent, /obj/machinery/computer/launchpad))
  63. attached_console = parent
  64.  
  65. /obj/item/circuit_component/bluespace_launchpad/unregister_usb_parent(atom/movable/parent)
  66. attached_console = null
  67. return ..()
  68.  
  69. /obj/item/circuit_component/bluespace_launchpad/input_received(datum/port/input/port)
  70. . = ..()
  71. if(.)
  72. return
  73.  
  74. if(!attached_console || length(launchpads) == 0)
  75. on_fail.set_output(COMPONENT_SIGNAL)
  76. return
  77.  
  78. var/current_launchpad = launchpad_id.input_value
  79. if(isnull(current_launchpad))
  80. return
  81.  
  82. var/obj/machinery/launchpad/the_pad = launchpads[current_launchpad]
  83. if(isnull(the_pad))
  84. on_fail.set_output(COMPONENT_SIGNAL)
  85. return
  86.  
  87. var/x_dest = x_pos.input_value
  88. if(isnull(x_dest))
  89. return
  90.  
  91. var/y_dest = y_pos.input_value
  92. if(isnull(y_dest))
  93. return
  94.  
  95. the_pad.set_offset(x_dest, y_dest)
  96.  
  97. if(COMPONENT_TRIGGERED_BY(send_trigger, port))
  98. teleport(usr, the_pad, TRUE) //DOES NOT WORK
  99.  
  100. if(COMPONENT_TRIGGERED_BY(retrieve_trigger, port))
  101. teleport(usr, the_pad, FALSE) //DOES NOT WORK
  102.  
  103.  
  104. // NO LOOKIE HERE
  105.  
  106. /obj/machinery/computer/launchpad/attack_paw(mob/user, list/modifiers)
  107. to_chat(user, span_warning("You are too primitive to use this computer!"))
  108. return
  109.  
  110. /obj/machinery/computer/launchpad/attackby(obj/item/W, mob/user, params)
  111. if(W.tool_behaviour == TOOL_MULTITOOL)
  112. if(!multitool_check_buffer(user, W))
  113. return
  114. var/obj/item/multitool/M = W
  115. if(M.buffer && istype(M.buffer, /obj/machinery/launchpad))
  116. if(LAZYLEN(launchpads) < maximum_pads)
  117. launchpads |= M.buffer
  118. M.buffer = null
  119. to_chat(user, span_notice("You upload the data from the [W.name]'s buffer."))
  120. else
  121. to_chat(user, span_warning("[src] cannot handle any more connections!"))
  122. else
  123. return ..()
  124.  
  125. /obj/machinery/computer/launchpad/proc/pad_exists(number)
  126. var/obj/machinery/launchpad/pad = launchpads[number]
  127. if(QDELETED(pad))
  128. return FALSE
  129. return TRUE
  130.  
  131. /obj/machinery/computer/launchpad/proc/teleport(mob/user, obj/machinery/launchpad/pad, sending)
  132. if(QDELETED(pad))
  133. to_chat(user, span_warning("ERROR: Launchpad not responding. Check launchpad integrity."))
  134. return
  135. if(!pad.isAvailable())
  136. to_chat(user, span_warning("ERROR: Launchpad not operative. Make sure the launchpad is ready and powered."))
  137. return
  138. pad.doteleport(user, sending)
  139.  
  140. /obj/machinery/computer/launchpad/proc/get_pad(number)
  141. var/obj/machinery/launchpad/pad = launchpads[number]
  142. return pad
  143.  
  144. /obj/machinery/computer/launchpad/ui_interact(mob/user, datum/tgui/ui)
  145. ui = SStgui.try_update_ui(user, src, ui)
  146. if(!ui)
  147. ui = new(user, src, "LaunchpadConsole", name)
  148. ui.open()
  149.  
  150. /obj/machinery/computer/launchpad/ui_data(mob/user)
  151. var/list/data = list()
  152. var/list/pad_list = list()
  153. for(var/i in 1 to LAZYLEN(launchpads))
  154. if(pad_exists(i))
  155. var/obj/machinery/launchpad/pad = get_pad(i)
  156. var/list/this_pad = list()
  157. this_pad["name"] = pad.display_name
  158. this_pad["id"] = i
  159. if(pad.machine_stat & NOPOWER)
  160. this_pad["inactive"] = TRUE
  161. pad_list += list(this_pad)
  162. else
  163. launchpads -= get_pad(i)
  164. data["launchpads"] = pad_list
  165. data["selected_id"] = selected_id
  166. if(selected_id)
  167. var/obj/machinery/launchpad/current_pad = launchpads[selected_id]
  168. data["x"] = current_pad.x_offset
  169. data["y"] = current_pad.y_offset
  170. data["pad_name"] = current_pad.display_name
  171. data["range"] = current_pad.range
  172. data["selected_pad"] = current_pad
  173. if(QDELETED(current_pad) || (current_pad.machine_stat & NOPOWER))
  174. data["pad_active"] = FALSE
  175. return data
  176. data["pad_active"] = TRUE
  177.  
  178. return data
  179.  
  180. /obj/machinery/computer/launchpad/ui_act(action, params)
  181. . = ..()
  182. if(.)
  183. return
  184. var/obj/machinery/launchpad/current_pad = launchpads[selected_id]
  185. switch(action)
  186. if("select_pad")
  187. selected_id = text2num(params["id"])
  188. . = TRUE
  189. if("set_pos")
  190. var/new_x = text2num(params["x"])
  191. var/new_y = text2num(params["y"])
  192. current_pad.set_offset(new_x, new_y)
  193. . = TRUE
  194. if("move_pos")
  195. var/plus_x = text2num(params["x"])
  196. var/plus_y = text2num(params["y"])
  197. current_pad.set_offset(
  198. x = current_pad.x_offset + plus_x,
  199. y = current_pad.y_offset + plus_y
  200. )
  201. . = TRUE
  202. if("rename")
  203. . = TRUE
  204. var/new_name = params["name"]
  205. if(!new_name)
  206. return
  207. current_pad.display_name = new_name
  208. if("remove")
  209. if(usr && tgui_alert(usr, "Are you sure?", "Unlink Launchpad", list("I'm Sure", "Abort")) != "Abort")
  210. launchpads -= current_pad
  211. selected_id = null
  212. . = TRUE
  213. if("launch")
  214. teleport(usr, current_pad, TRUE)
  215. . = TRUE
  216.  
  217. if("pull")
  218. teleport(usr, current_pad, FALSE)
  219. . = TRUE
  220. . = TRUE
  221.  
Add Comment
Please, Sign In to add comment