Created
April 23, 2017 03:08
-
-
Save dvdfu/4e86f15198c310ebe0daec102b3e8494 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
local Class = require 'modules.middleclass.middleclass' | |
local Stateful = require 'modules.stateful.stateful' | |
local Timer = require 'modules.hump.timer' | |
local Const = require 'src.const' | |
local Screen = Class('Screen') | |
Screen:include(Stateful) | |
local Iris = Screen:addState('Iris') | |
local Overlay = Screen:addState('Overlay') | |
function Screen:initialize(props) | |
self.timer = Timer.new() | |
self.progress = 0 | |
props = props or {} | |
self.props = { | |
length = props.length or 20, | |
limit = props.limit or 1, | |
easeOut = props.easeOut or 'linear', | |
easeIn = props.easeIn or 'linear', | |
} | |
end | |
function Screen:update(dt) | |
self.timer:update(dt) | |
end | |
function Screen:fadeOut(after) | |
self.progress = 0 | |
self.timer:clear() | |
self.timer:tween(self.props.length, self, { progress = self.props.limit }, self.props.easeOut, function() | |
-- tweener has small absolute error | |
self.progress = self.props.limit | |
if after then after() end | |
end) | |
end | |
function Screen:fadeIn(after) | |
self.progress = self.props.limit | |
self.timer:clear() | |
self.timer:tween(self.props.length, self, { progress = 0 }, self.props.easeIn, function() | |
-- tweener has small absolute error | |
self.progress = 0 | |
if after then after() end | |
end) | |
end | |
function Screen:irisOut(after) | |
Screen.fadeOut(self, after) | |
self:gotoState('Iris') | |
end | |
function Screen:irisIn(after) | |
Screen.fadeIn(self, after) | |
self:gotoState('Iris') | |
end | |
function Screen:overlayOut(after) | |
Screen.fadeOut(self, after) | |
self:gotoState('Overlay') | |
end | |
function Screen:overlayIn(after) | |
Screen.fadeIn(self, after) | |
self:gotoState('Overlay') | |
end | |
function Screen:inProgress() | |
return self.progress > 0 and self.progress < self.props.limit | |
end | |
function Screen:draw() end | |
function Iris:draw() | |
if self.progress == 0 then return end | |
local sw, sh = Const.SCREEN_WIDTH, Const.SCREEN_HEIGHT | |
local cw, ch = sw / 2, sh / 2 | |
local pw = sw * self.progress | |
love.graphics.setColor(0, 0, 0) | |
love.graphics.polygon('fill', 0, ch - cw, 0, ch - cw + pw, pw, ch - cw) -- tl | |
love.graphics.polygon('fill', sw, ch - cw, sw - pw, ch - cw, sw, ch - cw + pw) -- tr | |
love.graphics.polygon('fill', 0, ch + cw, 0, ch + cw - pw, pw, ch + cw) -- bl | |
love.graphics.polygon('fill', sw, ch + cw, sw - pw, ch + cw, sw, ch + cw - pw) -- br | |
love.graphics.setColor(255, 255, 255) | |
end | |
function Overlay:draw() | |
if self.progress == 0 then return end | |
love.graphics.setColor(0, 0, 0, self.progress * self.props.limit * 255) | |
love.graphics.rectangle('fill', 0, 0, Const.SCREEN_WIDTH, Const.SCREEN_HEIGHT) | |
love.graphics.setColor(255, 255, 255, 255) | |
end | |
return Screen |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment