shadows v1.5

This commit is contained in:
PeaAshMeter 2025-12-29 02:16:09 +03:00
parent 198c322ec4
commit 767ddc459c

View File

@ -58,7 +58,6 @@ function sprite:draw()
local position = map.displayedPosition + Vec3 { 0.5, 0.5 } local position = map.displayedPosition + Vec3 { 0.5, 0.5 }
Tree.level.camera:detach() Tree.level.camera:detach()
love.graphics.push() love.graphics.push()
love.graphics.scale(ppm) love.graphics.scale(ppm)
love.graphics.setCanvas(Tree.level.render.shadowLayer) love.graphics.setCanvas(Tree.level.render.shadowLayer)
@ -66,15 +65,62 @@ function sprite:draw()
love.graphics.translate(position.x, position.y) love.graphics.translate(position.x, position.y)
love.graphics.ellipse("fill", 0, 0, 0.2, 0.2 * math.cos(math.pi / 4)) love.graphics.ellipse("fill", 0, 0, 0.2, 0.2 * math.cos(math.pi / 4))
love.graphics.rotate(math.pi / 4) local r = love.timer.getTime() % (2 * math.pi)
local doWeUseFakeShadow = function(r)
local pi = math.pi
if r <= pi / 4 then
-- 1
return false, 1
end
if r <= pi / 2 then
-- 2
return true, 1 - (r - pi / 4) / (pi / 4)
end
if r <= 3 * pi / 4 then
-- 3
return true, (r - pi / 2) / (pi / 4)
end
if r <= 5 * pi / 4 then
-- 4
return false, 1
end
if r <= 3 * pi / 2 then
-- 5
return true, 1 - (r - 5 * pi / 4) / (pi / 4)
end
if r <= 7 * pi / 4 then
-- 6
return true, (r - 3 * pi / 2) / (pi / 4)
end
-- 1
return false, 1
end
local drawFakeShadow, opacity = doWeUseFakeShadow(r)
local nangle = (math.pi + r) % (2 * math.pi)
love.graphics.rotate(nangle)
love.graphics.setColor(0, 0, 0, math.min(opacity * opacity, 0.5))
self.animationTable[self.state]:draw(Tree.assets.files.sprites.character[self.state], self.animationTable[self.state]:draw(Tree.assets.files.sprites.character[self.state],
0, 0,
0, nil, 1 / ppm * self.side, 1.2 / ppm, 38, 47) 0, nil, ((nangle >= math.pi / 2 and nangle < (3 * math.pi / 2)) and -1 or 1) / ppm * self.side,
1.2 / ppm,
38, 47)
if drawFakeShadow then
love.graphics.setColor(0, 0, 0, 1)
local mesh = makeGradientMesh(0.4, 1, { 0, 0, 0, 0.15 },
{ 0, 0, 0, 0.0 })
love.graphics.push()
love.graphics.rotate(math.pi)
love.graphics.translate(-0.2, 0)
love.graphics.draw(mesh)
love.graphics.pop()
end
love.graphics.pop() love.graphics.pop()
Tree.level.camera:attach() Tree.level.camera:attach()
love.graphics.setCanvas(Tree.level.render.spriteLayer) love.graphics.setCanvas(Tree.level.render.spriteLayer)
love.graphics.setColor(1, 1, 1) love.graphics.setColor(1, 1, 1)
if Tree.level.selector.id == self.owner.id then if Tree.level.selector.id == self.owner.id then