luncher/src/systems/rounds.lua

79 lines
3.1 KiB
Lua

collectedEntities = filteredSystem({ collected = T.PdImage })
local onCollidingRemove = { "mass", "velocity", "canCollideWith" }
roundSystem = filteredSystem({ roundAction = T.RoundStateAction, position = Maybe(T.XyPair) }, function(e, _, system)
if e.roundAction == "end" then
playdate.setAutoLockDisabled(false)
local y = e.position.y - 240
local rectWidth = 150
local plateSize = { x = rectWidth, y = 10 }
system.world:addEntity({
drawAsRectangle = { size = plateSize },
size = plateSize,
mass = 0.5,
velocity = { x = 0, y = 0 },
position = { x = e.position.x - (rectWidth / 2), y = y },
canCollideWith = 2,
canBeCollidedBy = 2,
isSolid = true,
stopMovingOnCollision = true,
})
local delayPerDrop = 150
local delay = 0
for i, collectable in ipairs(collectedEntities.entities) do
local collX, collY = collectable.collected:getSize()
y = y - collY - 15
playdate.timer.new(delay, function(ee, ccollX, ccollY, yy, ii, ssystem, ccollectable)
ssystem.world:addEntity({
drawAsSprite = ccollectable.collected,
size = { x = ccollX, y = ccollY / 2 },
mass = 0.5,
velocity = { x = 0, y = 0 },
position = { x = ee.position.x - (ccollX / 2), y = yy },
canCollideWith = 2,
canBeCollidedBy = 2,
isSolid = true,
stopMovingOnCollision = true,
onCollidingRemove = onCollidingRemove,
focusOnCollide = ii,
expireBelowScreenBy = 5,
})
end, e, collX, collY, y, i, system, collectable)
delay = delay + delayPerDrop
system.world:removeEntity(collectable)
end
local availableUpgrades = Utils.getNDifferentValues(getAvailableSpawnerUpgrades(), 3)
y = y - 50
for _, upgrade in ipairs(availableUpgrades) do
printTable(upgrade)
local collX, collY = 75, 30
y = y - collY - 15
playdate.timer.new(delay, function(ee, ccollX, ccollY, yy, ii, ssystem, ccollectable)
ssystem.world:addEntity({
drawAsText = {
text = upgrade.name,
},
size = { x = ccollX, y = ccollY / 2 },
mass = 0.5,
velocity = { x = 0, y = 0 },
position = { x = ee.position.x - (ccollX / 2), y = yy },
canCollideWith = 2,
canBeCollidedBy = 2,
isSolid = true,
stopMovingOnCollision = true,
onCollidingRemove = onCollidingRemove,
focusOnCollide = ii,
})
end, e, collX, collY, y, i, system, collectable)
delay = delay + delayPerDrop
end
system.world:removeEntity(e)
end
end)