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)
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
5385d9e152
commit
47eea2f6e4
13 files changed
+389
-38
No files matched your search
@@ -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;
|
||||
|
||||
Reference in new issue
Block a user