Z-order via position.z and reset-to-default for asset properties
- Position is now { x, y, z }; higher z draws on top, ties keep hierarchy order
- Viewport sorts the objects layer deterministically (syncDrawOrder)
- Inspector shows a Z field; asset properties that differ from the schema
default are marked bold with a reset button (ResetAssetPropertyCommand)
- isModified() helper, unit tests, E2E checks and seed updated
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
1 parent
aaa8154adf
commit
d4b1ffa051
18 files changed
+232
-63
No files matched your search
@@ -2,7 +2,7 @@ import { describe, expect, it } from 'vitest';
|
||||
import { buildAsset } from '../../src/core/commands/assetCommands';
|
||||
import { createSceneObject } from '../../src/core/model/SceneObject';
|
||||
import { coerceValue, defaultsFor, schemaFor } from '../../src/core/properties/PropertySchema';
|
||||
import { inheritedValue, isOverridden, resolveAssetProps, resolveSceneObjectProps } from '../../src/core/properties/resolve';
|
||||
import { inheritedValue, isModified, isOverridden, resolveAssetProps, resolveSceneObjectProps } from '../../src/core/properties/resolve';
|
||||
|
||||
describe('PropertySchema', () => {
|
||||
it('has no position on any asset type', () => {
|
||||
@@ -49,10 +49,20 @@ describe('resolve', () => {
|
||||
expect(inheritedValue(sprite, 'color')).toBe(0x00ff00);
|
||||
});
|
||||
|
||||
it('detects asset values that differ from the schema default', () => {
|
||||
const sprite = buildAsset('sprite', 'Box');
|
||||
expect(isModified(sprite, 'width')).toBe(false); // explicit default counts as unmodified
|
||||
sprite.props.width = 250;
|
||||
expect(isModified(sprite, 'width')).toBe(true);
|
||||
delete sprite.props.height; // missing → resolved from default → unmodified
|
||||
expect(isModified(sprite, 'height')).toBe(false);
|
||||
expect(isModified(sprite, 'bogus')).toBe(false);
|
||||
});
|
||||
|
||||
it('keeps position on the scene object only', () => {
|
||||
const sprite = buildAsset('sprite', 'Box');
|
||||
const object = createSceneObject('o1', sprite.id, { x: 10, y: 20 });
|
||||
expect(object.position).toEqual({ x: 10, y: 20 });
|
||||
expect(object.position).toEqual({ x: 10, y: 20, z: 0 });
|
||||
expect('position' in sprite).toBe(false);
|
||||
expect(resolveSceneObjectProps(sprite, object)).not.toHaveProperty('x');
|
||||
});
|
||||
|
||||
Reference in new issue
Block a user