@aura3d/ecs 1.3.2 → 1.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/SystemScheduler.js +5 -4
- package/dist/SystemScheduler.js.map +1 -1
- package/dist/components/CameraComponent.d.ts +30 -0
- package/dist/components/CameraComponent.d.ts.map +1 -0
- package/dist/components/CameraComponent.js +27 -0
- package/dist/components/CameraComponent.js.map +1 -0
- package/dist/components/HierarchyComponent.d.ts +10 -0
- package/dist/components/HierarchyComponent.d.ts.map +1 -1
- package/dist/components/HierarchyComponent.js +10 -0
- package/dist/components/HierarchyComponent.js.map +1 -1
- package/dist/components/LightComponent.d.ts +18 -0
- package/dist/components/LightComponent.d.ts.map +1 -0
- package/dist/components/LightComponent.js +17 -0
- package/dist/components/LightComponent.js.map +1 -0
- package/dist/components/MeshComponent.d.ts +19 -0
- package/dist/components/MeshComponent.d.ts.map +1 -0
- package/dist/components/MeshComponent.js +21 -0
- package/dist/components/MeshComponent.js.map +1 -0
- package/dist/components/WorldTransformComponent.d.ts +12 -0
- package/dist/components/WorldTransformComponent.d.ts.map +1 -0
- package/dist/components/WorldTransformComponent.js +22 -0
- package/dist/components/WorldTransformComponent.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/systems/CameraSystem.d.ts +17 -0
- package/dist/systems/CameraSystem.d.ts.map +1 -0
- package/dist/systems/CameraSystem.js +38 -0
- package/dist/systems/CameraSystem.js.map +1 -0
- package/dist/systems/TransformSystem.d.ts +16 -0
- package/dist/systems/TransformSystem.d.ts.map +1 -0
- package/dist/systems/TransformSystem.js +99 -0
- package/dist/systems/TransformSystem.js.map +1 -0
- package/dist/systems/index.d.ts +2 -0
- package/dist/systems/index.d.ts.map +1 -1
- package/dist/systems/index.js +2 -0
- package/dist/systems/index.js.map +1 -1
- package/package.json +3 -3
- package/src/SystemScheduler.ts +4 -2
- package/src/components/CameraComponent.ts +32 -0
- package/src/components/HierarchyComponent.ts +10 -0
- package/src/components/LightComponent.ts +18 -0
- package/src/components/MeshComponent.ts +23 -0
- package/src/components/WorldTransformComponent.ts +22 -0
- package/src/index.ts +4 -0
- package/src/systems/CameraSystem.ts +50 -0
- package/src/systems/TransformSystem.ts +108 -0
- package/src/systems/index.ts +2 -0
package/dist/SystemScheduler.js
CHANGED
|
@@ -62,10 +62,11 @@ function sortSystems(systems) {
|
|
|
62
62
|
throw new ValidationError("ECS_SYSTEM_CYCLE", "ECS system dependency cycle rejected.");
|
|
63
63
|
return result;
|
|
64
64
|
function addEdge(from, to) {
|
|
65
|
-
if
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
65
|
+
// `before`/`after` are soft ordering constraints: if the referenced
|
|
66
|
+
// system is not registered (or runs in a different phase), the edge is
|
|
67
|
+
// simply skipped instead of failing the whole schedule.
|
|
68
|
+
if (!byName.has(from) || !byName.has(to))
|
|
69
|
+
return;
|
|
69
70
|
const edges = graph.get(from);
|
|
70
71
|
if (!edges.has(to)) {
|
|
71
72
|
edges.add(to);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SystemScheduler.js","sourceRoot":"","sources":["../../../../packages/ecs/src/SystemScheduler.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"SystemScheduler.js","sourceRoot":"","sources":["../../../../packages/ecs/src/SystemScheduler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export type CameraKind = "perspective" | "orthographic";
|
|
2
|
+
/**
|
|
3
|
+
* Camera parameters + computed matrices for an ECS entity.
|
|
4
|
+
*
|
|
5
|
+
* {@link CameraSystem} computes `projectionMatrix`, `viewMatrix`, and
|
|
6
|
+
* `viewProjectionMatrix` each frame from the entity's
|
|
7
|
+
* {@link WorldTransformComponent}.
|
|
8
|
+
*/
|
|
9
|
+
export declare class CameraComponent {
|
|
10
|
+
kind: CameraKind;
|
|
11
|
+
fovYRadians: number;
|
|
12
|
+
aspect: number;
|
|
13
|
+
near: number;
|
|
14
|
+
far: number;
|
|
15
|
+
left: number;
|
|
16
|
+
right: number;
|
|
17
|
+
bottom: number;
|
|
18
|
+
top: number;
|
|
19
|
+
zoom: number;
|
|
20
|
+
projectionMatrix: Float32Array<ArrayBuffer>;
|
|
21
|
+
viewMatrix: Float32Array<ArrayBuffer>;
|
|
22
|
+
viewProjectionMatrix: Float32Array<ArrayBuffer>;
|
|
23
|
+
viewport: {
|
|
24
|
+
x: number;
|
|
25
|
+
y: number;
|
|
26
|
+
width: number;
|
|
27
|
+
height: number;
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=CameraComponent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CameraComponent.d.ts","sourceRoot":"","sources":["../../../../../packages/ecs/src/components/CameraComponent.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,aAAa,GAAG,cAAc,CAAC;AAExD;;;;;;GAMG;AACH,qBAAa,eAAe;IAC1B,IAAI,EAAE,UAAU,CAAiB;IAGjC,WAAW,SAAe;IAC1B,MAAM,SAAK;IACX,IAAI,SAAO;IACX,GAAG,SAAQ;IAGX,IAAI,SAAM;IACV,KAAK,SAAK;IACV,MAAM,SAAM;IACZ,GAAG,SAAK;IACR,IAAI,SAAK;IAGT,gBAAgB,4BAAwB;IACxC,UAAU,4BAAwB;IAClC,oBAAoB,4BAAwB;IAE5C,QAAQ;;;;;MAAuC;CAChD"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Camera parameters + computed matrices for an ECS entity.
|
|
3
|
+
*
|
|
4
|
+
* {@link CameraSystem} computes `projectionMatrix`, `viewMatrix`, and
|
|
5
|
+
* `viewProjectionMatrix` each frame from the entity's
|
|
6
|
+
* {@link WorldTransformComponent}.
|
|
7
|
+
*/
|
|
8
|
+
export class CameraComponent {
|
|
9
|
+
kind = "perspective";
|
|
10
|
+
// Perspective
|
|
11
|
+
fovYRadians = Math.PI / 3;
|
|
12
|
+
aspect = 1;
|
|
13
|
+
near = 0.1;
|
|
14
|
+
far = 1000;
|
|
15
|
+
// Orthographic
|
|
16
|
+
left = -1;
|
|
17
|
+
right = 1;
|
|
18
|
+
bottom = -1;
|
|
19
|
+
top = 1;
|
|
20
|
+
zoom = 1;
|
|
21
|
+
// Computed each frame by CameraSystem
|
|
22
|
+
projectionMatrix = new Float32Array(16);
|
|
23
|
+
viewMatrix = new Float32Array(16);
|
|
24
|
+
viewProjectionMatrix = new Float32Array(16);
|
|
25
|
+
viewport = { x: 0, y: 0, width: 1, height: 1 };
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=CameraComponent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CameraComponent.js","sourceRoot":"","sources":["../../../../../packages/ecs/src/components/CameraComponent.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,OAAO,eAAe;IAC1B,IAAI,GAAe,aAAa,CAAC;IAEjC,cAAc;IACd,WAAW,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IAC1B,MAAM,GAAG,CAAC,CAAC;IACX,IAAI,GAAG,GAAG,CAAC;IACX,GAAG,GAAG,IAAI,CAAC;IAEX,eAAe;IACf,IAAI,GAAG,CAAC,CAAC,CAAC;IACV,KAAK,GAAG,CAAC,CAAC;IACV,MAAM,GAAG,CAAC,CAAC,CAAC;IACZ,GAAG,GAAG,CAAC,CAAC;IACR,IAAI,GAAG,CAAC,CAAC;IAET,sCAAsC;IACtC,gBAAgB,GAAG,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC;IACxC,UAAU,GAAG,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC;IAClC,oBAAoB,GAAG,IAAI,YAAY,CAAC,EAAE,CAAC,CAAC;IAE5C,QAAQ,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;CAChD"}
|
|
@@ -8,6 +8,16 @@ export interface SerializedHierarchyComponent {
|
|
|
8
8
|
readonly depth: number;
|
|
9
9
|
}
|
|
10
10
|
export declare class HierarchyComponent {
|
|
11
|
+
/**
|
|
12
|
+
* Parent entity, or `null` for root entities.
|
|
13
|
+
*
|
|
14
|
+
* Must be set via `HierarchySystem.setParent` (or `addChild`), which
|
|
15
|
+
* maintains {@link depth}, sibling links, and the parent's child list.
|
|
16
|
+
* Setting this field directly (including via the constructor argument)
|
|
17
|
+
* leaves `depth` stale at 0 — `TransformSystem` recomputes depth
|
|
18
|
+
* defensively for its parents-before-children ordering, but child/sibling
|
|
19
|
+
* bookkeeping will remain out of sync until `setParent` is used.
|
|
20
|
+
*/
|
|
11
21
|
parent: Entity | null;
|
|
12
22
|
previousSibling: Entity | null;
|
|
13
23
|
nextSibling: Entity | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HierarchyComponent.d.ts","sourceRoot":"","sources":["../../../../../packages/ecs/src/components/HierarchyComponent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAyB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAElE,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,kBAAkB;IAC7B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAQ;IACtC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAClC,KAAK,SAAK;IACV,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;gBAElC,MAAM,GAAE,MAAM,GAAG,IAAW;IAIxC,IAAI,QAAQ,IAAI,SAAS,MAAM,EAAE,CAEhC;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,UAAU,IAAI,MAAM,GAAG,IAAI,CAE9B;IAED,IAAI,SAAS,IAAI,MAAM,GAAG,IAAI,CAE7B;IAED,SAAS,IAAI,OAAO;IAIpB,WAAW,IAAI,OAAO;IAItB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAItC,YAAY,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIrD,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAKxC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIvC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI9B,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAOpC,cAAc,IAAI,IAAI;IAItB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAO9C,MAAM,IAAI,4BAA4B;IAUtC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAkBrC;CACH"}
|
|
1
|
+
{"version":3,"file":"HierarchyComponent.d.ts","sourceRoot":"","sources":["../../../../../packages/ecs/src/components/HierarchyComponent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAyB,KAAK,MAAM,EAAE,MAAM,cAAc,CAAC;AAElE,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,qBAAa,kBAAkB;IAC7B;;;;;;;;;OASG;IACH,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAQ;IACtC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAClC,KAAK,SAAK;IACV,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;gBAElC,MAAM,GAAE,MAAM,GAAG,IAAW;IAIxC,IAAI,QAAQ,IAAI,SAAS,MAAM,EAAE,CAEhC;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,UAAU,IAAI,MAAM,GAAG,IAAI,CAE9B;IAED,IAAI,SAAS,IAAI,MAAM,GAAG,IAAI,CAE7B;IAED,SAAS,IAAI,OAAO;IAIpB,WAAW,IAAI,OAAO;IAItB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAItC,YAAY,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAIrD,eAAe,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAKxC,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAIvC,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAI9B,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO;IAOpC,cAAc,IAAI,IAAI;IAItB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAO9C,MAAM,IAAI,4BAA4B;IAUtC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,eAAe,CAkBrC;CACH"}
|
|
@@ -2,6 +2,16 @@ import { ValidationError } from "@aura3d/core";
|
|
|
2
2
|
import {} from "../Component.js";
|
|
3
3
|
import { entityKey, sameEntity } from "../Entity.js";
|
|
4
4
|
export class HierarchyComponent {
|
|
5
|
+
/**
|
|
6
|
+
* Parent entity, or `null` for root entities.
|
|
7
|
+
*
|
|
8
|
+
* Must be set via `HierarchySystem.setParent` (or `addChild`), which
|
|
9
|
+
* maintains {@link depth}, sibling links, and the parent's child list.
|
|
10
|
+
* Setting this field directly (including via the constructor argument)
|
|
11
|
+
* leaves `depth` stale at 0 — `TransformSystem` recomputes depth
|
|
12
|
+
* defensively for its parents-before-children ordering, but child/sibling
|
|
13
|
+
* bookkeeping will remain out of sync until `setParent` is used.
|
|
14
|
+
*/
|
|
5
15
|
parent;
|
|
6
16
|
previousSibling = null;
|
|
7
17
|
nextSibling = null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HierarchyComponent.js","sourceRoot":"","sources":["../../../../../packages/ecs/src/components/HierarchyComponent.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HierarchyComponent.js","sourceRoot":"","sources":["../../../../../packages/ecs/src/components/HierarchyComponent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type LightKind = "directional" | "point" | "spot" | "ambient";
|
|
2
|
+
/**
|
|
3
|
+
* Light parameters for an ECS entity.
|
|
4
|
+
*
|
|
5
|
+
* The ECS render bridge collects lights each frame and passes them to the
|
|
6
|
+
* renderer as part of the {@link RenderSource} lighting state.
|
|
7
|
+
*/
|
|
8
|
+
export declare class LightComponent {
|
|
9
|
+
kind: LightKind;
|
|
10
|
+
color: [number, number, number];
|
|
11
|
+
intensity: number;
|
|
12
|
+
range: number;
|
|
13
|
+
angle: number;
|
|
14
|
+
penumbra: number;
|
|
15
|
+
castsShadow: boolean;
|
|
16
|
+
layerMask: number;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=LightComponent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LightComponent.d.ts","sourceRoot":"","sources":["../../../../../packages/ecs/src/components/LightComponent.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;AAErE;;;;;GAKG;AACH,qBAAa,cAAc;IACzB,IAAI,EAAE,SAAS,CAAiB;IAChC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAa;IAC5C,SAAS,SAAK;IACd,KAAK,SAAM;IACX,KAAK,SAAe;IACpB,QAAQ,SAAK;IACb,WAAW,UAAS;IACpB,SAAS,SAAK;CACf"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Light parameters for an ECS entity.
|
|
3
|
+
*
|
|
4
|
+
* The ECS render bridge collects lights each frame and passes them to the
|
|
5
|
+
* renderer as part of the {@link RenderSource} lighting state.
|
|
6
|
+
*/
|
|
7
|
+
export class LightComponent {
|
|
8
|
+
kind = "directional";
|
|
9
|
+
color = [1, 1, 1];
|
|
10
|
+
intensity = 1;
|
|
11
|
+
range = 10;
|
|
12
|
+
angle = Math.PI / 4; // spot only
|
|
13
|
+
penumbra = 0; // spot only
|
|
14
|
+
castsShadow = false;
|
|
15
|
+
layerMask = 1;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=LightComponent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LightComponent.js","sourceRoot":"","sources":["../../../../../packages/ecs/src/components/LightComponent.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,OAAO,cAAc;IACzB,IAAI,GAAc,aAAa,CAAC;IAChC,KAAK,GAA6B,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5C,SAAS,GAAG,CAAC,CAAC;IACd,KAAK,GAAG,EAAE,CAAC;IACX,KAAK,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,YAAY;IACjC,QAAQ,GAAG,CAAC,CAAC,CAAC,YAAY;IAC1B,WAAW,GAAG,KAAK,CAAC;IACpB,SAAS,GAAG,CAAC,CAAC;CACf"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { SkinningPaletteBinding } from "@aura3d/rendering";
|
|
2
|
+
/**
|
|
3
|
+
* Renderable geometry + material binding for an ECS entity.
|
|
4
|
+
*
|
|
5
|
+
* References resources by name/handle; the ECS render bridge resolves them
|
|
6
|
+
* through the {@link ECSRenderLibraries} map at collection time.
|
|
7
|
+
*/
|
|
8
|
+
export declare class MeshComponent {
|
|
9
|
+
geometry: string;
|
|
10
|
+
material: string;
|
|
11
|
+
castShadow: boolean;
|
|
12
|
+
receiveShadow: boolean;
|
|
13
|
+
skinning?: SkinningPaletteBinding;
|
|
14
|
+
morphWeights?: readonly number[];
|
|
15
|
+
instanceTransforms?: Float32Array;
|
|
16
|
+
instanceColors?: Float32Array;
|
|
17
|
+
constructor(geometry: string, material: string);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=MeshComponent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MeshComponent.d.ts","sourceRoot":"","sources":["../../../../../packages/ecs/src/components/MeshComponent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAEhE;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,UAAQ;IAClB,aAAa,UAAQ;IACrB,QAAQ,CAAC,EAAE,sBAAsB,CAAC;IAClC,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,kBAAkB,CAAC,EAAE,YAAY,CAAC;IAClC,cAAc,CAAC,EAAE,YAAY,CAAC;gBAElB,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;CAI/C"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Renderable geometry + material binding for an ECS entity.
|
|
3
|
+
*
|
|
4
|
+
* References resources by name/handle; the ECS render bridge resolves them
|
|
5
|
+
* through the {@link ECSRenderLibraries} map at collection time.
|
|
6
|
+
*/
|
|
7
|
+
export class MeshComponent {
|
|
8
|
+
geometry;
|
|
9
|
+
material;
|
|
10
|
+
castShadow = true;
|
|
11
|
+
receiveShadow = true;
|
|
12
|
+
skinning;
|
|
13
|
+
morphWeights;
|
|
14
|
+
instanceTransforms;
|
|
15
|
+
instanceColors;
|
|
16
|
+
constructor(geometry, material) {
|
|
17
|
+
this.geometry = geometry;
|
|
18
|
+
this.material = material;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=MeshComponent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MeshComponent.js","sourceRoot":"","sources":["../../../../../packages/ecs/src/components/MeshComponent.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,OAAO,aAAa;IACxB,QAAQ,CAAS;IACjB,QAAQ,CAAS;IACjB,UAAU,GAAG,IAAI,CAAC;IAClB,aAAa,GAAG,IAAI,CAAC;IACrB,QAAQ,CAA0B;IAClC,YAAY,CAAqB;IACjC,kBAAkB,CAAgB;IAClC,cAAc,CAAgB;IAE9B,YAAY,QAAgB,EAAE,QAAgB;QAC5C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;CACF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Computed world-space transform for an ECS entity.
|
|
3
|
+
*
|
|
4
|
+
* Written by {@link TransformSystem} each frame from the entity's
|
|
5
|
+
* {@link TransformComponent} and {@link HierarchyComponent} parent chain.
|
|
6
|
+
* The renderer bridge reads this directly — it never touches local transforms.
|
|
7
|
+
*/
|
|
8
|
+
export declare class WorldTransformComponent {
|
|
9
|
+
worldMatrix: Float32Array<ArrayBuffer>;
|
|
10
|
+
normalMatrix: Float32Array<ArrayBuffer>;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=WorldTransformComponent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorldTransformComponent.d.ts","sourceRoot":"","sources":["../../../../../packages/ecs/src/components/WorldTransformComponent.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,qBAAa,uBAAuB;IAClC,WAAW,4BAKR;IAEH,YAAY,4BAKT;CACJ"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Computed world-space transform for an ECS entity.
|
|
3
|
+
*
|
|
4
|
+
* Written by {@link TransformSystem} each frame from the entity's
|
|
5
|
+
* {@link TransformComponent} and {@link HierarchyComponent} parent chain.
|
|
6
|
+
* The renderer bridge reads this directly — it never touches local transforms.
|
|
7
|
+
*/
|
|
8
|
+
export class WorldTransformComponent {
|
|
9
|
+
worldMatrix = new Float32Array([
|
|
10
|
+
1, 0, 0, 0,
|
|
11
|
+
0, 1, 0, 0,
|
|
12
|
+
0, 0, 1, 0,
|
|
13
|
+
0, 0, 0, 1
|
|
14
|
+
]);
|
|
15
|
+
normalMatrix = new Float32Array([
|
|
16
|
+
1, 0, 0, 0,
|
|
17
|
+
0, 1, 0, 0,
|
|
18
|
+
0, 0, 1, 0,
|
|
19
|
+
0, 0, 0, 1
|
|
20
|
+
]);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=WorldTransformComponent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorldTransformComponent.js","sourceRoot":"","sources":["../../../../../packages/ecs/src/components/WorldTransformComponent.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,OAAO,uBAAuB;IAClC,WAAW,GAAG,IAAI,YAAY,CAAC;QAC7B,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACV,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACV,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACV,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KACX,CAAC,CAAC;IAEH,YAAY,GAAG,IAAI,YAAY,CAAC;QAC9B,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACV,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACV,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;QACV,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;KACX,CAAC,CAAC;CACJ"}
|
package/dist/index.d.ts
CHANGED
|
@@ -14,6 +14,10 @@ export * from "./World.js";
|
|
|
14
14
|
export * from "./ECSSerializer.js";
|
|
15
15
|
export * from "./ECSProfiler.js";
|
|
16
16
|
export * from "./components/TransformComponent.js";
|
|
17
|
+
export * from "./components/WorldTransformComponent.js";
|
|
18
|
+
export * from "./components/CameraComponent.js";
|
|
19
|
+
export * from "./components/LightComponent.js";
|
|
20
|
+
export * from "./components/MeshComponent.js";
|
|
17
21
|
export * from "./components/NameComponent.js";
|
|
18
22
|
export * from "./components/TagComponent.js";
|
|
19
23
|
export * from "./components/ActiveComponent.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/ecs/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AACnD,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../packages/ecs/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oCAAoC,CAAC;AACnD,cAAc,yCAAyC,CAAC;AACxD,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AACnD,cAAc,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -14,6 +14,10 @@ export * from "./World.js";
|
|
|
14
14
|
export * from "./ECSSerializer.js";
|
|
15
15
|
export * from "./ECSProfiler.js";
|
|
16
16
|
export * from "./components/TransformComponent.js";
|
|
17
|
+
export * from "./components/WorldTransformComponent.js";
|
|
18
|
+
export * from "./components/CameraComponent.js";
|
|
19
|
+
export * from "./components/LightComponent.js";
|
|
20
|
+
export * from "./components/MeshComponent.js";
|
|
17
21
|
export * from "./components/NameComponent.js";
|
|
18
22
|
export * from "./components/TagComponent.js";
|
|
19
23
|
export * from "./components/ActiveComponent.js";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/ecs/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oCAAoC,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AACnD,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../packages/ecs/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,oCAAoC,CAAC;AACnD,cAAc,yCAAyC,CAAC;AACxD,cAAc,iCAAiC,CAAC;AAChD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,iCAAiC,CAAC;AAChD,cAAc,oCAAoC,CAAC;AACnD,cAAc,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type System, type SystemContext } from "../System.js";
|
|
2
|
+
import { type World } from "../World.js";
|
|
3
|
+
/**
|
|
4
|
+
* Computes camera projection and view matrices for entities that have
|
|
5
|
+
* both {@link CameraComponent} and {@link WorldTransformComponent}.
|
|
6
|
+
*
|
|
7
|
+
* Runs after {@link TransformSystem} so the camera entity's world matrix
|
|
8
|
+
* is already computed.
|
|
9
|
+
*/
|
|
10
|
+
export declare class CameraSystem implements System {
|
|
11
|
+
readonly name = "CameraSystem";
|
|
12
|
+
readonly phase = "update";
|
|
13
|
+
readonly priority = -70;
|
|
14
|
+
readonly after: string[];
|
|
15
|
+
update(world: World, _context: SystemContext): void;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=CameraSystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CameraSystem.d.ts","sourceRoot":"","sources":["../../../../../packages/ecs/src/systems/CameraSystem.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAIzC;;;;;;GAMG;AACH,qBAAa,YAAa,YAAW,MAAM;IACzC,QAAQ,CAAC,IAAI,kBAAkB;IAC/B,QAAQ,CAAC,KAAK,YAAY;IAC1B,QAAQ,CAAC,QAAQ,OAAO;IAGxB,QAAQ,CAAC,KAAK,WAAuB;IAErC,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;CA4BpD"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Matrix4 } from "@aura3d/math";
|
|
2
|
+
import {} from "../System.js";
|
|
3
|
+
import {} from "../World.js";
|
|
4
|
+
import { CameraComponent } from "../components/CameraComponent.js";
|
|
5
|
+
import { WorldTransformComponent } from "../components/WorldTransformComponent.js";
|
|
6
|
+
/**
|
|
7
|
+
* Computes camera projection and view matrices for entities that have
|
|
8
|
+
* both {@link CameraComponent} and {@link WorldTransformComponent}.
|
|
9
|
+
*
|
|
10
|
+
* Runs after {@link TransformSystem} so the camera entity's world matrix
|
|
11
|
+
* is already computed.
|
|
12
|
+
*/
|
|
13
|
+
export class CameraSystem {
|
|
14
|
+
name = "CameraSystem";
|
|
15
|
+
phase = "update";
|
|
16
|
+
priority = -70;
|
|
17
|
+
// Soft ordering constraint: the scheduler skips this edge when
|
|
18
|
+
// TransformSystem is not registered, so CameraSystem can run standalone.
|
|
19
|
+
after = ["TransformSystem"];
|
|
20
|
+
update(world, _context) {
|
|
21
|
+
for (const entity of world
|
|
22
|
+
.query({ include: [CameraComponent, WorldTransformComponent] })
|
|
23
|
+
.toArray()) {
|
|
24
|
+
const cam = world.get(entity, CameraComponent);
|
|
25
|
+
const wt = world.get(entity, WorldTransformComponent);
|
|
26
|
+
const projection = cam.kind === "perspective"
|
|
27
|
+
? Matrix4.perspective(cam.fovYRadians, cam.aspect, cam.near, cam.far)
|
|
28
|
+
: Matrix4.orthographic(cam.left / cam.zoom, cam.right / cam.zoom, cam.bottom / cam.zoom, cam.top / cam.zoom, cam.near, cam.far);
|
|
29
|
+
// viewMatrix = inverse(worldMatrix)
|
|
30
|
+
const worldMat = new Matrix4(wt.worldMatrix);
|
|
31
|
+
const view = worldMat.inverse();
|
|
32
|
+
cam.projectionMatrix.set(projection.elements);
|
|
33
|
+
cam.viewMatrix.set(view.elements);
|
|
34
|
+
cam.viewProjectionMatrix.set(projection.multiply(view).elements);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=CameraSystem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CameraSystem.js","sourceRoot":"","sources":["../../../../../packages/ecs/src/systems/CameraSystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAmC,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAc,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,MAAM,0CAA0C,CAAC;AAEnF;;;;;;GAMG;AACH,MAAM,OAAO,YAAY;IACd,IAAI,GAAG,cAAc,CAAC;IACtB,KAAK,GAAG,QAAQ,CAAC;IACjB,QAAQ,GAAG,CAAC,EAAE,CAAC;IACxB,+DAA+D;IAC/D,yEAAyE;IAChE,KAAK,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAErC,MAAM,CAAC,KAAY,EAAE,QAAuB;QAC1C,KAAK,MAAM,MAAM,IAAI,KAAK;aACvB,KAAK,CAAC,EAAE,OAAO,EAAE,CAAC,eAAe,EAAE,uBAAuB,CAAC,EAAE,CAAC;aAC9D,OAAO,EAAE,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,eAAe,CAAE,CAAC;YAChD,MAAM,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,uBAAuB,CAAE,CAAC;YAEvD,MAAM,UAAU,GACd,GAAG,CAAC,IAAI,KAAK,aAAa;gBACxB,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC;gBACrE,CAAC,CAAC,OAAO,CAAC,YAAY,CAClB,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,EACnB,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,EACpB,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,IAAI,EACrB,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,EAClB,GAAG,CAAC,IAAI,EACR,GAAG,CAAC,GAAG,CACR,CAAC;YAER,oCAAoC;YACpC,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,EAAE,CAAC,WAA6C,CAAC,CAAC;YAC/E,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,EAAE,CAAC;YAE/B,GAAG,CAAC,gBAAiC,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC/D,GAAG,CAAC,UAA2B,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnD,GAAG,CAAC,oBAAqC,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type System, type SystemContext } from "../System.js";
|
|
2
|
+
import { type World } from "../World.js";
|
|
3
|
+
/**
|
|
4
|
+
* Computes {@link WorldTransformComponent} for every entity that has both
|
|
5
|
+
* {@link TransformComponent} and {@link HierarchyComponent}.
|
|
6
|
+
*
|
|
7
|
+
* Entities are processed in depth order (parents before children) so the
|
|
8
|
+
* world matrix cascade is correct in a single pass.
|
|
9
|
+
*/
|
|
10
|
+
export declare class TransformSystem implements System {
|
|
11
|
+
readonly name = "TransformSystem";
|
|
12
|
+
readonly phase = "update";
|
|
13
|
+
readonly priority = -80;
|
|
14
|
+
update(world: World, _context: SystemContext): void;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=TransformSystem.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransformSystem.d.ts","sourceRoot":"","sources":["../../../../../packages/ecs/src/systems/TransformSystem.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAQzC;;;;;;GAMG;AACH,qBAAa,eAAgB,YAAW,MAAM;IAC5C,QAAQ,CAAC,IAAI,qBAAqB;IAClC,QAAQ,CAAC,KAAK,YAAY;IAC1B,QAAQ,CAAC,QAAQ,OAAO;IAExB,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;CAmCpD"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { Matrix4, Quaternion, Vector3 } from "@aura3d/math";
|
|
2
|
+
import {} from "../Entity.js";
|
|
3
|
+
import {} from "../System.js";
|
|
4
|
+
import {} from "../World.js";
|
|
5
|
+
import { HierarchyComponent } from "../components/HierarchyComponent.js";
|
|
6
|
+
import { TransformComponent } from "../components/TransformComponent.js";
|
|
7
|
+
import { WorldTransformComponent } from "../components/WorldTransformComponent.js";
|
|
8
|
+
/** Safety cap for defensive parent-chain walks (guards against cycles created by direct `parent` mutation). */
|
|
9
|
+
const MAX_HIERARCHY_DEPTH = 4096;
|
|
10
|
+
/**
|
|
11
|
+
* Computes {@link WorldTransformComponent} for every entity that has both
|
|
12
|
+
* {@link TransformComponent} and {@link HierarchyComponent}.
|
|
13
|
+
*
|
|
14
|
+
* Entities are processed in depth order (parents before children) so the
|
|
15
|
+
* world matrix cascade is correct in a single pass.
|
|
16
|
+
*/
|
|
17
|
+
export class TransformSystem {
|
|
18
|
+
name = "TransformSystem";
|
|
19
|
+
phase = "update";
|
|
20
|
+
priority = -80;
|
|
21
|
+
update(world, _context) {
|
|
22
|
+
const entities = world
|
|
23
|
+
.query({ include: [TransformComponent, HierarchyComponent] })
|
|
24
|
+
.toArray()
|
|
25
|
+
.sort((a, b) => effectiveDepth(world, a) - effectiveDepth(world, b));
|
|
26
|
+
for (const entity of entities) {
|
|
27
|
+
const transform = world.get(entity, TransformComponent);
|
|
28
|
+
const hierarchy = world.get(entity, HierarchyComponent);
|
|
29
|
+
const local = Matrix4.compose(new Vector3(...transform.position), new Quaternion(...transform.rotation), new Vector3(...transform.scale));
|
|
30
|
+
let worldMat;
|
|
31
|
+
if (hierarchy.parent) {
|
|
32
|
+
const parentWtc = world.get(hierarchy.parent, WorldTransformComponent);
|
|
33
|
+
worldMat = parentWtc
|
|
34
|
+
? new Matrix4(parentWtc.worldMatrix).multiply(local)
|
|
35
|
+
: local;
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
worldMat = local;
|
|
39
|
+
}
|
|
40
|
+
let wtc = world.get(entity, WorldTransformComponent);
|
|
41
|
+
if (!wtc) {
|
|
42
|
+
wtc = new WorldTransformComponent();
|
|
43
|
+
world.add(entity, WorldTransformComponent, wtc);
|
|
44
|
+
}
|
|
45
|
+
wtc.worldMatrix.set(worldMat.elements);
|
|
46
|
+
wtc.normalMatrix.set(computeNormalMatrix(worldMat));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Returns the depth used for parents-before-children ordering.
|
|
52
|
+
*
|
|
53
|
+
* {@link HierarchyComponent.depth} is maintained by `HierarchySystem.setParent`.
|
|
54
|
+
* If `parent` was set directly (constructor argument or field mutation) the
|
|
55
|
+
* stored depth is stale at 0, so recompute it defensively by walking the
|
|
56
|
+
* parent chain.
|
|
57
|
+
*/
|
|
58
|
+
function effectiveDepth(world, entity) {
|
|
59
|
+
const hierarchy = world.get(entity, HierarchyComponent);
|
|
60
|
+
if (!hierarchy)
|
|
61
|
+
return 0;
|
|
62
|
+
if (hierarchy.depth > 0 || hierarchy.parent === null)
|
|
63
|
+
return hierarchy.depth;
|
|
64
|
+
let depth = 0;
|
|
65
|
+
let current = hierarchy.parent;
|
|
66
|
+
while (current && depth < MAX_HIERARCHY_DEPTH) {
|
|
67
|
+
depth += 1;
|
|
68
|
+
const parentHierarchy = world.entities.isAlive(current)
|
|
69
|
+
? world.get(current, HierarchyComponent)
|
|
70
|
+
: undefined;
|
|
71
|
+
current = parentHierarchy?.parent ?? null;
|
|
72
|
+
}
|
|
73
|
+
return depth;
|
|
74
|
+
}
|
|
75
|
+
function computeNormalMatrix(worldMat) {
|
|
76
|
+
// Normal matrix = inverse-TRANSPOSE of the world matrix, matching the
|
|
77
|
+
// renderer's reference `normalMatrixFromModel` (Renderer.ts):
|
|
78
|
+
// transpose(invert(model)), then extract the upper-left 3x3 into a 4x4
|
|
79
|
+
// with identity in the 4th row/col (column-major layout).
|
|
80
|
+
// Avoid crashing on singular matrices (zero scale) by falling back to identity.
|
|
81
|
+
try {
|
|
82
|
+
const m = worldMat.inverse().transpose().elements;
|
|
83
|
+
return new Float32Array([
|
|
84
|
+
m[0], m[1], m[2], 0,
|
|
85
|
+
m[4], m[5], m[6], 0,
|
|
86
|
+
m[8], m[9], m[10], 0,
|
|
87
|
+
0, 0, 0, 1,
|
|
88
|
+
]);
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return new Float32Array([
|
|
92
|
+
1, 0, 0, 0,
|
|
93
|
+
0, 1, 0, 0,
|
|
94
|
+
0, 0, 1, 0,
|
|
95
|
+
0, 0, 0, 1,
|
|
96
|
+
]);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=TransformSystem.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TransformSystem.js","sourceRoot":"","sources":["../../../../../packages/ecs/src/systems/TransformSystem.ts"],"names":[],"mappings":"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"}
|
package/dist/systems/index.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/ecs/src/systems/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../packages/ecs/src/systems/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC"}
|
package/dist/systems/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/ecs/src/systems/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/ecs/src/systems/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aura3d/ecs",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
},
|
|
13
13
|
"sideEffects": false,
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@aura3d/
|
|
16
|
-
"@aura3d/
|
|
15
|
+
"@aura3d/core": "1.3.3",
|
|
16
|
+
"@aura3d/math": "1.3.3"
|
|
17
17
|
}
|
|
18
18
|
}
|
package/src/SystemScheduler.ts
CHANGED
|
@@ -64,8 +64,10 @@ function sortSystems(systems: System[]): System[] {
|
|
|
64
64
|
return result;
|
|
65
65
|
|
|
66
66
|
function addEdge(from: string, to: string): void {
|
|
67
|
-
|
|
68
|
-
|
|
67
|
+
// `before`/`after` are soft ordering constraints: if the referenced
|
|
68
|
+
// system is not registered (or runs in a different phase), the edge is
|
|
69
|
+
// simply skipped instead of failing the whole schedule.
|
|
70
|
+
if (!byName.has(from) || !byName.has(to)) return;
|
|
69
71
|
const edges = graph.get(from) as Set<string>;
|
|
70
72
|
if (!edges.has(to)) {
|
|
71
73
|
edges.add(to);
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export type CameraKind = "perspective" | "orthographic";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Camera parameters + computed matrices for an ECS entity.
|
|
5
|
+
*
|
|
6
|
+
* {@link CameraSystem} computes `projectionMatrix`, `viewMatrix`, and
|
|
7
|
+
* `viewProjectionMatrix` each frame from the entity's
|
|
8
|
+
* {@link WorldTransformComponent}.
|
|
9
|
+
*/
|
|
10
|
+
export class CameraComponent {
|
|
11
|
+
kind: CameraKind = "perspective";
|
|
12
|
+
|
|
13
|
+
// Perspective
|
|
14
|
+
fovYRadians = Math.PI / 3;
|
|
15
|
+
aspect = 1;
|
|
16
|
+
near = 0.1;
|
|
17
|
+
far = 1000;
|
|
18
|
+
|
|
19
|
+
// Orthographic
|
|
20
|
+
left = -1;
|
|
21
|
+
right = 1;
|
|
22
|
+
bottom = -1;
|
|
23
|
+
top = 1;
|
|
24
|
+
zoom = 1;
|
|
25
|
+
|
|
26
|
+
// Computed each frame by CameraSystem
|
|
27
|
+
projectionMatrix = new Float32Array(16);
|
|
28
|
+
viewMatrix = new Float32Array(16);
|
|
29
|
+
viewProjectionMatrix = new Float32Array(16);
|
|
30
|
+
|
|
31
|
+
viewport = { x: 0, y: 0, width: 1, height: 1 };
|
|
32
|
+
}
|
|
@@ -11,6 +11,16 @@ export interface SerializedHierarchyComponent {
|
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
export class HierarchyComponent {
|
|
14
|
+
/**
|
|
15
|
+
* Parent entity, or `null` for root entities.
|
|
16
|
+
*
|
|
17
|
+
* Must be set via `HierarchySystem.setParent` (or `addChild`), which
|
|
18
|
+
* maintains {@link depth}, sibling links, and the parent's child list.
|
|
19
|
+
* Setting this field directly (including via the constructor argument)
|
|
20
|
+
* leaves `depth` stale at 0 — `TransformSystem` recomputes depth
|
|
21
|
+
* defensively for its parents-before-children ordering, but child/sibling
|
|
22
|
+
* bookkeeping will remain out of sync until `setParent` is used.
|
|
23
|
+
*/
|
|
14
24
|
parent: Entity | null;
|
|
15
25
|
previousSibling: Entity | null = null;
|
|
16
26
|
nextSibling: Entity | null = null;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type LightKind = "directional" | "point" | "spot" | "ambient";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Light parameters for an ECS entity.
|
|
5
|
+
*
|
|
6
|
+
* The ECS render bridge collects lights each frame and passes them to the
|
|
7
|
+
* renderer as part of the {@link RenderSource} lighting state.
|
|
8
|
+
*/
|
|
9
|
+
export class LightComponent {
|
|
10
|
+
kind: LightKind = "directional";
|
|
11
|
+
color: [number, number, number] = [1, 1, 1];
|
|
12
|
+
intensity = 1;
|
|
13
|
+
range = 10;
|
|
14
|
+
angle = Math.PI / 4; // spot only
|
|
15
|
+
penumbra = 0; // spot only
|
|
16
|
+
castsShadow = false;
|
|
17
|
+
layerMask = 1;
|
|
18
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { SkinningPaletteBinding } from "@aura3d/rendering";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Renderable geometry + material binding for an ECS entity.
|
|
5
|
+
*
|
|
6
|
+
* References resources by name/handle; the ECS render bridge resolves them
|
|
7
|
+
* through the {@link ECSRenderLibraries} map at collection time.
|
|
8
|
+
*/
|
|
9
|
+
export class MeshComponent {
|
|
10
|
+
geometry: string;
|
|
11
|
+
material: string;
|
|
12
|
+
castShadow = true;
|
|
13
|
+
receiveShadow = true;
|
|
14
|
+
skinning?: SkinningPaletteBinding;
|
|
15
|
+
morphWeights?: readonly number[];
|
|
16
|
+
instanceTransforms?: Float32Array;
|
|
17
|
+
instanceColors?: Float32Array;
|
|
18
|
+
|
|
19
|
+
constructor(geometry: string, material: string) {
|
|
20
|
+
this.geometry = geometry;
|
|
21
|
+
this.material = material;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Computed world-space transform for an ECS entity.
|
|
3
|
+
*
|
|
4
|
+
* Written by {@link TransformSystem} each frame from the entity's
|
|
5
|
+
* {@link TransformComponent} and {@link HierarchyComponent} parent chain.
|
|
6
|
+
* The renderer bridge reads this directly — it never touches local transforms.
|
|
7
|
+
*/
|
|
8
|
+
export class WorldTransformComponent {
|
|
9
|
+
worldMatrix = new Float32Array([
|
|
10
|
+
1, 0, 0, 0,
|
|
11
|
+
0, 1, 0, 0,
|
|
12
|
+
0, 0, 1, 0,
|
|
13
|
+
0, 0, 0, 1
|
|
14
|
+
]);
|
|
15
|
+
|
|
16
|
+
normalMatrix = new Float32Array([
|
|
17
|
+
1, 0, 0, 0,
|
|
18
|
+
0, 1, 0, 0,
|
|
19
|
+
0, 0, 1, 0,
|
|
20
|
+
0, 0, 0, 1
|
|
21
|
+
]);
|
|
22
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -14,6 +14,10 @@ export * from "./World.js";
|
|
|
14
14
|
export * from "./ECSSerializer.js";
|
|
15
15
|
export * from "./ECSProfiler.js";
|
|
16
16
|
export * from "./components/TransformComponent.js";
|
|
17
|
+
export * from "./components/WorldTransformComponent.js";
|
|
18
|
+
export * from "./components/CameraComponent.js";
|
|
19
|
+
export * from "./components/LightComponent.js";
|
|
20
|
+
export * from "./components/MeshComponent.js";
|
|
17
21
|
export * from "./components/NameComponent.js";
|
|
18
22
|
export * from "./components/TagComponent.js";
|
|
19
23
|
export * from "./components/ActiveComponent.js";
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Matrix4 } from "@aura3d/math";
|
|
2
|
+
import { type System, type SystemContext } from "../System.js";
|
|
3
|
+
import { type World } from "../World.js";
|
|
4
|
+
import { CameraComponent } from "../components/CameraComponent.js";
|
|
5
|
+
import { WorldTransformComponent } from "../components/WorldTransformComponent.js";
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Computes camera projection and view matrices for entities that have
|
|
9
|
+
* both {@link CameraComponent} and {@link WorldTransformComponent}.
|
|
10
|
+
*
|
|
11
|
+
* Runs after {@link TransformSystem} so the camera entity's world matrix
|
|
12
|
+
* is already computed.
|
|
13
|
+
*/
|
|
14
|
+
export class CameraSystem implements System {
|
|
15
|
+
readonly name = "CameraSystem";
|
|
16
|
+
readonly phase = "update";
|
|
17
|
+
readonly priority = -70;
|
|
18
|
+
// Soft ordering constraint: the scheduler skips this edge when
|
|
19
|
+
// TransformSystem is not registered, so CameraSystem can run standalone.
|
|
20
|
+
readonly after = ["TransformSystem"];
|
|
21
|
+
|
|
22
|
+
update(world: World, _context: SystemContext): void {
|
|
23
|
+
for (const entity of world
|
|
24
|
+
.query({ include: [CameraComponent, WorldTransformComponent] })
|
|
25
|
+
.toArray()) {
|
|
26
|
+
const cam = world.get(entity, CameraComponent)!;
|
|
27
|
+
const wt = world.get(entity, WorldTransformComponent)!;
|
|
28
|
+
|
|
29
|
+
const projection =
|
|
30
|
+
cam.kind === "perspective"
|
|
31
|
+
? Matrix4.perspective(cam.fovYRadians, cam.aspect, cam.near, cam.far)
|
|
32
|
+
: Matrix4.orthographic(
|
|
33
|
+
cam.left / cam.zoom,
|
|
34
|
+
cam.right / cam.zoom,
|
|
35
|
+
cam.bottom / cam.zoom,
|
|
36
|
+
cam.top / cam.zoom,
|
|
37
|
+
cam.near,
|
|
38
|
+
cam.far
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
// viewMatrix = inverse(worldMatrix)
|
|
42
|
+
const worldMat = new Matrix4(wt.worldMatrix as unknown as Matrix4["elements"]);
|
|
43
|
+
const view = worldMat.inverse();
|
|
44
|
+
|
|
45
|
+
(cam.projectionMatrix as Float32Array).set(projection.elements);
|
|
46
|
+
(cam.viewMatrix as Float32Array).set(view.elements);
|
|
47
|
+
(cam.viewProjectionMatrix as Float32Array).set(projection.multiply(view).elements);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { Matrix4, Quaternion, Vector3 } from "@aura3d/math";
|
|
2
|
+
import { type Entity } from "../Entity.js";
|
|
3
|
+
import { type System, type SystemContext } from "../System.js";
|
|
4
|
+
import { type World } from "../World.js";
|
|
5
|
+
import { HierarchyComponent } from "../components/HierarchyComponent.js";
|
|
6
|
+
import { TransformComponent } from "../components/TransformComponent.js";
|
|
7
|
+
import { WorldTransformComponent } from "../components/WorldTransformComponent.js";
|
|
8
|
+
|
|
9
|
+
/** Safety cap for defensive parent-chain walks (guards against cycles created by direct `parent` mutation). */
|
|
10
|
+
const MAX_HIERARCHY_DEPTH = 4096;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Computes {@link WorldTransformComponent} for every entity that has both
|
|
14
|
+
* {@link TransformComponent} and {@link HierarchyComponent}.
|
|
15
|
+
*
|
|
16
|
+
* Entities are processed in depth order (parents before children) so the
|
|
17
|
+
* world matrix cascade is correct in a single pass.
|
|
18
|
+
*/
|
|
19
|
+
export class TransformSystem implements System {
|
|
20
|
+
readonly name = "TransformSystem";
|
|
21
|
+
readonly phase = "update";
|
|
22
|
+
readonly priority = -80;
|
|
23
|
+
|
|
24
|
+
update(world: World, _context: SystemContext): void {
|
|
25
|
+
const entities = world
|
|
26
|
+
.query({ include: [TransformComponent, HierarchyComponent] })
|
|
27
|
+
.toArray()
|
|
28
|
+
.sort((a, b) => effectiveDepth(world, a) - effectiveDepth(world, b));
|
|
29
|
+
|
|
30
|
+
for (const entity of entities) {
|
|
31
|
+
const transform = world.get(entity, TransformComponent)!;
|
|
32
|
+
const hierarchy = world.get(entity, HierarchyComponent)!;
|
|
33
|
+
|
|
34
|
+
const local = Matrix4.compose(
|
|
35
|
+
new Vector3(...transform.position),
|
|
36
|
+
new Quaternion(...transform.rotation),
|
|
37
|
+
new Vector3(...transform.scale)
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
let worldMat: Matrix4;
|
|
41
|
+
if (hierarchy.parent) {
|
|
42
|
+
const parentWtc = world.get(hierarchy.parent, WorldTransformComponent);
|
|
43
|
+
worldMat = parentWtc
|
|
44
|
+
? new Matrix4(parentWtc.worldMatrix as unknown as Matrix4["elements"]).multiply(local)
|
|
45
|
+
: local;
|
|
46
|
+
} else {
|
|
47
|
+
worldMat = local;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
let wtc = world.get(entity, WorldTransformComponent);
|
|
51
|
+
if (!wtc) {
|
|
52
|
+
wtc = new WorldTransformComponent();
|
|
53
|
+
world.add(entity, WorldTransformComponent, wtc);
|
|
54
|
+
}
|
|
55
|
+
(wtc.worldMatrix as Float32Array).set(worldMat.elements);
|
|
56
|
+
(wtc.normalMatrix as Float32Array).set(computeNormalMatrix(worldMat));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Returns the depth used for parents-before-children ordering.
|
|
63
|
+
*
|
|
64
|
+
* {@link HierarchyComponent.depth} is maintained by `HierarchySystem.setParent`.
|
|
65
|
+
* If `parent` was set directly (constructor argument or field mutation) the
|
|
66
|
+
* stored depth is stale at 0, so recompute it defensively by walking the
|
|
67
|
+
* parent chain.
|
|
68
|
+
*/
|
|
69
|
+
function effectiveDepth(world: World, entity: Entity): number {
|
|
70
|
+
const hierarchy = world.get(entity, HierarchyComponent);
|
|
71
|
+
if (!hierarchy) return 0;
|
|
72
|
+
if (hierarchy.depth > 0 || hierarchy.parent === null) return hierarchy.depth;
|
|
73
|
+
|
|
74
|
+
let depth = 0;
|
|
75
|
+
let current: Entity | null = hierarchy.parent;
|
|
76
|
+
while (current && depth < MAX_HIERARCHY_DEPTH) {
|
|
77
|
+
depth += 1;
|
|
78
|
+
const parentHierarchy: HierarchyComponent | undefined = world.entities.isAlive(current)
|
|
79
|
+
? world.get(current, HierarchyComponent)
|
|
80
|
+
: undefined;
|
|
81
|
+
current = parentHierarchy?.parent ?? null;
|
|
82
|
+
}
|
|
83
|
+
return depth;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function computeNormalMatrix(worldMat: Matrix4): Float32Array {
|
|
87
|
+
// Normal matrix = inverse-TRANSPOSE of the world matrix, matching the
|
|
88
|
+
// renderer's reference `normalMatrixFromModel` (Renderer.ts):
|
|
89
|
+
// transpose(invert(model)), then extract the upper-left 3x3 into a 4x4
|
|
90
|
+
// with identity in the 4th row/col (column-major layout).
|
|
91
|
+
// Avoid crashing on singular matrices (zero scale) by falling back to identity.
|
|
92
|
+
try {
|
|
93
|
+
const m = worldMat.inverse().transpose().elements;
|
|
94
|
+
return new Float32Array([
|
|
95
|
+
m[0], m[1], m[2], 0,
|
|
96
|
+
m[4], m[5], m[6], 0,
|
|
97
|
+
m[8], m[9], m[10], 0,
|
|
98
|
+
0, 0, 0, 1,
|
|
99
|
+
]);
|
|
100
|
+
} catch {
|
|
101
|
+
return new Float32Array([
|
|
102
|
+
1, 0, 0, 0,
|
|
103
|
+
0, 1, 0, 0,
|
|
104
|
+
0, 0, 1, 0,
|
|
105
|
+
0, 0, 0, 1,
|
|
106
|
+
]);
|
|
107
|
+
}
|
|
108
|
+
}
|
package/src/systems/index.ts
CHANGED