diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index 46c92271308..f60a37be397 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -2,9 +2,6 @@ name = "Mech Bay Recharge Station" icon = 'icons/mecha/mech_bay.dmi' icon_state = "recharge_floor" - var/obj/machinery/mech_bay_recharge_port/recharge_port - var/obj/machinery/computer/mech_bay_power_console/recharge_console - var/obj/mecha/recharging_mecha = null /turf/simulated/floor/mech_bay_recharge_floor/airless icon_state = "recharge_floor_asteroid" @@ -12,63 +9,6 @@ nitrogen = 0.01 temperature = TCMB -/turf/simulated/floor/mech_bay_recharge_floor/Destroy() - if(recharge_console && recharge_console.recharge_floor == src) - recharge_console.recharge_floor = null - recharge_console = null - if(recharge_port && recharge_port.recharge_floor == src) - recharge_port.recharge_floor = null - recharge_port = null - recharging_mecha = null - return ..() - -/turf/simulated/floor/mech_bay_recharge_floor/Entered(var/obj/mecha/mecha, atom/OL, ignoreRest = 0) - . = ..() - if(istype(mecha)) - mecha.occupant_message("Initializing power control devices.") - init_devices() - if(recharge_console && recharge_port) - recharging_mecha = mecha - recharge_console.mecha_in(mecha) - return - else if(!recharge_console) - mecha.occupant_message("Control console not found. Terminating.") - else if(!recharge_port) - mecha.occupant_message("Power port not found. Terminating.") - return - -/turf/simulated/floor/mech_bay_recharge_floor/Exited(atom) - . = ..() - if(atom == recharging_mecha) - recharging_mecha = null - if(recharge_console) - recharge_console.mecha_out() - return - -/turf/simulated/floor/mech_bay_recharge_floor/proc/init_devices() - if(!recharge_console) - recharge_console = locate() in range(1,src) - if(!recharge_port) - recharge_port = locate() in get_step(src, WEST) - - if(recharge_console) - recharge_console.recharge_floor = src - if(recharge_port) - recharge_console.recharge_port = recharge_port - if(recharge_port) - recharge_port.recharge_floor = src - if(recharge_console) - recharge_port.recharge_console = recharge_console - return - -/* // temporary fix for broken icon until somebody gets around to make these player-buildable -/turf/simulated/floor/mech_bay_recharge_floor/attackby(obj/item/C as obj, mob/user as mob) - ..() - if(floor_type) - icon_state = "recharge_floor" - else - icon_state = "support_lattice" */ - /obj/machinery/mech_bay_recharge_port name = "Mech Bay Power Port" density = 1 @@ -76,9 +16,11 @@ dir = EAST icon = 'icons/mecha/mech_bay.dmi' icon_state = "recharge_port" - var/turf/simulated/floor/mech_bay_recharge_floor/recharge_floor + var/obj/mecha/recharging_mecha var/obj/machinery/computer/mech_bay_power_console/recharge_console - var/datum/global_iterator/mech_bay_recharger/pr_recharger + var/max_charge = 50 + var/on = 0 + var/turf/recharging_turf = null /obj/machinery/mech_bay_recharge_port/New() ..() @@ -91,8 +33,7 @@ component_parts += new /obj/item/weapon/stock_parts/capacitor(null) component_parts += new /obj/item/stack/cable_coil(null, 1) RefreshParts() - - pr_recharger = new /datum/global_iterator/mech_bay_recharger(null,0) + recharging_turf = get_step(loc, dir) /obj/machinery/mech_bay_recharge_port/upgraded/New() ..() @@ -105,97 +46,53 @@ component_parts += new /obj/item/weapon/stock_parts/capacitor/super(null) component_parts += new /obj/item/stack/cable_coil(null, 1) RefreshParts() + recharging_turf = get_step(loc, dir) /obj/machinery/mech_bay_recharge_port/RefreshParts() var/MC for(var/obj/item/weapon/stock_parts/capacitor/C in component_parts) MC += C.rating - if(pr_recharger) - pr_recharger.max_charge = MC * 10 - if(recharge_console) - recharge_console.voltage = MC * 10 - -/obj/machinery/mech_bay_recharge_port/Destroy() - qdel(pr_recharger) - pr_recharger = null - recharge_console.recharge_port = null - recharge_floor.recharge_port = null - return ..() + max_charge = MC * 25 /obj/machinery/mech_bay_recharge_port/attackby(obj/item/I, mob/user, params) if(default_deconstruction_screwdriver(user, "recharge_port-o", "recharge_port", I)) return if(default_change_direction_wrench(user, I)) + recharging_turf = get_step(loc, dir) return if(exchange_parts(user, I)) return - default_deconstruction_crowbar(I) + if(default_deconstruction_crowbar(I)) + return + return ..() -/obj/machinery/mech_bay_recharge_port/proc/start_charge(var/obj/mecha/recharging_mecha) - if(stat&(NOPOWER|BROKEN)) - recharging_mecha.occupant_message("Power port not responding. Terminating.") - return 0 - else - if(recharging_mecha.cell) - recharging_mecha.occupant_message("Now charging...") - pr_recharger.start(list(src,recharging_mecha)) - return 1 +/obj/machinery/mech_bay_recharge_port/Destroy() + if(recharge_console) + recharge_console.recharge_port = null + recharge_console.update_icon() + return ..() + +/obj/machinery/mech_bay_recharge_port/process() + if(stat & NOPOWER || !recharge_console) + return + if(!recharging_mecha) + recharging_mecha = locate(/obj/mecha) in recharging_turf + if(recharging_mecha) + recharge_console.update_icon() + if(recharging_mecha && recharging_mecha.cell) + if(recharging_mecha.cell.charge < recharging_mecha.cell.maxcharge) + var/delta = min(max_charge, recharging_mecha.cell.maxcharge - recharging_mecha.cell.charge) + recharging_mecha.give_power(delta) + use_power(delta*150) else - return 0 + recharge_console.update_icon() + if(recharging_mecha.loc != recharging_turf) + recharging_mecha = null + recharge_console.update_icon() -/obj/machinery/mech_bay_recharge_port/proc/stop_charge() - if(recharge_console && !recharge_console.stat) - update_icon() - pr_recharger.stop() - return - -/obj/machinery/mech_bay_recharge_port/proc/active() - if(pr_recharger.active()) - return 1 - else - return 0 - - -/obj/machinery/mech_bay_recharge_port/power_change() - if(powered()) - stat &= ~NOPOWER - else - spawn(rand(0, 15)) - stat |= NOPOWER - pr_recharger.stop() - return - -/obj/machinery/mech_bay_recharge_port/proc/set_voltage(new_voltage) - if(new_voltage && isnum(new_voltage)) - pr_recharger.max_charge = new_voltage - return 1 - else - return 0 - -/datum/global_iterator/mech_bay_recharger - delay = 20 - var/max_charge = 50 - check_for_null = 0 //since port.stop_charge() must be called. The checks are made in process() - -/datum/global_iterator/mech_bay_recharger/process(var/obj/machinery/mech_bay_recharge_port/port, var/obj/mecha/mecha) - if(!port) - return 0 - if(mecha && mecha in port.recharge_floor) - if(!mecha.cell) - return - var/delta = min(max_charge, mecha.cell.maxcharge - mecha.cell.charge) - if(delta>0) - mecha.give_power(delta) - port.use_power(delta*150) - else - mecha.occupant_message("Fully charged.") - port.stop_charge() - else - port.stop_charge() - return /obj/machinery/computer/mech_bay_power_console name = "mech bay power control console" @@ -206,82 +103,63 @@ icon_screen = "recharge_comp" light_color = LIGHT_COLOR_FADEDPURPLE circuit = /obj/item/weapon/circuitboard/mech_bay_power_console - var/autostart = 1 - var/voltage = 50 - var/turf/simulated/floor/mech_bay_recharge_floor/recharge_floor var/obj/machinery/mech_bay_recharge_port/recharge_port -/obj/machinery/computer/mech_bay_power_console/Destroy() - recharge_port.recharge_console = null - recharge_floor.recharge_console = null - return ..() - -/obj/machinery/computer/mech_bay_power_console/proc/mecha_in(var/obj/mecha/mecha) - if(stat&(NOPOWER|BROKEN)) - mecha.occupant_message("Control console not responding. Terminating...") - return - if(recharge_port && autostart) - var/answer = recharge_port.start_charge(mecha) - if(answer) - recharge_port.set_voltage(voltage) - update_icon() - return - -/obj/machinery/computer/mech_bay_power_console/proc/mecha_out() - if(recharge_port) - recharge_port.stop_charge() - update_icon() - return - -/obj/machinery/computer/mech_bay_power_console/power_change() - ..() - if(stat & BROKEN) - update_icon() - if(recharge_port) - recharge_port.stop_charge() - else if(powered()) - update_icon() - stat &= ~NOPOWER - else - spawn(rand(0, 15)) - update_icon() - stat |= NOPOWER - if(recharge_port) - recharge_port.stop_charge() - -/obj/machinery/computer/mech_bay_power_console/set_broken() - ..() - if(recharge_port) - recharge_port.stop_charge() /obj/machinery/computer/mech_bay_power_console/update_icon() - if(!recharge_floor || !recharge_floor.recharging_mecha || !recharge_floor.recharging_mecha.cell || !(recharge_floor.recharging_mecha.cell.charge < recharge_floor.recharging_mecha.cell.maxcharge)) + if(!recharge_port || !recharge_port.recharging_mecha || !recharge_port.recharging_mecha.cell || !(recharge_port.recharging_mecha.cell.charge < recharge_port.recharging_mecha.cell.maxcharge) || stat & (NOPOWER|BROKEN)) icon_screen = "recharge_comp" else icon_screen = "recharge_comp_on" ..() +/obj/machinery/computer/mech_bay_power_console/proc/reconnect() + if(recharge_port) + return + recharge_port = locate(/obj/machinery/mech_bay_recharge_port) in range(1) + if(!recharge_port) + for(var/D in cardinal) + var/turf/A = get_step(src, D) + A = get_step(A, D) + recharge_port = locate(/obj/machinery/mech_bay_recharge_port) in A + if(recharge_port) + if(!recharge_port.recharge_console) + break + else + recharge_port = null + if(recharge_port) + if(!recharge_port.recharge_console) + recharge_port.recharge_console = src + else + recharge_port = null + + +/obj/machinery/computer/mech_bay_power_console/Destroy() + if(recharge_port) + recharge_port.recharge_console = null + return ..() + /obj/machinery/computer/mech_bay_power_console/attack_hand(mob/user as mob) if(..()) return - if(!recharge_floor || !recharge_port) - var/turf/simulated/floor/mech_bay_recharge_floor/F = locate() in range(1,src) - if(F) - F.init_devices() ui_interact(user) /obj/machinery/computer/mech_bay_power_console/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) var/list/data = list() - data["has_floor"] = recharge_floor - data["has_port"] = recharge_port - if(recharge_floor && recharge_floor.recharging_mecha && recharge_floor.recharging_mecha.cell) - data["has_mech"] = 1 - data["mecha_name"] = recharge_floor.recharging_mecha || "None" - data["mecha_charge"] = isnull(recharge_floor.recharging_mecha) ? 0 : recharge_floor.recharging_mecha.cell.charge - data["mecha_maxcharge"] = isnull(recharge_floor.recharging_mecha) ? 0 : recharge_floor.recharging_mecha.cell.maxcharge - data["mecha_charge_percentage"] = isnull(recharge_floor.recharging_mecha) ? 0 : round(recharge_floor.recharging_mecha.cell.percent()) - else - data["has_mech"] = 0 + if(!recharge_port) + reconnect() + if(recharge_port && !qdeleted(recharge_port)) + data["recharge_port"] = list("mech" = null) + if(recharge_port.recharging_mecha && !qdeleted(recharge_port.recharging_mecha)) + data["recharge_port"]["mech"] = list("health" = recharge_port.recharging_mecha.health, "maxhealth" = initial(recharge_port.recharging_mecha.health), "cell" = null) + if(recharge_port.recharging_mecha.cell && !qdeleted(recharge_port.recharging_mecha.cell)) + data["has_mech"] = 1 + data["mecha_name"] = recharge_port.recharging_mecha || "None" + data["mecha_charge"] = isnull(recharge_port.recharging_mecha) ? 0 : recharge_port.recharging_mecha.cell.charge + data["mecha_maxcharge"] = isnull(recharge_port.recharging_mecha) ? 0 : recharge_port.recharging_mecha.cell.maxcharge + data["mecha_charge_percentage"] = isnull(recharge_port.recharging_mecha) ? 0 : round(recharge_port.recharging_mecha.cell.percent()) + else + data["has_mech"] = 0 ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if(!ui) // the ui does not exist, so we'll create a new() one @@ -293,3 +171,9 @@ ui.open() // auto update every Master Controller tick ui.set_auto_update(1) + return data + +/obj/machinery/computer/mech_bay_power_console/initialize() + reconnect() + update_icon() + return ..() \ No newline at end of file diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index b8a1bda8c4c..30b8c8bb8e9 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -893,9 +893,6 @@ var/gamma_ship_location = 1 // 0 = station , 1 = space toArea = locate(/area/shuttle/gamma/space) fromArea.move_contents_to(toArea) - for(var/turf/simulated/floor/mech_bay_recharge_floor/F in toArea) - F.init_devices() - for(var/obj/machinery/power/apc/A in toArea) A.init() diff --git a/nano/templates/mech_bay_console.tmpl b/nano/templates/mech_bay_console.tmpl index cd80983469a..2a4cf5d6085 100644 --- a/nano/templates/mech_bay_console.tmpl +++ b/nano/templates/mech_bay_console.tmpl @@ -1,22 +1,10 @@