diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/DrawableLight.java b/src/main/java/net/rptools/maptool/client/ui/zone/DrawableLight.java index 3125c14809..59e44df492 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/DrawableLight.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/DrawableLight.java @@ -15,26 +15,27 @@ package net.rptools.maptool.client.ui.zone; import java.awt.geom.Area; +import javax.annotation.Nonnull; import net.rptools.maptool.model.drawing.DrawablePaint; public class DrawableLight { - private DrawablePaint paint; - private Area area; + private @Nonnull DrawablePaint paint; + private @Nonnull Area area; private int lumens; - public DrawableLight(DrawablePaint paint, Area area, int lumens) { + public DrawableLight(@Nonnull DrawablePaint paint, @Nonnull Area area, int lumens) { super(); this.paint = paint; this.area = area; this.lumens = lumens; } - public DrawablePaint getPaint() { + public @Nonnull DrawablePaint getPaint() { return paint; } - public Area getArea() { + public @Nonnull Area getArea() { return area; } diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java index 670f390549..bc3691e25c 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneRenderer.java @@ -1427,7 +1427,6 @@ private void renderLights(Graphics2D g, PlayerView view) { overlayBlending, view.isGMView() ? null : LightOverlayClipStyle.CLIP_TO_VISIBLE_AREA, drawableLights, - Color.black, overlayFillColor); timer.stop("renderLights:renderLightOverlay"); } @@ -1463,7 +1462,6 @@ private void renderAuras(Graphics2D g, PlayerView view) { AlphaComposite.SrcOver, view.isGMView() ? null : LightOverlayClipStyle.CLIP_TO_VISIBLE_AREA, drawableAuras, - new Color(255, 255, 255, 150), new Color(0, 0, 0, 0)); timer.stop("renderAuras:renderAuraOverlay"); } @@ -1580,7 +1578,6 @@ private void renderLumensOverlay( * @param clipStyle How to clip the overlay relative to the visible area. Set to null for no extra * clipping. * @param lights The lights that will be rendered and blended. - * @param defaultPaint A default paint for lights without a paint. */ private void renderLightOverlay( Graphics2D g, @@ -1588,7 +1585,6 @@ private void renderLightOverlay( Composite overlayBlending, @Nullable LightOverlayClipStyle clipStyle, Collection lights, - Paint defaultPaint, Paint backgroundFill) { if (lights.isEmpty()) { // No point spending resources accomplishing nothing. @@ -1631,8 +1627,7 @@ private void renderLightOverlay( // Draw lights onto the buffer image so the map doesn't affect how they blend timer.start("renderLightOverlay:drawLights"); for (var light : lights) { - var paint = light.getPaint() != null ? light.getPaint().getPaint() : defaultPaint; - newG.setPaint(paint); + newG.setPaint(light.getPaint().getPaint()); timer.start("renderLightOverlay:fillLight"); newG.fill(light.getArea()); timer.stop("renderLightOverlay:fillLight"); diff --git a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneView.java b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneView.java index d0d0775d9a..2c84f3e29c 100644 --- a/src/main/java/net/rptools/maptool/client/ui/zone/ZoneView.java +++ b/src/main/java/net/rptools/maptool/client/ui/zone/ZoneView.java @@ -756,6 +756,12 @@ public Collection getDrawableLights(PlayerView view) { return null; } + // Lights without a colour are "clear" and should not be rendered. + var paint = laud.lightInfo().light().getPaint(); + if (paint == null) { + return null; + } + // Make sure each drawable light is restricted to the area it covers, // accounting for darkness effects. final var obscuredArea = new Area(laud.litArea().area()); @@ -770,10 +776,7 @@ public Collection getDrawableLights(PlayerView view) { isDarkness ? lumensLevel.get().darknessArea() : lumensLevel.get().lightArea()); - return new DrawableLight( - laud.lightInfo().light().getPaint(), - obscuredArea, - laud.litArea().lumens()); + return new DrawableLight(paint, obscuredArea, laud.litArea().lumens()); }) .filter(Objects::nonNull) .toList();