Add multi-cell box shapes with per-cell collision
Generate 1x2/2x1 dominoes, 2x2 (square + 4 L-trominoes) and all
connected 3x2/2x3 polyominoes as R/G/B channel masks, reusing the
distance-based concentric-ring format that reproduces box_r/g/b
exactly. Outer silhouette keeps a 1px margin; connected cells stay
seamless. Each shape ships a {class="moveable"} .meta so getAllAssets
auto-registers it as a GenericMoveable.
Wire the occupied-cell shape (precomputed once by getAllAssets via
getCellsFromSprite) through to entities: createEntity now passes the
cached cells as cellShape, so an L/U/notched block collides on its real
cells and its gaps read as empty space. Fix the per-colour cache that
was reset every channel so only one colour survived.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
5b7ea9ec20
commit
d96f57efb6
154 changed files with 194 additions and 9 deletions
|
|
@ -43,10 +43,14 @@ function getAllAssets()
|
|||
local sprite = topFolder .. "/" .. folder .. "/" .. fileToAnalyze
|
||||
globalAssetProperties[name].sprites[color] = sprite
|
||||
|
||||
if not globalAssetProperties[name].cells or reanalyzeCells then
|
||||
globalAssetProperties[name].cells = {}
|
||||
-- Precompute the occupied-cell shape once per asset/colour and
|
||||
-- cache it here; entities share this table by reference so
|
||||
-- collision never rescans pixels at runtime. Keyed per colour
|
||||
-- (each channel leaves its own gaps) rather than reset per file.
|
||||
globalAssetProperties[name].cells = globalAssetProperties[name].cells or {}
|
||||
if not globalAssetProperties[name].cells[color] or reanalyzeCells then
|
||||
globalAssetProperties[name].cells[color] = getCellsFromSprite(sprite)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue