Files
LoveDOS-Dungeon-Crawler/src/gstates/menu.lua

112 lines
3.1 KiB
Lua
Raw Normal View History

------------------------------------------------------------------------------
-- Imports
------------------------------------------------------------------------------
local love = require 'love'
2025-10-05 17:47:17 -04:00
local assets = require 'src.utils.asstmngr'
local make_class = require 'src.utils.classes'
local GameState = require 'src.gstates.gstate'
2025-10-05 15:24:48 -04:00
local Fader = require 'src.graphics.fader'
local Sprite = require 'src.graphics.sprite'
local Cursor = require 'src.ui.cursor'
2025-10-05 22:09:20 -04:00
local Font = require 'src.ui.font'
2025-10-05 15:24:48 -04:00
local SoundEffect = require 'src.sound.sfx'
2025-10-05 22:09:20 -04:00
local ButtonGroup = require 'src.ui.btngrp'
------------------------------------------------------------------------------
-- Class definitions
------------------------------------------------------------------------------
local MainMenu = make_class(GameState)
------------------------------------------------------------------------------
-- Class methods
------------------------------------------------------------------------------
function MainMenu:_init(name, index)
GameState._init(self, name, index)
2025-10-05 22:09:20 -04:00
self.next_state = self.index
self.fade = Fader()
2025-10-05 15:24:48 -04:00
-- Create sprites and buttons.
2025-10-05 22:09:20 -04:00
self.background = Sprite('imgs/concb03.png')
self.btn_font = Font('fonts/Concrete.ttf')
-- Create UI elements.
self.btns = ButtonGroup(15, 15)
self.btns:add_text_button('New Game', self.btn_font)
self.btns:add_text_button('Load Game', self.btn_font)
self.btns:add_text_button('Options', self.btn_font)
self.btns:add_text_button('Help & Story', self.btn_font)
self.btns:add_text_button('Quit', self.btn_font, function() self.next_state = -1 end)
2025-10-05 15:24:48 -04:00
-- Create a mouse cursor object at the current mouse position.
local mx, my = love.mouse.getPosition()
self.cursor = Cursor(mx, my)
-- Create sound effects.
self.bgm = SoundEffect('bgm/eskisky.wav')
2025-10-05 17:47:17 -04:00
-- Register all assets.
2025-10-05 22:09:20 -04:00
assets:register(self.name, self.btn_font)
2025-10-05 17:47:17 -04:00
assets:register(self.name, self.background)
assets:register(self.name, self.cursor)
assets:register(self.name, self.bgm)
2025-10-05 22:09:20 -04:00
assets:register(self.name, self.btns)
end
function MainMenu:update(dt)
2025-10-05 17:47:17 -04:00
if assets:done(self.name) then
if not self.bgm:isPlaying() then self.bgm:play() end
2025-10-05 17:47:17 -04:00
-- Update the fader.
self.fade:update(dt)
else
assets:update(self.name)
end
2025-10-05 22:09:20 -04:00
return self.next_state
end
2025-10-05 17:47:17 -04:00
function MainMenu:draw()
if assets:done(self.name) then
self.background:draw()
2025-10-05 22:09:20 -04:00
self.btns:draw()
2025-10-05 17:47:17 -04:00
self.cursor:draw()
self.fade:draw()
else
assets:draw()
end
end
2025-10-05 22:09:20 -04:00
function MainMenu:keypressed(_)
end
function MainMenu:mousemoved(x, y, dx, dy)
2025-10-05 22:09:20 -04:00
self.btns:mousemoved(x, y, dx, dy)
self.cursor:mousemoved(x, y, dx, dy)
end
2025-10-05 22:09:20 -04:00
function MainMenu:mousepressed(x, y, btn)
self.btns:mousepressed(x, y, btn)
end
function MainMenu:mousereleased(x, y, btn)
self.btns:mousereleased(x, y, btn)
end
------------------------------------------------------------------------------
-- Module return
------------------------------------------------------------------------------
return MainMenu