Merge pull request #13671 from Cameron653/light_overlay

More light updates!
This commit is contained in:
Casey
2022-09-06 15:43:56 -04:00
committed by CHOMPStation2
parent a06f70b32b
commit ceca2956e1
5 changed files with 63 additions and 36 deletions

View File

@@ -53,6 +53,7 @@
var/emagged = 0
var/failmsg = ""
var/charge = 0
var/selected_color = LIGHT_COLOR_INCANDESCENT_TUBE //Default color!
// Eating used bulbs gives us bulb shards
var/bulb_shards = 0
@@ -141,6 +142,10 @@
return
*/
to_chat(usr, "It has [uses] lights remaining.")
var/new_color = input(usr, "Choose a color to set the light to! (Default is [LIGHT_COLOR_INCANDESCENT_TUBE])", "", selected_color) as color|null
if(new_color)
selected_color = new_color
to_chat(usr, "The light color has been changed.")
/obj/item/device/lightreplacer/update_icon()
icon_state = "lightreplacer[emagged]"
@@ -184,19 +189,13 @@
to_chat(U, "<span class='notice'>\The [src] has fabricated a new bulb from the broken bulbs it has stored. It now has [uses] uses.</span>")
playsound(src, 'sound/machines/ding.ogg', 50, 1)
target.status = LIGHT_EMPTY
target.installed_light = null //Remove the light!
target.update()
var/obj/item/weapon/light/L2 = new target.light_type()
target.status = L2.status
target.switchcount = L2.switchcount
target.rigged = emagged
target.brightness_range = L2.brightness_range
target.brightness_power = L2.brightness_power
target.brightness_color = L2.brightness_color
target.on = target.has_power()
L2.brightness_color = selected_color
target.insert_bulb(L2) //Call the insertion proc.
target.update()
qdel(L2)
if(target.on && target.rigged)
target.explode()

View File

@@ -409,24 +409,33 @@
var/datum/matter_synth/glass = null
/obj/item/device/lightreplacer/dogborg/attack_self(mob/user)//Recharger refill is so last season. Now we recycle without magic!
if(uses >= max_uses)
to_chat(user, "<span class='warning'>[src.name] is full.</span>")
var/choice = tgui_alert(user, "Do you wish to check the reserves or change the color?", "Selection List", list("Reserves", "Color"))
if(choice == "Color")
var/new_color = input(usr, "Choose a color to set the light to! (Default is [LIGHT_COLOR_INCANDESCENT_TUBE])", "", selected_color) as color|null
if(new_color)
selected_color = new_color
to_chat(user, "The light color has been changed.")
return
if(uses < max_uses && cooldown == 0)
if(glass.energy < 125)
to_chat(user, "<span class='warning'>Insufficient material reserves.</span>")
return
to_chat(user, "It has [uses] lights remaining. Attempting to fabricate a replacement. Please stand still.")
cooldown = 1
if(do_after(user, 50))
glass.use_charge(125)
add_uses(1)
cooldown = 0
else
cooldown = 0
else
to_chat(user, "It has [uses] lights remaining.")
return
if(uses >= max_uses)
to_chat(user, "<span class='warning'>[src.name] is full.</span>")
return
if(uses < max_uses && cooldown == 0)
if(glass.energy < 125)
to_chat(user, "<span class='warning'>Insufficient material reserves.</span>")
return
to_chat(user, "It has [uses] lights remaining. Attempting to fabricate a replacement. Please stand still.")
cooldown = 1
if(do_after(user, 50))
glass.use_charge(125)
add_uses(1)
cooldown = 0
else
cooldown = 0
else
to_chat(user, "It has [uses] lights remaining.")
return
//Pounce stuff for K-9
/obj/item/weapon/dogborg/pounce

View File

@@ -143,7 +143,7 @@ GLOBAL_LIST_EMPTY(apcs)
var/updating_icon = 0
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/nightshift_setting = NIGHTSHIFT_AUTO
var/last_nightshift_switch = 0
@@ -198,7 +198,7 @@ GLOBAL_LIST_EMPTY(apcs)
if(!pixel_x && !pixel_y)
offset_apc()
if(building)
area = get_area(src)
area.apc = src
@@ -1360,6 +1360,7 @@ GLOBAL_LIST_EMPTY(apcs)
for(var/obj/machinery/light/L in area)
L.nightshift_mode(new_state)
L.update() //For some reason it gets hung up on updating the overlay for the light fixture somewhere down the line. This fixes it.
CHECK_TICK
#undef APC_UPDATE_ICON_COOLDOWN

View File

@@ -215,6 +215,7 @@ var/global/list/light_type_cache = list()
idle_power_usage = 2
active_power_usage = 10
power_channel = LIGHT //Lights are calc'd via area so they dont need to be in the machine list
var/obj/item/weapon/light/installed_light //What light is currently in the socket! Updated in new()
var/on = 0 // 1 if on, 0 if off
var/brightness_range
var/brightness_power
@@ -346,7 +347,7 @@ var/global/list/light_type_cache = list()
else
if(start_with_cell && !no_emergency)
cell = new/obj/item/weapon/cell/emergency_light(src)
var/obj/item/weapon/light/L = get_light_type_instance(light_type)
var/obj/item/weapon/light/L = get_light_type_instance(light_type) //This is fine, but old code.
update_from_bulb(L)
if(prob(L.broken_chance))
broken(1)
@@ -439,7 +440,7 @@ var/global/list/light_type_cache = list()
return
current_alert = null
var/obj/item/weapon/light/L = get_light_type_instance(light_type)
var/obj/item/weapon/light/L = installed_light //This ensures any special bulbs will stay special!
if(L)
update_from_bulb(L)
@@ -464,11 +465,12 @@ var/global/list/light_type_cache = list()
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
var/correct_overlay = nightshift_enabled ? brightness_color_ns : brightness_color //Gives lights the correct overlay if NS is enabled.
if(current_alert) //Oh no, we're on fire! Or the atmos is bad! Let's change the color
correct_range = brightness_range
correct_power = brightness_power
correct_color = brightness_color
if(light_range != correct_range || light_power != correct_power || light_color != correct_color)
if(light_range != correct_range || light_power != correct_power || light_color != correct_color || overlay_color != correct_overlay)
if(!auto_flicker)
switchcount++
if(rigged)
@@ -487,6 +489,7 @@ var/global/list/light_type_cache = list()
else
update_use_power(USE_POWER_ACTIVE)
set_light(correct_range, correct_power, correct_color)
overlay_color = correct_overlay
if(cell?.charge < cell?.maxcharge)
START_PROCESSING(SSobj, src)
else if(has_emergency_power(LIGHT_EMERGENCY_POWER_USE) && !turned_off())
@@ -571,6 +574,7 @@ var/global/list/light_type_cache = list()
brightness_range = L.brightness_range
brightness_power = L.brightness_power
brightness_color = L.brightness_color
overlay_color = L.brightness_color
brightness_range_ns = L.nightshift_range
brightness_power_ns = L.nightshift_power
@@ -580,7 +584,8 @@ var/global/list/light_type_cache = list()
/obj/machinery/light/proc/insert_bulb(obj/item/weapon/light/L)
update_from_bulb(L)
qdel(L)
installed_light = L
L.loc = src //Move it into the socket!
on = powered()
update()
@@ -593,16 +598,17 @@ var/global/list/light_type_cache = list()
explode()
/obj/machinery/light/proc/remove_bulb()
. = new light_type(src.loc, src)
//. = new light_type(src.loc, src)
switchcount = 0
installed_light = null
status = LIGHT_EMPTY
update()
/obj/machinery/light/attackby(obj/item/W, mob/user)
//Light replacer code
if(istype(W, /obj/item/device/lightreplacer))
if(istype(W, /obj/item/device/lightreplacer)) //These will never be modified, so it's fine to use old code.
var/obj/item/device/lightreplacer/LR = W
if(isliving(user))
var/mob/living/U = user
@@ -619,7 +625,9 @@ var/global/list/light_type_cache = list()
return
to_chat(user, "You insert [W].")
user.drop_item()
insert_bulb(W)
update() //Like other places, this is done later down the line but this is essential to updating the overlay when nightmode is involved. Again, I have no idea WHY.
src.add_fingerprint(user)
// attempt to break the light
@@ -724,6 +732,7 @@ var/global/list/light_type_cache = list()
if(cell.charge > 300) //it's meant to handle 120 W, ya doofus
visible_message("<span class='warning'>[src] short-circuits from too powerful of a power cell!</span>")
status = LIGHT_BURNED
installed_light.status = status
return FALSE
cell.use(pwr)
set_light(brightness_range * bulb_emergency_brightness_mul, max(bulb_emergency_pow_min, bulb_emergency_pow_mul * (cell.charge / cell.maxcharge)), bulb_emergency_colour)
@@ -805,8 +814,11 @@ var/global/list/light_type_cache = list()
else
to_chat(user, "You remove the light [get_fitting_name()].")
// create a light tube/bulb item and put it in the user's hand
user.put_in_active_hand(remove_bulb()) //puts it in our active hand
//Let's actually put the real bulb in their hand.
installed_light.status = status //Update the bulb they're being given. If it's broken, the bulb should be as well!
user.put_in_active_hand(installed_light) //puts it in our active hand
installed_light.update_icon()
remove_bulb()
/obj/machinery/light/flamp/attack_hand(mob/user)
if(lamp_shade)
@@ -845,13 +857,16 @@ var/global/list/light_type_cache = list()
var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
s.set_up(3, 1, src)
s.start()
status = LIGHT_BROKEN
status = LIGHT_BROKEN //This occasionally runtimes when it occurs midround after build mode spawns a broken light. No idea why.
installed_light.status = status
update()
/obj/machinery/light/proc/fix()
if(status == LIGHT_OK)
return
status = LIGHT_OK
if(installed_light)
installed_light.status = LIGHT_OK
on = 1
update()

View File

@@ -14,6 +14,9 @@
// create a new lighting fixture
/obj/machinery/light/New()
..()
installed_light = new light_type
installed_light.status = status //This is just in case RNG decides to break the light at round start!
installed_light.update_icon() //Give it the proper sprite!
//Vorestation addition, so large mobs stop looking stupid in front of lights.
if (dir == SOUTH) // Lights are backwards, SOUTH lights face north (they are on south wall)
layer = ABOVE_MOB_LAYER