Transform: scale, rotation and mirror as properties, world transform as a matrix chain, oriented colliders (#76)
game-maker / suite (push) Successful in 9m5s
game-maker / suite (push) Successful in 9m5s
Four new rows on sprite, text, collider and container (block TRANSFORM): scale, rotation in degrees clockwise, mirrorX, mirrorY. As properties they get override/reset/apply, loading of old projects, write-back after play and the Properties node for free; camera and behavior have none. The hierarchy composes T*R*S per level (composeAlongChain replaces sumAlongChain), so children rotate and scale with their parent. Reparenting and grouping keep the look (carriedTransform). Drawing goes through placeNode, the gizmo is a polygon, cull and objectRect use the AABB, drags are computed in the parent's system. Colliders are oriented boxes: SAT for box/box, box-circle in the box frame; exitDistance replaces axisSeparation/axisCorrection, moveAndSlide moves along the object's own axes. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
1 parent
f85606427b
commit
016e83c9b5
33 files changed
+1346
-274
No files matched your search
@@ -0,0 +1,19 @@
|
||||
/** A 32 px picture, red on the left and green on the right, pasted in for pixel checks (28l, 29e). */
|
||||
export const PASTE_HALVES = `(async () => {
|
||||
const canvas = document.createElement('canvas');
|
||||
canvas.width = 32;
|
||||
canvas.height = 32;
|
||||
const g = canvas.getContext('2d');
|
||||
g.fillStyle = '#e63c3c'; g.fillRect(0, 0, 16, 32);
|
||||
g.fillStyle = '#3cc85a'; g.fillRect(16, 0, 16, 32);
|
||||
const blob = await new Promise((resolve) => canvas.toBlob(resolve, 'image/png'));
|
||||
const transfer = new DataTransfer();
|
||||
transfer.items.add(new File([blob], 'halves.png', { type: 'image/png' }));
|
||||
window.dispatchEvent(new ClipboardEvent('paste', { clipboardData: transfer, bubbles: true }));
|
||||
})()`;
|
||||
export const HALVES_LEFT = '#e63c3c';
|
||||
export const HALVES_RIGHT = '#3cc85a';
|
||||
|
||||
/** The pasted picture's asset, once the paste has landed. */
|
||||
export const FIND_HALVES =
|
||||
"__gm.state.project.assets.filter((a) => a.type === 'texture' && a.width === 32 && a.height === 32).map((a) => ({ id: a.id, file: a.file }))[0] ?? null";
|
||||
@@ -16,6 +16,7 @@ export const LANES = {
|
||||
keyRepeat: -300,
|
||||
stateMachine: -700,
|
||||
console: -1100,
|
||||
transform: -1500,
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
Reference in new issue
Block a user