diff --git a/lib/character/behaviors/sprite.lua b/lib/character/behaviors/sprite.lua index 5e4c0bf..0cfe73c 100644 --- a/lib/character/behaviors/sprite.lua +++ b/lib/character/behaviors/sprite.lua @@ -56,6 +56,27 @@ function sprite:draw() function(map) local ppm = Tree.level.camera.pixelsPerMeter 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) + love.graphics.setColor(0, 0, 0, 0.5) + 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) + + self.animationTable[self.state]:draw(Tree.assets.files.sprites.character[self.state], + 0, + 0, nil, 1 / ppm * self.side, 1.2 / ppm, 38, 47) + 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 local texW, texH = Tree.assets.files.sprites.character[self.state]:getWidth(), Tree.assets.files.sprites.character[self.state]:getHeight() @@ -64,21 +85,6 @@ function sprite:draw() shader:send("time", love.timer:getTime()) love.graphics.setShader(shader) end - - - love.graphics.setCanvas(Tree.level.render.shadowLayer) - love.graphics.setColor(0, 0, 0, 0.5) - love.graphics.ellipse("fill", position.x, position.y, 0.2, 0.2 * math.cos(math.pi / 4)) - local mesh = makeGradientMesh(0.4, 1.5, { 0, 0, 0, 0.5 }, { 0, 0, 0, 0 }) - love.graphics.push() - love.graphics.translate(position.x, position.y) - love.graphics.rotate(love.timer.getTime()) - love.graphics.translate(-0.2, 0) - love.graphics.draw(mesh) - love.graphics.pop() - - love.graphics.setCanvas(Tree.level.render.spriteLayer) - love.graphics.setColor(1, 1, 1) self.animationTable[self.state]:draw(Tree.assets.files.sprites.character[self.state], position.x, position.y, nil, 1 / ppm * self.side, 1 / ppm, 38, 47) diff --git a/lib/level/level.lua b/lib/level/level.lua index 4d79815..2f92129 100644 --- a/lib/level/level.lua +++ b/lib/level/level.lua @@ -48,6 +48,8 @@ function level:draw() self.characterGrid.yOrderQueue:pop():draw() end self.camera:detach() + --self.render.shadowLayer:newImageData():encode("png", "shadowLayer.png") + -- os.exit(0) self.render:draw() end diff --git a/lib/level/render.lua b/lib/level/render.lua index 826a36f..3259e48 100644 --- a/lib/level/render.lua +++ b/lib/level/render.lua @@ -19,33 +19,45 @@ end local function applyBlur(input, radius) local blurShader = Tree.assets.files.shaders.blur - local tmp = love.graphics.newCanvas(1280, 720) + local tmp1 = love.graphics.newCanvas(1280, 720) + local tmp2 = love.graphics.newCanvas(1280, 720) -- Горизонтальный проход blurShader:send("direction", { 1.0, 0.0 }) blurShader:send("radius", radius) - tmp:renderTo(function() + tmp1:renderTo(function() love.graphics.setShader(blurShader) love.graphics.draw(input) love.graphics.setShader() end) -- Вертикальный проход - love.graphics.setShader(blurShader) - blurShader:send("direction", { 0.0, 1.0 }) - love.graphics.draw(tmp) - love.graphics.setShader() + tmp2:renderTo( + function() + love.graphics.setShader(blurShader) + blurShader:send("direction", { 0.0, 1.0 }) + love.graphics.draw(tmp1) + love.graphics.setShader() + end + ) + return tmp2 end function render:draw() -- пол -> тени -> спрайты -> оверлей love.graphics.draw(self.floorLayer) + love.graphics.push() - applyBlur(self.shadowLayer, 10) - -- love.graphics.draw(self.shadowLayer) - love.graphics.setShader() + local blurred = applyBlur(self.shadowLayer, 2) + local wc, hc = love.graphics.getWidth() / 2, love.graphics.getHeight() / 2 + love.graphics.translate(wc, hc) + love.graphics.scale(Tree.level.camera.scale, Tree.level.camera.scale) + love.graphics.translate(-Tree.level.camera.position.x * Tree.level.camera.pixelsPerMeter, + -Tree.level.camera.position.y * Tree.level.camera.pixelsPerMeter) + love.graphics.draw(blurred) + love.graphics.pop() love.graphics.draw(self.spriteLayer) love.graphics.draw(self.overlayLayer)