Port SSnightshift from Paradise

Makes the station have a night mode.
This commit is contained in:
Aronai Sieyes
2020-05-03 17:50:58 -04:00
parent 3c2b4c9865
commit aa6d22097b
11 changed files with 197 additions and 20 deletions

View File

@@ -119,6 +119,9 @@
var/global/list/status_overlays_lighting
var/global/list/status_overlays_environ
var/alarms_hidden = FALSE //If power alarms from this APC are visible on consoles
var/nightshift_lights = FALSE
var/last_nightshift_switch = 0
/obj/machinery/power/apc/updateDialog()
if (stat & (BROKEN|MAINT))
@@ -798,6 +801,7 @@
"coverLocked" = coverlocked,
"siliconUser" = issilicon(user) || isobserver(user), //I add observer here so admins can have more control, even if it makes 'siliconUser' seem inaccurate.
"emergencyLights" = !emergency_lights,
"nightshiftLights" = nightshift_lights,
"powerChannels" = list(
list(
@@ -970,6 +974,13 @@
update_icon()
update()
else if(href_list["nightshift"])
if(last_nightshift_switch > world.time + 10 SECONDS) // don't spam...
to_chat(usr, "<span class='warning'>[src]'s night lighting circuit breaker is still cycling!</span>")
return 0
last_nightshift_switch = world.time
set_nightshift(!nightshift_lights)
else if (href_list["overload"])
if(istype(usr, /mob/living/silicon))
src.overload_lighting()
@@ -1366,4 +1377,13 @@ obj/machinery/power/apc/proc/autoset(var/cur_state, var/on)
if(src && grid_check == TRUE)
grid_check = FALSE
/obj/machinery/power/apc/proc/set_nightshift(on, var/automated)
set waitfor = FALSE
if(automated && istype(area, /area/shuttle))
return
nightshift_lights = on
for(var/obj/machinery/light/L in area)
L.nightshift_mode(on)
CHECK_TICK
#undef APC_UPDATE_ICON_COOLDOWN

View File

@@ -245,9 +245,18 @@ var/global/list/light_type_cache = list()
var/bulb_emergency_pow_mul = 0.75 // the multiplier for determining the light's power in emergency mode
var/bulb_emergency_pow_min = 0.5 // the minimum value for the light's power in emergency mode
var/nightshift_enabled = FALSE
var/nightshift_allowed = TRUE
var/brightness_range_ns
var/brightness_power_ns
var/brightness_color_ns
/obj/machinery/light/flicker
auto_flicker = TRUE
/obj/machinery/light/no_nightshift
nightshift_allowed = FALSE
// the smaller bulb light fixture
/obj/machinery/light/small
@@ -417,7 +426,10 @@ var/global/list/light_type_cache = list()
//VOREStation Edit End
if(on)
if(light_range != brightness_range || light_power != brightness_power || light_color != brightness_color)
var/correct_range = nightshift_enabled ? brightness_range_ns : brightness_range
var/correct_power = nightshift_enabled ? brightness_power_ns : brightness_power
var/correct_color = nightshift_enabled ? brightness_color_ns : brightness_color
if(light_range != correct_range || light_power != correct_power || light_color != correct_color)
if(!auto_flicker)
switchcount++
if(rigged)
@@ -435,7 +447,7 @@ var/global/list/light_type_cache = list()
set_light(0)
else
update_use_power(USE_POWER_ACTIVE)
set_light(brightness_range, brightness_power, brightness_color)
set_light(correct_range, correct_power, correct_color)
else if(has_emergency_power(LIGHT_EMERGENCY_POWER_USE) && !turned_off())
update_use_power(USE_POWER_IDLE)
emergency_mode = TRUE
@@ -446,6 +458,13 @@ var/global/list/light_type_cache = list()
update_active_power_usage((light_range * light_power) * LIGHTING_POWER_FACTOR)
/obj/machinery/light/proc/nightshift_mode(var/state)
if(!nightshift_allowed)
return
if(state != nightshift_enabled)
nightshift_enabled = state
update(FALSE)
/obj/machinery/light/attack_generic(var/mob/user, var/damage)
if(!damage)
@@ -506,10 +525,15 @@ var/global/list/light_type_cache = list()
status = L.status
switchcount = L.switchcount
rigged = L.rigged
brightness_range = L.brightness_range
brightness_power = L.brightness_power
brightness_color = L.brightness_color
brightness_range_ns = L.nightshift_range
brightness_power_ns = L.nightshift_power
brightness_color_ns = L.nightshift_color
// attack with item - insert light (if right type), otherwise try to break the light
/obj/machinery/light/proc/insert_bulb(obj/item/weapon/light/L)
@@ -872,6 +896,10 @@ var/global/list/light_type_cache = list()
var/brightness_power = 1
var/brightness_color = LIGHT_COLOR_INCANDESCENT_TUBE
var/nightshift_range = 8
var/nightshift_power = 0.7
var/nightshift_color = LIGHT_COLOR_NIGHTSHIFT
/obj/item/weapon/light/tube
name = "light tube"
desc = "A replacement light tube."
@@ -888,6 +916,9 @@ var/global/list/light_type_cache = list()
brightness_range = 15
brightness_power = 9
nightshift_range = 10
nightshift_power = 0.9
/obj/item/weapon/light/bulb
name = "light bulb"
desc = "A replacement light bulb."
@@ -899,6 +930,9 @@ var/global/list/light_type_cache = list()
brightness_power = 4
brightness_color = LIGHT_COLOR_INCANDESCENT_BULB
nightshift_range = 3
nightshift_power = 0.35
/obj/item/weapon/light/throw_impact(atom/hit_atom)
..()
shatter()

View File

@@ -64,10 +64,6 @@
else
security_announcement_down.Announce("[config.alert_desc_red_downto]", "Attention! Code red!")
security_level = SEC_LEVEL_RED
/* - At the time of commit, setting status displays didn't work properly
var/obj/machinery/computer/communications/CC = locate(/obj/machinery/computer/communications,world)
if(CC)
CC.post_status("alert", "redalert")*/
if(SEC_LEVEL_DELTA)
security_announcement_up.Announce("[config.alert_desc_delta]", "Attention! Delta alert level reached!", new_sound = 'sound/effects/siren.ogg')
security_level = SEC_LEVEL_DELTA
@@ -84,6 +80,10 @@
atc.reroute_traffic(yes = 1) // Tell them fuck off we're busy.
else
atc.reroute_traffic(yes = 0)
spawn()
SSnightshift.check_nightshift()
admin_chat_message(message = "Security level is now: [uppertext(get_security_level())]", color = "#CC2222") //VOREStation Add
/proc/get_security_level()