Я пытаюсь реализовать «туман войны» в инструменте картирования, который я разрабатываю.
Для каждой ячейки сетки, если ячейка «затуманена», цвет устанавливается равным серому, умноженному на текущий цвет ячейки. В противном случае цвет ячейки устанавливается таким, каким обычно должен быть цвет ячейки.
Ниже моя функция draw
.
for x = 0, (self.gridSize - 1) * self.scale, self.scale do
for y = 0, (self.gridSize - 1) * self.scale, self.scale do
local mouseX, mouseY = camera:mousepos()
local curCell = self:getCell(x, y, true)
local state = Grid:getState(x, y, true)
if fog and curCell.fogged then
local color = multiplyColors(curCell.color, {100,100,100,10})
color[4] = 150
if curCell:getState() == 1 then
love.graphics.setColor(color)
else
love.graphics.setColor({100, 100, 100, 100})
end
love.graphics.rectangle('fill', x, y, self.scale, self.scale)
elseif math.floor(mouseX / self.scale) == math.floor(x / self.scale) and math.floor(mouseY / self.scale) == math.floor(y / self.scale) then
love.graphics.setColor(255, 0, 0, 30)
love.graphics.rectangle('fill', x, y, self.scale, self.scale)
elseif state == 1 then
love.graphics.setColor(curCell.color)
love.graphics.rectangle('fill', x, y, self.scale, self.scale)
elseif state == 0 and self.bGridLines then
love.graphics.setColor(100, 100, 100, 10)
love.graphics.rectangle('line', x, y, self.scale, self.scale)
end
end
end
А вот функция multiplyColors
function multiplyColors(c1, c2)
local newColor = {}
newColor[1] = math.floor((c1[1] * c2[1]) / 255)
newColor[2] = math.floor((c1[2] * c2[2]) / 255)
newColor[3] = math.floor((c1[3] * c2[3]) / 255)
return newColor
end
Хотя это создает приятный эффект, мне нужна возможность установить непрозрачность тумана.
Например, если я изменяю строку color[4] = 150
на color[4] = 255
, желаемый вывод должен быть что-то вроде этого что я на самом деле получаю при изменении этой строки. Аналогичным образом, изменение строки на color[4] = 0
дает это (что, по общему признанию, выглядит довольно аккуратно) вместо что-то вроде этого.
Вот ссылка на полный репозиторий: https://github.com/camdenb/DnD-Map-Creator
Спасибо!