Merge pull request #6969 from VOREStation/revert-6968-upstream-merge-6882

Redo "[MIRROR] Machinery: Always use update_use_power()"
This commit is contained in:
Aronai Sieyes
2020-03-24 15:09:21 -04:00
committed by GitHub
17 changed files with 1309 additions and 1356 deletions

View File

@@ -9,7 +9,7 @@
anchored = 1
density = 1
power_channel = EQUIP
use_power = 1
use_power = USE_POWER_IDLE
idle_power_usage = 100 // Minimal lights to keep algae alive
active_power_usage = 5000 // Powerful grow lights to stimulate oxygen production
//power_rating = 7500 //7500 W ~ 10 HP
@@ -57,10 +57,10 @@
..()
recent_moles_transferred = 0
if(inoperable() || use_power < 2)
if(inoperable() || use_power < USE_POWER_ACTIVE)
ui_error = null
update_icon()
if(use_power == 1)
if(use_power == USE_POWER_IDLE)
last_power_draw = idle_power_usage
else
last_power_draw = 0
@@ -113,7 +113,7 @@
update_icon()
/obj/machinery/atmospherics/binary/algae_farm/update_icon()
if(inoperable() || !anchored || use_power < 2)
if(inoperable() || !anchored || use_power < USE_POWER_ACTIVE)
icon_state = "algae-off"
else if(recent_moles_transferred >= moles_per_tick)
icon_state = "algae-full"
@@ -214,13 +214,13 @@
// Queue management can be done even while busy
if(href_list["activate"])
update_use_power(2)
update_use_power(USE_POWER_ACTIVE)
update_icon()
updateUsrDialog()
return
if(href_list["deactivate"])
update_use_power(1)
update_use_power(USE_POWER_IDLE)
update_icon()
updateUsrDialog()
return

View File

@@ -10,7 +10,7 @@
density = 1
anchored = 0
use_power = 0 //is powered directly from cables
use_power = USE_POWER_OFF //is powered directly from cables
active_power_usage = 150 KILOWATTS //BIG POWER
idle_power_usage = 500

View File

@@ -5,7 +5,7 @@
anchored = 1
volume = 500000
use_power = 1
use_power = USE_POWER_IDLE
idle_power_usage = 50 //internal circuitry, friction losses and stuff
active_power_usage = 1000 // Blowers running
power_rating = 100000 //100 kW ~ 135 HP

View File

@@ -210,7 +210,7 @@
/obj/machinery/bomb_tester/proc/start_simulating()
simulating = 1
update_use_power(2)
update_use_power(USE_POWER_ACTIVE)
simulation_started = world.time
update_icon()
switch(sim_mode)
@@ -352,7 +352,7 @@
/obj/machinery/bomb_tester/proc/simulation_finish(cancelled = 0)
simulating = 0
update_use_power(1)
update_use_power(USE_POWER_IDLE)
update_icon()
if(test_canister && test_canister.anchored && !test_canister.connected_port)
test_canister.anchored = 0

View File

@@ -4,7 +4,7 @@
desc = "Small wall-mounted chime triggered by a doorbell"
icon = 'icons/obj/machines/doorbell_vr.dmi'
icon_state = "dbchime-standby"
use_power = 1
use_power = USE_POWER_IDLE
idle_power_usage = 10
active_power_usage = 200
anchored = 1
@@ -89,7 +89,7 @@
desc = "A doorbell, press to chime."
icon = 'icons/obj/machines/doorbell_vr.dmi'
icon_state = "doorbell-standby"
use_power = 0
use_power = USE_POWER_OFF
/obj/machinery/button/doorbell/New(var/loc, var/dir, var/building = 0)
..()

View File

@@ -0,0 +1,324 @@
/*
FIRE ALARM
*/
/obj/machinery/firealarm
name = "fire alarm"
desc = "<i>\"Pull this in case of emergency\"</i>. Thus, keep pulling it forever."
icon = 'icons/obj/monitors.dmi'
icon_state = "fire0"
plane = TURF_PLANE
layer = ABOVE_TURF_LAYER
var/detecting = 1.0
var/working = 1.0
var/time = 10.0
var/timing = 0.0
var/lockdownbyai = 0
anchored = 1.0
use_power = USE_POWER_IDLE
idle_power_usage = 2
active_power_usage = 6
power_channel = ENVIRON
var/last_process = 0
panel_open = 0
var/seclevel
circuit = /obj/item/weapon/circuitboard/firealarm
var/alarms_hidden = FALSE //If the alarms from this machine are visible on consoles
/obj/machinery/firealarm/alarms_hidden
alarms_hidden = TRUE
/obj/machinery/firealarm/Initialize()
. = ..()
if(z in using_map.contact_levels)
set_security_level(security_level ? get_security_level() : "green")
/obj/machinery/firealarm/update_icon()
cut_overlays()
if(panel_open)
set_light(0)
return
if(stat & BROKEN)
icon_state = "firex"
set_light(0)
else if(stat & NOPOWER)
icon_state = "firep"
set_light(0)
else
if(!detecting)
icon_state = "fire1"
set_light(l_range = 4, l_power = 0.9, l_color = "#ff0000")
else
icon_state = "fire0"
switch(seclevel)
if("green") set_light(l_range = 2, l_power = 0.25, l_color = "#00ff00")
if("yellow") set_light(l_range = 2, l_power = 0.25, l_color = "#ffff00")
if("violet") set_light(l_range = 2, l_power = 0.25, l_color = "#9933ff")
if("orange") set_light(l_range = 2, l_power = 0.25, l_color = "#ff9900")
if("blue") set_light(l_range = 2, l_power = 0.25, l_color = "#1024A9")
if("red") set_light(l_range = 4, l_power = 0.9, l_color = "#ff0000")
if("delta") set_light(l_range = 4, l_power = 0.9, l_color = "#FF6633")
add_overlay("overlay_[seclevel]")
/obj/machinery/firealarm/fire_act(datum/gas_mixture/air, temperature, volume)
if(detecting)
if(temperature > T0C + 200)
alarm() // added check of detector status here
return
/obj/machinery/firealarm/attack_ai(mob/user as mob)
return attack_hand(user)
/obj/machinery/firealarm/bullet_act()
return alarm()
/obj/machinery/firealarm/emp_act(severity)
if(prob(50 / severity))
alarm(rand(30 / severity, 60 / severity))
..()
/obj/machinery/firealarm/attackby(obj/item/W as obj, mob/user as mob)
add_fingerprint(user)
if(alarm_deconstruction_screwdriver(user, W))
return
if(alarm_deconstruction_wirecutters(user, W))
return
if(panel_open)
if(istype(W, /obj/item/device/multitool))
detecting = !(detecting)
if(detecting)
user.visible_message("<span class='notice'>\The [user] has reconnected [src]'s detecting unit!</span>", "<span class='notice'>You have reconnected [src]'s detecting unit.</span>")
else
user.visible_message("<span class='notice'>\The [user] has disconnected [src]'s detecting unit!</span>", "<span class='notice'>You have disconnected [src]'s detecting unit.</span>")
return
alarm()
return
/obj/machinery/firealarm/process()//Note: this processing was mostly phased out due to other code, and only runs when needed
if(stat & (NOPOWER|BROKEN))
return
if(timing)
if(time > 0)
time = time - ((world.timeofday - last_process) / 10)
else
alarm()
time = 0
timing = 0
STOP_PROCESSING(SSobj, src)
updateDialog()
last_process = world.timeofday
if(locate(/obj/fire) in src.loc)
alarm()
return
/obj/machinery/firealarm/power_change()
..()
spawn(rand(0,15))
update_icon()
/obj/machinery/firealarm/attack_hand(mob/user as mob)
if(user.stat || stat & (NOPOWER | BROKEN))
return
user.set_machine(src)
var/area/A = src.loc
var/d1
var/d2
if(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon))
A = A.loc
if(A.fire)
d1 = text("<A href='?src=\ref[];reset=1'>Reset - Lockdown</A>", src)
else
d1 = text("<A href='?src=\ref[];alarm=1'>Alarm - Lockdown</A>", src)
if(timing)
d2 = text("<A href='?src=\ref[];time=0'>Stop Time Lock</A>", src)
else
d2 = text("<A href='?src=\ref[];time=1'>Initiate Time Lock</A>", src)
var/second = round(time) % 60
var/minute = (round(time) - second) / 60
var/dat = "<HTML><HEAD></HEAD><BODY><TT><B>Fire alarm</B> [d1]\n<HR>The current alert level is: <b>[get_security_level()]</b><br><br>\nTimer System: [d2]<BR>\nTime Left: [(minute ? "[minute]:" : null)][second] <A href='?src=\ref[src];tp=-30'>-</A> <A href='?src=\ref[src];tp=-1'>-</A> <A href='?src=\ref[src];tp=1'>+</A> <A href='?src=\ref[src];tp=30'>+</A>\n</TT></BODY></HTML>"
user << browse(dat, "window=firealarm")
onclose(user, "firealarm")
else
A = A.loc
if(A.fire)
d1 = text("<A href='?src=\ref[];reset=1'>[]</A>", src, stars("Reset - Lockdown"))
else
d1 = text("<A href='?src=\ref[];alarm=1'>[]</A>", src, stars("Alarm - Lockdown"))
if(timing)
d2 = text("<A href='?src=\ref[];time=0'>[]</A>", src, stars("Stop Time Lock"))
else
d2 = text("<A href='?src=\ref[];time=1'>[]</A>", src, stars("Initiate Time Lock"))
var/second = round(time) % 60
var/minute = (round(time) - second) / 60
var/dat = "<HTML><HEAD></HEAD><BODY><TT><B>[stars("Fire alarm")]</B> [d1]\n<HR><b>The current alert level is: [stars(get_security_level())]</b><br><br>\nTimer System: [d2]<BR>\nTime Left: [(minute ? text("[]:", minute) : null)][second] <A href='?src=\ref[src];tp=-30'>-</A> <A href='?src=\ref[src];tp=-1'>-</A> <A href='?src=\ref[src];tp=1'>+</A> <A href='?src=\ref[src];tp=30'>+</A>\n</TT></BODY></HTML>"
user << browse(dat, "window=firealarm")
onclose(user, "firealarm")
return
/obj/machinery/firealarm/Topic(href, href_list)
..()
if(usr.stat || stat & (BROKEN | NOPOWER))
return
if((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
usr.set_machine(src)
if(href_list["reset"])
reset()
else if(href_list["alarm"])
alarm()
else if(href_list["time"])
timing = text2num(href_list["time"])
last_process = world.timeofday
START_PROCESSING(SSobj, src)
else if(href_list["tp"])
var/tp = text2num(href_list["tp"])
time += tp
time = min(max(round(time), 0), 120)
updateUsrDialog()
add_fingerprint(usr)
else
usr << browse(null, "window=firealarm")
return
return
/obj/machinery/firealarm/proc/reset()
if(!(working))
return
var/area/area = get_area(src)
for(var/obj/machinery/firealarm/FA in area)
fire_alarm.clearAlarm(src.loc, FA)
update_icon()
return
/obj/machinery/firealarm/proc/alarm(var/duration = 0)
if(!(working))
return
var/area/area = get_area(src)
for(var/obj/machinery/firealarm/FA in area)
fire_alarm.triggerAlarm(loc, FA, duration, hidden = alarms_hidden)
update_icon()
playsound(src.loc, 'sound/machines/airalarm.ogg', 25, 0, 4)
return
/obj/machinery/firealarm/proc/set_security_level(var/newlevel)
if(seclevel != newlevel)
seclevel = newlevel
update_icon()
/*
FIRE ALARM CIRCUIT
Just a object used in constructing fire alarms
/obj/item/weapon/firealarm_electronics
name = "fire alarm electronics"
icon = 'icons/obj/doors/door_assembly.dmi'
icon_state = "door_electronics"
desc = "A circuit. It has a label on it, it says \"Can handle heat levels up to 40 degrees celsius!\""
w_class = ITEMSIZE_SMALL
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
*/
/obj/machinery/partyalarm
name = "\improper PARTY BUTTON"
desc = "Cuban Pete is in the house!"
icon = 'icons/obj/monitors.dmi'
icon_state = "fire0"
var/detecting = 1.0
var/working = 1.0
var/time = 10.0
var/timing = 0.0
var/lockdownbyai = 0
anchored = 1.0
use_power = USE_POWER_IDLE
idle_power_usage = 2
active_power_usage = 6
/obj/machinery/partyalarm/attack_hand(mob/user as mob)
if(user.stat || stat & (NOPOWER|BROKEN))
return
user.machine = src
var/area/A = get_area(src)
ASSERT(isarea(A))
var/d1
var/d2
if(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon/ai))
if(A.party)
d1 = text("<A href='?src=\ref[];reset=1'>No Party :(</A>", src)
else
d1 = text("<A href='?src=\ref[];alarm=1'>PARTY!!!</A>", src)
if(timing)
d2 = text("<A href='?src=\ref[];time=0'>Stop Time Lock</A>", src)
else
d2 = text("<A href='?src=\ref[];time=1'>Initiate Time Lock</A>", src)
var/second = time % 60
var/minute = (time - second) / 60
var/dat = text("<HTML><HEAD></HEAD><BODY><TT><B>Party Button</B> []\n<HR>\nTimer System: []<BR>\nTime Left: [][] <A href='?src=\ref[];tp=-30'>-</A> <A href='?src=\ref[];tp=-1'>-</A> <A href='?src=\ref[];tp=1'>+</A> <A href='?src=\ref[];tp=30'>+</A>\n</TT></BODY></HTML>", d1, d2, (minute ? text("[]:", minute) : null), second, src, src, src, src)
user << browse(dat, "window=partyalarm")
onclose(user, "partyalarm")
else
if(A.fire)
d1 = text("<A href='?src=\ref[];reset=1'>[]</A>", src, stars("No Party :("))
else
d1 = text("<A href='?src=\ref[];alarm=1'>[]</A>", src, stars("PARTY!!!"))
if(timing)
d2 = text("<A href='?src=\ref[];time=0'>[]</A>", src, stars("Stop Time Lock"))
else
d2 = text("<A href='?src=\ref[];time=1'>[]</A>", src, stars("Initiate Time Lock"))
var/second = time % 60
var/minute = (time - second) / 60
var/dat = text("<HTML><HEAD></HEAD><BODY><TT><B>[]</B> []\n<HR>\nTimer System: []<BR>\nTime Left: [][] <A href='?src=\ref[];tp=-30'>-</A> <A href='?src=\ref[];tp=-1'>-</A> <A href='?src=\ref[];tp=1'>+</A> <A href='?src=\ref[];tp=30'>+</A>\n</TT></BODY></HTML>", stars("Party Button"), d1, d2, (minute ? text("[]:", minute) : null), second, src, src, src, src)
user << browse(dat, "window=partyalarm")
onclose(user, "partyalarm")
return
/obj/machinery/partyalarm/proc/reset()
if(!(working))
return
var/area/A = get_area(src)
ASSERT(isarea(A))
A.partyreset()
return
/obj/machinery/partyalarm/proc/alarm()
if(!(working))
return
var/area/A = get_area(src)
ASSERT(isarea(A))
A.partyalert()
return
/obj/machinery/partyalarm/Topic(href, href_list)
..()
if(usr.stat || stat & (BROKEN|NOPOWER))
return
if((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon/ai)))
usr.machine = src
if(href_list["reset"])
reset()
else if(href_list["alarm"])
alarm()
else if(href_list["time"])
timing = text2num(href_list["time"])
else if(href_list["tp"])
var/tp = text2num(href_list["tp"])
time += tp
time = min(max(round(time), 0), 120)
updateUsrDialog()
add_fingerprint(usr)
else
usr << browse(null, "window=partyalarm")
return
return

View File

@@ -23,7 +23,7 @@
circuit = /obj/item/weapon/circuitboard/partslathe
anchored = 1
density = 1
use_power = 1
use_power = USE_POWER_IDLE
idle_power_usage = 30
active_power_usage = 5000
@@ -155,7 +155,7 @@
var/datum/category_item/partslathe/D = queue[1]
if(canBuild(D))
busy = 1
update_use_power(2)
update_use_power(USE_POWER_ACTIVE)
progress += speed
if(progress >= D.time)
build(D)
@@ -165,7 +165,7 @@
else if(busy)
visible_message("<span class='notice'>\icon [src] flashes: insufficient materials: [getLackingMaterials(D)].</span>")
busy = 0
update_use_power(1)
update_use_power(USE_POWER_IDLE)
update_icon()
playsound(src.loc, 'sound/machines/chime.ogg', 50, 0)

View File

@@ -140,11 +140,11 @@
var/obj/item/ammo_casing/microbattery/batt = charging
if(batt.shots_left >= initial(batt.shots_left))
icon_state = icon_state_charged
update_use_power(1)
update_use_power(USE_POWER_IDLE)
else
icon_state = icon_state_charging
batt.shots_left++
update_use_power(2)
update_use_power(USE_POWER_ACTIVE)
return
//VOREStation Add End

View File

@@ -9,7 +9,7 @@
icon_keyboard = "tech_key"
icon_screen = "request"
light_color = "#315ab4"
use_power = 1
use_power = USE_POWER_IDLE
idle_power_usage = 250
active_power_usage = 500
circuit = /obj/item/weapon/circuitboard/roguezones

View File

@@ -4,7 +4,7 @@
icon = 'icons/obj/telescience.dmi'
icon_state = "qpad-idle"
anchored = TRUE
use_power = 1
use_power = USE_POWER_IDLE
idle_power_usage = 200
active_power_usage = 5000
circuit = /obj/item/weapon/circuitboard/quantumpad

View File

@@ -5,7 +5,7 @@
icon = 'icons/obj/telescience.dmi'
icon_state = "pad-idle"
anchored = 1
use_power = 1
use_power = USE_POWER_IDLE
circuit = /obj/item/weapon/circuitboard/telesci_pad
idle_power_usage = 200
active_power_usage = 5000

View File

@@ -3,7 +3,7 @@
desc = "A utility often used to lose weight."
icon = 'icons/obj/machines/fitness_machines_vr.dmi'
anchored = 1
use_power = 0
use_power = USE_POWER_OFF
idle_power_usage = 0
active_power_usage = 0
var/messages
@@ -88,7 +88,7 @@
icon_state = "scale"
desc = "A scale used to measure ones weight relative to their size and species."
anchored = 1 // Set to 0 when we can construct or dismantle these.
use_power = 0
use_power = USE_POWER_OFF
idle_power_usage = 0
active_power_usage = 0