Browse Source

Update realtime lighting when static lights are changed

pull/6027/head
Anders Jenbo 3 years ago
parent
commit
124cc71800
  1. 26
      Source/lighting.cpp
  2. 1
      Source/lighting.h
  3. 4
      Source/objects.cpp

26
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<bool(Displacement)> function)
{
for (const Displacement displacement : { mirrored.flipX(), mirrored }) {
@ -203,6 +190,19 @@ bool DoCrawl(unsigned minRadius, unsigned maxRadius, tl::function_ref<bool(Displ
return true;
}
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];
}
}
void DoLighting(Point position, uint8_t radius, DisplacementOf<int8_t> offset)
{
assert(radius >= 0 && radius <= NumLightRadiuses);

1
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<int8_t> offset);
void DoUnVision(Point position, uint8_t radius);
void DoVision(Point position, uint8_t radius, MapExplorationType doAutomap, bool visible);

4
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;
}

Loading…
Cancel
Save