First commit.

This commit is contained in:
2026-09-20 00:44:51 -04:00
commit d69768c649
53 changed files with 3213 additions and 0 deletions
+183
View File
@@ -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