4G745ZJ6SPYM5FWSPPE6HF2C5EV2IIFQPP5OGAGFXLOGMPRLT2PQC
2SJD2KYFBVFTJ5RPLBCLYTCTO5ON22B3LR6MDO4JJNDIFJ7G4VOAC
V4B6WUXGUDJAILCYS6NITCXL2PZVC7CMSDFAAK7DDQK6DZKCSCVQC
BWKB6DH5KLO37LEPXYPS43VTLGLKGEQJOSCO6XWJSN67TNDT42OQC
R5QXEHUIZLELJGGCZAE7ATNS3CLRJ7JFRENMGH4XXH24C5WABZDQC
PMAUMC7DNSQUUKKJW3DPNAFMSSBQBJJCYKWZFDTTCU6ZPXG5S5HQC
GR5KQTUTF6UVSYLO7NKICQ6YTO2O7TVIF5QAVDR65RKBSG77B4FQC
B3I5MC55KGDCKCCC6VTSZXCTMWULONPWPBL6PKBME7TOCODWONDQC
OIZB23GPQYDKBIZPB2TXBDQCJCWQUCWUX3SWPGHXY5HXNVQABBYQC
XZBGZ5N5P4AMLO2I7PXLBA64FWFU5SPCOJNTKPK4FRGU6ADGQ7GQC
RKCJBAJPRQAB3PYHETZFU6347F5YQXWYRMDNSVJINLY2EK2DE4EAC
vx(Move.node.pos.x-Move.node.hs.x),
vy(Move.node.pos.y-Move.node.hs.y),
scale(Move.node.hs.x*2),
scale(Move.node.hs.y*2))
love.graphics.rectangle('line',
vx(Move.oldx), vy(Move.oldy),
scale(Move.node.w), scale(Move.node.h))
end
-- show original location of node, to help put it back
-- Create pos+halfsize representation for nodes
-- pad out one node fully, and all other nodes just enough to keep them from overlapping.
-- We don't want cascading movements to get too chaotic.
prepare_to_move = function(target)
-- see https://akkartik.itch.io/carousel/devlog/649349/handling-cascading-collisions
move_others = function(a, depth)
if depth == nil then depth = 0 end
if depth > 10 then return end
-- print('move others', a.key)
-- see https://akkartik.itch.io/carousel/devlog/649349/handling-cascading-collisions
collide = function(a, b)
local delta = {x=a.pos.x-b.pos.x, y=a.pos.y-b.pos.y}
local abs_delta = {x=math.abs(a.pos.x-b.pos.x), y=math.abs(a.pos.y-b.pos.y)}
local size = {x=a.hs.x+b.hs.x, y=a.hs.y+b.hs.y}
local abs_amount = {x=size.x-abs_delta.x, y=size.y-abs_delta.y}
if abs_amount.x > 0 and abs_amount.y > 0 then
if abs_amount.x <= abs_amount.y then
return {x=abs_amount.x*sign(delta.x), y=0}