Something went wrong. Try again.
A Love2D remaster of my bug-catching-cult-classic Bait and Switch
Something went wrong. Try again.
4.3 kB · 152 lines
Lua
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153local mainMenu = {}
local config = require("src.config")local assets = require("src.assets")local gameState = require("src.gameState")local utils = require("src.utils")local input = require("src.input")
mainMenu.config = { logoScale = 2, logoY = 56,
buttonHeight = 16, buttonY = 120, buttonHoverOffset = 1, buttonTextOffset = 1,
fadeInSpeed = 2, fadeOutSpeed = 2,}
function mainMenu.load() mainMenu.logo = love.graphics.newImage("assets/logo.png") mainMenu.shadowColor = assets.shadowColor mainMenu.visible = true mainMenu.transitioning = false mainMenu.transitionAlpha = 0 mainMenu.fadingOut = false mainMenu.fadeOutAlpha = 0
mainMenu.buttons = { { text = "Play", action = function() mainMenu.beginTransition() end }, { text = "Settings", action = function() mainMenu.openSettings() end }, { text = "Quit", action = function() love.event.quit() end }, } mainMenu.hoveredButton = nilend
function mainMenu.beginTransition() mainMenu.transitioning = true mainMenu.transitionAlpha = 0 gameState.current = "MENU_TO_PLAY"end
function mainMenu.openSettings() local settingsMenu = require("src.settingsMenu") settingsMenu.show("MAIN_MENU")end
function mainMenu.update(dt) if not mainMenu.visible then return end
if mainMenu.transitioning then mainMenu.transitionAlpha = mainMenu.transitionAlpha + dt * mainMenu.config.fadeInSpeed if mainMenu.transitionAlpha >= 1 then mainMenu.transitionAlpha = 0 mainMenu.visible = false mainMenu.transitioning = false mainMenu.fadingOut = true mainMenu.fadeOutAlpha = 1 gameState.current = "PLAYING" end return end
local scaledX, scaledY = input.getMousePosition()
local previousHovered = mainMenu.hoveredButton mainMenu.hoveredButton = nil
for i, button in ipairs(mainMenu.buttons) do local buttonY = mainMenu.config.buttonY + (i - 1) * mainMenu.config.buttonHeight
if scaledX >= 0 and scaledX <= config.screen.width and scaledY >= buttonY and scaledY <= buttonY + mainMenu.config.buttonHeight then mainMenu.hoveredButton = i break end end
if mainMenu.hoveredButton and mainMenu.hoveredButton ~= previousHovered then assets.playSound(assets.audio.uiHover) endend
function mainMenu.draw() if not mainMenu.visible then return end
local logoX = config.screen.width / 2 local logoY = mainMenu.config.logoY
utils.drawWithShadow( mainMenu.logo, logoX, logoY, 0, mainMenu.config.logoScale, mainMenu.config.logoScale, mainMenu.logo:getWidth() / 2, mainMenu.logo:getHeight() / 2, 3, mainMenu.shadowColor )
love.graphics.setFont(assets.fonts.fat) for i, button in ipairs(mainMenu.buttons) do local buttonY = mainMenu.config.buttonY + (i - 1) * mainMenu.config.buttonHeight local isHovered = mainMenu.hoveredButton == i
local textYOffset = isHovered and -mainMenu.config.buttonHoverOffset or 0
if isHovered then love.graphics.setColor(mainMenu.shadowColor) love.graphics.printf(button.text, mainMenu.config.buttonTextOffset, buttonY + mainMenu.config.buttonTextOffset + textYOffset, config.screen.width, "center") end
love.graphics.setColor(1, 1, 1) love.graphics.printf(button.text, 0, buttonY + textYOffset, config.screen.width, "center") end
if mainMenu.transitioning then love.graphics.setColor(1, 1, 1, mainMenu.transitionAlpha) love.graphics.draw(assets.bg, 0, 0) endend
function mainMenu.mousepressed(x, y, button) if not mainMenu.visible or mainMenu.transitioning then return false end
if mainMenu.hoveredButton then assets.playSound(assets.audio.uiClick) local action = mainMenu.buttons[mainMenu.hoveredButton].action if action then action() end return true end
return falseend
return mainMenu