mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-13 03:33:21 +00:00
Merge pull request #6036 from mwerezak/power-net
Fixes laptop power draw, improves cell chargers
This commit is contained in:
@@ -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 )
|
||||||
|
|||||||
@@ -6,97 +6,98 @@
|
|||||||
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()
|
||||||
|
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
|
/obj/machinery/cell_charger/examine()
|
||||||
updateicon()
|
set src in oview(5)
|
||||||
icon_state = "ccharger[charging ? 1 : 0]"
|
..()
|
||||||
|
usr << "There's [charging ? "a" : "no"] cell in the charger."
|
||||||
|
if(charging)
|
||||||
|
usr << "Current charge: [charging.charge]"
|
||||||
|
|
||||||
if(charging && !(stat & (BROKEN|NOPOWER)) )
|
/obj/machinery/cell_charger/attackby(obj/item/weapon/W, mob/user)
|
||||||
|
if(stat & BROKEN)
|
||||||
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)
|
|
||||||
return
|
return
|
||||||
|
|
||||||
emp_act(severity)
|
if(istype(W, /obj/item/weapon/cell) && anchored)
|
||||||
if(stat & (BROKEN|NOPOWER))
|
|
||||||
return
|
|
||||||
if(charging)
|
if(charging)
|
||||||
charging.emp_act(severity)
|
user << "\red There is already a cell in the charger."
|
||||||
..(severity)
|
|
||||||
|
|
||||||
|
|
||||||
process()
|
|
||||||
//world << "ccpt [charging] [stat]"
|
|
||||||
if(!charging || (stat & (BROKEN|NOPOWER)) || !anchored)
|
|
||||||
return
|
return
|
||||||
|
else
|
||||||
if (!charging.fully_charged())
|
var/area/a = loc.loc // Gets our locations location, like a dream within a dream
|
||||||
var/charge_used = charging.give(power_rating*CELLRATE)
|
if(!isarea(a))
|
||||||
use_power(charge_used/CELLRATE) //It's only while charging something, so I'm going to say use_power() is fine here...
|
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()
|
updateicon()
|
||||||
|
else
|
||||||
|
update_use_power(1)
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
Reference in New Issue
Block a user