diff --git a/lib/character/behaviors/sprite.lua b/lib/character/behaviors/sprite.lua index 0cfe73c..2a9ac84 100644 --- a/lib/character/behaviors/sprite.lua +++ b/lib/character/behaviors/sprite.lua @@ -58,7 +58,6 @@ function sprite:draw() local position = map.displayedPosition + Vec3 { 0.5, 0.5 } Tree.level.camera:detach() - love.graphics.push() love.graphics.scale(ppm) love.graphics.setCanvas(Tree.level.render.shadowLayer) @@ -66,15 +65,62 @@ function sprite:draw() love.graphics.translate(position.x, position.y) 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], 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() Tree.level.camera:attach() - love.graphics.setCanvas(Tree.level.render.spriteLayer) love.graphics.setColor(1, 1, 1) if Tree.level.selector.id == self.owner.id then