/** Draw order: symbols always above sprites, `z` above hierarchy order. */ export async function drawing(t) { const { check, json, shot, click, locate, typeText, press, undo, mutate, select, object } = t; const orderOfCrates = () => json(`__gm.drawOrder().filter(id => id === 'o1' || id === 'o2')`); // 5a. Symbols stay on top: put the camera first in the hierarchy (drawn first) and a crate // right on top of its icon → the icon must still be drawn above the sprite. await mutate(` const objs = __gm.state.activeScene.objects; const cam = objs.splice(objs.findIndex(o => o.id === 'o3'), 1)[0]; objs.unshift(cam); const crate = objs.find(o => o.id === 'o1'); crate.position.x = 0; crate.position.y = 0; __gm.state.select(null)`); const layers = await json(`[__gm.layerOf('o3'), __gm.layerOf('o1'), __gm.layerOf('o2')]`); check( 'camera symbol is drawn in the overlay layer above sprites', JSON.stringify(layers) === '["overlay","objects","objects"]', JSON.stringify(layers), ); await shot('13-symbol-on-top'); // 5b. Z-order: put both crates on the origin. With equal z the hierarchy order wins // (o1 before o2 → o2 on top); raising o1's z draws it above o2; undo restores it. await mutate( `const o2 = __gm.state.activeScene.objects.find(o => o.id === 'o2'); o2.position.x = 0; o2.position.y = 0`, ); check( 'equal z keeps hierarchy order', JSON.stringify(await orderOfCrates()) === '["o1","o2"]', JSON.stringify(await orderOfCrates()), ); await select({ kind: 'object', holderId: 'scene1', objectId: 'o1' }); const zLabel = await locate('Z'); await click(zLabel.x + 160, zLabel.y); // plain click → text editing with everything selected await typeText('5'); await press('Enter'); check( 'Z field sets position.z', (await object('o1')).position.z === 5, `z=${(await object('o1')).position.z}`, ); check( 'higher z is drawn on top', JSON.stringify(await orderOfCrates()) === '["o2","o1"]', JSON.stringify(await orderOfCrates()), ); await shot('14-z-order'); await undo(); check('undo restores z', (await object('o1')).position.z === 0, `z=${(await object('o1')).position.z}`); }