First commit.
This commit is contained in:
@@ -0,0 +1,183 @@
|
||||
------------------------------------------------------------------------------
|
||||
-- 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: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
|
||||
Reference in New Issue
Block a user