mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-08-28 23:58:31 +01:00
Merge pull request #7035 from VOREStation/vplk-shuttle-construction
[PORT] Ship/Shuttle Console Construction
This commit is contained in:
@@ -84,6 +84,7 @@ SUBSYSTEM_DEF(shuttles)
|
||||
if(shuttle)
|
||||
shuttles_made += shuttle
|
||||
hook_up_motherships(shuttles_made)
|
||||
hook_up_shuttle_objects(shuttles_made)
|
||||
shuttles_to_initialize = null
|
||||
|
||||
/datum/controller/subsystem/shuttles/proc/initialize_sectors()
|
||||
@@ -165,6 +166,11 @@ SUBSYSTEM_DEF(shuttles)
|
||||
else
|
||||
error("Shuttle [S] was unable to find mothership [mothership]!")
|
||||
|
||||
// Let shuttles scan their owned areas for objects they want to configure (Called after mothership hookup)
|
||||
/datum/controller/subsystem/shuttles/proc/hook_up_shuttle_objects(shuttles_list)
|
||||
for(var/datum/shuttle/S in shuttles_list)
|
||||
S.populate_shuttle_objects()
|
||||
|
||||
// Admin command to halt/resume overmap
|
||||
/datum/controller/subsystem/shuttles/proc/toggle_overmap(new_setting)
|
||||
if(overmap_halted == new_setting)
|
||||
|
||||
@@ -177,6 +177,30 @@
|
||||
build_path = /obj/machinery/computer/aifixer
|
||||
origin_tech = list(TECH_DATA = 3, TECH_BIO = 2)
|
||||
|
||||
|
||||
/obj/item/weapon/circuitboard/helm
|
||||
name = T_BOARD("helm control console")
|
||||
build_path = /obj/machinery/computer/ship/helm
|
||||
|
||||
/obj/item/weapon/circuitboard/engine
|
||||
name = T_BOARD("engine control console")
|
||||
build_path = /obj/machinery/computer/ship/engines
|
||||
|
||||
/obj/item/weapon/circuitboard/nav
|
||||
name = T_BOARD("navigation console")
|
||||
build_path = /obj/machinery/computer/ship/navigation
|
||||
|
||||
/obj/item/weapon/circuitboard/nav/tele
|
||||
name = T_BOARD("navigation telescreen")
|
||||
build_path = /obj/machinery/computer/ship/navigation/telescreen
|
||||
|
||||
/obj/item/weapon/circuitboard/sensors
|
||||
name = T_BOARD("sensors console")
|
||||
build_path = /obj/machinery/computer/ship/sensors
|
||||
|
||||
|
||||
|
||||
|
||||
/obj/item/weapon/circuitboard/area_atmos
|
||||
name = T_BOARD("area air control console")
|
||||
build_path = /obj/machinery/computer/area_atmos
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
#ifndef T_BOARD
|
||||
#error T_BOARD macro is not defined but we need it!
|
||||
#endif
|
||||
|
||||
//
|
||||
// Shuttle control console. Board tries to auto-link the computer if built on a shuttle.
|
||||
//
|
||||
/obj/item/weapon/circuitboard/shuttle_console
|
||||
origin_tech = list(TECH_DATA = 3)
|
||||
var/shuttle_category = null // Shuttle datum's category must exactly equal this to auto-detect
|
||||
var/shuttle_tag = null // If set, link constructed console to this shuttle. If null, auto-detect.
|
||||
|
||||
/obj/item/weapon/circuitboard/shuttle_console/deconstruct(obj/machinery/computer/shuttle_control/M)
|
||||
shuttle_tag = M.shuttle_tag
|
||||
if(shuttle_tag)
|
||||
name = T_BOARD("[shuttle_tag] control console")
|
||||
|
||||
// Try to auto-link the shuttle computer if it is constructed on a shuttle (and not pre-programmed)
|
||||
/obj/item/weapon/circuitboard/shuttle_console/construct(obj/machinery/computer/shuttle_control/M)
|
||||
if(!shuttle_tag)
|
||||
shuttle_tag = auto_detect_shuttle(M) // We don't have a preset tag, so lets try to auto-link.
|
||||
if(shuttle_tag && M.set_shuttle_tag(shuttle_tag))
|
||||
log_and_message_admins("[key_name_admin(usr)] built a [M] for [shuttle_tag] at [ADMIN_COORDJMP(M)]")
|
||||
M.ping("[M] auto-links with shuttle [shuttle_tag]")
|
||||
|
||||
// Return shuttle_tag of shuttle of current area
|
||||
/obj/item/weapon/circuitboard/shuttle_console/proc/auto_detect_shuttle(obj/machinery/computer/shuttle_control/M)
|
||||
var/area/A = get_area(M)
|
||||
if(!A || !(A in SSshuttles.shuttle_areas))
|
||||
return // Definately not on a shuttle
|
||||
for(var/shuttle_name in SSshuttles.shuttles)
|
||||
var/datum/shuttle/S = SSshuttles.shuttles[shuttle_name]
|
||||
if(A in S.find_childfree_areas())
|
||||
// Found the owning shuttle! Return it if its a valid type
|
||||
return (S.category == shuttle_category) ? S.name : null
|
||||
|
||||
// Overmap shuttle console.
|
||||
/obj/item/weapon/circuitboard/shuttle_console/explore
|
||||
name = T_BOARD("long range shuttle control console")
|
||||
build_path = /obj/machinery/computer/shuttle_control/explore
|
||||
origin_tech = list(TECH_DATA = 3, TECH_BLUESPACE = 4)
|
||||
shuttle_category = /datum/shuttle/autodock/overmap
|
||||
|
||||
// Multi-shuttle console
|
||||
/obj/item/weapon/circuitboard/shuttle_console/multi
|
||||
name = T_BOARD("multi-route shuttle control console")
|
||||
build_path = /obj/machinery/computer/shuttle_control/multi
|
||||
shuttle_category = /datum/shuttle/autodock/multi
|
||||
|
||||
// Basic "ferry" shuttle console
|
||||
/obj/item/weapon/circuitboard/shuttle_console/ferry
|
||||
name = T_BOARD("basic shuttle control console")
|
||||
build_path = /obj/machinery/computer/shuttle_control
|
||||
shuttle_category = /datum/shuttle/autodock/ferry
|
||||
@@ -4,6 +4,7 @@
|
||||
name = "engine control console"
|
||||
icon_keyboard = "tech_key"
|
||||
icon_screen = "engines"
|
||||
circuit = /obj/item/weapon/circuitboard/engine
|
||||
var/display_state = "status"
|
||||
|
||||
/obj/machinery/computer/ship/engines/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
|
||||
@@ -19,6 +19,7 @@ GLOBAL_LIST_EMPTY(all_waypoints)
|
||||
icon_keyboard = "teleport_key"
|
||||
icon_screen = "helm"
|
||||
light_color = "#7faaff"
|
||||
circuit = /obj/item/weapon/circuitboard/helm
|
||||
core_skill = /datum/skill/pilot
|
||||
var/autopilot = 0
|
||||
var/list/known_sectors = list()
|
||||
@@ -225,6 +226,7 @@ GLOBAL_LIST_EMPTY(all_waypoints)
|
||||
name = "navigation console"
|
||||
icon_keyboard = "generic_key"
|
||||
icon_screen = "helm"
|
||||
circuit = /obj/item/weapon/circuitboard/nav
|
||||
|
||||
/obj/machinery/computer/ship/navigation/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
if(!linked)
|
||||
@@ -273,6 +275,7 @@ GLOBAL_LIST_EMPTY(all_waypoints)
|
||||
icon_state = "tele_nav"
|
||||
icon_keyboard = null
|
||||
icon_screen = null
|
||||
circuit = /obj/item/weapon/circuitboard/nav/tele
|
||||
density = 0
|
||||
|
||||
/obj/machinery/computer/ship/navigation/telescreen/update_icon()
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
icon_keyboard = "teleport_key"
|
||||
icon_screen = "teleport"
|
||||
light_color = "#77fff8"
|
||||
circuit = /obj/item/weapon/circuitboard/sensors
|
||||
extra_view = 4
|
||||
var/obj/machinery/shipsensors/sensors
|
||||
|
||||
|
||||
@@ -16,11 +16,14 @@ somewhere on that shuttle. Subtypes of these can be then used to perform ship ov
|
||||
linked = sector
|
||||
return 1
|
||||
|
||||
/obj/machinery/computer/ship/proc/sync_linked()
|
||||
/obj/machinery/computer/ship/proc/sync_linked(var/user = null)
|
||||
var/obj/effect/overmap/visitable/ship/sector = map_sectors["[z]"]
|
||||
if(!sector)
|
||||
return
|
||||
return attempt_hook_up_recursive(sector)
|
||||
. = attempt_hook_up_recursive(sector)
|
||||
if(. && linked && user)
|
||||
to_chat(user, "<span class='notice'>[src] reconnected to [linked]</span>")
|
||||
user << browse(null, "window=[src]") // close reconnect dialog
|
||||
|
||||
/obj/machinery/computer/ship/proc/attempt_hook_up_recursive(obj/effect/overmap/visitable/ship/sector)
|
||||
if(attempt_hook_up(sector))
|
||||
@@ -43,7 +46,7 @@ somewhere on that shuttle. Subtypes of these can be then used to perform ship ov
|
||||
if(..())
|
||||
return TOPIC_HANDLED
|
||||
if(href_list["sync"])
|
||||
sync_linked()
|
||||
sync_linked(user)
|
||||
return TOPIC_REFRESH
|
||||
if(href_list["close"])
|
||||
unlook(user)
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
//Shuttle controller computer for shuttles going between sectors
|
||||
/obj/machinery/computer/shuttle_control/explore
|
||||
name = "general shuttle control console"
|
||||
circuit = /obj/item/weapon/circuitboard/shuttle_console/explore
|
||||
ui_template = "shuttle_control_console_exploration.tmpl"
|
||||
|
||||
/obj/machinery/computer/shuttle_control/explore/get_ui_data(var/datum/shuttle/autodock/overmap/shuttle)
|
||||
|
||||
@@ -74,6 +74,16 @@
|
||||
SSsupply.shuttle = null
|
||||
. = ..()
|
||||
|
||||
// This is called after all shuttles have been initialized by SSshuttles, but before sectors have been initialized.
|
||||
// Importantly for subtypes, all shuttles will have been initialized and mothershuttles hooked up by the time this is called.
|
||||
/datum/shuttle/proc/populate_shuttle_objects()
|
||||
// Scan for shuttle consoles on them needing auto-config.
|
||||
for(var/area/A in find_childfree_areas()) // Let sub-shuttles handle their areas, only do our own.
|
||||
for(var/obj/machinery/computer/shuttle_control/SC in A)
|
||||
if(!SC.shuttle_tag)
|
||||
SC.set_shuttle_tag(src.name)
|
||||
return
|
||||
|
||||
// This creates a graphical warning to where the shuttle is about to land, in approximately five seconds.
|
||||
/datum/shuttle/proc/create_warning_effect(var/obj/effect/shuttle_landmark/destination)
|
||||
destination.create_warning_effect(src)
|
||||
@@ -345,6 +355,15 @@
|
||||
qdel(P)
|
||||
SSmachines.setup_powernets_for_cables(cables)
|
||||
|
||||
// Adjust areas of mothershuttle so it doesn't try and bring us with it if it jumps while we aren't on it.
|
||||
if(mothershuttle)
|
||||
var/datum/shuttle/MS = SSshuttles.shuttles[mothershuttle]
|
||||
if(MS)
|
||||
if(current_location.landmark_tag == motherdock)
|
||||
MS.shuttle_area |= shuttle_area // We are now on mothershuttle! Bring us along!
|
||||
else
|
||||
MS.shuttle_area -= shuttle_area // We have left mothershuttle! Don't bring us along!
|
||||
|
||||
return
|
||||
|
||||
//returns 1 if the shuttle has a valid arrive time
|
||||
|
||||
@@ -126,6 +126,13 @@
|
||||
ui.open()
|
||||
ui.set_auto_update(1)
|
||||
|
||||
// Call to set the linked shuttle tag; override to add behaviour to shuttle tag changes
|
||||
/obj/machinery/computer/shuttle_control/proc/set_shuttle_tag(var/new_shuttle_tag)
|
||||
if(shuttle_tag == new_shuttle_tag)
|
||||
return FALSE
|
||||
shuttle_tag = new_shuttle_tag
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/computer/shuttle_control/emag_act(var/remaining_charges, var/mob/user)
|
||||
if (!hacked)
|
||||
req_access = list()
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
/obj/machinery/computer/shuttle_control/multi
|
||||
circuit = /obj/item/weapon/circuitboard/shuttle_console/multi
|
||||
ui_template = "shuttle_control_console_multi.tmpl"
|
||||
|
||||
/obj/machinery/computer/shuttle_control/multi/get_ui_data(var/datum/shuttle/autodock/multi/shuttle)
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
author: Leshana
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "Added circuitboards for ship Helm, Sensors, Navigation, and Engine Control consoles."
|
||||
- rscadd: "Added circuitboards for Exploration (Overmap) Shuttle Console."
|
||||
- tweak: "Mappers no longer need to varedit shuttle_tag on shuttle consoles."
|
||||
@@ -1056,6 +1056,7 @@
|
||||
#include "code\game\objects\items\weapons\circuitboards\computer\camera_monitor.dm"
|
||||
#include "code\game\objects\items\weapons\circuitboards\computer\computer.dm"
|
||||
#include "code\game\objects\items\weapons\circuitboards\computer\research.dm"
|
||||
#include "code\game\objects\items\weapons\circuitboards\computer\shuttle.dm"
|
||||
#include "code\game\objects\items\weapons\circuitboards\computer\supply.dm"
|
||||
#include "code\game\objects\items\weapons\circuitboards\computer\telecomms.dm"
|
||||
#include "code\game\objects\items\weapons\circuitboards\machinery\biogenerator.dm"
|
||||
|
||||
Reference in New Issue
Block a user