mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-22 12:41:09 +01:00
[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:
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user