diff --git a/src/baserunning.lua b/src/baserunning.lua index abe4c06..c006c4f 100644 --- a/src/baserunning.lua +++ b/src/baserunning.lua @@ -37,6 +37,7 @@ end ---@param runner integer | Runner ---@param message string | nil +---@return boolean wasFinalOut function Baserunning:outRunner(runner, message) self.outs = self.outs + 1 if type(runner) ~= "number" then @@ -56,13 +57,16 @@ function Baserunning:outRunner(runner, message) self.announcer:say(message or "YOU'RE OUT!") if self.outs < 3 then - return + return false end + self.outs = 0 -- TODO: outRunners/scoredRunners split while #self.runners > 0 do self.outRunners[#self.outRunners + 1] = table.remove(self.runners, #self.runners) end + + return true end function Baserunning:outEligibleRunners(fielder) @@ -78,7 +82,10 @@ function Baserunning:outEligibleRunners(fielder) -- Tag out or not runnerOnBase and utils.distanceBetween(runner.x, runner.y, fielder.x, fielder.y) < C.TagDistance then - self:outRunner(i) + local wasFinalOut = self:outRunner(i) + if wasFinalOut then + return true -- Don't keep running up self.outs after it's been reset + end didOutRunner = true end end diff --git a/src/images/game/GrassBackground.png b/src/images/game/GrassBackground.png index 9f6dedf..7b45da2 100644 Binary files a/src/images/game/GrassBackground.png and b/src/images/game/GrassBackground.png differ diff --git a/src/images/game/Player.png b/src/images/game/Player.png index 3bc242c..f15876f 100644 Binary files a/src/images/game/Player.png and b/src/images/game/Player.png differ diff --git a/src/images/game/PlayerBack.png b/src/images/game/PlayerBack.png index 1c2ecc5..cb5fac2 100644 Binary files a/src/images/game/PlayerBack.png and b/src/images/game/PlayerBack.png differ diff --git a/src/images/game/PlayerFrown.png b/src/images/game/PlayerFrown.png index 3d3ec97..c26bf02 100644 Binary files a/src/images/game/PlayerFrown.png and b/src/images/game/PlayerFrown.png differ diff --git a/src/images/game/PlayerLowHat.png b/src/images/game/PlayerLowHat.png index 985867e..ab71782 100644 Binary files a/src/images/game/PlayerLowHat.png and b/src/images/game/PlayerLowHat.png differ diff --git a/src/main.lua b/src/main.lua index f76c36a..9c1f863 100644 --- a/src/main.lua +++ b/src/main.lua @@ -66,7 +66,6 @@ local teams = { local PlayerTeam = teams.away local battingTeam = teams.away -local outs = 0 local inning = 1 local offenseState = C.Offense.batting @@ -78,7 +77,7 @@ local secondsSincePitchAllowed = -5 local catcherThrownBall = false -local BatterHandPos = utils.xy(10, 25) +local BatterHandPos = utils.xy(10, 15) local batBase = utils.xy(C.Center.x - 34, 215) local batTip = utils.xy(0, 0) @@ -174,8 +173,8 @@ end ---@param runner integer | Runner ---@param message string | nil local function outRunner(runner, message) - baserunning:outRunner(runner, message) - if baserunning.outs < 3 then + local wasFinalOut = baserunning:outRunner(runner, message) + if not wasFinalOut then return end @@ -187,9 +186,10 @@ local function outRunner(runner, message) fielding:benchTo(currentlyFieldingTeam.benchPosition) announcer:say("SWITCHING SIDES...") end + + -- TODO: Make the overlay handle its own dang delay. -- Delay to keep end-of-inning on the scoreboard for a few seconds playdate.timer.new(3000, function() - outs = 0 battingTeam = currentlyFieldingTeam if gameOver then announcer:say("AND THAT'S THE BALL GAME!") @@ -295,7 +295,6 @@ local function updateBatting(batDeg, batSpeed) end local ballDestX = ball.x + (ballVelX * C.BattingPower) local ballDestY = ball.y + (ballVelY * C.BattingPower) - ballDestY = ballDestY - 300 -- Hit! local hitBallScaler = gfx.animator.new(2000, 9 + (mult * mult * 0.5), C.SmallestBallRadius, utils.easingHill) launchBall(ballDestX, ballDestY, playdate.easingFunctions.outQuint, 2000, nil, hitBallScaler) @@ -477,22 +476,23 @@ function playdate.update() playdate.ui.crankIndicator:draw() end + local playerHeightOffset = 10 -- TODO? Scale sprites down as y increases for _, runner in pairs(baserunning.runners) do if runner == baserunning.batter then if batAngleDeg > 50 and batAngleDeg < 200 then - PlayerBack:draw(runner.x, runner.y) + PlayerBack:draw(runner.x, runner.y - playerHeightOffset) else - Player:draw(runner.x, runner.y) + Player:draw(runner.x, runner.y - playerHeightOffset) end else -- TODO? Change blip speed depending on runner speed? - PlayerImageBlipper:draw(false, runner.x, runner.y) + PlayerImageBlipper:draw(false, runner.x, runner.y - playerHeightOffset) end end for _, runner in pairs(baserunning.outRunners) do - PlayerFrown:draw(runner.x, runner.y) + PlayerFrown:draw(runner.x, runner.y - playerHeightOffset) end if not ballIsHeld then @@ -509,7 +509,7 @@ function playdate.update() if math.abs(offsetX) > 10 or math.abs(offsetY) > 10 then drawMinimap(baserunning.runners, fielding.fielders) end - drawScoreboard(0, C.Screen.H * 0.77, teams, outs, battingTeam, inning) + drawScoreboard(0, C.Screen.H * 0.77, teams, baserunning.outs, battingTeam, inning) drawBallsAndStrikes(290, C.Screen.H - 20, pitchTracker.balls, pitchTracker.strikes) announcer:draw(C.Center.x, 10) end