Merge pull request #5385 from GeneralChaos81/MechBay

Refactors Mech Recharger
This commit is contained in:
Fox McCloud
2016-08-18 01:40:28 -04:00
committed by GitHub
3 changed files with 81 additions and 212 deletions
+80 -196
View File
@@ -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("<b>Initializing power control devices.</b>")
init_devices()
if(recharge_console && recharge_port)
recharging_mecha = mecha
recharge_console.mecha_in(mecha)
return
else if(!recharge_console)
mecha.occupant_message("<font color='red'>Control console not found. Terminating.</font>")
else if(!recharge_port)
mecha.occupant_message("<font color='red'>Power port not found. Terminating.</font>")
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("<font color='red'>Power port not responding. Terminating.</font>")
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("<font color='blue'><b>Fully charged.</b></font>")
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("<font color='red'>Control console not responding. Terminating...</font>")
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 ..()
-3
View File
@@ -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()
+1 -13
View File
@@ -1,22 +1,10 @@
<h3>Subsystems</h3>
<div class="item">
<div class="itemLabel">
Recharge Station:
</div>
<div class="itemContent">
{{if data.has_floor}}
<span class='good'>OK</span>
{{else}}
<span class='bad'>ERROR</span>
{{/if}}
</div>
</div>
<div class="item">
<div class="itemLabel">
Power Port:
</div>
<div class="itemContent">
{{if data.has_port}}
{{if data.recharge_port}}
<span class='good'>OK</span>
{{else}}
<span class='bad'>ERROR</span>