[MIRROR] Overlay lighting component (#469)

* Overlay lighting component (#52413)

Sparks no longer lag, projectile beams move super smoothly, same with mobs and whatnot. This also allows for easy expansion into directional lights, field-of-view, wee-woo rotating lights or whatever.

It does have a downside: things right-clicked or checked through the alt+click tab will show the light overlay:


This is a BYOND limitation, very well worth it IMO.

🆑
add: Smooth movable lighting system implemented. Projectiles, sparks, thrown flashlights or moving mobs with lights should be much smoother and less laggy.
balance: Light sources no longer stack in range, though they still do in intensity.
/🆑

* Overlay lighting component

Co-authored-by: Rohesie <rohesie@gmail.com>
This commit is contained in:
SkyratBot
2020-08-23 20:17:12 +02:00
committed by GitHub
co-authored by Rohesie
parent 4a51355a9e
commit 0b65cc596b
85 changed files with 1082 additions and 395 deletions
+24 -9
View File
@@ -208,7 +208,7 @@
var/active = FALSE
var/max_light_beam_distance = 5
var/light_beam_distance = 5
var/light_object_range = 1
var/light_object_range = 2
var/light_object_power = 2
var/list/obj/effect/abstract/eye_lighting/eye_lighting
var/obj/effect/abstract/eye_lighting/on_mob
@@ -319,6 +319,7 @@
clear_visuals()
var/turf/scanning = scanfrom
var/stop = FALSE
on_mob.set_light_flags(on_mob.light_flags & ~LIGHT_ATTACHED)
on_mob.forceMove(scanning)
for(var/i in 1 to light_beam_distance)
scanning = get_step(scanning, scandir)
@@ -339,6 +340,7 @@
var/obj/effect/abstract/eye_lighting/L = i
L.forceMove(src)
if(!QDELETED(on_mob))
on_mob.set_light_flags(on_mob.light_flags | LIGHT_ATTACHED)
on_mob.forceMove(src)
/obj/item/organ/eyes/robotic/glow/proc/start_visuals()
@@ -355,26 +357,39 @@
/obj/item/organ/eyes/robotic/glow/proc/regenerate_light_effects()
clear_visuals(TRUE)
on_mob = new(src)
on_mob = new (src, light_object_range, light_object_power, current_color_string, LIGHT_ATTACHED)
for(var/i in 1 to light_beam_distance)
LAZYADD(eye_lighting,new /obj/effect/abstract/eye_lighting(src))
LAZYADD(eye_lighting, new /obj/effect/abstract/eye_lighting(src, light_object_range, light_object_power, current_color_string))
sync_light_effects()
/obj/item/organ/eyes/robotic/glow/proc/sync_light_effects()
for(var/I in eye_lighting)
var/obj/effect/abstract/eye_lighting/L = I
L.set_light(light_object_range, light_object_power, current_color_string)
if(on_mob)
on_mob.set_light(1, 1, current_color_string)
for(var/e in eye_lighting)
var/obj/effect/abstract/eye_lighting/eye_lighting = e
eye_lighting.set_light_color(current_color_string)
on_mob?.set_light_color(current_color_string)
/obj/effect/abstract/eye_lighting
light_system = MOVABLE_LIGHT
var/obj/item/organ/eyes/robotic/glow/parent
/obj/effect/abstract/eye_lighting/Initialize()
/obj/effect/abstract/eye_lighting/Initialize(mapload, light_object_range, light_object_power, current_color_string, light_flags)
. = ..()
parent = loc
if(!istype(parent))
stack_trace("/obj/effect/abstract/eye_lighting added to improper parent ([loc]). Deleting.")
return INITIALIZE_HINT_QDEL
if(!isnull(light_object_range))
set_light_range(light_object_range)
if(!isnull(light_object_power))
set_light_power(light_object_power)
if(!isnull(current_color_string))
set_light_color(current_color_string)
if(!isnull(light_flags))
set_light_flags(light_flags)
/obj/item/organ/eyes/moth
name = "moth eyes"
+6 -8
View File
@@ -265,25 +265,24 @@
hitsound = 'sound/weapons/blade1.ogg'
force = 16
toolspeed = 0.7
light_system = MOVABLE_LIGHT
light_range = 1
light_color = LIGHT_COLOR_GREEN
sharpness = SHARP_EDGED
/obj/item/scalpel/advanced/Initialize()
. = ..()
set_light(1)
/obj/item/scalpel/advanced/attack_self(mob/user)
playsound(get_turf(user), 'sound/machines/click.ogg', 50, TRUE)
if(tool_behaviour == TOOL_SCALPEL)
tool_behaviour = TOOL_SAW
to_chat(user, "<span class='notice'>You increase the power of [src], now it can cut bones.</span>")
set_light(2)
set_light_range(2)
force += 1 //we don't want to ruin sharpened stuff
icon_state = "saw_a"
else
tool_behaviour = TOOL_SCALPEL
to_chat(user, "<span class='notice'>You lower the power of [src], it can no longer cut bones.</span>")
set_light(1)
set_light_range(1)
force -= 1
icon_state = "scalpel_a"
@@ -320,11 +319,10 @@
icon_state = "surgicaldrill_a"
hitsound = 'sound/items/welder.ogg'
toolspeed = 0.7
light_system = MOVABLE_LIGHT
light_range = 1
light_color = COLOR_SOFT_RED
/obj/item/surgicaldrill/advanced/Initialize()
. = ..()
set_light(1)
/obj/item/surgicaldrill/advanced/attack_self(mob/user)
playsound(get_turf(user), 'sound/weapons/tap.ogg', 50, TRUE)