Поплиточное освещение XNA/MonoGame

Я делаю 2D-игру на основе плитки с MonoGame. Я пытался реализовать освещение для каждой плитки и в итоге использовал рекурсивную заливку, чтобы добиться эффекта от этого ответа https://gamedev.stackexchange.com/a/68803.

private void UpdateLight(int X, int Y, int LightLevel)
{
    //Check if position is out of bounds
    if (X >= 0 && X < MapWidth && Y >= 0 && Y < MapHeight)
        if (LightLevel > BlockMap[X, Y].Light)
        {
            BlockMap[X, Y].Light = LightLevel;

            UpdateLight(X, Y - 1, LightLevel - 1);
            UpdateLight(X, Y + 1, LightLevel - 1);
            UpdateLight(X - 1, Y, LightLevel - 1);
            UpdateLight(X + 1, Y, LightLevel - 1);
        }
}

Казалось, это отлично работает, пока я не захотел убрать источники света. Я просто не могу найти способ сделать это. Когда я хочу разместить источник света, я просто вызываю UpdateLight(LightSourceX, LightSourceY, LightSourceStrength). Что мне по существу нужно, так это способ обратить вспять эту рекурсивную заливку.

Чтобы разрешить удаление источников света, мне нужно использовать совершенно другой алгоритм, или есть какой-то способ?

Освещение на практике:

введите здесь описание изображения


person Pema99    schedule 28.04.2015    source источник
comment
пока я не захотел убрать источники света. Не могли бы вы просто перебрать BlockMap, установив Light=0? Это поможет?   -  person MickyD    schedule 29.04.2015


Ответы (1)


Как предложил Микки Дункан, я просто перебрал каждую плитку на экране, установил свет на 0, а затем пересчитал карту освещения. Я был слишком зациклен на попытке отменить свет, что даже не подумал о его сбросе в целом.

person Pema99    schedule 29.04.2015
comment
Не проблема, рад, что помог :) - person MickyD; 29.04.2015