@jolly-pixel/engine 1.2.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 +27 -17
- package/dist/actor/Actor.d.ts.map +1 -1
- package/dist/actor/Actor.js +88 -64
- package/dist/actor/Actor.js.map +1 -1
- package/dist/actor/ActorComponent.d.ts +13 -8
- 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 +20 -19
- 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.d.ts +1 -1
- package/dist/components/camera/Camera3DControls.d.ts.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.d.ts +2 -2
- package/dist/components/renderers/model/ModelRenderer.d.ts.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.d.ts +2 -2
- package/dist/components/renderers/sprite/SpriteRenderer.class.d.ts.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.d.ts +2 -2
- package/dist/components/renderers/text/TextRenderer.class.d.ts.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.d.ts +2 -2
- package/dist/components/renderers/tiled/TileMapRenderer.d.ts.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.d.ts +1 -1
- package/dist/components/renderers/tiled/TileObject.d.ts.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/components/types.d.ts +1 -1
- package/dist/components/types.d.ts.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/systems/{Scene.d.ts → SceneManager.d.ts} +8 -8
- 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} +13 -8
- package/dist/systems/World.d.ts.map +1 -0
- package/dist/systems/{GameInstance.js → World.js} +11 -9
- 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 +5 -3
- 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,39 +1,49 @@
|
|
|
1
1
|
import * as THREE from "three";
|
|
2
|
-
import { type GameInstance } from "../systems/GameInstance.ts";
|
|
3
2
|
import { ActorTree } from "./ActorTree.ts";
|
|
4
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";
|
|
5
7
|
import type { Behavior } from "../components/script/Behavior.ts";
|
|
6
8
|
import type { Component } from "../components/types.ts";
|
|
7
|
-
type ComponentConstructor = new (actor: Actor
|
|
8
|
-
type RequiresOptions<T extends ComponentConstructor> = T extends new (actor: Actor
|
|
9
|
-
export interface ActorOptions {
|
|
9
|
+
type ComponentConstructor = new (actor: Actor<any>, ...args: any[]) => Component;
|
|
10
|
+
type RequiresOptions<T extends ComponentConstructor> = T extends new (actor: Actor<any>, options: infer O, ...args: any[]) => any ? undefined extends O ? false : true : false;
|
|
11
|
+
export interface ActorOptions<TContext = WorldDefaultContext> {
|
|
10
12
|
name: string;
|
|
11
|
-
parent?: Actor | null;
|
|
13
|
+
parent?: Actor<TContext> | null;
|
|
12
14
|
visible?: boolean;
|
|
13
15
|
layer?: number | number[];
|
|
14
16
|
}
|
|
15
|
-
export declare class Actor extends ActorTree {
|
|
16
|
-
|
|
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;
|
|
17
23
|
name: string;
|
|
18
24
|
awoken: boolean;
|
|
19
|
-
parent: Actor | null;
|
|
25
|
+
parent: Actor<TContext> | null;
|
|
20
26
|
components: Component[];
|
|
21
|
-
behaviors: Record<string, Behavior<any>[]>;
|
|
27
|
+
behaviors: Record<string, Behavior<any, TContext>[]>;
|
|
22
28
|
transform: Transform;
|
|
23
29
|
pendingForDestruction: boolean;
|
|
24
|
-
|
|
25
|
-
constructor(
|
|
26
|
-
|
|
27
|
-
|
|
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;
|
|
28
39
|
awake(): void;
|
|
29
40
|
update(deltaTime: number): void;
|
|
41
|
+
toString(): string;
|
|
30
42
|
isDestroyed(): boolean;
|
|
31
43
|
destroy(): void;
|
|
44
|
+
static disposeObject3D(object: THREE.Object3D): void;
|
|
32
45
|
markDestructionPending(): void;
|
|
33
|
-
|
|
34
|
-
getBehavior<T extends new (...args: any) => any>(behaviorClass: T): InstanceType<T> | null;
|
|
35
|
-
getBehaviors<T extends new (...args: any) => any>(behaviorClass: T): IterableIterator<InstanceType<T>>;
|
|
36
|
-
setParent(newParent: Actor, keepLocal?: boolean): void;
|
|
46
|
+
setParent(newParent: Actor<TContext>, keepLocal?: boolean): void;
|
|
37
47
|
}
|
|
38
48
|
export {};
|
|
39
49
|
//# sourceMappingURL=Actor.d.ts.map
|
|
@@ -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,6 +69,40 @@ export class Actor extends ActorTree {
|
|
|
60
69
|
}
|
|
61
70
|
return component;
|
|
62
71
|
}
|
|
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;
|
|
80
|
+
}
|
|
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;
|
|
105
|
+
}
|
|
63
106
|
awake() {
|
|
64
107
|
this.components.forEach((component) => component.awake?.());
|
|
65
108
|
}
|
|
@@ -68,6 +111,9 @@ export class Actor extends ActorTree {
|
|
|
68
111
|
this.components.forEach((component) => component.update?.(deltaTime));
|
|
69
112
|
}
|
|
70
113
|
}
|
|
114
|
+
toString() {
|
|
115
|
+
return `${this.name}:${this.id}-${this.persistentId}`;
|
|
116
|
+
}
|
|
71
117
|
isDestroyed() {
|
|
72
118
|
return this.pendingForDestruction;
|
|
73
119
|
}
|
|
@@ -76,55 +122,33 @@ export class Actor extends ActorTree {
|
|
|
76
122
|
this.components[i].destroy?.();
|
|
77
123
|
}
|
|
78
124
|
if (this.parent === null) {
|
|
79
|
-
this.
|
|
125
|
+
this.world.sceneManager.tree.remove(this);
|
|
80
126
|
}
|
|
81
127
|
else {
|
|
82
|
-
this.parent.
|
|
128
|
+
this.parent.object3D.remove(this.object3D);
|
|
83
129
|
this.parent.remove(this);
|
|
84
130
|
}
|
|
85
|
-
this.
|
|
131
|
+
this.object3D.traverse((child) => Actor.disposeObject3D(child));
|
|
132
|
+
this.object3D.clear();
|
|
86
133
|
}
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
behavior.awake?.();
|
|
99
|
-
}
|
|
100
|
-
return behavior;
|
|
101
|
-
}
|
|
102
|
-
getBehavior(behaviorClass) {
|
|
103
|
-
for (const behaviorName in this.behaviors) {
|
|
104
|
-
if (!Object.hasOwn(this.behaviors, behaviorName)) {
|
|
105
|
-
continue;
|
|
106
|
-
}
|
|
107
|
-
for (const behavior of this.behaviors[behaviorName]) {
|
|
108
|
-
if (behavior instanceof behaviorClass &&
|
|
109
|
-
!behavior.isDestroyed()) {
|
|
110
|
-
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();
|
|
111
145
|
}
|
|
112
146
|
}
|
|
113
147
|
}
|
|
114
|
-
return null;
|
|
115
148
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
continue;
|
|
120
|
-
}
|
|
121
|
-
for (const behavior of this.behaviors[behaviorName]) {
|
|
122
|
-
if (behavior instanceof behaviorClass &&
|
|
123
|
-
!behavior.isDestroyed()) {
|
|
124
|
-
yield behavior;
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
}
|
|
149
|
+
markDestructionPending() {
|
|
150
|
+
this.pendingForDestruction = true;
|
|
151
|
+
this.destroyAllActors();
|
|
128
152
|
}
|
|
129
153
|
setParent(newParent, keepLocal = false) {
|
|
130
154
|
if (this.pendingForDestruction) {
|
|
@@ -136,20 +160,20 @@ export class Actor extends ActorTree {
|
|
|
136
160
|
if (!keepLocal) {
|
|
137
161
|
this.transform.getGlobalMatrix(Transform.Matrix);
|
|
138
162
|
}
|
|
139
|
-
const oldSiblings = (this.parent === null) ? this.
|
|
163
|
+
const oldSiblings = (this.parent === null) ? this.world.sceneManager.tree : this.parent;
|
|
140
164
|
oldSiblings.remove(this);
|
|
141
|
-
this.
|
|
165
|
+
this.object3D.parent?.remove(this.object3D);
|
|
142
166
|
this.parent = newParent;
|
|
143
167
|
const siblings = (newParent === null) ?
|
|
144
|
-
this.
|
|
168
|
+
this.world.sceneManager.tree :
|
|
145
169
|
newParent;
|
|
146
170
|
siblings.add(this);
|
|
147
171
|
const threeParent = (newParent === null) ?
|
|
148
|
-
this.
|
|
149
|
-
newParent.
|
|
150
|
-
threeParent.add(this.
|
|
172
|
+
this.world.sceneManager.getSource() :
|
|
173
|
+
newParent.object3D;
|
|
174
|
+
threeParent.add(this.object3D);
|
|
151
175
|
if (keepLocal) {
|
|
152
|
-
this.
|
|
176
|
+
this.object3D.updateMatrixWorld(false);
|
|
153
177
|
}
|
|
154
178
|
else {
|
|
155
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 {
|
|
5
|
-
actor: Actor
|
|
7
|
+
export interface ActorComponentOptions<TContext = WorldDefaultContext> {
|
|
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 extends EventEmitter<ActorComponentEvents> implements Component {
|
|
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;
|
|
17
|
-
|
|
19
|
+
persistentId: string;
|
|
20
|
+
actor: Actor<TContext>;
|
|
18
21
|
typeName: FreeComponentEnum;
|
|
19
22
|
pendingForDestruction: boolean;
|
|
20
|
-
constructor(options: ActorComponentOptions);
|
|
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,31 +1,32 @@
|
|
|
1
|
+
import type { WorldDefaultContext } from "../systems/World.ts";
|
|
1
2
|
import { Actor } from "./Actor.ts";
|
|
2
|
-
export type ActorTreeNode = {
|
|
3
|
-
actor: Actor
|
|
4
|
-
parent?: Actor
|
|
3
|
+
export type ActorTreeNode<TContext = WorldDefaultContext> = {
|
|
4
|
+
actor: Actor<TContext>;
|
|
5
|
+
parent?: Actor<TContext>;
|
|
5
6
|
};
|
|
6
|
-
export interface ActorTreeOptions {
|
|
7
|
-
addCallback?: (actor: Actor) => void;
|
|
8
|
-
removeCallback?: (actor: Actor) => void;
|
|
7
|
+
export interface ActorTreeOptions<TContext = WorldDefaultContext> {
|
|
8
|
+
addCallback?: (actor: Actor<TContext>) => void;
|
|
9
|
+
removeCallback?: (actor: Actor<TContext>) => void;
|
|
9
10
|
}
|
|
10
|
-
export declare class ActorTree {
|
|
11
|
+
export declare class ActorTree<TContext = WorldDefaultContext> {
|
|
11
12
|
#private;
|
|
12
|
-
children: Actor[];
|
|
13
|
-
constructor(options?: ActorTreeOptions);
|
|
14
|
-
add(actor: Actor): void;
|
|
15
|
-
remove(actor: Actor): void;
|
|
16
|
-
getActors(pattern: string): IterableIterator<Actor
|
|
13
|
+
children: Actor<TContext>[];
|
|
14
|
+
constructor(options?: ActorTreeOptions<TContext>);
|
|
15
|
+
add(actor: Actor<TContext>): void;
|
|
16
|
+
remove(actor: Actor<TContext>): void;
|
|
17
|
+
getActors(pattern: string): IterableIterator<Actor<TContext>>;
|
|
17
18
|
/**
|
|
18
19
|
* @example
|
|
19
20
|
* const player = actor.children.getActor("player");
|
|
20
21
|
* const playerPhysicsBox = actor.children.getActor("player/physics_box");
|
|
21
22
|
*/
|
|
22
|
-
getActor(name: string): Actor | null;
|
|
23
|
-
getRootActors(): IterableIterator<Actor
|
|
24
|
-
getAllActors(): IterableIterator<Actor
|
|
25
|
-
destroyActor(actor: Actor): void;
|
|
23
|
+
getActor(name: string): Actor<TContext> | null;
|
|
24
|
+
getRootActors(): IterableIterator<Actor<TContext>>;
|
|
25
|
+
getAllActors(): IterableIterator<Actor<TContext>>;
|
|
26
|
+
destroyActor(actor: Actor<TContext>): void;
|
|
26
27
|
destroyAllActors(): void;
|
|
27
|
-
walk(): IterableIterator<ActorTreeNode
|
|
28
|
-
walkFromNode(rootNode: Actor): IterableIterator<ActorTreeNode
|
|
29
|
-
[Symbol.iterator](): IterableIterator<Actor
|
|
28
|
+
walk(): IterableIterator<ActorTreeNode<TContext>>;
|
|
29
|
+
walkFromNode(rootNode: Actor<TContext>): IterableIterator<ActorTreeNode<TContext>>;
|
|
30
|
+
[Symbol.iterator](): IterableIterator<Actor<TContext>>;
|
|
30
31
|
}
|
|
31
32
|
//# sourceMappingURL=ActorTree.d.ts.map
|