import 'CoreLibs/graphics.lua' import 'CoreLibs/animator.lua' import 'CoreLibs/easing.lua' local gfx = playdate.graphics playdate.display.setRefreshRate(50) gfx.setBackgroundColor(gfx.kColorWhite) lastPosition = playdate.getCrankPosition() -- text = "Oop" timeSinceLastSwing = 999999 local ball = gfx.image.new(10, 10, gfx.kColorBlack) local animationDuration = 2000 local ballStartY, endY = -20, 250 local easingFunction = playdate.easingFunctions.outQuint local ballAnimator = gfx.animator.new(animationDuration, ballStartY, endY, easingFunction) local screenW, screenH = 400, 240 local centerX, centerY = screenW / 2, screenH / 2 local batBaseX, batBaseY = centerX - 34, 200 local circleR = 45 local ballY = ballStartY local lastBallY = ballY local ballX = 200 local ballVelX, ballVelY = 0, 0 local batTipX = 0 local batTipY = 0 local hit = false function pitch() ballAnimator:reset() ballVelX = 0 ballVelY = 0 ballX = 200 hit = false end function playdate.AButtonDown() pitch() end local pitchClockSec = 5 local elapsedTime = 0 function playdate.update() local deltaTime = playdate.getElapsedTime() playdate.resetElapsedTime() elapsedTime = elapsedTime + deltaTime if elapsedTime > pitchClockSec then elapsedTime = 0 pitch() end gfx.clear() crankChange, acceleratedChange = playdate.getCrankChange() if hit then ballX = ballX + ballVelX ballY = ballY + ballVelY else ballY = ballAnimator:currentValue() end batAngle = math.rad(playdate.getCrankPosition() + 180) batTipX = batBaseX + (circleR * math.sin(batAngle)) batTipY = batBaseY + (circleR * math.cos(batAngle)) if hit == false and --(lastBallY - 2) < batTipY and ballY >= batTipY and batTipX > ballX then math.abs(ballY - batTipY) < 10 and batTipX > ballX then -- math.abs(batTipX - ballX) < 10 then ballAngle = batAngle + math.rad(90) mult = math.abs(acceleratedChange / 15) ballVelX = mult * -15 * math.sin(ballAngle) ballVelY = mult * 5 * math.cos(ballAngle) if ballVelY > 0 then ballVelX = ballVelX * -1 ballVelY = ballVelY * -1 end hit = true end lastBallY = ballY gfx.setColor(gfx.kColorBlack) -- ball:draw(ballX, ballY) gfx.setLineWidth(2) gfx.drawCircleAtPoint(ballX, ballY, 8) gfx.setLineWidth(5) gfx.drawLine(batBaseX, batBaseY, batTipX, batTipY) end