Merge pull request #6036 from mwerezak/power-net

Fixes laptop power draw, improves cell chargers
This commit is contained in:
Zuhayr
2014-08-18 21:04:02 +09:30
3 changed files with 115 additions and 98 deletions

View File

@@ -157,15 +157,15 @@
return return
if(use_power && istype(battery) && battery.charge > 0) if(use_power && istype(battery) && battery.charge > 0)
if(use_power == 1) 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 else
battery.use(active_power_usage) battery.use(active_power_usage*CELLRATE)
return 1 return 1
return 0 return 0
use_power(var/amount, var/chan = -1) use_power(var/amount, var/chan = -1)
if(battery && battery.charge > 0) if(battery && battery.charge > 0)
battery.use(amount) battery.use(amount*CELLRATE)
power_change() power_change()
if( !battery || battery.charge <= 0 ) if( !battery || battery.charge <= 0 )

View File

@@ -6,15 +6,12 @@
anchored = 1 anchored = 1
use_power = 1 use_power = 1
idle_power_usage = 5 idle_power_usage = 5
active_power_usage = 60 active_power_usage = 40000 //40 kW. (this the power drawn when charging)
power_channel = EQUIP power_channel = EQUIP
var/obj/item/weapon/cell/charging = null var/obj/item/weapon/cell/charging = null
var/chargelevel = -1 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()
proc
updateicon()
icon_state = "ccharger[charging ? 1 : 0]" icon_state = "ccharger[charging ? 1 : 0]"
if(charging && !(stat & (BROKEN|NOPOWER)) ) if(charging && !(stat & (BROKEN|NOPOWER)) )
@@ -30,14 +27,15 @@
chargelevel = newlevel chargelevel = newlevel
else else
overlays.Cut() overlays.Cut()
examine()
/obj/machinery/cell_charger/examine()
set src in oview(5) set src in oview(5)
..() ..()
usr << "There's [charging ? "a" : "no"] cell in the charger." usr << "There's [charging ? "a" : "no"] cell in the charger."
if(charging) if(charging)
usr << "Current charge: [charging.charge]" usr << "Current charge: [charging.charge]"
attackby(obj/item/weapon/W, mob/user) /obj/machinery/cell_charger/attackby(obj/item/weapon/W, mob/user)
if(stat & BROKEN) if(stat & BROKEN)
return return
@@ -68,7 +66,7 @@
user << "You [anchored ? "attach" : "detach"] the cell charger [anchored ? "to" : "from"] the ground" user << "You [anchored ? "attach" : "detach"] the cell charger [anchored ? "to" : "from"] the ground"
playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1) playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
attack_hand(mob/user) /obj/machinery/cell_charger/attack_hand(mob/user)
if(charging) if(charging)
usr.put_in_hands(charging) usr.put_in_hands(charging)
charging.add_fingerprint(user) charging.add_fingerprint(user)
@@ -79,10 +77,10 @@
chargelevel = -1 chargelevel = -1
updateicon() updateicon()
attack_ai(mob/user) /obj/machinery/cell_charger/attack_ai(mob/user)
return return
emp_act(severity) /obj/machinery/cell_charger/emp_act(severity)
if(stat & (BROKEN|NOPOWER)) if(stat & (BROKEN|NOPOWER))
return return
if(charging) if(charging)
@@ -90,13 +88,16 @@
..(severity) ..(severity)
process() /obj/machinery/cell_charger/process()
//world << "ccpt [charging] [stat]" //world << "ccpt [charging] [stat]"
if(!charging || (stat & (BROKEN|NOPOWER)) || !anchored) if((stat & (BROKEN|NOPOWER)) || !anchored)
update_use_power(0)
return return
if (!charging.fully_charged()) if (charging && !charging.fully_charged())
var/charge_used = charging.give(power_rating*CELLRATE) charging.give(active_power_usage*CELLRATE)
use_power(charge_used/CELLRATE) //It's only while charging something, so I'm going to say use_power() is fine here... update_use_power(2)
updateicon() updateicon()
else
update_use_power(1)

View File

@@ -7,12 +7,12 @@ obj/machinery/recharger
anchored = 1 anchored = 1
use_power = 1 use_power = 1
idle_power_usage = 4 idle_power_usage = 4
var/power_rating = 15000 //15 kW active_power_usage = 15000 //15 kW
var/obj/item/charging = null 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/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_charged = "recharger2"
var/icon_state_charging = "recharger1" 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) obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob)
if(istype(user,/mob/living/silicon)) 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(allowed)
if(charging) if(charging)
user << "\red \A [charging] is already charging here."
return return
// Checks to make sure he's not in space doing it, and that the area got proper power. // Checks to make sure he's not in space doing it, and that the area got proper power.
var/area/a = get_area(src) var/area/a = get_area(src)
@@ -66,45 +67,60 @@ obj/machinery/recharger/attack_paw(mob/user as mob)
obj/machinery/recharger/process() obj/machinery/recharger/process()
if(stat & (NOPOWER|BROKEN) || !anchored) if(stat & (NOPOWER|BROKEN) || !anchored)
update_use_power(0)
icon_state = icon_state_idle
return return
if(charging) if(!charging)
update_use_power(1)
icon_state = icon_state_idle
else
if(istype(charging, /obj/item/weapon/gun/energy)) if(istype(charging, /obj/item/weapon/gun/energy))
var/obj/item/weapon/gun/energy/E = charging var/obj/item/weapon/gun/energy/E = charging
if(!E.power_supply.fully_charged()) if(!E.power_supply.fully_charged())
icon_state = icon_state_charging icon_state = icon_state_charging
var/charge_used = E.power_supply.give(power_rating*CELLRATE) E.power_supply.give(active_power_usage*CELLRATE)
use_power(charge_used/CELLRATE) update_use_power(2)
else else
icon_state = icon_state_charged icon_state = icon_state_charged
update_use_power(1)
return return
if(istype(charging, /obj/item/weapon/melee/baton)) if(istype(charging, /obj/item/weapon/melee/baton))
var/obj/item/weapon/melee/baton/B = charging var/obj/item/weapon/melee/baton/B = charging
if(B.bcell) if(B.bcell)
if(!B.bcell.fully_charged()) if(!B.bcell.fully_charged())
icon_state = icon_state_charging icon_state = icon_state_charging
var/charge_used = B.bcell.give(power_rating*CELLRATE) B.bcell.give(active_power_usage*CELLRATE)
use_power(charge_used/CELLRATE) update_use_power(2)
else else
icon_state = icon_state_charged icon_state = icon_state_charged
update_use_power(1)
else
icon_state = icon_state_idle
update_use_power(1)
return return
if(istype(charging, /obj/item/device/laptop)) if(istype(charging, /obj/item/device/laptop))
var/obj/item/device/laptop/L = charging var/obj/item/device/laptop/L = charging
if(!L.stored_computer.battery.fully_charged()) if(!L.stored_computer.battery.fully_charged())
icon_state = icon_state_charging icon_state = icon_state_charging
var/charge_used = L.stored_computer.battery.give(power_rating*CELLRATE) L.stored_computer.battery.give(active_power_usage*CELLRATE)
use_power(charge_used/CELLRATE) update_use_power(2)
else else
icon_state = icon_state_charged icon_state = icon_state_charged
update_use_power(1)
return return
if(istype(charging, /obj/item/weapon/cell)) if(istype(charging, /obj/item/weapon/cell))
var/obj/item/weapon/cell/C = charging var/obj/item/weapon/cell/C = charging
if(!C.fully_charged()) if(!C.fully_charged())
icon_state = icon_state_charging icon_state = icon_state_charging
var/charge_used = C.give(power_rating*CELLRATE) C.give(active_power_usage*CELLRATE)
use_power(charge_used/CELLRATE) update_use_power(2)
else else
icon_state = icon_state_charged icon_state = icon_state_charged
update_use_power(1)
return return
obj/machinery/recharger/emp_act(severity) obj/machinery/recharger/emp_act(severity)
@@ -129,12 +145,12 @@ obj/machinery/recharger/update_icon() //we have an update_icon() in addition to
else else
icon_state = icon_state_idle 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 obj/machinery/recharger/wallcharger
name = "wall recharger" name = "wall recharger"
icon = 'icons/obj/stationobjs.dmi' icon = 'icons/obj/stationobjs.dmi'
icon_state = "wrecharger0" 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) allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton)
icon_state_charged = "wrecharger2" icon_state_charged = "wrecharger2"
icon_state_charging = "wrecharger1" icon_state_charging = "wrecharger1"