From 124cc71800163f70aebe7a587d4e4e94ce90ecab Mon Sep 17 00:00:00 2001 From: Anders Jenbo Date: Sun, 23 Apr 2023 22:36:32 +0200 Subject: [PATCH] Update realtime lighting when static lights are changed --- Source/lighting.cpp | 26 +++++++++++++------------- Source/lighting.h | 1 + Source/objects.cpp | 4 ++++ 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/Source/lighting.cpp b/Source/lighting.cpp index 5a60bb8fd..6412e9498 100644 --- a/Source/lighting.cpp +++ b/Source/lighting.cpp @@ -109,19 +109,6 @@ uint8_t GetLight(Point position) return dLight[position.x][position.y]; } -void DoUnLight(Point position, uint8_t radius) -{ - radius++; - radius++; // If lights moved at a diagonal it can result in some extra tiles being lit - - auto searchArea = PointsInRectangle(WorldTileRectangle { position, radius }); - - for (WorldTilePosition targetPosition : searchArea) { - if (InDungeonBounds(targetPosition)) - dLight[targetPosition.x][targetPosition.y] = dPreLight[targetPosition.x][targetPosition.y]; - } -} - bool CrawlFlipsX(Displacement mirrored, tl::function_ref function) { for (const Displacement displacement : { mirrored.flipX(), mirrored }) { @@ -203,6 +190,19 @@ bool DoCrawl(unsigned minRadius, unsigned maxRadius, tl::function_ref offset) { assert(radius >= 0 && radius <= NumLightRadiuses); diff --git a/Source/lighting.h b/Source/lighting.h index ee0424f02..a396c296f 100644 --- a/Source/lighting.h +++ b/Source/lighting.h @@ -56,6 +56,7 @@ extern bool DisableLighting; #endif extern bool UpdateLighting; +void DoUnLight(Point position, uint8_t radius); void DoLighting(Point position, uint8_t radius, DisplacementOf offset); void DoUnVision(Point position, uint8_t radius); void DoVision(Point position, uint8_t radius, MapExplorationType doAutomap, bool visible); diff --git a/Source/objects.cpp b/Source/objects.cpp index 6eeed94d8..4baff5ef6 100644 --- a/Source/objects.cpp +++ b/Source/objects.cpp @@ -1370,6 +1370,10 @@ void AddObjectLight(Object &object) } DoLighting(object.position, radius, {}); + if (LoadingMapObjects) { + DoUnLight(object.position, radius); + UpdateLighting = true; + } object._oVar1 = -1; }