From 0ee1f322026bab82aba9504b99657bfeac6fdcc2 Mon Sep 17 00:00:00 2001 From: Albert Iordache Date: Thu, 24 Nov 2011 14:43:25 +0200 Subject: [PATCH] Some cleanup on the Ultralight code --- code/unused/Ultralight.dm | 502 +++++++++++++++++++------------------- 1 file changed, 248 insertions(+), 254 deletions(-) diff --git a/code/unused/Ultralight.dm b/code/unused/Ultralight.dm index 448a26359e5..bc30bd06212 100644 --- a/code/unused/Ultralight.dm +++ b/code/unused/Ultralight.dm @@ -2,18 +2,9 @@ var const - UL_LUMINOSITY = 0 - UL_SQUARELIGHT = 0 - - UL_RGB = 1 - UL_ROUNDLIGHT = 2 - UL_I_FALLOFF_SQUARE = 0 UL_I_FALLOFF_ROUND = 1 - UL_I_LUMINOSITY = 0 - UL_I_RGB = 1 - UL_I_LIT = 0 UL_I_EXTINGUISHED = 1 UL_I_ONZERO = 2 @@ -21,8 +12,7 @@ var ul_LightingEnabled = 1 ul_LightingResolution = 1 ul_Steps = 7 - ul_LightingModel = UL_I_RGB - ul_FalloffStyle = UL_I_FALLOFF_ROUND + ul_FalloffStyle = UL_I_FALLOFF_ROUND // Sets the lighting falloff to be either squared or circular. ul_TopLuminosity = 0 ul_Layer = 10 ul_SuppressLightLevelChanges = 0 @@ -32,9 +22,8 @@ var 7, 7) -proc - ul_Clamp(var/Value) - return min(max(Value, 0), ul_Steps) +proc/ul_Clamp(var/Value) + return min(max(Value, 0), ul_Steps) atom var @@ -44,200 +33,205 @@ atom ul_Extinguished = UL_I_ONZERO - proc - ul_SetLuminosity(var/Red, var/Green = Red, var/Blue = Red) +atom/proc/ul_SetLuminosity(var/Red, var/Green = Red, var/Blue = Red) - if(LuminosityRed == Red && LuminosityGreen == Green && LuminosityBlue == Blue) - return //No point doing all that work if it won't have any effect anyways... + if(LuminosityRed == Red && LuminosityGreen == Green && LuminosityBlue == Blue) + return //No point doing all that work if it won't have any effect anyways... - if (ul_Extinguished == UL_I_EXTINGUISHED) - LuminosityRed = Red - LuminosityGreen = Green - LuminosityBlue = Blue + if (ul_Extinguished == UL_I_EXTINGUISHED) + LuminosityRed = Red + LuminosityGreen = Green + LuminosityBlue = Blue - return - - if (ul_IsLuminous()) - ul_Extinguish() - - LuminosityRed = Red - LuminosityGreen = Green - LuminosityBlue = Blue - - ul_Extinguished = UL_I_ONZERO - - if (ul_IsLuminous()) - ul_Illuminate() - - return - - ul_Illuminate() - if (ul_Extinguished == UL_I_LIT) - return - - ul_Extinguished = UL_I_LIT - - ul_UpdateTopLuminosity() - luminosity = ul_Luminosity() - - for(var/turf/Affected in view(ul_Luminosity(), src)) - var/Falloff = src.ul_FalloffAmount(Affected) - - var/DeltaRed = LuminosityRed - Falloff - var/DeltaGreen = LuminosityGreen - Falloff - var/DeltaBlue = LuminosityBlue - Falloff - - if(ul_IsLuminous(DeltaRed, DeltaGreen, DeltaBlue)) - - Affected.LightLevelRed += max(DeltaRed, 0) - Affected.LightLevelGreen += max(DeltaGreen, 0) - Affected.LightLevelBlue += max(DeltaBlue, 0) - - Affected.MaxRed += LuminosityRed - Affected.MaxGreen += LuminosityGreen - Affected.MaxBlue += LuminosityBlue - - Affected.ul_UpdateLight() - - if (ul_SuppressLightLevelChanges == 0) - Affected.ul_LightLevelChanged() - - for(var/atom/AffectedAtom in Affected) - AffectedAtom.ul_LightLevelChanged() - return + return + if (ul_IsLuminous()) ul_Extinguish() - if (ul_Extinguished != UL_I_LIT) - return + LuminosityRed = Red + LuminosityGreen = Green + LuminosityBlue = Blue - ul_Extinguished = UL_I_EXTINGUISHED + ul_Extinguished = UL_I_ONZERO - for(var/turf/Affected in view(ul_Luminosity(), src)) + if (ul_IsLuminous()) + ul_Illuminate() - var/Falloff = ul_FalloffAmount(Affected) + return - var/DeltaRed = LuminosityRed - Falloff - var/DeltaGreen = LuminosityGreen - Falloff - var/DeltaBlue = LuminosityBlue - Falloff - - if(ul_IsLuminous(DeltaRed, DeltaGreen, DeltaBlue)) - - Affected.LightLevelRed -= max(DeltaRed, 0) - Affected.LightLevelGreen -= max(DeltaGreen, 0) - Affected.LightLevelBlue -= max(DeltaBlue, 0) - - Affected.MaxRed -= LuminosityRed - Affected.MaxGreen -= LuminosityGreen - Affected.MaxBlue -= LuminosityBlue - - Affected.ul_UpdateLight() - - if (ul_SuppressLightLevelChanges == 0) - Affected.ul_LightLevelChanged() - - for(var/atom/AffectedAtom in Affected) - AffectedAtom.ul_LightLevelChanged() - - luminosity = 0 - - return - - ul_FalloffAmount(var/atom/ref) - if (ul_FalloffStyle == UL_I_FALLOFF_ROUND) - var/x = (ref.x - src.x) - var/y = (ref.y - src.y) - if ((x*x + y*y) > ul_FastRoot.len) - for(var/i = ul_FastRoot.len, i <= x*x+y*y, i++) - ul_FastRoot += round(sqrt(x*x+y*y)) - return round(ul_LightingResolution * ul_FastRoot[x*x + y*y + 1], 1) - - else if (ul_FalloffStyle == UL_I_FALLOFF_SQUARE) - return get_dist(src, ref) - - return 0 - - ul_SetOpacity(var/NewOpacity) - if(opacity != NewOpacity) - - var/list/Blanked = ul_BlankLocal() - var/atom/T = src - while(T && !isturf(T)) - T = T.loc - - opacity = NewOpacity - - if(T) - T:LightLevelRed = 0 - T:LightLevelGreen = 0 - T:LightLevelBlue = 0 - - ul_UnblankLocal(Blanked) - - return - - ul_UnblankLocal(var/list/ReApply = view(ul_TopLuminosity, src)) - for(var/atom/Light in ReApply) - if(Light.ul_IsLuminous()) - Light.ul_Illuminate() - - return - - ul_BlankLocal() - var/list/Blanked = list( ) - var/TurfAdjust = isturf(src) ? 1 : 0 - - for(var/atom/Affected in view(ul_TopLuminosity, src)) - if(Affected.ul_IsLuminous() && Affected.ul_Extinguished == UL_I_LIT && (ul_FalloffAmount(Affected) <= Affected.luminosity + TurfAdjust)) - Affected.ul_Extinguish() - Blanked += Affected - - return Blanked - - ul_UpdateTopLuminosity() - - if (ul_TopLuminosity < LuminosityRed) - ul_TopLuminosity = LuminosityRed - - if (ul_TopLuminosity < LuminosityGreen) - ul_TopLuminosity = LuminosityGreen - - if (ul_TopLuminosity < LuminosityBlue) - ul_TopLuminosity = LuminosityBlue - - return - - ul_Luminosity() - return max(LuminosityRed, LuminosityGreen, LuminosityBlue) - - ul_IsLuminous(var/Red = LuminosityRed, var/Green = LuminosityGreen, var/Blue = LuminosityBlue) - return (Red > 0 || Green > 0 || Blue > 0) - - ul_LightLevelChanged() - //Designed for client projects to use. Called on items when the turf they are in has its light level changed - return - - New() - ..() - if(ul_IsLuminous()) - spawn(1) - ul_Illuminate() +atom/proc/ul_Illuminate() + if (ul_Extinguished == UL_I_LIT) return - Del() - if(ul_IsLuminous()) - ul_Extinguish() + ul_Extinguished = UL_I_LIT - ..() + ul_UpdateTopLuminosity() + luminosity = ul_Luminosity() + for(var/turf/Affected in view(ul_Luminosity(), src)) + var/Falloff = src.ul_FalloffAmount(Affected) + + var/DeltaRed = LuminosityRed - Falloff + var/DeltaGreen = LuminosityGreen - Falloff + var/DeltaBlue = LuminosityBlue - Falloff + + if(ul_IsLuminous(DeltaRed, DeltaGreen, DeltaBlue)) + + Affected.LightLevelRed += max(DeltaRed, 0) + Affected.LightLevelGreen += max(DeltaGreen, 0) + Affected.LightLevelBlue += max(DeltaBlue, 0) + + Affected.MaxRed += LuminosityRed + Affected.MaxGreen += LuminosityGreen + Affected.MaxBlue += LuminosityBlue + + Affected.ul_UpdateLight() + + if (ul_SuppressLightLevelChanges == 0) + Affected.ul_LightLevelChanged() + + for(var/atom/AffectedAtom in Affected) + AffectedAtom.ul_LightLevelChanged() + return + +atom/proc/ul_Extinguish() + + if (ul_Extinguished != UL_I_LIT) return - movable - Move() - ul_Extinguish() - ..() + ul_Extinguished = UL_I_EXTINGUISHED + + for(var/turf/Affected in view(ul_Luminosity(), src)) + + var/Falloff = ul_FalloffAmount(Affected) + + var/DeltaRed = LuminosityRed - Falloff + var/DeltaGreen = LuminosityGreen - Falloff + var/DeltaBlue = LuminosityBlue - Falloff + + if(ul_IsLuminous(DeltaRed, DeltaGreen, DeltaBlue)) + + Affected.LightLevelRed -= max(DeltaRed, 0) + Affected.LightLevelGreen -= max(DeltaGreen, 0) + Affected.LightLevelBlue -= max(DeltaBlue, 0) + + Affected.MaxRed -= LuminosityRed + Affected.MaxGreen -= LuminosityGreen + Affected.MaxBlue -= LuminosityBlue + + Affected.ul_UpdateLight() + + if (ul_SuppressLightLevelChanges == 0) + Affected.ul_LightLevelChanged() + + for(var/atom/AffectedAtom in Affected) + AffectedAtom.ul_LightLevelChanged() + + luminosity = 0 + + return + + +/* + Calculates the correct lighting falloff value (used to calculate what brightness to set the turf to) to use, + when called on a luminous atom and passed an atom in the turf to be lit. + + Supports multiple configurations, BS12 uses the circular falloff setting. This setting uses an array lookup + to avoid the cost of the square root function. +*/ +atom/proc/ul_FalloffAmount(var/atom/ref) + if (ul_FalloffStyle == UL_I_FALLOFF_ROUND) + var/x = (ref.x - src.x) + var/y = (ref.y - src.y) + if ((x*x + y*y) > ul_FastRoot.len) + for(var/i = ul_FastRoot.len, i <= x*x+y*y, i++) + ul_FastRoot += round(sqrt(x*x+y*y)) + return round(ul_LightingResolution * ul_FastRoot[x*x + y*y + 1], 1) + + else if (ul_FalloffStyle == UL_I_FALLOFF_SQUARE) + return get_dist(src, ref) + + return 0 + +atom/proc/ul_SetOpacity(var/NewOpacity) + if(opacity != NewOpacity) + + var/list/Blanked = ul_BlankLocal() + var/atom/T = src + while(T && !isturf(T)) + T = T.loc + + opacity = NewOpacity + + if(T) + T:LightLevelRed = 0 + T:LightLevelGreen = 0 + T:LightLevelBlue = 0 + + ul_UnblankLocal(Blanked) + + return + +atom/proc/ul_UnblankLocal(var/list/ReApply = view(ul_TopLuminosity, src)) + for(var/atom/Light in ReApply) + if(Light.ul_IsLuminous()) + Light.ul_Illuminate() + + return + +atom/proc/ul_BlankLocal() + var/list/Blanked = list( ) + var/TurfAdjust = isturf(src) ? 1 : 0 + + for(var/atom/Affected in view(ul_TopLuminosity, src)) + if(Affected.ul_IsLuminous() && Affected.ul_Extinguished == UL_I_LIT && (ul_FalloffAmount(Affected) <= Affected.luminosity + TurfAdjust)) + Affected.ul_Extinguish() + Blanked += Affected + + return Blanked + +atom/proc/ul_UpdateTopLuminosity() + if (ul_TopLuminosity < LuminosityRed) + ul_TopLuminosity = LuminosityRed + + if (ul_TopLuminosity < LuminosityGreen) + ul_TopLuminosity = LuminosityGreen + + if (ul_TopLuminosity < LuminosityBlue) + ul_TopLuminosity = LuminosityBlue + + return + +atom/proc/ul_Luminosity() + return max(LuminosityRed, LuminosityGreen, LuminosityBlue) + +atom/proc/ul_IsLuminous(var/Red = LuminosityRed, var/Green = LuminosityGreen, var/Blue = LuminosityBlue) + return (Red > 0 || Green > 0 || Blue > 0) + +atom/proc/ul_LightLevelChanged() + //Designed for client projects to use. Called on items when the turf they are in has its light level changed + return + +atom/proc/New() + ..() + if(ul_IsLuminous()) + spawn(1) ul_Illuminate() - return + return + +atom/proc/Del() + if(ul_IsLuminous()) + ul_Extinguish() + + ..() + + return + +atom/proc/movable/Move() + ul_Extinguish() + ..() + ul_Illuminate() + return turf var @@ -249,59 +243,59 @@ turf list/MaxGreen = list( ) list/MaxBlue = list( ) - proc - - ul_GetRed() - return ul_Clamp(min(LightLevelRed, max(MaxRed))) - ul_GetGreen() - return ul_Clamp(min(LightLevelGreen, max(MaxGreen))) - ul_GetBlue() - return ul_Clamp(min(LightLevelBlue, max(MaxBlue))) - - ul_UpdateLight() - - var/area/CurrentArea = loc - - if(!isarea(CurrentArea) || !CurrentArea.ul_Lighting) - return - - var/LightingTag = copytext(CurrentArea.tag, 1, findtext(CurrentArea.tag, ":UL")) + ":UL[ul_GetRed()]_[ul_GetGreen()]_[ul_GetBlue()]" - - if(CurrentArea.tag != LightingTag) - var/area/NewArea = locate(LightingTag) - - if(!NewArea) - NewArea = new CurrentArea.type() - NewArea.tag = LightingTag - - for(var/V in CurrentArea.vars - "contents") - if(issaved(CurrentArea.vars[V])) - NewArea.vars[V] = CurrentArea.vars[V] - - NewArea.tag = LightingTag - - NewArea.ul_Light(ul_GetRed(), ul_GetGreen(), ul_GetBlue()) - NewArea.contents += src +turf/proc/ul_GetRed() + return ul_Clamp(min(LightLevelRed, max(MaxRed))) +turf/proc/ul_GetGreen() + return ul_Clamp(min(LightLevelGreen, max(MaxGreen))) +turf/proc/ul_GetBlue() + return ul_Clamp(min(LightLevelBlue, max(MaxBlue))) - return +turf/proc/ul_UpdateLight() - ul_Recalculate() + var/area/CurrentArea = loc - ul_SuppressLightLevelChanges++ + if(!isarea(CurrentArea) || !CurrentArea.ul_Lighting) + return - var/list/Lights = ul_BlankLocal() + var/LightingTag = copytext(CurrentArea.tag, 1, findtext(CurrentArea.tag, ":UL")) + ":UL[ul_GetRed()]_[ul_GetGreen()]_[ul_GetBlue()]" - LightLevelRed = 0 - LightLevelGreen = 0 - LightLevelBlue = 0 + if(CurrentArea.tag != LightingTag) + var/area/NewArea = locate(LightingTag) - ul_UnblankLocal(Lights) + if(!NewArea) + NewArea = new CurrentArea.type() + NewArea.tag = LightingTag - ul_SuppressLightLevelChanges-- + for(var/V in CurrentArea.vars - "contents") + if(issaved(CurrentArea.vars[V])) + NewArea.vars[V] = CurrentArea.vars[V] - return + NewArea.tag = LightingTag + + NewArea.ul_Light(ul_GetRed(), ul_GetGreen(), ul_GetBlue()) + + + NewArea.contents += src + + return + +turf/proc/ul_Recalculate() + + ul_SuppressLightLevelChanges++ + + var/list/Lights = ul_BlankLocal() + + LightLevelRed = 0 + LightLevelGreen = 0 + LightLevelBlue = 0 + + ul_UnblankLocal(Lights) + + ul_SuppressLightLevelChanges-- + + return area var @@ -312,33 +306,33 @@ area LightLevelGreen = 0 LightLevelBlue = 0 - proc - ul_Light(var/Red = LightLevelRed, var/Green = LightLevelGreen, var/Blue = LightLevelBlue) - if(!src || !src.ul_Lighting) - return +area/proc/ul_Light(var/Red = LightLevelRed, var/Green = LightLevelGreen, var/Blue = LightLevelBlue) - overlays -= ul_Overlay + if(!src || !src.ul_Lighting) + return - LightLevelRed = Red - LightLevelGreen = Green - LightLevelBlue = Blue + overlays -= ul_Overlay - luminosity = ul_IsLuminous(LightLevelRed, LightLevelGreen, LightLevelBlue) + LightLevelRed = Red + LightLevelGreen = Green + LightLevelBlue = Blue - ul_Overlay = image('ULIcons.dmi', , num2text(LightLevelRed) + "-" + num2text(LightLevelGreen) + "-" + num2text(LightLevelBlue), ul_Layer) + luminosity = ul_IsLuminous(LightLevelRed, LightLevelGreen, LightLevelBlue) - overlays += ul_Overlay + ul_Overlay = image('ULIcons.dmi', , num2text(LightLevelRed) + "-" + num2text(LightLevelGreen) + "-" + num2text(LightLevelBlue), ul_Layer) - return + overlays += ul_Overlay - ul_Prep() + return - if(!tag) - tag = "[type]" - if(ul_Lighting) - if(!findtext(tag,":UL")) - ul_Light() - //world.log << tag +area/proc/ul_Prep() - return \ No newline at end of file + if(!tag) + tag = "[type]" + if(ul_Lighting) + if(!findtext(tag,":UL")) + ul_Light() + //world.log << tag + + return \ No newline at end of file