diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 2bb013f65e..7a6e313cd0 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -1,3 +1,4 @@ + //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" @@ -8,8 +9,9 @@ anchored = FALSE use_power = NO_POWER_USE - var/active = FALSE + var/active = 0 var/power_gen = 5000 + var/recent_fault = 0 var/power_output = 1 var/consumption = 0 var/base_icon = "portgen0" @@ -25,13 +27,8 @@ 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 TRUE + return 1 /obj/machinery/power/port_gen/proc/UseFuel() //Placeholder for fuel use. return @@ -42,38 +39,26 @@ /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) - if(!HasFuel() || !anchored) - TogglePower() - return - if(powernet) - add_avail(power_gen * power_output) + if(active && HasFuel() && !crit_fail && anchored && 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 @@ -93,8 +78,8 @@ /obj/machinery/power/port_gen/pacman/Initialize() . = ..() - var/obj/S = sheet_path - sheet_name = initial(S.name) + var/obj/sheet = new sheet_path(null) + sheet_name = sheet.name /obj/machinery/power/port_gen/pacman/Destroy() DropFuel() @@ -115,16 +100,14 @@ /obj/machinery/power/port_gen/pacman/examine(mob/user) ..() - 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]%.") + 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.") /obj/machinery/power/port_gen/pacman/HasFuel() if(sheets >= 1 / (time_per_sheet / power_output) - sheet_left) - return TRUE - return FALSE + return 1 + return 0 /obj/machinery/power/port_gen/pacman/DropFuel() if(sheets) @@ -160,11 +143,13 @@ if (current_heat > 300) overheat() qdel(src) + return /obj/machinery/power/port_gen/pacman/handleInactive() - current_heat = max(current_heat - 2, 0) - if(current_heat == 0) - STOP_PROCESSING(SSmachines, src) + + if (current_heat > 0) + current_heat = max(current_heat - 2, 0) + src.updateDialog() /obj/machinery/power/port_gen/pacman/proc/overheat() explosion(src.loc, 2, 5, 2, -1) @@ -179,21 +164,24 @@ to_chat(user, "You add [amount] sheets to the [src.name].") sheets += amount addstack.use(amount) + updateUsrDialog() return else if(!active) - if(O.tool_behaviour == TOOL_WRENCH) + + if(istype(O, /obj/item/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, 'sound/items/deconstruct.ogg', 50, 1) + playsound(src.loc, 'sound/items/deconstruct.ogg', 50, 1) return - else if(O.tool_behaviour == TOOL_SCREWDRIVER) + else if(istype(O, /obj/item/screwdriver)) panel_open = !panel_open O.play_tool_sound(src) if(panel_open) @@ -217,52 +205,60 @@ /obj/machinery/power/port_gen/pacman/attack_paw(mob/user) interact(user) -/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() +/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_data() - var/data = list() + 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") - 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) +/obj/machinery/power/port_gen/pacman/Topic(href, href_list) if(..()) return - switch(action) - if("toggle_power") - TogglePower() - . = TRUE - if("eject") + 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(!active) DropFuel() - . = TRUE - - if("lower_power") + src.updateUsrDialog() + if(href_list["action"] == "lower_power") if (power_output > 1) power_output-- - . = TRUE - - if("higher_power") + src.updateUsrDialog() + if (href_list["action"] == "higher_power") if (power_output < 4 || (obj_flags & EMAGGED)) power_output++ - . = TRUE + src.updateUsrDialog() + if (href_list["action"] == "close") + usr << browse(null, "window=port_gen") + usr.unset_machine() /obj/machinery/power/port_gen/pacman/super name = "\improper S.U.P.E.R.P.A.C.M.A.N.-type portable generator"