From 9a9da55cd291140211730e464eb9f96444334714 Mon Sep 17 00:00:00 2001 From: Chompstation Bot Date: Thu, 8 Jul 2021 04:54:20 +0000 Subject: [PATCH] Make the sun bleed even better --- code/modules/planet/sun.dm | 226 ++++++++++++++++++++++++++++++++++++ maps/tether/tether_turfs.dm | 4 +- 2 files changed, 228 insertions(+), 2 deletions(-) diff --git a/code/modules/planet/sun.dm b/code/modules/planet/sun.dm index 52172d4d5a..99d89238de 100644 --- a/code/modules/planet/sun.dm +++ b/code/modules/planet/sun.dm @@ -71,9 +71,235 @@ // Holds a full white icon that can be mutated to make sun on the O_LIGHTING plane /atom/movable/sun_visuals +<<<<<<< HEAD icon = 'icons/mob/screen_gen.dmi' icon_state = "flash" +||||||| parent of b36be52c20... Merge pull request #10969 from VOREStation/Arokha/sunvishide + icon = 'icons/effects/effects.dmi' + icon_state = "white" plane = PLANE_O_LIGHTING_VISUAL mouse_opacity = 0 alpha = 0 color = "#FFFFFF" + + var/turfs_providing_spreads = list() + var/turfs_receiving_spreads = list() + var/spreads = list() + +/atom/movable/sun_visuals/New() + ..() + spreads["1"] = new /atom/movable/sun_visuals_overlap(src, NORTH, "white_gradient") + spreads["2"] = new /atom/movable/sun_visuals_overlap(src, SOUTH, "white_gradient") + spreads["4"] = new /atom/movable/sun_visuals_overlap(src, EAST, "white_gradient") + spreads["8"] = new /atom/movable/sun_visuals_overlap(src, WEST, "white_gradient") + + spreads["i5"] = new /atom/movable/sun_visuals_overlap(src, NORTHEAST, "white_inner") + spreads["i6"] = new /atom/movable/sun_visuals_overlap(src, SOUTHEAST, "white_inner") + spreads["i9"] = new /atom/movable/sun_visuals_overlap(src, NORTHWEST, "white_inner") + spreads["i10"] = new /atom/movable/sun_visuals_overlap(src, SOUTHWEST, "white_inner") + + spreads["o5"] = new /atom/movable/sun_visuals_overlap(src, NORTHEAST, "white_outer") + spreads["o6"] = new /atom/movable/sun_visuals_overlap(src, SOUTHEAST, "white_outer") + spreads["o9"] = new /atom/movable/sun_visuals_overlap(src, NORTHWEST, "white_outer") + spreads["o10"] = new /atom/movable/sun_visuals_overlap(src, SOUTHWEST, "white_outer") + +/atom/movable/sun_visuals/proc/set_color(new_color) + src.color = new_color + for(var/key in spreads) + var/atom/movable/sun_visuals_overlap/SVO = spreads[key] + SVO.color = new_color + +/atom/movable/sun_visuals/proc/set_alpha(new_alpha) + src.alpha = new_alpha + for(var/key in spreads) + var/atom/movable/sun_visuals_overlap/SVO = spreads[key] + SVO.alpha = new_alpha + +/atom/movable/sun_visuals/proc/apply_to_turf(var/turf/T) + T.vis_contents += src + T.dynamic_lumcount += 0.5 + T.set_luminosity(1, TRUE) + + var/list/localspreads + // Test for corners + for(var/direction in cornerdirs) + var/turf/dirturf = get_step(T, direction) + if(dirturf && !dirturf.outdoors) + var/turf/TL = get_step(T, turn(direction, -45)) + var/turf/TR = get_step(T, turn(direction, 45)) + + // If outdoors at 45 degrees are the same, then this is a corner + if(TL && TR && TL.outdoors == TR.outdoors) + var/atom/movable/sun_visuals_overlap/OL + // Outer corner + if(TL.outdoors) + OL = spreads["o[direction]"] + // Inner corner + else + OL = spreads["i[direction]"] + T.vis_contents += OL + LAZYADD(localspreads, OL) + LAZYADD(turfs_receiving_spreads[dirturf], OL) + dirturf.set_luminosity(1) + + // Take all orthagonals + for(var/direction in cardinal) + var/turf/dirturf = get_step(T, direction) + if(dirturf && !dirturf.outdoors) + var/turf/TL = get_step(T, turn(direction, -45)) + var/turf/TR = get_step(T, turn(direction, 45)) + // End of a wall, the corner will handle it + if(TL && TR && TL.outdoors != TR.outdoors) + continue + var/atom/movable/sun_visuals_overlap/OL = spreads["[direction]"] + T.vis_contents += OL + LAZYADD(localspreads, OL) + LAZYADD(turfs_receiving_spreads[dirturf], OL) + dirturf.set_luminosity(1) + + if(LAZYLEN(localspreads)) + turfs_providing_spreads[T] = localspreads + +/atom/movable/sun_visuals/proc/remove_from_turf(var/turf/T) + T.vis_contents -= src + T.dynamic_lumcount -= 0.5 + T.set_luminosity(!IS_DYNAMIC_LIGHTING(T), TRUE) + var/list/applied = turfs_providing_spreads[T] + if(LAZYLEN(applied)) + T.vis_contents -= applied + turfs_providing_spreads -= T + applied.Cut() + +/atom/movable/sun_visuals_overlap + icon = 'icons/effects/effects.dmi' + icon_state = null +======= + icon = 'icons/effects/effects.dmi' + icon_state = "white" + plane = PLANE_O_LIGHTING_VISUAL + mouse_opacity = 0 + alpha = 0 + color = "#FFFFFF" + + var/turfs_providing_spreads = list() + var/spreads = list() + +/atom/movable/sun_visuals/New() + ..() + spreads["1"] = new /atom/movable/sun_visuals_overlap(src, NORTH, "white_gradient") + spreads["2"] = new /atom/movable/sun_visuals_overlap(src, SOUTH, "white_gradient") + spreads["4"] = new /atom/movable/sun_visuals_overlap(src, EAST, "white_gradient") + spreads["8"] = new /atom/movable/sun_visuals_overlap(src, WEST, "white_gradient") + + spreads["i5"] = new /atom/movable/sun_visuals_overlap(src, NORTHEAST, "white_inner") + spreads["i6"] = new /atom/movable/sun_visuals_overlap(src, SOUTHEAST, "white_inner") + spreads["i9"] = new /atom/movable/sun_visuals_overlap(src, NORTHWEST, "white_inner") + spreads["i10"] = new /atom/movable/sun_visuals_overlap(src, SOUTHWEST, "white_inner") + + spreads["o5"] = new /atom/movable/sun_visuals_overlap(src, NORTHEAST, "white_outer") + spreads["o6"] = new /atom/movable/sun_visuals_overlap(src, SOUTHEAST, "white_outer") + spreads["o9"] = new /atom/movable/sun_visuals_overlap(src, NORTHWEST, "white_outer") + spreads["o10"] = new /atom/movable/sun_visuals_overlap(src, SOUTHWEST, "white_outer") + +/atom/movable/sun_visuals/proc/set_color(new_color) + src.color = new_color + for(var/key in spreads) + var/atom/movable/sun_visuals_overlap/SVO = spreads[key] + SVO.color = new_color + +/atom/movable/sun_visuals/proc/set_alpha(new_alpha) + src.alpha = new_alpha + for(var/key in spreads) + var/atom/movable/sun_visuals_overlap/SVO = spreads[key] + SVO.alpha = new_alpha + +/atom/movable/sun_visuals/proc/apply_to_turf(var/turf/T) + T.vis_contents += src + T.dynamic_lumcount += 0.5 + T.set_luminosity(1, TRUE) + + var/list/localspreads + // Test for corners + for(var/direction in cornerdirs) + var/turf/dirturf = get_step(T, direction) + if(dirturf && !dirturf.outdoors) + var/turf/TL = get_step(T, turn(direction, -45)) + var/turf/TR = get_step(T, turn(direction, 45)) + + // If outdoors at 45 degrees are the same, then this is a corner + if(TL && TR && TL.outdoors == TR.outdoors) + var/atom/movable/sun_visuals_overlap/OL + // Outer corner + if(TL.outdoors) + OL = spreads["o[direction]"] + // Inner corner + else + OL = spreads["i[direction]"] + dirturf.vis_contents += OL + dirturf.set_luminosity(1) + LAZYINITLIST(localspreads) + LAZYINITLIST(localspreads[dirturf]) + LAZYADD(localspreads[dirturf], OL) + + // Take all orthagonals + for(var/direction in cardinal) + var/turf/dirturf = get_step(T, direction) + if(dirturf && !dirturf.outdoors) + var/turf/TL = get_step(T, turn(direction, -45)) + var/turf/TR = get_step(T, turn(direction, 45)) + // End of a wall, the corner will handle it + if(TL && TR && TL.outdoors != TR.outdoors) + continue + var/atom/movable/sun_visuals_overlap/OL = spreads["[direction]"] + dirturf.vis_contents += OL + dirturf.set_luminosity(1) + LAZYINITLIST(localspreads) + LAZYINITLIST(localspreads[dirturf]) + LAZYADD(localspreads[dirturf], OL) + + if(LAZYLEN(localspreads)) + turfs_providing_spreads[T] = localspreads + +/atom/movable/sun_visuals/proc/remove_from_turf(var/turf/T) + T.vis_contents -= src + T.dynamic_lumcount -= 0.5 + T.set_luminosity(0, TRUE) + var/list/applied = turfs_providing_spreads[T] + if(LAZYLEN(applied)) + for(var/turf/old as anything in applied) + old.vis_contents -= applied[old] + applied -= old + turfs_providing_spreads -= T + applied.Cut() + +/atom/movable/sun_visuals_overlap + icon = 'icons/effects/effects.dmi' + icon_state = null +>>>>>>> b36be52c20... Merge pull request #10969 from VOREStation/Arokha/sunvishide + plane = PLANE_O_LIGHTING_VISUAL + mouse_opacity = 0 + alpha = 0 + color = "#FFFFFF" +<<<<<<< HEAD +||||||| parent of b36be52c20... Merge pull request #10969 from VOREStation/Arokha/sunvishide + +/atom/movable/sun_visuals_overlap/New(newloc, newdir, newstate) + ..() + icon_state = newstate + dir = newdir + if(newdir & NORTH) + pixel_y = 32 + else if(newdir & SOUTH) + pixel_y = -32 + + if(newdir & EAST) + pixel_x = 32 + else if(newdir & WEST) + pixel_x = -32 +======= + +/atom/movable/sun_visuals_overlap/New(newloc, newdir, newstate) + ..() + icon_state = newstate + dir = newdir +>>>>>>> b36be52c20... Merge pull request #10969 from VOREStation/Arokha/sunvishide diff --git a/maps/tether/tether_turfs.dm b/maps/tether/tether_turfs.dm index 5bec9aef79..9bd9d58e3a 100644 --- a/maps/tether/tether_turfs.dm +++ b/maps/tether/tether_turfs.dm @@ -2,8 +2,8 @@ VIRGO3B_TURF_CREATE(/turf/simulated/open) /turf/simulated/open/virgo3b edge_blending_priority = 0.5 //Turfs which also have e_b_p and higher than this will plop decorative edges onto this turf -/turf/simulated/open/virgo3b/New() - ..() +/turf/simulated/open/virgo3b/Initialize(mapload) + . = ..() if(outdoors) SSplanets.addTurf(src)