From 6d6413a59b15d2b6fef6d9e21d9b6af12f980e65 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sun, 17 Aug 2014 15:30:29 -0400 Subject: [PATCH] Fixes laptop power draw, improves cell chargers Cell chargers no longer call use_power() in their process() --- code/WorkInProgress/computer3/laptop.dm | 6 +- code/game/machinery/cell_charger.dm | 165 ++++++++++++------------ code/game/machinery/recharger.dm | 42 ++++-- 3 files changed, 115 insertions(+), 98 deletions(-) diff --git a/code/WorkInProgress/computer3/laptop.dm b/code/WorkInProgress/computer3/laptop.dm index b88f782c2c..0fad61af82 100644 --- a/code/WorkInProgress/computer3/laptop.dm +++ b/code/WorkInProgress/computer3/laptop.dm @@ -157,15 +157,15 @@ return if(use_power && istype(battery) && battery.charge > 0) if(use_power == 1) - battery.use(idle_power_usage) + battery.use(idle_power_usage*CELLRATE) //idle and active_power_usage are in WATTS. battery.use() expects CHARGE. else - battery.use(active_power_usage) + battery.use(active_power_usage*CELLRATE) return 1 return 0 use_power(var/amount, var/chan = -1) if(battery && battery.charge > 0) - battery.use(amount) + battery.use(amount*CELLRATE) power_change() if( !battery || battery.charge <= 0 ) diff --git a/code/game/machinery/cell_charger.dm b/code/game/machinery/cell_charger.dm index 66c7b24bac..4608944b5f 100644 --- a/code/game/machinery/cell_charger.dm +++ b/code/game/machinery/cell_charger.dm @@ -6,97 +6,98 @@ anchored = 1 use_power = 1 idle_power_usage = 5 - active_power_usage = 60 + active_power_usage = 40000 //40 kW. (this the power drawn when charging) power_channel = EQUIP var/obj/item/weapon/cell/charging = null var/chargelevel = -1 - var/power_rating = 40000 //40 kW. A measure of how powerful this charger is for charging cells (this the power drawn when charging) +/obj/machinery/cell_charger/proc/updateicon() + icon_state = "ccharger[charging ? 1 : 0]" + + if(charging && !(stat & (BROKEN|NOPOWER)) ) + + var/newlevel = round(charging.percent() * 4.0 / 99) + //world << "nl: [newlevel]" + + if(chargelevel != newlevel) + + overlays.Cut() + overlays += "ccharger-o[newlevel]" + + chargelevel = newlevel + else + overlays.Cut() - proc - updateicon() - icon_state = "ccharger[charging ? 1 : 0]" +/obj/machinery/cell_charger/examine() + set src in oview(5) + ..() + usr << "There's [charging ? "a" : "no"] cell in the charger." + if(charging) + usr << "Current charge: [charging.charge]" - if(charging && !(stat & (BROKEN|NOPOWER)) ) - - var/newlevel = round(charging.percent() * 4.0 / 99) - //world << "nl: [newlevel]" - - if(chargelevel != newlevel) - - overlays.Cut() - overlays += "ccharger-o[newlevel]" - - chargelevel = newlevel - else - overlays.Cut() - examine() - set src in oview(5) - ..() - usr << "There's [charging ? "a" : "no"] cell in the charger." - if(charging) - usr << "Current charge: [charging.charge]" - - attackby(obj/item/weapon/W, mob/user) - if(stat & BROKEN) - return - - if(istype(W, /obj/item/weapon/cell) && anchored) - if(charging) - user << "\red There is already a cell in the charger." - return - else - var/area/a = loc.loc // Gets our locations location, like a dream within a dream - if(!isarea(a)) - return - if(a.power_equip == 0) // There's no APC in this area, don't try to cheat power! - user << "\red The [name] blinks red as you try to insert the cell!" - return - - user.drop_item() - W.loc = src - charging = W - user.visible_message("[user] inserts a cell into the charger.", "You insert a cell into the charger.") - chargelevel = -1 - updateicon() - else if(istype(W, /obj/item/weapon/wrench)) - if(charging) - user << "\red Remove the cell first!" - return - - anchored = !anchored - user << "You [anchored ? "attach" : "detach"] the cell charger [anchored ? "to" : "from"] the ground" - playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) - - attack_hand(mob/user) - if(charging) - usr.put_in_hands(charging) - charging.add_fingerprint(user) - charging.updateicon() - - src.charging = null - user.visible_message("[user] removes the cell from the charger.", "You remove the cell from the charger.") - chargelevel = -1 - updateicon() - - attack_ai(mob/user) +/obj/machinery/cell_charger/attackby(obj/item/weapon/W, mob/user) + if(stat & BROKEN) return - emp_act(severity) - if(stat & (BROKEN|NOPOWER)) - return + if(istype(W, /obj/item/weapon/cell) && anchored) if(charging) - charging.emp_act(severity) - ..(severity) - - - process() - //world << "ccpt [charging] [stat]" - if(!charging || (stat & (BROKEN|NOPOWER)) || !anchored) + user << "\red There is already a cell in the charger." return - - if (!charging.fully_charged()) - var/charge_used = charging.give(power_rating*CELLRATE) - use_power(charge_used/CELLRATE) //It's only while charging something, so I'm going to say use_power() is fine here... + else + var/area/a = loc.loc // Gets our locations location, like a dream within a dream + if(!isarea(a)) + return + if(a.power_equip == 0) // There's no APC in this area, don't try to cheat power! + user << "\red The [name] blinks red as you try to insert the cell!" + return + + user.drop_item() + W.loc = src + charging = W + user.visible_message("[user] inserts a cell into the charger.", "You insert a cell into the charger.") + chargelevel = -1 + updateicon() + else if(istype(W, /obj/item/weapon/wrench)) + if(charging) + user << "\red Remove the cell first!" + return + + anchored = !anchored + user << "You [anchored ? "attach" : "detach"] the cell charger [anchored ? "to" : "from"] the ground" + playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) + +/obj/machinery/cell_charger/attack_hand(mob/user) + if(charging) + usr.put_in_hands(charging) + charging.add_fingerprint(user) + charging.updateicon() + + src.charging = null + user.visible_message("[user] removes the cell from the charger.", "You remove the cell from the charger.") + chargelevel = -1 + updateicon() + +/obj/machinery/cell_charger/attack_ai(mob/user) + return + +/obj/machinery/cell_charger/emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + return + if(charging) + charging.emp_act(severity) + ..(severity) + + +/obj/machinery/cell_charger/process() + //world << "ccpt [charging] [stat]" + if((stat & (BROKEN|NOPOWER)) || !anchored) + update_use_power(0) + return + + if (charging && !charging.fully_charged()) + charging.give(active_power_usage*CELLRATE) + update_use_power(2) updateicon() + else + update_use_power(1) diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index ac3b37cdf7..3166774f96 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -7,12 +7,12 @@ obj/machinery/recharger anchored = 1 use_power = 1 idle_power_usage = 4 - var/power_rating = 15000 //15 kW + active_power_usage = 15000 //15 kW var/obj/item/charging = null var/list/allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/device/laptop, /obj/item/weapon/cell) var/icon_state_charged = "recharger2" var/icon_state_charging = "recharger1" - var/icon_state_idle = "recharger0" + var/icon_state_idle = "recharger0" //also when unpowered obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob) if(istype(user,/mob/living/silicon)) @@ -24,6 +24,7 @@ obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob) if(allowed) if(charging) + user << "\red \A [charging] is already charging here." return // Checks to make sure he's not in space doing it, and that the area got proper power. var/area/a = get_area(src) @@ -66,45 +67,60 @@ obj/machinery/recharger/attack_paw(mob/user as mob) obj/machinery/recharger/process() if(stat & (NOPOWER|BROKEN) || !anchored) + update_use_power(0) + icon_state = icon_state_idle return - if(charging) + if(!charging) + update_use_power(1) + icon_state = icon_state_idle + else if(istype(charging, /obj/item/weapon/gun/energy)) var/obj/item/weapon/gun/energy/E = charging if(!E.power_supply.fully_charged()) icon_state = icon_state_charging - var/charge_used = E.power_supply.give(power_rating*CELLRATE) - use_power(charge_used/CELLRATE) + E.power_supply.give(active_power_usage*CELLRATE) + update_use_power(2) else icon_state = icon_state_charged + update_use_power(1) return + if(istype(charging, /obj/item/weapon/melee/baton)) var/obj/item/weapon/melee/baton/B = charging if(B.bcell) if(!B.bcell.fully_charged()) icon_state = icon_state_charging - var/charge_used = B.bcell.give(power_rating*CELLRATE) - use_power(charge_used/CELLRATE) + B.bcell.give(active_power_usage*CELLRATE) + update_use_power(2) else icon_state = icon_state_charged + update_use_power(1) + else + icon_state = icon_state_idle + update_use_power(1) return + if(istype(charging, /obj/item/device/laptop)) var/obj/item/device/laptop/L = charging if(!L.stored_computer.battery.fully_charged()) icon_state = icon_state_charging - var/charge_used = L.stored_computer.battery.give(power_rating*CELLRATE) - use_power(charge_used/CELLRATE) + L.stored_computer.battery.give(active_power_usage*CELLRATE) + update_use_power(2) else icon_state = icon_state_charged + update_use_power(1) return + if(istype(charging, /obj/item/weapon/cell)) var/obj/item/weapon/cell/C = charging if(!C.fully_charged()) icon_state = icon_state_charging - var/charge_used = C.give(power_rating*CELLRATE) - use_power(charge_used/CELLRATE) + C.give(active_power_usage*CELLRATE) + update_use_power(2) else icon_state = icon_state_charged + update_use_power(1) return obj/machinery/recharger/emp_act(severity) @@ -129,12 +145,12 @@ obj/machinery/recharger/update_icon() //we have an update_icon() in addition to else icon_state = icon_state_idle -// Atlantis: No need for that copy-pasta code, just use var to store icon_states instead. + obj/machinery/recharger/wallcharger name = "wall recharger" icon = 'icons/obj/stationobjs.dmi' icon_state = "wrecharger0" - power_rating = 25000 //25 kW , It's more specialized than the standalone recharger (guns and batons only) so make it more powerful + active_power_usage = 25000 //25 kW , It's more specialized than the standalone recharger (guns and batons only) so make it more powerful allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton) icon_state_charged = "wrecharger2" icon_state_charging = "wrecharger1"