189 lines
5.0 KiB
Lua
189 lines
5.0 KiB
Lua
------------------------------------------------------------------------------
|
|
-- Imports
|
|
------------------------------------------------------------------------------
|
|
|
|
local love = require 'love'
|
|
local assets = require 'src.utils.asstmngr'
|
|
local dialog_manager = require 'src.ui.dlgmngr'
|
|
local make_class = require 'src.utils.classes'
|
|
local GameState = require 'src.gstates.gstate'
|
|
local Fader = require 'src.graphics.fader'
|
|
local Cursor = require 'src.ui.cursor'
|
|
local SoundEffect = require 'src.sound.sfx'
|
|
local Sprite = require 'src.graphics.sprite'
|
|
|
|
|
|
------------------------------------------------------------------------------
|
|
-- Class definitions
|
|
------------------------------------------------------------------------------
|
|
|
|
local Menu = make_class(GameState)
|
|
|
|
|
|
------------------------------------------------------------------------------
|
|
-- Class methods
|
|
------------------------------------------------------------------------------
|
|
|
|
function Menu:_init(name, index)
|
|
GameState._init(self, name, index)
|
|
self.fade = Fader()
|
|
|
|
-- Sprites.
|
|
self.backg = Sprite('imgs/main.png')
|
|
self.gamesel = Sprite('imgs/mainsel1.png')
|
|
self.quitsel = Sprite('imgs/mainsel2.png')
|
|
self.gameclick = Sprite('imgs/mnclck1.png')
|
|
self.quitclick = Sprite('imgs/mnclck2.png')
|
|
|
|
-- Create sound effects.
|
|
self.splash = SoundEffect('bgm/Opening.wav')
|
|
self.quit_snd = SoundEffect('snd/byebye.wav')
|
|
self.click_snd = SoundEffect('snd/MouseDwn.wav')
|
|
self.roll_snd = SoundEffect('snd/RollOver.wav')
|
|
|
|
-- Create a mouse cursor object at the current mouse position.
|
|
local mx, my = love.mouse.getPosition()
|
|
self.cursor = Cursor(mx, my)
|
|
|
|
-- Register all assets.
|
|
assets:register(self.name, self.cursor)
|
|
assets:register(self.name, self.splash)
|
|
assets:register(self.name, self.quit_snd)
|
|
assets:register(self.name, self.click_snd)
|
|
assets:register(self.name, self.roll_snd)
|
|
assets:register(self.name, self.backg)
|
|
assets:register(self.name, self.gamesel)
|
|
assets:register(self.name, self.quitsel)
|
|
assets:register(self.name, self.gameclick)
|
|
assets:register(self.name, self.quitclick)
|
|
|
|
-- Attributes
|
|
self.game_selected = false
|
|
self.quit_selected = false
|
|
self.game_clicked = false
|
|
self.quit_clicked = false
|
|
end
|
|
|
|
|
|
function Menu:load()
|
|
-- Load basic assets.
|
|
self.backg:load()
|
|
self.splash:load()
|
|
|
|
-- Play the initial sound effect.
|
|
self.splash:play()
|
|
end
|
|
|
|
|
|
function Menu:update(dt)
|
|
if self.all_loaded then
|
|
self.fade:update(dt)
|
|
else
|
|
local done = true
|
|
assets:update(self.name)
|
|
self.all_loaded = assets:done(self.name) and done
|
|
end
|
|
|
|
return self.next_state
|
|
end
|
|
|
|
|
|
function Menu:draw()
|
|
if self.all_loaded then
|
|
if self.game_selected and not self.game_clicked then
|
|
self.gamesel:draw()
|
|
elseif self.game_selected and self.game_clicked then
|
|
self.gameclick:draw()
|
|
elseif self.quit_selected and not self.quit_clicked then
|
|
self.quitsel:draw()
|
|
elseif self.quit_selected and self.quit_clicked then
|
|
self.quitclick:draw()
|
|
else
|
|
self.backg:draw()
|
|
end
|
|
|
|
self.cursor:draw()
|
|
self.fade:draw()
|
|
else
|
|
assets:draw()
|
|
end
|
|
end
|
|
|
|
|
|
function Menu:mousemoved(x, y, dx, dy)
|
|
self.cursor:mousemoved(x, y, dx, dy)
|
|
|
|
if self:IsCursorInGameBtn(x, y) then
|
|
if not self.game_selected then
|
|
self.roll_snd:play()
|
|
end
|
|
self.game_selected = true
|
|
|
|
else
|
|
self.game_selected = false
|
|
end
|
|
|
|
if self:IsCursorInQuitBtn(x, y) then
|
|
if not self.quit_selected then
|
|
self.roll_snd:play()
|
|
end
|
|
self.quit_selected = true
|
|
|
|
else
|
|
self.quit_selected = false
|
|
end
|
|
end
|
|
|
|
|
|
function Menu:mousepressed(x, y, btn)
|
|
if self.fade.done then
|
|
if self.game_selected then
|
|
self.game_clicked = true
|
|
self.quit_clicked = false
|
|
elseif self.quit_selected then
|
|
self.game_clicked = false
|
|
self.quit_clicked = true
|
|
else
|
|
self.game_clicked = false
|
|
self.quit_clicked = false
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
function Menu:mousereleased(x, y, btn)
|
|
if self.fade.done then
|
|
if self.game_selected and self.game_clicked then
|
|
self.next_state = 2
|
|
elseif self.quit_selected and self.quit_clicked then
|
|
self.next_state = -1
|
|
self.quit_snd:play()
|
|
end
|
|
|
|
self.game_clicked = false
|
|
self.quit_clicked = false
|
|
end
|
|
end
|
|
|
|
|
|
function Menu:unload()
|
|
assets:unload(self.name)
|
|
end
|
|
|
|
|
|
function Menu:IsCursorInGameBtn(x, y)
|
|
return x >= 224 and x <= 224 + 89 and y >= 131 and y <= 131 + 30
|
|
end
|
|
|
|
|
|
function Menu:IsCursorInQuitBtn(x, y)
|
|
return x >= 243 and x <= 243 + 51 and y >= 173 and y <= 173 + 24
|
|
end
|
|
|
|
|
|
------------------------------------------------------------------------------
|
|
-- Module return
|
|
------------------------------------------------------------------------------
|
|
|
|
return Menu
|