add weather to level

This commit is contained in:
PeaAshMeter 2026-01-14 21:00:17 +03:00
parent 82fdd0d609
commit e6754048f6
4 changed files with 20 additions and 5 deletions

View File

@ -30,7 +30,7 @@ function behavior:draw()
shader:send("color", { self.color.x, self.color.y, self.color.z })
shader:send("time", love.timer.getTime() + self.seed)
love.graphics.setShader(shader)
love.graphics.setBlendMode("add")
-- love.graphics.setBlendMode("add")
love.graphics.draw(Tree.assets.files.masks.circle128, self.position.x - self.intensity / 2,
self.position.y - self.intensity / 2, 0, self.intensity / 128,
self.intensity / 128)

View File

@ -27,7 +27,8 @@ local function new(type, template)
selector = (require "lib.level.selector").new(),
camera = (require "lib.level.camera").new(),
turnOrder = (require "lib.level.turn_order").new(),
render = (require "lib.level.render").new()
render = (require "lib.level.render").new(),
weather = (require "lib.level.weather").new { ambientLight = Vec3 { 0.36, 0.42, 0.6 }, skyLight = Vec3 { 0.9, 0.9, 0.9 } }
}, level)
end

View File

@ -9,16 +9,17 @@ local render = {}
render.__index = render
function render:clear()
local weather = Tree.level.weather
love.graphics.setCanvas(self.shadowLayer)
love.graphics.clear()
love.graphics.setCanvas(self.spriteLayer)
love.graphics.clear()
love.graphics.setCanvas(self.spriteLightLayer)
love.graphics.clear()
love.graphics.clear(weather.skyLight.x, weather.skyLight.y, weather.skyLight.z)
love.graphics.setCanvas(self.floorLayer)
love.graphics.clear()
love.graphics.setCanvas(self.lightLayer)
love.graphics.clear()
love.graphics.clear(weather.skyLight.x, weather.skyLight.y, weather.skyLight.z)
love.graphics.setCanvas(self.overlayLayer)
love.graphics.clear()
end
@ -55,6 +56,7 @@ end
function render:draw()
-- пол -> тени -> спрайты -> свет -> оверлей
local weather = Tree.level.weather
love.graphics.setCanvas(self.lightLayer)
love.graphics.draw(applyBlur(self.shadowLayer, 4 * Tree.level.camera.scale))
love.graphics.setCanvas()
@ -65,7 +67,7 @@ function render:draw()
local lightShader = Tree.assets.files.shaders.light_postprocess
lightShader:send("scene", self.floorLayer)
lightShader:send("light", self.lightLayer)
lightShader:send("ambient", { 0.24, 0.28, 0.40 })
lightShader:send("ambient", { weather.ambientLight.x, weather.ambientLight.y, weather.ambientLight.z })
love.graphics.setShader(lightShader)
love.graphics.draw(self.floorLayer)

12
lib/level/weather.lua Normal file
View File

@ -0,0 +1,12 @@
--- @class Weather
--- @field skyLight Vec3
--- @field ambientLight Vec3
local weather = {}
--- @param proto Weather
--- @return Weather
local function new(proto)
return setmetatable(proto, { __index = weather })
end
return { new = new }