From 7f4c4715e73fd46f9d4c0be4e9ce06a2ba28da98 Mon Sep 17 00:00:00 2001 From: Aryn Date: Sun, 23 Feb 2014 22:51:47 -0700 Subject: [PATCH] Lighting seems to be working now. --- .../Aryn/Lighting/Compatibility.dm | 6 +++- .../Aryn/Lighting/Controller.dm | 4 ++- code/WorkInProgress/Aryn/Lighting/Engine.dm | 31 ++++++++++------- code/WorkInProgress/Aryn/Lighting/Light.dm | 10 +++--- code/WorkInProgress/Aryn/Lighting/Verbs.dm | 33 +++++++++++++++++++ code/game/turfs/turf.dm | 8 +++++ code/modules/power/lighting.dm | 2 +- 7 files changed, 75 insertions(+), 19 deletions(-) create mode 100644 code/WorkInProgress/Aryn/Lighting/Verbs.dm diff --git a/code/WorkInProgress/Aryn/Lighting/Compatibility.dm b/code/WorkInProgress/Aryn/Lighting/Compatibility.dm index e9109bc67f..9c98f5f6c9 100644 --- a/code/WorkInProgress/Aryn/Lighting/Compatibility.dm +++ b/code/WorkInProgress/Aryn/Lighting/Compatibility.dm @@ -1,6 +1,7 @@ area/var/lighting_use_dynamic turf/space/is_outside = 1 +turf/simulated/shuttle/is_outside = 1 /datum/controller/lighting/var/processing = 1 /datum/controller/lighting/var/iteration = 0 @@ -36,6 +37,9 @@ turf_light_data/proc/copy_to(turf/T) atom/proc/SetLuminosity(n) n = min(n,10) //Caelcode. - SetLight(n>>1,n) + if(n > 0) + SetLight(max(1,n>>1),n) + else + SetLight(0,0) luminosity = n //else lighting_controller.initial_lights.Add(src) \ No newline at end of file diff --git a/code/WorkInProgress/Aryn/Lighting/Controller.dm b/code/WorkInProgress/Aryn/Lighting/Controller.dm index 7f93107dd5..da2c32128c 100644 --- a/code/WorkInProgress/Aryn/Lighting/Controller.dm +++ b/code/WorkInProgress/Aryn/Lighting/Controller.dm @@ -89,7 +89,9 @@ var/list/lit_z_levels = list(1,5) started = 1 for(var/turf/T) - if(!T.is_outside) T.UpdateLight() + if(!T.is_outside) + if(!T.lit_value) T.ResetValue() + T.UpdateLight() world << "Lighting initialization took [(world.timeofday-start_time)/world.fps] seconds." world << "Updated [turfs_updated] turfs." diff --git a/code/WorkInProgress/Aryn/Lighting/Engine.dm b/code/WorkInProgress/Aryn/Lighting/Engine.dm index 7b3458b29a..5303323572 100644 --- a/code/WorkInProgress/Aryn/Lighting/Engine.dm +++ b/code/WorkInProgress/Aryn/Lighting/Engine.dm @@ -77,7 +77,7 @@ turf/var/lightpoint/lightSE turf/var/lightpoint/lightSW turf/var/list/lit_by -atom/New() +atom/movable/New() . = ..() if(luminosity) if(!light) @@ -97,17 +97,25 @@ atom/movable/Move() if(o) SetOpacity(1) if(light) light.Reset() - lighting_controller.FlushIconUpdates() + if(lighting_ready()) lighting_controller.FlushIconUpdates() atom/proc/SetLight(intensity, radius) + if(lights_verbose) world << "SetLight([intensity],[radius])" if(!intensity) - if(!light) return + if(!light || !light.intensity) + if(lights_verbose) world << "Still off." + return + if(lights_verbose) world << "Shut off light with [light.lit_turfs.len] turfs lit." light.Off() - light = null + light.intensity = 0 if(lighting_ready()) lighting_controller.FlushIconUpdates() return - if(!light) light = new(src) - if(light.intensity == intensity) return + if(!light) + if(lights_verbose) world << "New light." + light = new(src) + if(light.intensity == intensity) + if(lights_verbose) world << "Same intensity." + return light.radius = min(radius,15) light.intensity = intensity light.Reset() @@ -128,12 +136,14 @@ turf/proc/UpdateLight() turf/proc/AddLight(light/light) if(is_outside) return - if(has_opaque) return + + var/brightness = light.CalculateBrightness(src) + if(brightness <= 0) return if(!lit_by) lit_by = list() lit_by.Add(light) - var/brightness = light.CalculateBrightness(src) + lit_by[light] = brightness if(!has_opaque && lighting_ready()) @@ -145,7 +155,6 @@ turf/proc/AddLight(light/light) lighting_controller.MarkIconUpdate(T) turf/proc/RemoveLight(light/light) - if(has_opaque) return if(lit_by) var/brightness = lit_by[light] lit_by.Remove(light) @@ -159,15 +168,13 @@ turf/proc/ResetValue() lit_value = LIGHTCLAMP(lighting_controller.starlight) return - var/old_value = lit_value - CheckForOpaqueObjects() if(has_opaque) lit_value = 0 else the_part_where_I_calculate_brightness() - if(lighting_ready() && lit_value != old_value) + if(lighting_ready()) the_part_where_I_use_range() turf/proc diff --git a/code/WorkInProgress/Aryn/Lighting/Light.dm b/code/WorkInProgress/Aryn/Lighting/Light.dm index 0fd824eca1..9e6113169a 100644 --- a/code/WorkInProgress/Aryn/Lighting/Light.dm +++ b/code/WorkInProgress/Aryn/Lighting/Light.dm @@ -31,19 +31,21 @@ light/New(atom/atom) src.atom = atom light/proc/Reset() + if(atom.lights_verbose) world << "light.Reset()" Off() - - lit_turfs = list() - if(intensity > 0) - for(var/turf/T in view(atom,radius+1)) + if(atom.lights_verbose) world << "Restoring light." + for(var/turf/T in view(get_turf(atom),radius+1)) if(!T.is_outside) T.AddLight(src) lit_turfs.Add(T) + if(atom.lights_verbose) world << "[lit_turfs.len] turfs added." light/proc/Off() + if(atom.lights_verbose) world << "light.Off()" for(var/turf/T in lit_turfs) T.RemoveLight(src) + lit_turfs = list() light/proc/CalculateBrightness(turf/T) var/square = get_square_dist(atom.x,atom.y,atom.z,T.x,T.y,T.z) diff --git a/code/WorkInProgress/Aryn/Lighting/Verbs.dm b/code/WorkInProgress/Aryn/Lighting/Verbs.dm new file mode 100644 index 0000000000..bf1b40f1ba --- /dev/null +++ b/code/WorkInProgress/Aryn/Lighting/Verbs.dm @@ -0,0 +1,33 @@ +var/icon/lighting_dbg = icon('icons/Testing/Zone.dmi', "created") + +atom/var/lights_verbose = 0 + +obj/machinery/light/verb/ShowInfluence() + set src in world + + lights_verbose = 1 + usr << "[src]" + if(light) + usr << "Intensity: [light.intensity]" + usr << "Radius: [light.radius]" + + for(var/turf/T in light.lit_turfs) + T.overlays += lighting_dbg + spawn(50) + for(var/turf/T in light.lit_turfs) + T.overlays -= lighting_dbg + +turf/verb/ShowData() + set src in world + + usr << "[src]" + usr << "Lit Value: [lit_value]" + usr << "Max Brightness: [max_brightness]" + + usr << "Lit By: " + for(var/light/light in lit_by) + usr << " - [light.atom] \[[lit_by[light]]\][(lit_by[light] == max_brightness ? "(MAX)" : "")]" + light.atom.overlays += lighting_dbg + spawn(50) + for(var/light/light in lit_by) + light.atom.overlays -= lighting_dbg \ No newline at end of file diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 04aa40318c..5747bfdcfd 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -218,6 +218,8 @@ var/turf_light_data/old_lights = new //world << "Replacing [src.type] with [N]" + var/old_opacity = opacity + old_lights.copy_from(src) if(connections) connections.erase_all() @@ -241,6 +243,11 @@ var/turf_light_data/old_lights = new //W.Assimilate_Air() old_lights.copy_to(W) + W.ResetValue() + + if(old_opacity) + W.opacity = 1 + W.SetOpacity(0) if (istype(W,/turf/simulated/floor)) W.RemoveLattice() @@ -260,6 +267,7 @@ var/turf_light_data/old_lights = new var/turf/W = new N( locate(src.x, src.y, src.z) ) old_lights.copy_to(W) + W.ResetValue() if(air_master) air_master.mark_for_update(src) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 76f486e4c4..076a1b28e8 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -605,7 +605,7 @@ /obj/machinery/light/process()//TODO: remove/add this from machines to save on processing as needed ~Carn PRIORITY if(on && light) - use_power(light.radius * LIGHTING_POWER_FACTOR, LIGHT) + use_power(luminosity * LIGHTING_POWER_FACTOR, LIGHT) // called when area power state changes /obj/machinery/light/power_change()