feature/shadows #25

Merged
PeaAshMeter merged 14 commits from feature/shadows into main 2026-01-18 01:11:05 +03:00
4 changed files with 20 additions and 5 deletions
Showing only changes of commit e6754048f6 - Show all commits

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 }