@jolly-pixel/engine 1.3.0 → 2.0.0
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/README.md +18 -18
- package/dist/actor/Actor.d.ts +21 -13
- package/dist/actor/Actor.d.ts.map +1 -1
- package/dist/actor/Actor.js +86 -69
- package/dist/actor/Actor.js.map +1 -1
- package/dist/actor/ActorComponent.d.ts +10 -5
- package/dist/actor/ActorComponent.d.ts.map +1 -1
- package/dist/actor/ActorComponent.js +15 -11
- package/dist/actor/ActorComponent.js.map +1 -1
- package/dist/actor/ActorTree.d.ts +4 -3
- package/dist/actor/ActorTree.d.ts.map +1 -1
- package/dist/actor/ActorTree.js +0 -1
- package/dist/actor/ActorTree.js.map +1 -1
- package/dist/actor/Transform.d.ts +40 -27
- package/dist/actor/Transform.d.ts.map +1 -1
- package/dist/actor/Transform.js +150 -68
- package/dist/actor/Transform.js.map +1 -1
- package/dist/actor/index.d.ts +1 -0
- package/dist/actor/index.d.ts.map +1 -1
- package/dist/actor/index.js +1 -0
- package/dist/actor/index.js.map +1 -1
- package/dist/adapters/global.d.ts +3 -3
- package/dist/adapters/global.d.ts.map +1 -1
- package/dist/adapters/global.js +1 -1
- package/dist/adapters/global.js.map +1 -1
- package/dist/audio/AudioManager.d.ts +2 -2
- package/dist/audio/AudioManager.d.ts.map +1 -1
- package/dist/audio/AudioManager.js +2 -2
- package/dist/audio/AudioManager.js.map +1 -1
- package/dist/components/camera/Camera3DControls.js +4 -4
- package/dist/components/camera/Camera3DControls.js.map +1 -1
- package/dist/components/renderers/model/ModelRenderer.js +2 -2
- package/dist/components/renderers/model/ModelRenderer.js.map +1 -1
- package/dist/components/renderers/sprite/SpriteRenderer.class.js +2 -2
- package/dist/components/renderers/sprite/SpriteRenderer.class.js.map +1 -1
- package/dist/components/renderers/text/TextRenderer.class.js +3 -3
- package/dist/components/renderers/text/TextRenderer.class.js.map +1 -1
- package/dist/components/renderers/tiled/TileMapRenderer.js +2 -2
- package/dist/components/renderers/tiled/TileMapRenderer.js.map +1 -1
- package/dist/components/renderers/tiled/TileObject.js +4 -4
- package/dist/components/renderers/tiled/TileObject.js.map +1 -1
- package/dist/components/script/Behavior.d.ts +4 -3
- package/dist/components/script/Behavior.d.ts.map +1 -1
- package/dist/components/script/Behavior.js +0 -1
- package/dist/components/script/Behavior.js.map +1 -1
- package/dist/components/script/BehaviorInitializer.d.ts +5 -4
- package/dist/components/script/BehaviorInitializer.d.ts.map +1 -1
- package/dist/components/script/BehaviorInitializer.js +1 -2
- package/dist/components/script/BehaviorInitializer.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/systems/{Scene.d.ts → SceneManager.d.ts} +3 -3
- package/dist/systems/SceneManager.d.ts.map +1 -0
- package/dist/systems/{Scene.js → SceneManager.js} +4 -4
- package/dist/systems/SceneManager.js.map +1 -0
- package/dist/systems/{GameInstance.d.ts → World.d.ts} +10 -7
- package/dist/systems/World.d.ts.map +1 -0
- package/dist/systems/{GameInstance.js → World.js} +8 -8
- package/dist/systems/World.js.map +1 -0
- package/dist/systems/generators/IntegerIncrement.d.ts +6 -0
- package/dist/systems/generators/IntegerIncrement.d.ts.map +1 -0
- package/dist/systems/generators/IntegerIncrement.js +10 -0
- package/dist/systems/generators/IntegerIncrement.js.map +1 -0
- package/dist/systems/generators/PersistentIdIncrement.d.ts +8 -0
- package/dist/systems/generators/PersistentIdIncrement.d.ts.map +1 -0
- package/dist/systems/generators/PersistentIdIncrement.js +23 -0
- package/dist/systems/generators/PersistentIdIncrement.js.map +1 -0
- package/dist/systems/index.d.ts +4 -2
- package/dist/systems/index.d.ts.map +1 -1
- package/dist/systems/index.js +4 -2
- package/dist/systems/index.js.map +1 -1
- package/dist/systems/rendering/ThreeRenderer.d.ts +3 -3
- package/dist/systems/rendering/ThreeRenderer.d.ts.map +1 -1
- package/dist/systems/rendering/ThreeRenderer.js.map +1 -1
- package/dist/{utils/types.d.ts → types.d.ts} +1 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/UINode.d.ts +3 -2
- package/dist/ui/UINode.d.ts.map +1 -1
- package/dist/ui/UINode.js +6 -6
- package/dist/ui/UINode.js.map +1 -1
- package/dist/ui/UIRenderer.d.ts +6 -6
- package/dist/ui/UIRenderer.d.ts.map +1 -1
- package/dist/ui/UIRenderer.js +16 -17
- package/dist/ui/UIRenderer.js.map +1 -1
- package/dist/ui/UISprite.d.ts +3 -2
- package/dist/ui/UISprite.d.ts.map +1 -1
- package/dist/ui/UISprite.js +2 -3
- package/dist/ui/UISprite.js.map +1 -1
- package/dist/ui/UIText.d.ts +4 -3
- package/dist/ui/UIText.d.ts.map +1 -1
- package/dist/ui/UIText.js.map +1 -1
- package/dist/ui/common.d.ts +2 -0
- package/dist/ui/common.d.ts.map +1 -0
- package/dist/ui/common.js +2 -0
- package/dist/ui/common.js.map +1 -0
- package/dist/utils/createViewHelper.d.ts +1 -1
- package/dist/utils/createViewHelper.d.ts.map +1 -1
- package/dist/utils/createViewHelper.js +4 -4
- package/dist/utils/createViewHelper.js.map +1 -1
- package/package.json +1 -1
- package/dist/systems/GameInstance.d.ts.map +0 -1
- package/dist/systems/GameInstance.js.map +0 -1
- package/dist/systems/Scene.d.ts.map +0 -1
- package/dist/systems/Scene.js.map +0 -1
- package/dist/utils/types.d.ts.map +0 -1
- package/dist/utils/types.js.map +0 -1
- /package/dist/{utils/types.js → types.js} +0 -0
package/README.md
CHANGED
|
@@ -49,11 +49,11 @@ Systems are responsible for driving the game loop, orchestrating rendering, and
|
|
|
49
49
|
resources such as assets. They operate on actors and their components
|
|
50
50
|
each frame.
|
|
51
51
|
|
|
52
|
-
- [
|
|
52
|
+
- [World](./docs/systems/world.md) — top-level orchestrator that ties the renderer, scene,
|
|
53
53
|
input, and audio into a unified game loop.
|
|
54
54
|
- [Renderer](./docs/systems/renderer.md) — abstracts the Three.js render pipeline and supports
|
|
55
55
|
direct and post-processing render strategies.
|
|
56
|
-
- [
|
|
56
|
+
- [SceneManager](./docs/systems/scene-manager.md) — the ECS world manager that owns the actor tree and drives
|
|
57
57
|
per-frame lifecycle (awake → start → update → destroy).
|
|
58
58
|
- [Asset](./docs/asset.md) — lazy-loading asset pipeline with a
|
|
59
59
|
registry of loaders, a queue, and a cache.
|
|
@@ -64,14 +64,14 @@ each frame.
|
|
|
64
64
|
```ts
|
|
65
65
|
import { Systems, Actor } from "@jolly-pixel/engine";
|
|
66
66
|
|
|
67
|
-
const
|
|
67
|
+
const sceneManager = new Systems.SceneManager();
|
|
68
68
|
const renderer = new Systems.ThreeRenderer(canvas, {
|
|
69
|
-
scene,
|
|
69
|
+
scene: sceneManager,
|
|
70
70
|
renderMode: "direct"
|
|
71
71
|
});
|
|
72
|
-
const game = new Systems.
|
|
72
|
+
const game = new Systems.World(renderer, {
|
|
73
73
|
enableOnExit: true,
|
|
74
|
-
|
|
74
|
+
sceneManager
|
|
75
75
|
});
|
|
76
76
|
|
|
77
77
|
game.connect();
|
|
@@ -97,10 +97,10 @@ dictionary of Behaviors. The engine uses the name *Actor* (inspired by [Superpow
|
|
|
97
97
|
<summary>Code Example</summary>
|
|
98
98
|
|
|
99
99
|
```ts
|
|
100
|
-
const player =
|
|
101
|
-
player.transform.setLocalPosition(0, 1, 0);
|
|
100
|
+
const player = world.createActor("Player");
|
|
101
|
+
player.transform.setLocalPosition({ x: 0, y: 1, z: 0 });
|
|
102
102
|
|
|
103
|
-
const child =
|
|
103
|
+
const child = world.createActor("Weapon", {
|
|
104
104
|
parent: player
|
|
105
105
|
});
|
|
106
106
|
|
|
@@ -141,16 +141,16 @@ class PlayerBehavior extends Behavior {
|
|
|
141
141
|
}
|
|
142
142
|
|
|
143
143
|
update() {
|
|
144
|
-
if (this.actor.
|
|
144
|
+
if (this.actor.world.input.isKeyDown("ArrowUp")) {
|
|
145
145
|
this.onMovement.emit();
|
|
146
146
|
this.actor.transform.moveForward(this.speed);
|
|
147
147
|
}
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
150
|
|
|
151
|
-
new Actor(
|
|
152
|
-
.
|
|
153
|
-
.
|
|
151
|
+
new Actor(world, { name: "player" })
|
|
152
|
+
.addComponent(ModelRenderer, { path: "models/Player.glb" })
|
|
153
|
+
.addComponent(PlayerBehavior, { speed: 0.5 });
|
|
154
154
|
```
|
|
155
155
|
|
|
156
156
|
</details>
|
|
@@ -174,7 +174,7 @@ query API so that behaviors can react to player actions without coupling to a sp
|
|
|
174
174
|
```ts
|
|
175
175
|
import { InputCombination } from "@jolly-pixel/engine";
|
|
176
176
|
|
|
177
|
-
const { input } =
|
|
177
|
+
const { input } = world;
|
|
178
178
|
|
|
179
179
|
if (input.isKeyDown("Space")) {
|
|
180
180
|
console.log("jump!");
|
|
@@ -190,7 +190,7 @@ if (dashCombo.evaluate(input)) {
|
|
|
190
190
|
```
|
|
191
191
|
|
|
192
192
|
> [!TIP]
|
|
193
|
-
> In ActorComponent or Behavior input are accessible through this.actor.
|
|
193
|
+
> In ActorComponent or Behavior input are accessible through this.actor.world.input
|
|
194
194
|
|
|
195
195
|
</details>
|
|
196
196
|
|
|
@@ -210,7 +210,7 @@ Manages sound playback across the engine. It provides a global volume controller
|
|
|
210
210
|
```ts
|
|
211
211
|
import { GlobalAudioManager, AudioBackground } from "@jolly-pixel/engine";
|
|
212
212
|
|
|
213
|
-
const audioManager = GlobalAudioManager.
|
|
213
|
+
const audioManager = GlobalAudioManager.fromWorld(world);
|
|
214
214
|
const bg = new AudioBackground({
|
|
215
215
|
audioManager,
|
|
216
216
|
autoPlay: true,
|
|
@@ -223,8 +223,8 @@ const bg = new AudioBackground({
|
|
|
223
223
|
}]
|
|
224
224
|
});
|
|
225
225
|
|
|
226
|
-
|
|
227
|
-
|
|
226
|
+
world.audio.observe(bg);
|
|
227
|
+
world.audio.volume = 0.5;
|
|
228
228
|
```
|
|
229
229
|
|
|
230
230
|
</details>
|
package/dist/actor/Actor.d.ts
CHANGED
|
@@ -1,20 +1,25 @@
|
|
|
1
1
|
import * as THREE from "three";
|
|
2
|
-
import { type GameInstance } from "../systems/GameInstance.ts";
|
|
3
|
-
import type { ActorComponent } from "./ActorComponent.ts";
|
|
4
2
|
import { ActorTree } from "./ActorTree.ts";
|
|
5
3
|
import { Transform } from "./Transform.ts";
|
|
4
|
+
import { IntegerIncrement } from "../systems/generators/IntegerIncrement.ts";
|
|
5
|
+
import { PersistentIdIncrement } from "../systems/generators/PersistentIdIncrement.ts";
|
|
6
|
+
import type { World, WorldDefaultContext } from "../systems/World.ts";
|
|
6
7
|
import type { Behavior } from "../components/script/Behavior.ts";
|
|
7
8
|
import type { Component } from "../components/types.ts";
|
|
8
9
|
type ComponentConstructor = new (actor: Actor<any>, ...args: any[]) => Component;
|
|
9
10
|
type RequiresOptions<T extends ComponentConstructor> = T extends new (actor: Actor<any>, options: infer O, ...args: any[]) => any ? undefined extends O ? false : true : false;
|
|
10
|
-
export interface ActorOptions<TContext =
|
|
11
|
+
export interface ActorOptions<TContext = WorldDefaultContext> {
|
|
11
12
|
name: string;
|
|
12
13
|
parent?: Actor<TContext> | null;
|
|
13
14
|
visible?: boolean;
|
|
14
15
|
layer?: number | number[];
|
|
15
16
|
}
|
|
16
|
-
export declare class Actor<TContext =
|
|
17
|
-
|
|
17
|
+
export declare class Actor<TContext = WorldDefaultContext> extends ActorTree<TContext> {
|
|
18
|
+
static Id: IntegerIncrement;
|
|
19
|
+
static PersistentId: PersistentIdIncrement;
|
|
20
|
+
world: World<any, TContext>;
|
|
21
|
+
id: number;
|
|
22
|
+
persistentId: string;
|
|
18
23
|
name: string;
|
|
19
24
|
awoken: boolean;
|
|
20
25
|
parent: Actor<TContext> | null;
|
|
@@ -22,19 +27,22 @@ export declare class Actor<TContext = Record<string, unknown>> extends ActorTree
|
|
|
22
27
|
behaviors: Record<string, Behavior<any, TContext>[]>;
|
|
23
28
|
transform: Transform;
|
|
24
29
|
pendingForDestruction: boolean;
|
|
25
|
-
|
|
26
|
-
constructor(
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
+
object3D: THREE.Group<THREE.Object3DEventMap>;
|
|
31
|
+
constructor(world: World<any, TContext>, options: ActorOptions<TContext>);
|
|
32
|
+
addComponent<T extends ComponentConstructor>(componentClass: T, ...args: RequiresOptions<T> extends true ? [options: ConstructorParameters<T>[1], callback?: (component: InstanceType<T>) => void] : [options?: ConstructorParameters<T>[1], callback?: (component: InstanceType<T>) => void]): this;
|
|
33
|
+
addComponentAndGet<T extends ComponentConstructor>(componentClass: T, ...args: RequiresOptions<T> extends true ? [options: ConstructorParameters<T>[1]] : [options?: ConstructorParameters<T>[1]]): InstanceType<T>;
|
|
34
|
+
getComponent(typeName: string): Component | null;
|
|
35
|
+
getComponent<T>(componentClass: new (...args: any[]) => T): T | null;
|
|
36
|
+
getComponents<T extends Component>(componentClass: new (...args: any[]) => T): IterableIterator<T>;
|
|
37
|
+
addChildren(...objects: THREE.Object3D[]): this;
|
|
38
|
+
removeChildren(...objects: THREE.Object3D[]): this;
|
|
30
39
|
awake(): void;
|
|
31
40
|
update(deltaTime: number): void;
|
|
41
|
+
toString(): string;
|
|
32
42
|
isDestroyed(): boolean;
|
|
33
43
|
destroy(): void;
|
|
44
|
+
static disposeObject3D(object: THREE.Object3D): void;
|
|
34
45
|
markDestructionPending(): void;
|
|
35
|
-
addBehavior<T extends new (...args: any) => Behavior<any, TContext>>(behaviorClass: T, properties?: ConstructorParameters<T>[0]): Behavior<any, TContext>;
|
|
36
|
-
getBehavior<T extends new (...args: any) => any>(behaviorClass: T): InstanceType<T> | null;
|
|
37
|
-
getBehaviors<T extends new (...args: any) => any>(behaviorClass: T): IterableIterator<InstanceType<T>>;
|
|
38
46
|
setParent(newParent: Actor<TContext>, keepLocal?: boolean): void;
|
|
39
47
|
}
|
|
40
48
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Actor.d.ts","sourceRoot":"","sources":["../../src/actor/Actor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"Actor.d.ts","sourceRoot":"","sources":["../../src/actor/Actor.ts"],"names":[],"mappings":"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"}
|
package/dist/actor/Actor.js
CHANGED
|
@@ -1,11 +1,19 @@
|
|
|
1
1
|
// Import Third-party Dependencies
|
|
2
2
|
import * as THREE from "three";
|
|
3
3
|
// Import Internal Dependencies
|
|
4
|
-
import {} from "../systems/GameInstance.js";
|
|
5
4
|
import { ActorTree } from "./ActorTree.js";
|
|
6
5
|
import { Transform } from "./Transform.js";
|
|
6
|
+
import { IntegerIncrement } from "../systems/generators/IntegerIncrement.js";
|
|
7
|
+
import { PersistentIdIncrement } from "../systems/generators/PersistentIdIncrement.js";
|
|
8
|
+
function isPendingForDestruction(component) {
|
|
9
|
+
return "pendingForDestruction" in component && component.pendingForDestruction === true;
|
|
10
|
+
}
|
|
7
11
|
export class Actor extends ActorTree {
|
|
8
|
-
|
|
12
|
+
static Id = new IntegerIncrement();
|
|
13
|
+
static PersistentId = new PersistentIdIncrement();
|
|
14
|
+
world;
|
|
15
|
+
id = Actor.Id.incr();
|
|
16
|
+
persistentId = Actor.PersistentId.next();
|
|
9
17
|
name;
|
|
10
18
|
awoken = false;
|
|
11
19
|
parent = null;
|
|
@@ -13,37 +21,38 @@ export class Actor extends ActorTree {
|
|
|
13
21
|
behaviors = {};
|
|
14
22
|
transform;
|
|
15
23
|
pendingForDestruction = false;
|
|
16
|
-
|
|
17
|
-
constructor(
|
|
24
|
+
object3D = new THREE.Group();
|
|
25
|
+
constructor(world, options) {
|
|
18
26
|
super();
|
|
19
27
|
const { name, parent = null, visible = true, layer } = options;
|
|
20
|
-
if (parent !== null &&
|
|
28
|
+
if (parent !== null &&
|
|
29
|
+
parent.pendingForDestruction) {
|
|
21
30
|
throw new Error("Cannot add actor to a parent that is pending for destruction.");
|
|
22
31
|
}
|
|
23
|
-
this.
|
|
32
|
+
this.world = world;
|
|
24
33
|
this.name = name;
|
|
25
34
|
this.parent = parent;
|
|
26
|
-
this.
|
|
27
|
-
this.
|
|
28
|
-
this.
|
|
35
|
+
this.object3D.visible = visible;
|
|
36
|
+
this.object3D.name = this.name;
|
|
37
|
+
this.object3D.userData.isActor = true;
|
|
29
38
|
if (layer) {
|
|
30
39
|
const layers = Array.isArray(layer) ? layer : [layer];
|
|
31
40
|
for (const layer of layers) {
|
|
32
|
-
this.
|
|
33
|
-
this.
|
|
41
|
+
this.object3D.layers.enable(layer);
|
|
42
|
+
this.world.sceneManager.getSource().layers.enable(layer);
|
|
34
43
|
}
|
|
35
44
|
}
|
|
36
|
-
this.transform = new Transform(this.
|
|
45
|
+
this.transform = new Transform(this.object3D);
|
|
37
46
|
if (parent) {
|
|
38
47
|
parent.add(this);
|
|
39
|
-
parent.
|
|
40
|
-
this.
|
|
48
|
+
parent.object3D.add(this.object3D);
|
|
49
|
+
this.object3D.updateMatrixWorld(false);
|
|
41
50
|
}
|
|
42
51
|
else {
|
|
43
|
-
this.
|
|
52
|
+
this.world.sceneManager.tree.add(this);
|
|
44
53
|
}
|
|
45
54
|
}
|
|
46
|
-
|
|
55
|
+
addComponent(componentClass, ...args) {
|
|
47
56
|
const [options, callback] = args;
|
|
48
57
|
const component = new componentClass(this, options);
|
|
49
58
|
callback?.(component);
|
|
@@ -52,7 +61,7 @@ export class Actor extends ActorTree {
|
|
|
52
61
|
}
|
|
53
62
|
return this;
|
|
54
63
|
}
|
|
55
|
-
|
|
64
|
+
addComponentAndGet(componentClass, ...args) {
|
|
56
65
|
const [options] = args;
|
|
57
66
|
const component = new componentClass(this, options);
|
|
58
67
|
if (this.awoken) {
|
|
@@ -60,12 +69,39 @@ export class Actor extends ActorTree {
|
|
|
60
69
|
}
|
|
61
70
|
return component;
|
|
62
71
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
72
|
+
getComponent(typeNameOrClass) {
|
|
73
|
+
if (typeof typeNameOrClass === "string") {
|
|
74
|
+
for (const comp of this.components) {
|
|
75
|
+
if (comp.typeName === typeNameOrClass && !isPendingForDestruction(comp)) {
|
|
76
|
+
return comp;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return null;
|
|
67
80
|
}
|
|
68
|
-
|
|
81
|
+
for (const comp of this.components) {
|
|
82
|
+
if (comp instanceof typeNameOrClass && !isPendingForDestruction(comp)) {
|
|
83
|
+
return comp;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
*getComponents(componentClass) {
|
|
89
|
+
for (const comp of this.components) {
|
|
90
|
+
if (comp instanceof componentClass && !isPendingForDestruction(comp)) {
|
|
91
|
+
yield comp;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
addChildren(...objects) {
|
|
96
|
+
this.object3D.add(...objects);
|
|
97
|
+
return this;
|
|
98
|
+
}
|
|
99
|
+
removeChildren(...objects) {
|
|
100
|
+
for (const object of objects) {
|
|
101
|
+
this.object3D.remove(object);
|
|
102
|
+
Actor.disposeObject3D(object);
|
|
103
|
+
}
|
|
104
|
+
return this;
|
|
69
105
|
}
|
|
70
106
|
awake() {
|
|
71
107
|
this.components.forEach((component) => component.awake?.());
|
|
@@ -75,6 +111,9 @@ export class Actor extends ActorTree {
|
|
|
75
111
|
this.components.forEach((component) => component.update?.(deltaTime));
|
|
76
112
|
}
|
|
77
113
|
}
|
|
114
|
+
toString() {
|
|
115
|
+
return `${this.name}:${this.id}-${this.persistentId}`;
|
|
116
|
+
}
|
|
78
117
|
isDestroyed() {
|
|
79
118
|
return this.pendingForDestruction;
|
|
80
119
|
}
|
|
@@ -83,55 +122,33 @@ export class Actor extends ActorTree {
|
|
|
83
122
|
this.components[i].destroy?.();
|
|
84
123
|
}
|
|
85
124
|
if (this.parent === null) {
|
|
86
|
-
this.
|
|
125
|
+
this.world.sceneManager.tree.remove(this);
|
|
87
126
|
}
|
|
88
127
|
else {
|
|
89
|
-
this.parent.
|
|
128
|
+
this.parent.object3D.remove(this.object3D);
|
|
90
129
|
this.parent.remove(this);
|
|
91
130
|
}
|
|
92
|
-
this.
|
|
131
|
+
this.object3D.traverse((child) => Actor.disposeObject3D(child));
|
|
132
|
+
this.object3D.clear();
|
|
93
133
|
}
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
behavior.awake?.();
|
|
106
|
-
}
|
|
107
|
-
return behavior;
|
|
108
|
-
}
|
|
109
|
-
getBehavior(behaviorClass) {
|
|
110
|
-
for (const behaviorName in this.behaviors) {
|
|
111
|
-
if (!Object.hasOwn(this.behaviors, behaviorName)) {
|
|
112
|
-
continue;
|
|
113
|
-
}
|
|
114
|
-
for (const behavior of this.behaviors[behaviorName]) {
|
|
115
|
-
if (behavior instanceof behaviorClass &&
|
|
116
|
-
!behavior.isDestroyed()) {
|
|
117
|
-
return behavior;
|
|
134
|
+
static disposeObject3D(object) {
|
|
135
|
+
if ("geometry" in object && object.geometry instanceof THREE.BufferGeometry) {
|
|
136
|
+
object.geometry.dispose();
|
|
137
|
+
}
|
|
138
|
+
if ("material" in object) {
|
|
139
|
+
const materials = Array.isArray(object.material)
|
|
140
|
+
? object.material
|
|
141
|
+
: [object.material];
|
|
142
|
+
for (const material of materials) {
|
|
143
|
+
if (material instanceof THREE.Material) {
|
|
144
|
+
material.dispose();
|
|
118
145
|
}
|
|
119
146
|
}
|
|
120
147
|
}
|
|
121
|
-
return null;
|
|
122
148
|
}
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
continue;
|
|
127
|
-
}
|
|
128
|
-
for (const behavior of this.behaviors[behaviorName]) {
|
|
129
|
-
if (behavior instanceof behaviorClass &&
|
|
130
|
-
!behavior.isDestroyed()) {
|
|
131
|
-
yield behavior;
|
|
132
|
-
}
|
|
133
|
-
}
|
|
134
|
-
}
|
|
149
|
+
markDestructionPending() {
|
|
150
|
+
this.pendingForDestruction = true;
|
|
151
|
+
this.destroyAllActors();
|
|
135
152
|
}
|
|
136
153
|
setParent(newParent, keepLocal = false) {
|
|
137
154
|
if (this.pendingForDestruction) {
|
|
@@ -143,20 +160,20 @@ export class Actor extends ActorTree {
|
|
|
143
160
|
if (!keepLocal) {
|
|
144
161
|
this.transform.getGlobalMatrix(Transform.Matrix);
|
|
145
162
|
}
|
|
146
|
-
const oldSiblings = (this.parent === null) ? this.
|
|
163
|
+
const oldSiblings = (this.parent === null) ? this.world.sceneManager.tree : this.parent;
|
|
147
164
|
oldSiblings.remove(this);
|
|
148
|
-
this.
|
|
165
|
+
this.object3D.parent?.remove(this.object3D);
|
|
149
166
|
this.parent = newParent;
|
|
150
167
|
const siblings = (newParent === null) ?
|
|
151
|
-
this.
|
|
168
|
+
this.world.sceneManager.tree :
|
|
152
169
|
newParent;
|
|
153
170
|
siblings.add(this);
|
|
154
171
|
const threeParent = (newParent === null) ?
|
|
155
|
-
this.
|
|
156
|
-
newParent.
|
|
157
|
-
threeParent.add(this.
|
|
172
|
+
this.world.sceneManager.getSource() :
|
|
173
|
+
newParent.object3D;
|
|
174
|
+
threeParent.add(this.object3D);
|
|
158
175
|
if (keepLocal) {
|
|
159
|
-
this.
|
|
176
|
+
this.object3D.updateMatrixWorld(false);
|
|
160
177
|
}
|
|
161
178
|
else {
|
|
162
179
|
this.transform.setGlobalMatrix(Transform.Matrix);
|
package/dist/actor/Actor.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Actor.js","sourceRoot":"","sources":["../../src/actor/Actor.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,+BAA+B;AAC/B,OAAO,
|
|
1
|
+
{"version":3,"file":"Actor.js","sourceRoot":"","sources":["../../src/actor/Actor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,23 +1,28 @@
|
|
|
1
1
|
import { EventEmitter } from "@posva/event-emitter";
|
|
2
2
|
import { Actor } from "./Actor.ts";
|
|
3
|
+
import { IntegerIncrement } from "../systems/generators/IntegerIncrement.ts";
|
|
4
|
+
import { PersistentIdIncrement } from "../systems/generators/PersistentIdIncrement.ts";
|
|
5
|
+
import type { WorldDefaultContext } from "../systems/World.ts";
|
|
3
6
|
import type { Component, FreeComponentEnum } from "../components/types.ts";
|
|
4
|
-
export interface ActorComponentOptions<TContext =
|
|
7
|
+
export interface ActorComponentOptions<TContext = WorldDefaultContext> {
|
|
5
8
|
actor: Actor<TContext>;
|
|
6
9
|
typeName: FreeComponentEnum;
|
|
7
10
|
}
|
|
8
11
|
export type ActorComponentEvents = {
|
|
9
12
|
metadataInitialized: [];
|
|
10
13
|
};
|
|
11
|
-
export declare class ActorComponent<TContext =
|
|
14
|
+
export declare class ActorComponent<TContext = WorldDefaultContext> extends EventEmitter<ActorComponentEvents> implements Component {
|
|
12
15
|
#private;
|
|
13
|
-
|
|
14
|
-
static
|
|
15
|
-
static clearId(): void;
|
|
16
|
+
static Id: IntegerIncrement;
|
|
17
|
+
static PersistentId: PersistentIdIncrement;
|
|
16
18
|
id: number;
|
|
19
|
+
persistentId: string;
|
|
17
20
|
actor: Actor<TContext>;
|
|
18
21
|
typeName: FreeComponentEnum;
|
|
19
22
|
pendingForDestruction: boolean;
|
|
20
23
|
constructor(options: ActorComponentOptions<TContext>);
|
|
24
|
+
get context(): TContext;
|
|
25
|
+
toString(): string;
|
|
21
26
|
isDestroyed(): boolean;
|
|
22
27
|
destroy(): void;
|
|
23
28
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActorComponent.d.ts","sourceRoot":"","sources":["../../src/actor/ActorComponent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,KAAK,EACV,SAAS,EACT,iBAAiB,EAClB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,qBAAqB,
|
|
1
|
+
{"version":3,"file":"ActorComponent.d.ts","sourceRoot":"","sources":["../../src/actor/ActorComponent.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGpD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AACvF,OAAO,KAAK,EACV,mBAAmB,EACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EACV,SAAS,EACT,iBAAiB,EAClB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,qBAAqB,CACpC,QAAQ,GAAG,mBAAmB;IAE9B,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACvB,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,mBAAmB,EAAE,EAAE,CAAC;CACzB,CAAC;AAEF,qBAAa,cAAc,CACzB,QAAQ,GAAG,mBAAmB,CAC9B,SAAQ,YAAY,CAAC,oBAAoB,CAAE,YAAW,SAAS;;IAC/D,MAAM,CAAC,EAAE,mBAA0B;IACnC,MAAM,CAAC,YAAY,wBAA+B;IAElD,EAAE,SAA4B;IAC9B,YAAY,SAAsC;IAClD,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACvB,QAAQ,EAAE,iBAAiB,CAAC;IAE5B,qBAAqB,UAAS;gBAG5B,OAAO,EAAE,qBAAqB,CAAC,QAAQ,CAAC;IAc1C,IAAI,OAAO,IAAI,QAAQ,CAEtB;IAcQ,QAAQ,IAAI,MAAM;IAI3B,WAAW;IAIX,OAAO;CAWR"}
|
|
@@ -3,15 +3,13 @@ import { EventEmitter } from "@posva/event-emitter";
|
|
|
3
3
|
// Import Internal Dependencies
|
|
4
4
|
import { Actor } from "./Actor.js";
|
|
5
5
|
import { getSignalMetadata, SignalEvent } from "./Signal.js";
|
|
6
|
+
import { IntegerIncrement } from "../systems/generators/IntegerIncrement.js";
|
|
7
|
+
import { PersistentIdIncrement } from "../systems/generators/PersistentIdIncrement.js";
|
|
6
8
|
export class ActorComponent extends EventEmitter {
|
|
7
|
-
static Id =
|
|
8
|
-
static
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
static clearId() {
|
|
12
|
-
this.Id = 0;
|
|
13
|
-
}
|
|
14
|
-
id = ActorComponent.generateNextId();
|
|
9
|
+
static Id = new IntegerIncrement();
|
|
10
|
+
static PersistentId = new PersistentIdIncrement();
|
|
11
|
+
id = ActorComponent.Id.incr();
|
|
12
|
+
persistentId = ActorComponent.PersistentId.next();
|
|
15
13
|
actor;
|
|
16
14
|
typeName;
|
|
17
15
|
pendingForDestruction = false;
|
|
@@ -20,11 +18,14 @@ export class ActorComponent extends EventEmitter {
|
|
|
20
18
|
this.actor = options.actor;
|
|
21
19
|
this.typeName = options.typeName;
|
|
22
20
|
this.actor.components.push(this);
|
|
23
|
-
this.actor.
|
|
21
|
+
this.actor.world.sceneManager.componentsToBeStarted.push(this);
|
|
24
22
|
// Defer the initialization of signal decorators to ensure
|
|
25
23
|
// that the component instance is fully constructed
|
|
26
24
|
queueMicrotask(() => this.#initSignalDecorators());
|
|
27
25
|
}
|
|
26
|
+
get context() {
|
|
27
|
+
return this.actor.world.context;
|
|
28
|
+
}
|
|
28
29
|
#initSignalDecorators() {
|
|
29
30
|
const proto = Object.getPrototypeOf(this);
|
|
30
31
|
const metadata = getSignalMetadata(proto);
|
|
@@ -35,13 +36,16 @@ export class ActorComponent extends EventEmitter {
|
|
|
35
36
|
}
|
|
36
37
|
this.emit("metadataInitialized");
|
|
37
38
|
}
|
|
39
|
+
toString() {
|
|
40
|
+
return `${this.typeName}:${this.id}-${this.persistentId}`;
|
|
41
|
+
}
|
|
38
42
|
isDestroyed() {
|
|
39
43
|
return this.pendingForDestruction;
|
|
40
44
|
}
|
|
41
45
|
destroy() {
|
|
42
|
-
const startIndex = this.actor.
|
|
46
|
+
const startIndex = this.actor.world.sceneManager.componentsToBeStarted.indexOf(this);
|
|
43
47
|
if (startIndex !== -1) {
|
|
44
|
-
this.actor.
|
|
48
|
+
this.actor.world.sceneManager.componentsToBeStarted.splice(startIndex, 1);
|
|
45
49
|
}
|
|
46
50
|
const index = this.actor.components.indexOf(this);
|
|
47
51
|
if (index !== -1) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActorComponent.js","sourceRoot":"","sources":["../../src/actor/ActorComponent.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,+BAA+B;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"ActorComponent.js","sourceRoot":"","sources":["../../src/actor/ActorComponent.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,+BAA+B;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AAoBvF,MAAM,OAAO,cAEX,SAAQ,YAAkC;IAC1C,MAAM,CAAC,EAAE,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACnC,MAAM,CAAC,YAAY,GAAG,IAAI,qBAAqB,EAAE,CAAC;IAElD,EAAE,GAAG,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;IAC9B,YAAY,GAAG,cAAc,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IAClD,KAAK,CAAkB;IACvB,QAAQ,CAAoB;IAE5B,qBAAqB,GAAG,KAAK,CAAC;IAE9B,YACE,OAAwC;QAExC,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QAC3B,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAEjC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE/D,0DAA0D;QAC1D,mDAAmD;QACnD,cAAc,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC;IAClC,CAAC;IAED,qBAAqB;QACnB,MAAM,KAAK,GAAG,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAE1C,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,MAAM,YAAY,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;gBAC5C,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,WAAW,EAAE,CAAC;YACzC,CAAC;QACH,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACnC,CAAC;IAEQ,QAAQ;QACf,OAAO,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;IAC5D,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACpC,CAAC;IAED,OAAO;QACL,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrF,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,qBAAqB,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAClD,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE,CAAC;YACjB,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QACzC,CAAC;IACH,CAAC"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
+
import type { WorldDefaultContext } from "../systems/World.ts";
|
|
1
2
|
import { Actor } from "./Actor.ts";
|
|
2
|
-
export type ActorTreeNode<TContext =
|
|
3
|
+
export type ActorTreeNode<TContext = WorldDefaultContext> = {
|
|
3
4
|
actor: Actor<TContext>;
|
|
4
5
|
parent?: Actor<TContext>;
|
|
5
6
|
};
|
|
6
|
-
export interface ActorTreeOptions<TContext =
|
|
7
|
+
export interface ActorTreeOptions<TContext = WorldDefaultContext> {
|
|
7
8
|
addCallback?: (actor: Actor<TContext>) => void;
|
|
8
9
|
removeCallback?: (actor: Actor<TContext>) => void;
|
|
9
10
|
}
|
|
10
|
-
export declare class ActorTree<TContext =
|
|
11
|
+
export declare class ActorTree<TContext = WorldDefaultContext> {
|
|
11
12
|
#private;
|
|
12
13
|
children: Actor<TContext>[];
|
|
13
14
|
constructor(options?: ActorTreeOptions<TContext>);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ActorTree.d.ts","sourceRoot":"","sources":["../../src/actor/ActorTree.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"ActorTree.d.ts","sourceRoot":"","sources":["../../src/actor/ActorTree.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,mBAAmB,EACpB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,MAAM,MAAM,aAAa,CACvB,QAAQ,GAAG,mBAAmB,IAC5B;IACF,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACvB,MAAM,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;CAC1B,CAAC;AAEF,MAAM,WAAW,gBAAgB,CAC/B,QAAQ,GAAG,mBAAmB;IAE9B,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;IAC/C,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;CACnD;AAED,qBAAa,SAAS,CACpB,QAAQ,GAAG,mBAAmB;;IAK9B,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAM;gBAG/B,OAAO,GAAE,gBAAgB,CAAC,QAAQ,CAAM;IAM1C,GAAG,CACD,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,GACrB,IAAI;IAKP,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI;IAQlC,SAAS,CACT,OAAO,EAAE,MAAM,GACd,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAuFpC;;;;OAIG;IACH,QAAQ,CACN,IAAI,EAAE,MAAM,GACX,KAAK,CAAC,QAAQ,CAAC,GAAG,IAAI;IAqCvB,aAAa,IAAI,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAQlD,YAAY,IAAI,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAMnD,YAAY,CACV,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC;IAOxB,gBAAgB;IAiBd,IAAI,IAAI,gBAAgB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAMjD,YAAY,CACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,GACxB,gBAAgB,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAM1C,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;CAOzD"}
|