Each tilemap layer has its own Z: an offset added to the Z of the placed tilemap, like a child's Z to its parent, default 0 keeps the previous order (layers right after their map, in list order), a negative Z sorts a layer below the map, on a tie layers keep their list order and follow the hierarchy against other objects; editor scene and game use the same order through the new pure function drawSlots, a tilemap draws into one container per layer, and the tilemap panel gains a Z field for the selected layer with one undo step per change (#174)
game-maker / gate (push) Successful in 1m58s
game-maker / suite (push) Successful in 6m50s

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
adminandClaude Opus 5 committed 2026-09-19 14:03:20 +02:00
1 parent 5385d9e152
commit 47eea2f6e4
13 files changed
+389 -38

No files matched your search

+28
View File
@@ -245,6 +245,34 @@ export class RenameTilemapLayerCommand implements Command {
}
}
/** A layer's `z` above its tilemap's (#174); 0 is stored as nothing, the way a layer starts out. */
export class SetTilemapLayerZCommand implements Command {
readonly label = 'Set layer z';
private previous: number | undefined;
constructor(
private readonly assetId: string,
private readonly layerId: string,
private readonly z: number,
) {}
execute(project: Project): void {
if (!Number.isFinite(this.z)) throw new CommandError('A layer z is a number');
const layer = requireTilemapLayer(project, this.assetId, this.layerId);
this.previous = layer.z;
setLayerZ(layer, this.z);
}
undo(project: Project): void {
setLayerZ(requireTilemapLayer(project, this.assetId, this.layerId), this.previous ?? 0);
}
}
function setLayerZ(layer: TilemapLayer, z: number): void {
if (z === 0) delete layer.z;
else layer.z = z;
}
/** A hidden layer keeps its cells and is left out of the drawing, in the editor and in the game alike. */
export class SetTilemapLayerHiddenCommand implements Command {
readonly label: string;