Files
CHOMPStation2/code/modules/overmap/ships/computers/engine_control.dm
2022-06-19 03:59:14 +00:00

103 lines
3.2 KiB
Plaintext

//Engine control and monitoring console
/obj/machinery/computer/ship/engines
name = "engine control console"
icon_keyboard = "tech_key"
icon_screen = "engines"
circuit = /obj/item/weapon/circuitboard/engine
// fancy sprite
/obj/machinery/computer/ship/engines/adv
icon_keyboard = null
icon_state = "adv_engines"
icon_screen = "adv_engines_screen"
light_color = "#05A6A8"
/obj/machinery/computer/ship/engines/tgui_interact(mob/user, datum/tgui/ui)
if(!linked)
display_reconnect_dialog(user, "ship control systems")
return
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "OvermapEngines", "[linked.name] Engines Control") // 390, 530
ui.open()
/obj/machinery/computer/ship/engines/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state)
var/list/data = list()
data["global_state"] = linked.engines_state
data["global_limit"] = round(linked.thrust_limit*100)
var/total_thrust = 0
var/list/enginfo = list()
for(var/datum/ship_engine/E in linked.engines)
var/list/rdata = list()
rdata["eng_type"] = E.name
rdata["eng_on"] = E.is_on()
rdata["eng_thrust"] = E.get_thrust()
rdata["eng_thrust_limiter"] = round(E.get_thrust_limit()*100)
var/list/status = E.get_status()
if(!islist(status))
log_runtime(EXCEPTION("Warning, ship [E.name] (\ref[E]) for [linked.name] returned a non-list status!"))
status = list("Error")
rdata["eng_status"] = status
rdata["eng_reference"] = "\ref[E]"
total_thrust += E.get_thrust()
enginfo.Add(list(rdata))
data["engines_info"] = enginfo
data["total_thrust"] = total_thrust
return data
/obj/machinery/computer/ship/engines/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state)
if(..())
return TRUE
switch(action)
if("global_toggle")
linked.engines_state = !linked.engines_state
for(var/datum/ship_engine/E in linked.engines)
if(linked.engines_state == !E.is_on())
E.toggle()
. = TRUE
if("set_global_limit")
var/newlim = tgui_input_number(usr, "Input new thrust limit (0..100%)", "Thrust limit", linked.thrust_limit*100, 100, 0)
if(tgui_status(usr, state) != STATUS_INTERACTIVE)
return FALSE
linked.thrust_limit = clamp(newlim/100, 0, 1)
for(var/datum/ship_engine/E in linked.engines)
E.set_thrust_limit(linked.thrust_limit)
. = TRUE
if("global_limit")
linked.thrust_limit = clamp(linked.thrust_limit + text2num(params["global_limit"]), 0, 1)
for(var/datum/ship_engine/E in linked.engines)
E.set_thrust_limit(linked.thrust_limit)
. = TRUE
if("set_limit")
var/datum/ship_engine/E = locate(params["engine"])
var/newlim = tgui_input_number(usr, "Input new thrust limit (0..100)", "Thrust limit", E.get_thrust_limit(), 100, 0)
if(tgui_status(usr, state) != STATUS_INTERACTIVE)
return FALSE
var/limit = clamp(newlim/100, 0, 1)
if(istype(E))
E.set_thrust_limit(limit)
. = TRUE
if("limit")
var/datum/ship_engine/E = locate(params["engine"])
var/limit = clamp(E.get_thrust_limit() + text2num(params["limit"]), 0, 1)
if(istype(E))
E.set_thrust_limit(limit)
. = TRUE
if("toggle_engine")
var/datum/ship_engine/E = locate(params["engine"])
if(istype(E))
E.toggle()
. = TRUE
if(. && !issilicon(usr))
playsound(src, "terminal_type", 50, 1)