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("color", { self.color.x, self.color.y, self.color.z })
shader:send("time", love.timer.getTime() + self.seed) shader:send("time", love.timer.getTime() + self.seed)
love.graphics.setShader(shader) 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, 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.position.y - self.intensity / 2, 0, self.intensity / 128,
self.intensity / 128) self.intensity / 128)

View File

@ -27,7 +27,8 @@ local function new(type, template)
selector = (require "lib.level.selector").new(), selector = (require "lib.level.selector").new(),
camera = (require "lib.level.camera").new(), camera = (require "lib.level.camera").new(),
turnOrder = (require "lib.level.turn_order").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) }, level)
end end

View File

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