mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-26 14:39:58 +01:00
Refactor area and turf lighting (#60954)
This commit is contained in:
@@ -4,12 +4,12 @@
|
||||
name = "Cabin"
|
||||
icon_state = "away2"
|
||||
requires_power = TRUE
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_ENABLED
|
||||
static_lighting = TRUE
|
||||
|
||||
/area/awaymission/cabin/snowforest
|
||||
name = "Snow Forest"
|
||||
icon_state = "away"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
|
||||
static_lighting = FALSE
|
||||
|
||||
/area/awaymission/cabin/snowforest/sovietsurface
|
||||
name = "Snow Forest"
|
||||
@@ -20,7 +20,7 @@
|
||||
name = "Lumbermill"
|
||||
icon_state = "away3"
|
||||
requires_power = FALSE
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
|
||||
static_lighting = FALSE
|
||||
|
||||
/area/awaymission/cabin/caves/sovietcave
|
||||
name = "Soviet Bunker"
|
||||
@@ -29,7 +29,9 @@
|
||||
/area/awaymission/cabin/caves
|
||||
name = "North Snowdin Caves"
|
||||
icon_state = "awaycontent15"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
|
||||
static_lighting = FALSE
|
||||
base_lighting_alpha = 255
|
||||
base_lighting_color = COLOR_WHITE
|
||||
|
||||
/area/awaymission/cabin/caves/mountain
|
||||
name = "North Snowdin Mountains"
|
||||
@@ -41,7 +43,7 @@
|
||||
icon = 'icons/obj/fireplace.dmi'
|
||||
icon_state = "firepit-active"
|
||||
density = FALSE
|
||||
var/active = 1
|
||||
var/active = TRUE
|
||||
|
||||
/obj/structure/firepit/Initialize()
|
||||
. = ..()
|
||||
|
||||
@@ -19,7 +19,7 @@
|
||||
/area/awaymission/caves/research
|
||||
name = "Research Outpost"
|
||||
icon_state = "awaycontent5"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_ENABLED
|
||||
static_lighting = TRUE
|
||||
|
||||
/area/awaymission/caves/northblock //engineering, bridge (not really north but it doesnt really need its own APC)
|
||||
|
||||
|
||||
@@ -1,7 +1,3 @@
|
||||
/area/awaymission/vr/murderdome
|
||||
name = "Murderdome"
|
||||
icon_state = "awaycontent8"
|
||||
pacifist = FALSE
|
||||
|
||||
/obj/structure/window/reinforced/fulltile/indestructable
|
||||
name = "robust window"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
/area/awaymission/research
|
||||
name = "Research Outpost"
|
||||
icon_state = "away"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_ENABLED
|
||||
static_lighting = TRUE
|
||||
|
||||
/area/awaymission/research/interior
|
||||
name = "Research Inside"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
name = "Snowdin"
|
||||
icon_state = "awaycontent1"
|
||||
requires_power = FALSE
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
|
||||
static_lighting = FALSE
|
||||
|
||||
/area/awaymission/snowdin/outside
|
||||
name = "Snowdin Tundra Plains"
|
||||
@@ -14,7 +14,7 @@
|
||||
name = "Snowdin Outpost"
|
||||
icon_state = "awaycontent2"
|
||||
requires_power = TRUE
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_ENABLED
|
||||
static_lighting = TRUE
|
||||
|
||||
/area/awaymission/snowdin/post/medbay
|
||||
name = "Snowdin Outpost - Medbay"
|
||||
@@ -96,12 +96,16 @@
|
||||
/area/awaymission/snowdin/igloo
|
||||
name = "Snowdin Igloos"
|
||||
icon_state = "awaycontent14"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
|
||||
static_lighting = FALSE
|
||||
base_lighting_alpha = 255
|
||||
base_lighting_color = COLOR_WHITE
|
||||
|
||||
/area/awaymission/snowdin/cave
|
||||
name = "Snowdin Caves"
|
||||
icon_state = "awaycontent15"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
|
||||
static_lighting = FALSE
|
||||
base_lighting_color = COLOR_WHITE
|
||||
base_lighting_alpha = 255
|
||||
|
||||
/area/awaymission/snowdin/cave/cavern
|
||||
name = "Snowdin Depths"
|
||||
@@ -115,18 +119,18 @@
|
||||
/area/awaymission/snowdin/base
|
||||
name = "Snowdin Main Base"
|
||||
icon_state = "awaycontent16"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_ENABLED
|
||||
static_lighting = TRUE
|
||||
requires_power = TRUE
|
||||
|
||||
/area/awaymission/snowdin/dungeon1
|
||||
name = "Snowdin Depths"
|
||||
icon_state = "awaycontent17"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_ENABLED
|
||||
static_lighting = TRUE
|
||||
|
||||
/area/awaymission/snowdin/sekret
|
||||
name = "Snowdin Operations"
|
||||
icon_state = "awaycontent18"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_ENABLED
|
||||
static_lighting = TRUE
|
||||
requires_power = TRUE
|
||||
|
||||
/area/shuttle/snowdin/elevator1
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
/datum/round_event/aurora_caelus/start()
|
||||
for(var/area in GLOB.sortedAreas)
|
||||
var/area/A = area
|
||||
if(initial(A.dynamic_lighting) == DYNAMIC_LIGHTING_IFSTARLIGHT)
|
||||
if(A.area_flags & AREA_USES_STARLIGHT)
|
||||
for(var/turf/open/space/S in A)
|
||||
S.set_light(S.light_range * 3, S.light_power * 0.5)
|
||||
|
||||
@@ -39,14 +39,14 @@
|
||||
var/aurora_color = aurora_colors[aurora_progress]
|
||||
for(var/area in GLOB.sortedAreas)
|
||||
var/area/A = area
|
||||
if(initial(A.dynamic_lighting) == DYNAMIC_LIGHTING_IFSTARLIGHT)
|
||||
if(A.area_flags & AREA_USES_STARLIGHT)
|
||||
for(var/turf/open/space/S in A)
|
||||
S.set_light(l_color = aurora_color)
|
||||
|
||||
/datum/round_event/aurora_caelus/end()
|
||||
for(var/area in GLOB.sortedAreas)
|
||||
var/area/A = area
|
||||
if(initial(A.dynamic_lighting) == DYNAMIC_LIGHTING_IFSTARLIGHT)
|
||||
if(A.area_flags & AREA_USES_STARLIGHT)
|
||||
for(var/turf/open/space/S in A)
|
||||
fade_to_black(S)
|
||||
priority_announce("The aurora caelus event is now ending. Starlight conditions will slowly return to normal. When this has concluded, please return to your workplace and continue work as normal. Have a pleasant shift, [station_name()], and thank you for watching with us.",
|
||||
|
||||
@@ -1,32 +1,59 @@
|
||||
/area
|
||||
luminosity = TRUE
|
||||
var/dynamic_lighting = DYNAMIC_LIGHTING_ENABLED
|
||||
luminosity = 1
|
||||
///The mutable appearance we underlay to show light
|
||||
var/mutable_appearance/lighting_effect = null
|
||||
///Whether this area has a currently active base lighting, bool
|
||||
var/area_has_base_lighting = FALSE
|
||||
///alpha 0-255 of lighting_effect and thus baselighting intensity
|
||||
var/base_lighting_alpha = 0
|
||||
///The colour of the light acting on this area
|
||||
var/base_lighting_color = null
|
||||
|
||||
/area/proc/set_dynamic_lighting(new_dynamic_lighting = DYNAMIC_LIGHTING_ENABLED)
|
||||
if (new_dynamic_lighting == dynamic_lighting)
|
||||
/area/proc/set_base_lighting(new_base_lighting_color = -1, new_alpha = -1)
|
||||
if(base_lighting_alpha == new_alpha && base_lighting_color == new_base_lighting_color)
|
||||
return FALSE
|
||||
|
||||
dynamic_lighting = new_dynamic_lighting
|
||||
|
||||
if (IS_DYNAMIC_LIGHTING(src))
|
||||
cut_overlay(/obj/effect/fullbright)
|
||||
blend_mode = BLEND_DEFAULT
|
||||
for (var/turf/T in src)
|
||||
if (IS_DYNAMIC_LIGHTING(T))
|
||||
T.lighting_build_overlay()
|
||||
|
||||
else
|
||||
add_overlay(/obj/effect/fullbright)
|
||||
blend_mode = BLEND_MULTIPLY
|
||||
for (var/turf/T in src)
|
||||
if (T.lighting_object)
|
||||
T.lighting_clear_overlay()
|
||||
|
||||
if(new_alpha != -1)
|
||||
base_lighting_alpha = new_alpha
|
||||
if(new_base_lighting_color != -1)
|
||||
base_lighting_color = new_base_lighting_color
|
||||
update_base_lighting()
|
||||
return TRUE
|
||||
|
||||
/area/vv_edit_var(var_name, var_value)
|
||||
switch(var_name)
|
||||
if(NAMEOF(src, dynamic_lighting))
|
||||
set_dynamic_lighting(var_value)
|
||||
if("base_lighting_color")
|
||||
set_base_lighting(new_base_lighting_color = var_value)
|
||||
return TRUE
|
||||
if("base_lighting_alpha")
|
||||
set_base_lighting(new_alpha = var_value)
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
/area/proc/update_base_lighting()
|
||||
if(!area_has_base_lighting && (!base_lighting_alpha || !base_lighting_color))
|
||||
return
|
||||
|
||||
if(!area_has_base_lighting)
|
||||
add_base_lighting()
|
||||
return
|
||||
remove_base_lighting()
|
||||
if(base_lighting_alpha && base_lighting_color)
|
||||
add_base_lighting()
|
||||
|
||||
/area/proc/remove_base_lighting()
|
||||
for(var/turf/T in src)
|
||||
T.cut_overlay(lighting_effect)
|
||||
QDEL_NULL(lighting_effect)
|
||||
area_has_base_lighting = FALSE
|
||||
|
||||
/area/proc/add_base_lighting()
|
||||
lighting_effect = mutable_appearance('icons/effects/alphacolors.dmi', "white")
|
||||
lighting_effect.plane = LIGHTING_PLANE
|
||||
lighting_effect.layer = LIGHTING_PRIMARY_LAYER
|
||||
lighting_effect.blend_mode = BLEND_ADD
|
||||
lighting_effect.alpha = base_lighting_alpha
|
||||
lighting_effect.color = base_lighting_color
|
||||
for(var/turf/T in src)
|
||||
T.add_overlay(lighting_effect)
|
||||
T.luminosity = 1
|
||||
area_has_base_lighting = TRUE
|
||||
|
||||
@@ -1,14 +1,12 @@
|
||||
|
||||
/proc/create_all_lighting_objects()
|
||||
for(var/area/A in world)
|
||||
if(!IS_DYNAMIC_LIGHTING(A))
|
||||
if(!A.static_lighting)
|
||||
continue
|
||||
|
||||
for(var/turf/T in A)
|
||||
|
||||
if(!IS_DYNAMIC_LIGHTING(T))
|
||||
if(T.always_lit)
|
||||
continue
|
||||
|
||||
new/datum/lighting_object(T)
|
||||
CHECK_TICK
|
||||
CHECK_TICK
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
qdel(lighting_object, force=TRUE) //Shitty fix for lighting objects persisting after death
|
||||
|
||||
var/area/our_area = loc
|
||||
if (!IS_DYNAMIC_LIGHTING(our_area) && !light_sources)
|
||||
if (!our_area.static_lighting && !light_sources)
|
||||
return
|
||||
|
||||
new/datum/lighting_object(src)
|
||||
@@ -97,11 +97,16 @@
|
||||
|
||||
/turf/proc/change_area(area/old_area, area/new_area)
|
||||
if(SSlighting.initialized)
|
||||
if (new_area.dynamic_lighting != old_area.dynamic_lighting)
|
||||
if (new_area.dynamic_lighting)
|
||||
if (new_area.static_lighting != old_area.static_lighting)
|
||||
if (new_area.static_lighting)
|
||||
lighting_build_overlay()
|
||||
else
|
||||
lighting_clear_overlay()
|
||||
//Inherit overlay of new area
|
||||
if(old_area.lighting_effect)
|
||||
cut_overlay(old_area.lighting_effect)
|
||||
if(new_area.lighting_effect)
|
||||
add_overlay(new_area.lighting_effect)
|
||||
|
||||
/turf/proc/generate_missing_corners()
|
||||
if (!lighting_corner_NE)
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
|
||||
GLOBAL_DATUM_INIT(fullbright_overlay, /mutable_appearance, create_fullbright_overlay())
|
||||
|
||||
/proc/create_fullbright_overlay()
|
||||
var/mutable_appearance/lighting_effect = mutable_appearance('icons/effects/alphacolors.dmi', "white")
|
||||
lighting_effect.plane = LIGHTING_PLANE
|
||||
lighting_effect.layer = LIGHTING_PRIMARY_LAYER
|
||||
lighting_effect.blend_mode = BLEND_ADD
|
||||
return lighting_effect
|
||||
|
||||
/area
|
||||
///Whether this area allows static lighting and thus loads the lighting objects
|
||||
var/static_lighting = TRUE
|
||||
|
||||
//Non static lighting areas.
|
||||
//Any lighting area that wont support static lights.
|
||||
//These areas will NOT have corners generated.
|
||||
@@ -29,7 +29,9 @@
|
||||
/area/mafia
|
||||
name = "Mafia Minigame"
|
||||
icon_state = "mafia"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
|
||||
static_lighting = FALSE
|
||||
base_lighting_color = COLOR_WHITE
|
||||
base_lighting_alpha = 255
|
||||
requires_power = FALSE
|
||||
has_gravity = STANDARD_GRAVITY
|
||||
flags_1 = NONE
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/area/survivalpod
|
||||
name = "\improper Emergency Shelter"
|
||||
icon_state = "away"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
|
||||
static_lighting = TRUE
|
||||
requires_power = FALSE
|
||||
has_gravity = STANDARD_GRAVITY
|
||||
area_flags = BLOBS_ALLOWED | UNIQUE_AREA | CULT_PERMITTED
|
||||
|
||||
@@ -91,7 +91,9 @@
|
||||
/area/ai_multicam_room
|
||||
name = "ai_multicam_room"
|
||||
icon_state = "ai_camera_room"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
|
||||
static_lighting = FALSE
|
||||
base_lighting_color = COLOR_WHITE
|
||||
base_lighting_alpha = 255
|
||||
area_flags = NOTELEPORT | HIDDEN_AREA | UNIQUE_AREA
|
||||
ambientsounds = null
|
||||
flags_1 = NONE
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
if(!..())
|
||||
return
|
||||
var/area/local_area = get_area(user)
|
||||
if(!IS_DYNAMIC_LIGHTING(local_area))
|
||||
if(!local_area.static_lighting)
|
||||
to_chat(user, span_warning("You cannot place [src] in this area!"))
|
||||
return
|
||||
return TRUE
|
||||
|
||||
@@ -351,7 +351,9 @@ GLOBAL_VAR_INIT(hhMysteryRoomNumber, rand(1, 999999))
|
||||
requires_power = FALSE
|
||||
has_gravity = TRUE
|
||||
area_flags = NOTELEPORT | HIDDEN_AREA
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
|
||||
static_lighting = FALSE
|
||||
base_lighting_alpha = 255
|
||||
base_lighting_color = COLOR_WHITE
|
||||
ambientsounds = list('sound/ambience/servicebell.ogg')
|
||||
var/roomnumber = 0
|
||||
var/obj/item/hilbertshotel/parentSphere
|
||||
|
||||
Reference in New Issue
Block a user