diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index 7a6e313cd0..2bb013f65e 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -1,4 +1,3 @@
-
//Baseline portable generator. Has all the default handling. Not intended to be used on it's own (since it generates unlimited power).
/obj/machinery/power/port_gen
name = "portable generator"
@@ -9,9 +8,8 @@
anchored = FALSE
use_power = NO_POWER_USE
- var/active = 0
+ var/active = FALSE
var/power_gen = 5000
- var/recent_fault = 0
var/power_output = 1
var/consumption = 0
var/base_icon = "portgen0"
@@ -27,8 +25,13 @@
QDEL_NULL(soundloop)
return ..()
+/obj/machinery/power/port_gen/connect_to_network()
+ if(!anchored)
+ return FALSE
+ . = ..()
+
/obj/machinery/power/port_gen/proc/HasFuel() //Placeholder for fuel check.
- return 1
+ return TRUE
/obj/machinery/power/port_gen/proc/UseFuel() //Placeholder for fuel use.
return
@@ -39,26 +42,38 @@
/obj/machinery/power/port_gen/proc/handleInactive()
return
+/obj/machinery/power/port_gen/proc/TogglePower()
+ if(active)
+ active = FALSE
+ update_icon()
+ soundloop.stop()
+ else if(HasFuel())
+ active = TRUE
+ START_PROCESSING(SSmachines, src)
+ update_icon()
+ soundloop.start()
+
/obj/machinery/power/port_gen/update_icon()
icon_state = "[base_icon]_[active]"
/obj/machinery/power/port_gen/process()
- if(active && HasFuel() && !crit_fail && anchored && powernet)
- add_avail(power_gen * power_output)
+ if(active)
+ if(!HasFuel() || !anchored)
+ TogglePower()
+ return
+ if(powernet)
+ add_avail(power_gen * power_output)
UseFuel()
- src.updateDialog()
- soundloop.start()
-
else
- active = 0
handleInactive()
- update_icon()
- soundloop.stop()
/obj/machinery/power/port_gen/examine(mob/user)
..()
to_chat(user, "It is[!active?"n't":""] running.")
+/////////////////
+// P.A.C.M.A.N //
+/////////////////
/obj/machinery/power/port_gen/pacman
name = "\improper P.A.C.M.A.N.-type portable generator"
circuit = /obj/item/circuitboard/machine/pacman
@@ -78,8 +93,8 @@
/obj/machinery/power/port_gen/pacman/Initialize()
. = ..()
- var/obj/sheet = new sheet_path(null)
- sheet_name = sheet.name
+ var/obj/S = sheet_path
+ sheet_name = initial(S.name)
/obj/machinery/power/port_gen/pacman/Destroy()
DropFuel()
@@ -100,14 +115,16 @@
/obj/machinery/power/port_gen/pacman/examine(mob/user)
..()
- to_chat(user, "The generator has [sheets] units of [sheet_name] fuel left, producing [power_gen] per cycle.")
- if(crit_fail)
- to_chat(user, "The generator seems to have broken down.")
+ to_chat(user, "The generator has [sheets] units of [sheet_name] fuel left, producing [DisplayPower(power_gen)] per cycle.")
+ if(anchored)
+ to_chat(user, "It is anchored to the ground.")
+ if(in_range(user, src) || isobserver(user))
+ to_chat(user, "The status display reads: Fuel efficiency increased by [(consumption*100)-100]%.")
/obj/machinery/power/port_gen/pacman/HasFuel()
if(sheets >= 1 / (time_per_sheet / power_output) - sheet_left)
- return 1
- return 0
+ return TRUE
+ return FALSE
/obj/machinery/power/port_gen/pacman/DropFuel()
if(sheets)
@@ -143,13 +160,11 @@
if (current_heat > 300)
overheat()
qdel(src)
- return
/obj/machinery/power/port_gen/pacman/handleInactive()
-
- if (current_heat > 0)
- current_heat = max(current_heat - 2, 0)
- src.updateDialog()
+ current_heat = max(current_heat - 2, 0)
+ if(current_heat == 0)
+ STOP_PROCESSING(SSmachines, src)
/obj/machinery/power/port_gen/pacman/proc/overheat()
explosion(src.loc, 2, 5, 2, -1)
@@ -164,24 +179,21 @@
to_chat(user, "You add [amount] sheets to the [src.name].")
sheets += amount
addstack.use(amount)
- updateUsrDialog()
return
else if(!active)
-
- if(istype(O, /obj/item/wrench))
-
+ if(O.tool_behaviour == TOOL_WRENCH)
if(!anchored && !isinspace())
+ anchored = TRUE
connect_to_network()
to_chat(user, "You secure the generator to the floor.")
- anchored = TRUE
else if(anchored)
+ anchored = FALSE
disconnect_from_network()
to_chat(user, "You unsecure the generator from the floor.")
- anchored = FALSE
- playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1)
+ playsound(src, 'sound/items/deconstruct.ogg', 50, 1)
return
- else if(istype(O, /obj/item/screwdriver))
+ else if(O.tool_behaviour == TOOL_SCREWDRIVER)
panel_open = !panel_open
O.play_tool_sound(src)
if(panel_open)
@@ -205,60 +217,52 @@
/obj/machinery/power/port_gen/pacman/attack_paw(mob/user)
interact(user)
-/obj/machinery/power/port_gen/pacman/ui_interact(mob/user)
- . = ..()
- if (get_dist(src, user) > 1 )
- if(!isAI(user))
- user.unset_machine()
- user << browse(null, "window=port_gen")
- return
+/obj/machinery/power/port_gen/pacman/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
+ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
+ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
+ if(!ui)
+ ui = new(user, src, ui_key, "portable_generator", name, 450, 340, master_ui, state)
+ ui.open()
- var/dat = text("[name]
")
- if (active)
- dat += text("Generator: On
")
- else
- dat += text("Generator: Off
")
- dat += text("[capitalize(sheet_name)]: [sheets] - Eject
")
- var/stack_percent = round(sheet_left * 100, 1)
- dat += text("Current stack: [stack_percent]%
")
- dat += text("Power output: - [power_gen * power_output] +
")
- dat += text("Power current: [(powernet == null ? "Unconnected" : "[DisplayPower(avail())]")]
")
- dat += text("Heat: [current_heat]
")
- dat += "
Close"
- user << browse(dat, "window=port_gen")
- onclose(user, "port_gen")
+/obj/machinery/power/port_gen/pacman/ui_data()
+ var/data = list()
-/obj/machinery/power/port_gen/pacman/Topic(href, href_list)
+ data["active"] = active
+ data["sheet_name"] = capitalize(sheet_name)
+ data["sheets"] = sheets
+ data["stack_percent"] = round(sheet_left * 100, 0.1)
+
+ data["anchored"] = anchored
+ data["connected"] = (powernet == null ? 0 : 1)
+ data["ready_to_boot"] = anchored && HasFuel()
+ data["power_generated"] = DisplayPower(power_gen)
+ data["power_output"] = DisplayPower(power_gen * power_output)
+ data["power_available"] = (powernet == null ? 0 : DisplayPower(avail()))
+ data["current_heat"] = current_heat
+ . = data
+
+/obj/machinery/power/port_gen/pacman/ui_act(action, params)
if(..())
return
+ switch(action)
+ if("toggle_power")
+ TogglePower()
+ . = TRUE
- src.add_fingerprint(usr)
- if(href_list["action"])
- if(href_list["action"] == "enable")
- if(!active && HasFuel() && !crit_fail)
- active = 1
- src.updateUsrDialog()
- update_icon()
- if(href_list["action"] == "disable")
- if (active)
- active = 0
- src.updateUsrDialog()
- update_icon()
- if(href_list["action"] == "eject")
+ if("eject")
if(!active)
DropFuel()
- src.updateUsrDialog()
- if(href_list["action"] == "lower_power")
+ . = TRUE
+
+ if("lower_power")
if (power_output > 1)
power_output--
- src.updateUsrDialog()
- if (href_list["action"] == "higher_power")
+ . = TRUE
+
+ if("higher_power")
if (power_output < 4 || (obj_flags & EMAGGED))
power_output++
- src.updateUsrDialog()
- if (href_list["action"] == "close")
- usr << browse(null, "window=port_gen")
- usr.unset_machine()
+ . = TRUE
/obj/machinery/power/port_gen/pacman/super
name = "\improper S.U.P.E.R.P.A.C.M.A.N.-type portable generator"