Init commit.

Very basic swing and hit physics.
Pitches every 5 seconds. Not much else!
This commit is contained in:
Sage Vaillancourt 2025-01-25 10:05:48 -05:00
commit be3223b28d
1 changed files with 100 additions and 0 deletions

100
main.lua Normal file
View File

@ -0,0 +1,100 @@
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