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>
20 lines
1012 B
JavaScript
20 lines
1012 B
JavaScript
/** 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";
|