Add inning count selection to main menu.
This commit is contained in:
parent
8943eef73f
commit
bb95ef5a63
|
@ -2,6 +2,7 @@
|
|||
---@class MainMenu
|
||||
MainMenu = {
|
||||
mainGameUpdateFunction = nil,
|
||||
---@type fun(settings: Settings)
|
||||
mainGameInitFunction = nil,
|
||||
}
|
||||
-- selene: allow(shadowing)
|
||||
|
@ -19,8 +20,15 @@ function MainMenu.start(config)
|
|||
playdate.update = MainMenu.update
|
||||
end
|
||||
|
||||
local inningCountSelection = 3
|
||||
|
||||
local function startGame()
|
||||
MainMenu.mainGameInitFunction()
|
||||
MainMenu.mainGameInitFunction({
|
||||
finalInning = inningCountSelection,
|
||||
homeTeamSprites = HomeTeamSprites,
|
||||
awayTeamSprites = AwayTeamSprites,
|
||||
})
|
||||
playdate.resetElapsedTime()
|
||||
playdate.update = MainMenu.mainGameUpdateFunction
|
||||
end
|
||||
|
||||
|
@ -61,40 +69,32 @@ end
|
|||
|
||||
local currentLogo = nil
|
||||
|
||||
local inningCountSelection = 3
|
||||
|
||||
function playdate.upButtonDown()
|
||||
inningCountSelection = inningCountSelection + 1
|
||||
end
|
||||
|
||||
function playdate.downButtonDown()
|
||||
inningCountSelection = math.max(1, inningCountSelection - 1)
|
||||
end
|
||||
|
||||
local itr = 0
|
||||
|
||||
local t = playdate.timer.new(1000)
|
||||
t:reset()
|
||||
function t.updateCallback()
|
||||
itr = itr + 1
|
||||
end
|
||||
|
||||
function MainMenu.update()
|
||||
playdate.timer.updateTimers()
|
||||
crankStartPos = crankStartPos or playdate.getCrankPosition()
|
||||
|
||||
gfx.clear()
|
||||
|
||||
if playdate.getCrankChange() ~= 0 then
|
||||
local crankOffset = (crankStartPos - playdate.getCrankPosition()) % 360
|
||||
currentLogo = arrayElementFromCrank(Logos, crankOffset).image
|
||||
replaceAwayLogo(currentLogo)
|
||||
end
|
||||
|
||||
gfx.clear()
|
||||
if playdate.buttonIsPressed(playdate.kButtonA) then
|
||||
startGame()
|
||||
if currentLogo then
|
||||
currentLogo:drawScaled(20, C.Center.y + 40, 3)
|
||||
end
|
||||
|
||||
if playdate.buttonJustPressed(playdate.kButtonA) then
|
||||
startGame()
|
||||
end
|
||||
if playdate.buttonJustPressed(playdate.kButtonUp) then
|
||||
inningCountSelection = inningCountSelection + 1
|
||||
end
|
||||
if playdate.buttonJustPressed(playdate.kButtonDown) then
|
||||
inningCountSelection = inningCountSelection - 1
|
||||
end
|
||||
|
||||
gfx.drawText(tostring(itr), 200, 120)
|
||||
GameLogo:drawCentered(C.Center.x, 50)
|
||||
|
||||
StartFont:drawTextAligned("Press A to start!", C.Center.x, 140, kTextAlignment.center)
|
||||
|
|
44
src/main.lua
44
src/main.lua
|
@ -53,6 +53,16 @@ local fielding = Fielding.new()
|
|||
-- GLOBAL STATE --
|
||||
------------------
|
||||
|
||||
--- Well, maybe not "Settings", but passive state that probably won't change much, if at all, during a game.
|
||||
---@class Settings
|
||||
local settings = {
|
||||
finalInning = 3,
|
||||
---@type SpriteCollection
|
||||
awayTeamSprites = nil,
|
||||
---@type SpriteCollection
|
||||
homeTeamSprites = nil,
|
||||
}
|
||||
|
||||
local deltaSeconds = 0
|
||||
local ball = Ball.new(gfx.animator)
|
||||
|
||||
|
@ -181,7 +191,7 @@ end
|
|||
local function nextHalfInning()
|
||||
pitchTracker:reset()
|
||||
local currentlyFieldingTeam = battingTeam == teams.home and teams.away or teams.home
|
||||
local gameOver = inning == 9 and teams.away.score ~= teams.home.score
|
||||
local gameOver = inning == settings.finalInning and teams.away.score ~= teams.home.score
|
||||
if not gameOver then
|
||||
fielding:celebrate()
|
||||
secondsSinceLastRunnerMove = -7
|
||||
|
@ -199,12 +209,12 @@ local function nextHalfInning()
|
|||
battingTeam = currentlyFieldingTeam
|
||||
playdate.timer.new(2000, function()
|
||||
if battingTeam == teams.home then
|
||||
battingTeamSprites = HomeTeamSprites
|
||||
battingTeamSprites = settings.homeTeamSprites
|
||||
runnerBlipper = HomeTeamBlipper
|
||||
fieldingTeamSprites = AwayTeamSprites
|
||||
fieldingTeamSprites = settings.awayTeamSprites
|
||||
else
|
||||
battingTeamSprites = AwayTeamSprites
|
||||
fieldingTeamSprites = HomeTeamSprites
|
||||
battingTeamSprites = settings.awayTeamSprites
|
||||
fieldingTeamSprites = settings.homeTeamSprites
|
||||
runnerBlipper = AwayTeamBlipper
|
||||
end
|
||||
end)
|
||||
|
@ -521,7 +531,9 @@ function mainGameUpdate()
|
|||
end
|
||||
end
|
||||
|
||||
local function mainGameInit()
|
||||
---@param s Settings
|
||||
local function mainGameInit(s)
|
||||
settings = s
|
||||
fielding:resetFielderPositions(teams.home.benchPosition)
|
||||
playdate.timer.new(2000, function()
|
||||
launchBall(C.PitchStartX, C.PitchStartY, playdate.easingFunctions.linear, nil, false)
|
||||
|
@ -530,10 +542,10 @@ local function mainGameInit()
|
|||
BootTune:setFinishCallback(function()
|
||||
TinnyBackground:play()
|
||||
end)
|
||||
battingTeamSprites = AwayTeamSprites
|
||||
fieldingTeamSprites = HomeTeamSprites
|
||||
HomeTeamBlipper = blipper.new(100, HomeTeamSprites.smiling, HomeTeamSprites.lowHat)
|
||||
AwayTeamBlipper = blipper.new(100, AwayTeamSprites.smiling, AwayTeamSprites.lowHat)
|
||||
battingTeamSprites = settings.awayTeamSprites
|
||||
fieldingTeamSprites = settings.homeTeamSprites
|
||||
HomeTeamBlipper = blipper.new(100, settings.homeTeamSprites.smiling, settings.homeTeamSprites.lowHat)
|
||||
AwayTeamBlipper = blipper.new(100, settings.awayTeamSprites.smiling, settings.awayTeamSprites.lowHat)
|
||||
runnerBlipper = battingTeam == teams.away and AwayTeamBlipper or HomeTeamBlipper
|
||||
end
|
||||
|
||||
|
@ -543,14 +555,10 @@ local function init()
|
|||
playdate.setMenuImage(gfx.image.new("images/game/menu-image.png"))
|
||||
playdate.getSystemMenu():addMenuItem("Restart game", function() end) -- TODO?
|
||||
|
||||
-- TODO: A lot of stuff ends up hinky here, because animators are ticking from the moment they initialize.
|
||||
-- TODO: Much needs to be redesigned to only init when a game is *actually* starting.
|
||||
-- MainMenu.start({
|
||||
-- mainGameUpdateFunction = mainGameUpdate,
|
||||
-- mainGameInitFunction = mainGameInit,
|
||||
-- })
|
||||
playdate.update = mainGameUpdate
|
||||
mainGameInit()
|
||||
MainMenu.start({
|
||||
mainGameUpdateFunction = mainGameUpdate,
|
||||
mainGameInitFunction = mainGameInit,
|
||||
})
|
||||
end
|
||||
|
||||
init()
|
||||
|
|
Loading…
Reference in New Issue