private void ApplyLightSources()
{
int before = _palettesToBeRecalculated.Count;
foreach (LightSource lamp in _lightSources) {
foreach (MapTile t in _tiles) {
if (t == null) continue;
bool wasShared = t.Palette.IsShared;
// make sure this tile can only end up in the "to-be-recalculated list" once
if (!lamp.ApplyLamp(t)) continue;
// this lamp caused a new unshared palette to be created
if (wasShared && !t.Palette.IsShared)
_palettesToBeRecalculated.Add(t.Palette);
foreach (var obj in t.AllObjects.Where(o => o.Lighting == LightingType.Full || o.Lighting == LightingType.Ambient)) {
wasShared = obj.Palette.IsShared;
lamp.ApplyLamp(obj, obj.Lighting == LightingType.Ambient);
_palettesToBeRecalculated.Add(obj.Palette);
if (wasShared && !obj.Palette.IsShared)
_palettesToBeRecalculated.Add(obj.Palette);
}
}
}
Logger.Debug("Determined palettes to be recalculated due to lightsources ({0})",
_palettesToBeRecalculated.Count - before);
}