diff --git a/sonic-radiance.love/core/modules/transitions/canvas.lua b/sonic-radiance.love/core/modules/transitions/canvas.lua new file mode 100644 index 0000000..0f3e8d9 --- /dev/null +++ b/sonic-radiance.love/core/modules/transitions/canvas.lua @@ -0,0 +1,33 @@ +local TransitionParent = require "core.modules.transitions.parent" +local CanvasTransition = TransitionParent:extend() + +function CanvasTransition:new(func, ox, oy, fadeOut, easeIn, easeOut, duration, wait) + CanvasTransition.super.new(self, func, ox, oy, fadeOut, easeIn, easeOut, duration, wait) + self:generateCanvas(0) +end + +function CanvasTransition:update(dt) + CanvasTransition.super.update(self, dt) + self:generateCanvas(dt) +end + +function CanvasTransition:generateCanvas(dt) + self.canvas = love.graphics.newCanvas(424, 240) + love.graphics.setCanvas(self.canvas) + self:drawCanvas(dt) + love.graphics.setCanvas() +end + +function CanvasTransition:drawCanvas(dt) + +end + +function CanvasTransition:draw() + if (self.canvas ~= nil) then + love.graphics.setBlendMode("multiply", "premultiplied") + love.graphics.draw(self.canvas, 0, 0) + love.graphics.setBlendMode("alpha") + end +end + +return CanvasTransition \ No newline at end of file diff --git a/sonic-radiance.love/core/modules/transitions/circle.lua b/sonic-radiance.love/core/modules/transitions/circle.lua new file mode 100644 index 0000000..063f764 --- /dev/null +++ b/sonic-radiance.love/core/modules/transitions/circle.lua @@ -0,0 +1,16 @@ +local TransitionParent = require "core.modules.transitions.canvas" +local DefaultTransition = TransitionParent:extend() + +function DefaultTransition:new(func, ox, oy, fadeOut) + DefaultTransition.super.new(self, func, ox, oy, fadeOut, "inQuad", "outQuad", 0.35, 0.1) +end + +function DefaultTransition:drawCanvas() + love.graphics.setColor(0,0,0,1) + love.graphics.rectangle("fill", 0, 0, 424, 240) + utils.graphics.resetColor() + local value = 1 - self.value + love.graphics.circle("fill",self.ox, self.oy, 424 * 1.5 * value) +end + +return DefaultTransition \ No newline at end of file diff --git a/sonic-radiance.love/core/modules/transitions/decal.lua b/sonic-radiance.love/core/modules/transitions/decal.lua new file mode 100644 index 0000000..72f7792 --- /dev/null +++ b/sonic-radiance.love/core/modules/transitions/decal.lua @@ -0,0 +1,22 @@ +local TransitionParent = require "core.modules.transitions.canvas" +local DecalTransition = TransitionParent:extend() + +function DecalTransition:new(func, ox, oy, fadeOut, decal) + self.decal = decal + DecalTransition.super.new(self, func, ox, oy, fadeOut, "inQuad", "outQuad", 0.8, 0.1) +end + +function DecalTransition:loadResources() + self.decalDrawable = love.graphics.newImage("assets/transitions/" .. self.decal .. ".png") +end + +function DecalTransition:drawCanvas() + love.graphics.setColor(0,0,0,1) + love.graphics.rectangle("fill", 0, 0, 424, 240) + utils.graphics.resetColor() + local w, h = self.decalDrawable:getDimensions() + local value = (1 - self.value) * (240 / h) * 4 + love.graphics.draw(self.decalDrawable,self.ox,self.oy,0,value, value, w / 2, h / 2) +end + +return DecalTransition \ No newline at end of file diff --git a/sonic-radiance.love/core/modules/transitions/init.lua b/sonic-radiance.love/core/modules/transitions/init.lua index 7a2554b..628aaf3 100644 --- a/sonic-radiance.love/core/modules/transitions/init.lua +++ b/sonic-radiance.love/core/modules/transitions/init.lua @@ -1,3 +1,4 @@ return { - default = require "core.modules.transitions.default" + default = require "core.modules.transitions.default", + circle = require "core.modules.transitions.circle" } \ No newline at end of file diff --git a/sonic-radiance.love/core/screen.lua b/sonic-radiance.love/core/screen.lua index aa6c666..c943b32 100644 --- a/sonic-radiance.love/core/screen.lua +++ b/sonic-radiance.love/core/screen.lua @@ -48,6 +48,7 @@ end function ScreenManager:startTransition(transitionIn, transitionOut, func, x, y) self.transition = transitionIn(func, x, y, false) self.transitionOut = transitionOut(nil, x, y, true) + self.isOpaque = true end function ScreenManager:transitionOver(fadeOut) @@ -55,6 +56,7 @@ function ScreenManager:transitionOver(fadeOut) self.transition = self.transitionOut else self.transition = nil + self.isOpaque = false end end @@ -132,8 +134,14 @@ function ScreenManager:cease() end function ScreenManager:drawTransition() - if (self.transition ~= nil) then - self.transition:draw() + if (self.isOpaque) then + if (self.transition ~= nil) then + self.transition:draw() + else + love.graphics.setColor(0,0,0,1) + love.graphics.rectangle("fill",0,0,424,240) + utils.graphics.resetColor() + end end end