import "CoreLibs/math" import "CoreLibs/animation" local velocity = {x=0,y=0} local lerpmnt = 0.5 local grav = 0.2 scale = 1 local dead = false local exists = false local active = false local gfx = playdate.graphics local imgRocket = gfx.image.new("gfx/rocket") local imgFire = gfx.imagetable.new("gfx/fire") assert(imgRocket) sprRocket = gfx.sprite.new(imgRocket) local loopFire = gfx.animation.loop.new(200,imgFire) sprRocket:setCollideRect(7, 7, 14, 14) local startpos = {x=0,y=0} local imgBigRocket = gfx.image.new("gfx/bigrocket") assert(imgBigRocket) local sprBigRocket = gfx.sprite.new(imgBigRocket) sprBigRocket:setCollideRect(8,8,48,48) sprBigRocket:setGroups({2}) function addPlayer(_x,_y,__x,__y) song:stop() song:load("sfx/song2") song:play(0) exists = true dead = false scale = 1 active = false velocity = {x=0,y=0} startpos = {x= _x,y=_y} sprBigRocket:moveTo(__x,__y) sprBigRocket:add() sprRocket:moveTo(_x,_y) sprRocket:add() sprRocket:setVisible(true) end function killPlayer() exists = false active = false sprRocket:remove() gfx.setDrawOffset(0,0) end local function playerWin() if active then song:stop() song:load("sfx/song3") song:play(1) end active = false exists = false dead = true end local function die() deaths +=1 active = false velocity = {x=0,y=0} sprRocket:moveTo(startpos.x, startpos.y) end function updatePlayer() sprRocket:setImage(imgRocket) if active == true then if playdate.buttonIsPressed(playdate.kButtonUp) or playdate.buttonIsPressed(playdate.kButtonA) then velocity.x = velocity.x + math.sin(math.rad(playdate.getCrankPosition())) /2 velocity.y = velocity.y - math.cos(math.rad(playdate.getCrankPosition())) /2 end sprRocket:moveBy(velocity.x,velocity.y) local cx, cy = gfx.getDrawOffset() gfx.setDrawOffset(playdate.math.lerp(cx,(-sprRocket.x + 200), lerpmnt), playdate.math.lerp(cy,(-sprRocket.y + 120), lerpmnt)) sprRocket:setRotation(0) sprRocket:update() --print(#sprRocket:overlappingSprites()) velocity.y += grav if #sprRocket:overlappingSprites() > 0 then die() end elseif exists == true then if playdate.buttonIsPressed(playdate.kButtonUp) or playdate.buttonIsPressed(playdate.kButtonA) then active = true end local cx, cy = gfx.getDrawOffset() gfx.setDrawOffset(playdate.math.lerp(cx,(-sprRocket.x + 200), lerpmnt), playdate.math.lerp(cy,(-sprRocket.y + 120), lerpmnt)) elseif dead == true then if scale > 0.1 then scale -= 0.05 else sprRocket:setVisible(false) end end updateExit() if playdate.buttonIsPressed(playdate.kButtonA) or playdate.buttonIsPressed(playdate.kButtonUp) then sprRocket:setImage(loopFire:image()) end sprRocket:setScale(scale,scale) sprRocket:setRotation(playdate.getCrankPosition()) end function updateExit() if sprBigRocket:alphaCollision(sprRocket) and energy == totalEnergy then playerWin() end end