112 lines
No EOL
3.3 KiB
Lua
112 lines
No EOL
3.3 KiB
Lua
import "CoreLibs/animator"
|
|
local gfx <const> = playdate.graphics
|
|
|
|
local imgSaw = gfx.image.new("gfx/sawblade")
|
|
local imgTarget = gfx.image.new("gfx/target")
|
|
assert(imgSaw)
|
|
assert(imgTarget)
|
|
|
|
local blades = {}
|
|
local spinblades = {}
|
|
|
|
function loadBlades(_blades)
|
|
for i = 1, #_blades,1 do
|
|
local b = _blades[i]
|
|
b.start = playdate.geometry.point.new(b.start.x,b.start.y)
|
|
b.ends = playdate.geometry.point.new(b.ends.x,b.ends.y)
|
|
b.saw = gfx.sprite.new(imgSaw)
|
|
b.saw:moveTo(b.start)
|
|
b.saw:setCollideRect(0,0,16,16)
|
|
b.saw:add()
|
|
|
|
local a = gfx.animator.new(b.speed*1000, b.start, b.ends)
|
|
|
|
b.saw:setAnimator(a)
|
|
|
|
b.t1 = gfx.sprite.new(imgTarget)
|
|
b.t1:moveTo(b.start)
|
|
b.t2 = gfx.sprite.new(imgTarget)
|
|
b.t2:moveTo(b.ends)
|
|
b.t1:add()
|
|
b.t2:add()
|
|
blades[i] = b
|
|
end
|
|
end
|
|
|
|
function loadSpins(_spins)
|
|
for i = 1, #_spins, 1 do
|
|
local s = _spins[i]
|
|
if s.middle then
|
|
s.middle = gfx.sprite.new(imgSaw)
|
|
s.middle:setCollideRect(0,0,16,16)
|
|
else
|
|
s.middle = gfx.sprite.new(imgTarget)
|
|
end
|
|
s.middle:moveTo(s.x,s.y)
|
|
s.middle:add()
|
|
|
|
local sb = {speed=s.speed,arms={},mid=s.middle,time=0}
|
|
for i = 1, s.arms, 1 do
|
|
sb.arms[i] = {}
|
|
for p = 1, s.armlen, 1 do
|
|
local degrees = (360 / s.arms) * i
|
|
local position = {x=math.sin(math.rad(degrees)) * 20 * p,y=math.cos(math.rad(degrees)) * 20 * p}
|
|
|
|
sb.arms[i][p] = gfx.sprite.new(imgSaw)
|
|
sb.arms[i][p]:moveTo(s.x + position.x, s.y + position.y)
|
|
sb.arms[i][p]:setCollideRect(0,0,16,16)
|
|
sb.arms[i][p]:add()
|
|
end
|
|
end
|
|
spinblades[#spinblades+1] = sb
|
|
end
|
|
end
|
|
|
|
function updateSaws()
|
|
for b=1, #blades, 1 do
|
|
b = blades[b]
|
|
local pos = playdate.geometry.point.new(b.saw:getPosition())
|
|
if pos == b.start then
|
|
local a = gfx.animator.new(b.speed*1000, b.start, b.ends)
|
|
|
|
b.saw:setAnimator(a)
|
|
elseif pos == b.ends then
|
|
local a = gfx.animator.new(b.speed*1000, b.ends, b.start)
|
|
|
|
b.saw:setAnimator(a)
|
|
end
|
|
end
|
|
|
|
for spinner = 1, #spinblades, 1 do
|
|
for arm = 1, #spinblades[spinner].arms do
|
|
for blade = 1, #spinblades[spinner].arms[arm] do
|
|
spinblades[spinner].time += spinblades[spinner].speed
|
|
local degrees = (360 / #spinblades[spinner].arms + spinblades[spinner].time)
|
|
print(degrees)
|
|
local position = {x=math.sin(math.rad(degrees)) * 20 * blade,y=math.cos(math.rad(degrees)) * 20 * blade}
|
|
|
|
spinblades[spinner].arms[arm][blade]:moveTo(spinblades[spinner].mid.x + position.x, spinblades[spinner].mid.y + position.y)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
function killBlades()
|
|
for i = 1, #blades, 1 do
|
|
blades[i].t1:remove()
|
|
blades[i].t2:remove()
|
|
blades[i].saw:remove()
|
|
end
|
|
blades = {}
|
|
|
|
for i = 1, #spinblades, 1 do
|
|
spinblades[i].mid:remove()
|
|
for arm = 1, #spinblades[i].arms do
|
|
for blade = 1, #spinblades[i].arms[arm] do
|
|
spinblades[i].arms[arm][blade]:remove()
|
|
end
|
|
end
|
|
end
|
|
|
|
spinblades = {}
|
|
end |