Files
LoveDOS-Dungeon-Crawler/src/intro.lua

114 lines
2.8 KiB
Lua

------------------------------------------------------------------------------
-- Imports
------------------------------------------------------------------------------
local love = require 'love'
local make_class = require 'src.classes'
local GameState = require 'src.gstate'
local Fader = require 'src.fader'
------------------------------------------------------------------------------
-- Class definitions
------------------------------------------------------------------------------
local Intro = make_class(GameState)
------------------------------------------------------------------------------
-- Class methods
------------------------------------------------------------------------------
function Intro:_init(name, index)
GameState._init(self, name, index)
self.skip = false
self.fade = Fader()
self.stage = 0
self.timer = 0
end
function Intro:load()
self.splash = love.graphics.newImage('imgs/splash.png')
self.author = love.graphics.newImage('imgs/wally.png')
self.title = love.graphics.newImage('imgs/title.png')
self.splash_snd = love.audio.newSource('snd/jachiev.wav')
self.author_snd = love.audio.newSource('snd/alang.wav')
self.title_snd = love.audio.newSource('snd/ablhole.wav')
self.valid = true
self.splash_snd:play()
end
function Intro:update(dt)
local total_time
if self.stage == 0 then
total_time = 4.5
elseif self.stage == 1 then
total_time = 3.0
else
total_time = 8.0
end
if self.fade.done then
self.timer = self.timer + dt
end
if self.timer >= total_time then
self.fade:fade_out(
function ()
self.stage = self.stage + 1
if self.stage == 1 then
self.author_snd:play()
elseif self.stage == 2 then
self.title_snd:play()
end
self.fade:fade_in()
end
)
self.timer = 0.0
end
self.fade:update(dt)
if not self.skip and self.stage < 3 then return self.index else return 2 end
end
function Intro:draw()
if self.valid then
if self.stage == 0 then love.graphics.draw(self.splash, 0, 0)
elseif self.stage == 1 then love.graphics.draw(self.author, 0, 0)
elseif self.stage == 2 then love.graphics.draw(self.title, 0, 0) end
end
self.fade:draw()
end
function Intro:unload()
self.splash = nil
self.author = nil
self.title = nil
self.splash_snd = nil
self.author_snd = nil
self.title_snd = nil
self.valid = false
end
function Intro:keypressed(_)
self.skip = true
end
------------------------------------------------------------------------------
-- Module return
------------------------------------------------------------------------------
return Intro