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-collisionsmove_others = function(a, depth)if depth == nil then depth = 0 endif depth > 10 then return end-- print('move others', a.key)
-- see https://akkartik.itch.io/carousel/devlog/649349/handling-cascading-collisionscollide = 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 thenif abs_amount.x <= abs_amount.y thenreturn {x=abs_amount.x*sign(delta.x), y=0}