@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.
Files changed (124) hide show
  1. package/README.md +18 -18
  2. package/dist/actor/Actor.d.ts +27 -17
  3. package/dist/actor/Actor.d.ts.map +1 -1
  4. package/dist/actor/Actor.js +88 -64
  5. package/dist/actor/Actor.js.map +1 -1
  6. package/dist/actor/ActorComponent.d.ts +13 -8
  7. package/dist/actor/ActorComponent.d.ts.map +1 -1
  8. package/dist/actor/ActorComponent.js +15 -11
  9. package/dist/actor/ActorComponent.js.map +1 -1
  10. package/dist/actor/ActorTree.d.ts +20 -19
  11. package/dist/actor/ActorTree.d.ts.map +1 -1
  12. package/dist/actor/ActorTree.js +0 -1
  13. package/dist/actor/ActorTree.js.map +1 -1
  14. package/dist/actor/Transform.d.ts +40 -27
  15. package/dist/actor/Transform.d.ts.map +1 -1
  16. package/dist/actor/Transform.js +150 -68
  17. package/dist/actor/Transform.js.map +1 -1
  18. package/dist/actor/index.d.ts +1 -0
  19. package/dist/actor/index.d.ts.map +1 -1
  20. package/dist/actor/index.js +1 -0
  21. package/dist/actor/index.js.map +1 -1
  22. package/dist/adapters/global.d.ts +3 -3
  23. package/dist/adapters/global.d.ts.map +1 -1
  24. package/dist/adapters/global.js +1 -1
  25. package/dist/adapters/global.js.map +1 -1
  26. package/dist/audio/AudioManager.d.ts +2 -2
  27. package/dist/audio/AudioManager.d.ts.map +1 -1
  28. package/dist/audio/AudioManager.js +2 -2
  29. package/dist/audio/AudioManager.js.map +1 -1
  30. package/dist/components/camera/Camera3DControls.d.ts +1 -1
  31. package/dist/components/camera/Camera3DControls.d.ts.map +1 -1
  32. package/dist/components/camera/Camera3DControls.js +4 -4
  33. package/dist/components/camera/Camera3DControls.js.map +1 -1
  34. package/dist/components/renderers/model/ModelRenderer.d.ts +2 -2
  35. package/dist/components/renderers/model/ModelRenderer.d.ts.map +1 -1
  36. package/dist/components/renderers/model/ModelRenderer.js +2 -2
  37. package/dist/components/renderers/model/ModelRenderer.js.map +1 -1
  38. package/dist/components/renderers/sprite/SpriteRenderer.class.d.ts +2 -2
  39. package/dist/components/renderers/sprite/SpriteRenderer.class.d.ts.map +1 -1
  40. package/dist/components/renderers/sprite/SpriteRenderer.class.js +2 -2
  41. package/dist/components/renderers/sprite/SpriteRenderer.class.js.map +1 -1
  42. package/dist/components/renderers/text/TextRenderer.class.d.ts +2 -2
  43. package/dist/components/renderers/text/TextRenderer.class.d.ts.map +1 -1
  44. package/dist/components/renderers/text/TextRenderer.class.js +3 -3
  45. package/dist/components/renderers/text/TextRenderer.class.js.map +1 -1
  46. package/dist/components/renderers/tiled/TileMapRenderer.d.ts +2 -2
  47. package/dist/components/renderers/tiled/TileMapRenderer.d.ts.map +1 -1
  48. package/dist/components/renderers/tiled/TileMapRenderer.js +2 -2
  49. package/dist/components/renderers/tiled/TileMapRenderer.js.map +1 -1
  50. package/dist/components/renderers/tiled/TileObject.d.ts +1 -1
  51. package/dist/components/renderers/tiled/TileObject.d.ts.map +1 -1
  52. package/dist/components/renderers/tiled/TileObject.js +4 -4
  53. package/dist/components/renderers/tiled/TileObject.js.map +1 -1
  54. package/dist/components/script/Behavior.d.ts +4 -3
  55. package/dist/components/script/Behavior.d.ts.map +1 -1
  56. package/dist/components/script/Behavior.js +0 -1
  57. package/dist/components/script/Behavior.js.map +1 -1
  58. package/dist/components/script/BehaviorInitializer.d.ts +5 -4
  59. package/dist/components/script/BehaviorInitializer.d.ts.map +1 -1
  60. package/dist/components/script/BehaviorInitializer.js +1 -2
  61. package/dist/components/script/BehaviorInitializer.js.map +1 -1
  62. package/dist/components/types.d.ts +1 -1
  63. package/dist/components/types.d.ts.map +1 -1
  64. package/dist/index.d.ts +2 -0
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +2 -0
  67. package/dist/index.js.map +1 -1
  68. package/dist/systems/{Scene.d.ts → SceneManager.d.ts} +8 -8
  69. package/dist/systems/SceneManager.d.ts.map +1 -0
  70. package/dist/systems/{Scene.js → SceneManager.js} +4 -4
  71. package/dist/systems/SceneManager.js.map +1 -0
  72. package/dist/systems/{GameInstance.d.ts → World.d.ts} +13 -8
  73. package/dist/systems/World.d.ts.map +1 -0
  74. package/dist/systems/{GameInstance.js → World.js} +11 -9
  75. package/dist/systems/World.js.map +1 -0
  76. package/dist/systems/generators/IntegerIncrement.d.ts +6 -0
  77. package/dist/systems/generators/IntegerIncrement.d.ts.map +1 -0
  78. package/dist/systems/generators/IntegerIncrement.js +10 -0
  79. package/dist/systems/generators/IntegerIncrement.js.map +1 -0
  80. package/dist/systems/generators/PersistentIdIncrement.d.ts +8 -0
  81. package/dist/systems/generators/PersistentIdIncrement.d.ts.map +1 -0
  82. package/dist/systems/generators/PersistentIdIncrement.js +23 -0
  83. package/dist/systems/generators/PersistentIdIncrement.js.map +1 -0
  84. package/dist/systems/index.d.ts +4 -2
  85. package/dist/systems/index.d.ts.map +1 -1
  86. package/dist/systems/index.js +4 -2
  87. package/dist/systems/index.js.map +1 -1
  88. package/dist/systems/rendering/ThreeRenderer.d.ts +3 -3
  89. package/dist/systems/rendering/ThreeRenderer.d.ts.map +1 -1
  90. package/dist/systems/rendering/ThreeRenderer.js.map +1 -1
  91. package/dist/{utils/types.d.ts → types.d.ts} +1 -0
  92. package/dist/types.d.ts.map +1 -0
  93. package/dist/types.js.map +1 -0
  94. package/dist/ui/UINode.d.ts +3 -2
  95. package/dist/ui/UINode.d.ts.map +1 -1
  96. package/dist/ui/UINode.js +6 -6
  97. package/dist/ui/UINode.js.map +1 -1
  98. package/dist/ui/UIRenderer.d.ts +6 -6
  99. package/dist/ui/UIRenderer.d.ts.map +1 -1
  100. package/dist/ui/UIRenderer.js +16 -17
  101. package/dist/ui/UIRenderer.js.map +1 -1
  102. package/dist/ui/UISprite.d.ts +3 -2
  103. package/dist/ui/UISprite.d.ts.map +1 -1
  104. package/dist/ui/UISprite.js +2 -3
  105. package/dist/ui/UISprite.js.map +1 -1
  106. package/dist/ui/UIText.d.ts +4 -3
  107. package/dist/ui/UIText.d.ts.map +1 -1
  108. package/dist/ui/UIText.js.map +1 -1
  109. package/dist/ui/common.d.ts +2 -0
  110. package/dist/ui/common.d.ts.map +1 -0
  111. package/dist/ui/common.js +2 -0
  112. package/dist/ui/common.js.map +1 -0
  113. package/dist/utils/createViewHelper.d.ts +1 -1
  114. package/dist/utils/createViewHelper.d.ts.map +1 -1
  115. package/dist/utils/createViewHelper.js +4 -4
  116. package/dist/utils/createViewHelper.js.map +1 -1
  117. package/package.json +5 -3
  118. package/dist/systems/GameInstance.d.ts.map +0 -1
  119. package/dist/systems/GameInstance.js.map +0 -1
  120. package/dist/systems/Scene.d.ts.map +0 -1
  121. package/dist/systems/Scene.js.map +0 -1
  122. package/dist/utils/types.d.ts.map +0 -1
  123. package/dist/utils/types.js.map +0 -1
  124. /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
- - [GameInstance](./docs/systems/game-instance.md) — top-level orchestrator that ties the renderer, scene,
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
- - [Scene](./docs/systems/scene.md) — the ECS world manager that owns the actor tree and drives
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 scene = new Systems.SceneEngine();
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.GameInstance(renderer, {
72
+ const game = new Systems.World(renderer, {
73
73
  enableOnExit: true,
74
- scene
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 = gameInstance.createActor("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 = gameInstance.createActor("Weapon", {
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.gameInstance.input.isKeyDown("ArrowUp")) {
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(gameInstance, { name: "player" })
152
- .registerComponent(ModelRenderer, { path: "models/Player.glb" })
153
- .registerComponent(PlayerBehavior, { speed: 0.5 });
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 } = gameInstance;
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.gameInstance.input
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.fromGameInstance(gameInstance);
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
- gameInstance.audio.observe(bg);
227
- gameInstance.audio.volume = 0.5;
226
+ world.audio.observe(bg);
227
+ world.audio.volume = 0.5;
228
228
  ```
229
229
 
230
230
  </details>
@@ -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, ...args: any[]) => Component;
8
- type RequiresOptions<T extends ComponentConstructor> = T extends new (actor: Actor, options: infer O, ...args: any[]) => any ? undefined extends O ? false : true : false;
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
- gameInstance: GameInstance;
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
- threeObject: THREE.Group<THREE.Object3DEventMap>;
25
- constructor(gameInstance: GameInstance<any>, options: ActorOptions);
26
- registerComponent<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;
27
- registerComponentAndGet<T extends ComponentConstructor>(componentClass: T, ...args: RequiresOptions<T> extends true ? [options: ConstructorParameters<T>[1]] : [options?: ConstructorParameters<T>[1]]): InstanceType<T>;
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
- addBehavior<T extends new (...args: any) => Behavior>(behaviorClass: T, properties?: ConstructorParameters<T>[0]): Behavior<Record<string, import("../components/script/Behavior.ts").BehaviorPropertiesValue>>;
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":"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"}
1
+ {"version":3,"file":"Actor.d.ts","sourceRoot":"","sources":["../../src/actor/Actor.ts"],"names":[],"mappings":"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"}
@@ -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
- gameInstance;
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
- threeObject = new THREE.Group();
17
- constructor(gameInstance, options) {
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 && parent.pendingForDestruction) {
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.gameInstance = gameInstance;
32
+ this.world = world;
24
33
  this.name = name;
25
34
  this.parent = parent;
26
- this.threeObject.visible = visible;
27
- this.threeObject.name = this.name;
28
- this.threeObject.userData.isActor = true;
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.threeObject.layers.enable(layer);
33
- this.gameInstance.scene.getSource().layers.enable(layer);
41
+ this.object3D.layers.enable(layer);
42
+ this.world.sceneManager.getSource().layers.enable(layer);
34
43
  }
35
44
  }
36
- this.transform = new Transform(this.threeObject);
45
+ this.transform = new Transform(this.object3D);
37
46
  if (parent) {
38
47
  parent.add(this);
39
- parent.threeObject.add(this.threeObject);
40
- this.threeObject.updateMatrixWorld(false);
48
+ parent.object3D.add(this.object3D);
49
+ this.object3D.updateMatrixWorld(false);
41
50
  }
42
51
  else {
43
- this.gameInstance.scene.tree.add(this);
52
+ this.world.sceneManager.tree.add(this);
44
53
  }
45
54
  }
46
- registerComponent(componentClass, ...args) {
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
- registerComponentAndGet(componentClass, ...args) {
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.gameInstance.scene.tree.remove(this);
125
+ this.world.sceneManager.tree.remove(this);
80
126
  }
81
127
  else {
82
- this.parent.threeObject.remove(this.threeObject);
128
+ this.parent.object3D.remove(this.object3D);
83
129
  this.parent.remove(this);
84
130
  }
85
- this.threeObject.clear();
131
+ this.object3D.traverse((child) => Actor.disposeObject3D(child));
132
+ this.object3D.clear();
86
133
  }
87
- markDestructionPending() {
88
- this.pendingForDestruction = true;
89
- this.destroyAllActors();
90
- }
91
- addBehavior(behaviorClass, properties = Object.create(null)) {
92
- const behavior = new behaviorClass(this);
93
- for (const [propertyName, value] of Object.entries(properties)) {
94
- behavior.setProperty(propertyName, value);
95
- }
96
- if (this.awoken) {
97
- // @ts-ignore
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
- *getBehaviors(behaviorClass) {
117
- for (const behaviorName in this.behaviors) {
118
- if (!Object.hasOwn(this.behaviors, behaviorName)) {
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.gameInstance.scene.tree : this.parent;
163
+ const oldSiblings = (this.parent === null) ? this.world.sceneManager.tree : this.parent;
140
164
  oldSiblings.remove(this);
141
- this.threeObject.parent?.remove(this.threeObject);
165
+ this.object3D.parent?.remove(this.object3D);
142
166
  this.parent = newParent;
143
167
  const siblings = (newParent === null) ?
144
- this.gameInstance.scene.tree :
168
+ this.world.sceneManager.tree :
145
169
  newParent;
146
170
  siblings.add(this);
147
171
  const threeParent = (newParent === null) ?
148
- this.gameInstance.scene.getSource() :
149
- newParent.threeObject;
150
- threeParent.add(this.threeObject);
172
+ this.world.sceneManager.getSource() :
173
+ newParent.object3D;
174
+ threeParent.add(this.object3D);
151
175
  if (keepLocal) {
152
- this.threeObject.updateMatrixWorld(false);
176
+ this.object3D.updateMatrixWorld(false);
153
177
  }
154
178
  else {
155
179
  this.transform.setGlobalMatrix(Transform.Matrix);
@@ -1 +1 @@
1
- {"version":3,"file":"Actor.js","sourceRoot":"","sources":["../../src/actor/Actor.ts"],"names":[],"mappings":"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"}
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,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AAOvF,SAAS,uBAAuB,CAAC,SAAoB;IACnD,OAAO,uBAAuB,IAAI,SAAS,IAAK,SAAiB,CAAC,qBAAqB,KAAK,IAAI,CAAC;AACnG,CAAC;AAkBD,MAAM,OAAO,KAEX,SAAQ,SAAmB;IAC3B,MAAM,CAAC,EAAE,GAAG,IAAI,gBAAgB,EAAE,CAAC;IACnC,MAAM,CAAC,YAAY,GAAG,IAAI,qBAAqB,EAAE,CAAC;IAElD,KAAK,CAAuB;IAE5B,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;IACrB,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;IACzC,IAAI,CAAS;IACb,MAAM,GAAG,KAAK,CAAC;IACf,MAAM,GAA2B,IAAI,CAAC;IACtC,UAAU,GAAgB,EAAE,CAAC;IAC7B,SAAS,GAA8C,EAAE,CAAC;IAC1D,SAAS,CAAY;IACrB,qBAAqB,GAAG,KAAK,CAAC;IAE9B,QAAQ,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;IAE7B,YACE,KAA2B,EAC3B,OAA+B;QAE/B,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,GAAG,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;QAE/D,IACE,MAAM,KAAK,IAAI;YACf,MAAM,CAAC,qBAAqB,EAC5B,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QACnF,CAAC;QAED,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QAErB,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;QAChC,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,GAAG,IAAI,CAAC;QAEtC,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACtD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBACnC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAED,IAAI,CAAC,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE9C,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YACjB,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnC,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;aACI,CAAC;YACJ,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,YAAY,CACV,cAAiB,EACjB,GAAG,IAEyF;QAE5F,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;QACjC,MAAM,SAAS,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEpD,QAAQ,EAAE,CAAC,SAA4B,CAAC,CAAC;QACzC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;QACtB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,kBAAkB,CAChB,cAAiB,EACjB,GAAG,IAEwC;QAE3C,MAAM,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;QACvB,MAAM,SAAS,GAAG,IAAI,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEpD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;QACtB,CAAC;QAED,OAAO,SAA4B,CAAC;IACtC,CAAC;IAID,YAAY,CAAC,eAAuD;QAClE,IAAI,OAAO,eAAe,KAAK,QAAQ,EAAE,CAAC;YACxC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACnC,IAAI,IAAI,CAAC,QAAQ,KAAK,eAAe,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxE,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;YAED,OAAO,IAAI,CAAC;QACd,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACnC,IAAI,IAAI,YAAY,eAAe,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtE,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,CAAE,aAAa,CACb,cAAyC;QAEzC,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACnC,IAAI,IAAI,YAAY,cAAc,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrE,MAAM,IAAS,CAAC;YAClB,CAAC;QACH,CAAC;IACH,CAAC;IAED,WAAW,CACT,GAAG,OAAyB;QAE5B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;QAE9B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,cAAc,CACZ,GAAG,OAAyB;QAE5B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC7B,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK;QACH,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,CACJ,SAAiB;QAEjB,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAChC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IAEQ,QAAQ;QACf,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;IACxD,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACpC,CAAC;IAED,OAAO;QACL,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACrD,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QACjC,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC5C,CAAC;aACI,CAAC;YACJ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3C,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC3B,CAAC;QAED,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,CAAC;QAChE,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAED,MAAM,CAAC,eAAe,CACpB,MAAsB;QAEtB,IAAI,UAAU,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,YAAY,KAAK,CAAC,cAAc,EAAE,CAAC;YAC5E,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC5B,CAAC;QAED,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;gBAC9C,CAAC,CAAC,MAAM,CAAC,QAAQ;gBACjB,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAEtB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,IAAI,QAAQ,YAAY,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACvC,QAAQ,CAAC,OAAO,EAAE,CAAC;gBACrB,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,sBAAsB;QACpB,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,gBAAgB,EAAE,CAAC;IAC1B,CAAC;IAED,SAAS,CACP,SAA0B,EAC1B,SAAS,GAAG,KAAK;QAEjB,IAAI,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,SAAS,KAAK,IAAI,IAAI,SAAS,CAAC,qBAAqB,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QAED,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QACxF,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE5C,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC;QAExB,MAAM,QAAQ,GAAG,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC;YACrC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAC9B,SAAS,CAAC;QACZ,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,WAAW,GAAG,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,CAAC;YACxC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC;YACrC,SAAS,CAAC,QAAQ,CAAC;QACrB,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAE/B,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACzC,CAAC;aACI,CAAC;YACJ,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACnD,CAAC;IACH,CAAC"}
@@ -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
- protected static Id: number;
14
- static generateNextId(): number;
15
- static clearId(): void;
16
+ static Id: IntegerIncrement;
17
+ static PersistentId: PersistentIdIncrement;
16
18
  id: number;
17
- actor: Actor;
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;IACpC,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,iBAAiB,CAAC;CAC7B;AAED,MAAM,MAAM,oBAAoB,GAAG;IACjC,mBAAmB,EAAE,EAAE,CAAC;CACzB,CAAC;AAEF,qBAAa,cAAe,SAAQ,YAAY,CAAC,oBAAoB,CAAE,YAAW,SAAS;;IACzF,SAAS,CAAC,MAAM,CAAC,EAAE,SAAK;IAExB,MAAM,CAAC,cAAc;IAIrB,MAAM,CAAC,OAAO;IAId,EAAE,SAAmC;IACrC,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,EAAE,iBAAiB,CAAC;IAE5B,qBAAqB,UAAS;gBAG5B,OAAO,EAAE,qBAAqB;IA0BhC,WAAW;IAIX,OAAO;CAWR"}
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 = 0;
8
- static generateNextId() {
9
- return this.Id++;
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.gameInstance.scene.componentsToBeStarted.push(this);
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.gameInstance.scene.componentsToBeStarted.indexOf(this);
46
+ const startIndex = this.actor.world.sceneManager.componentsToBeStarted.indexOf(this);
43
47
  if (startIndex !== -1) {
44
- this.actor.gameInstance.scene.componentsToBeStarted.splice(startIndex, 1);
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;AAe7D,MAAM,OAAO,cAAe,SAAQ,YAAkC;IAC1D,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;IAExB,MAAM,CAAC,cAAc;QACnB,OAAO,IAAI,CAAC,EAAE,EAAE,CAAC;IACnB,CAAC;IAED,MAAM,CAAC,OAAO;QACZ,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IACd,CAAC;IAED,EAAE,GAAG,cAAc,CAAC,cAAc,EAAE,CAAC;IACrC,KAAK,CAAQ;IACb,QAAQ,CAAoB;IAE5B,qBAAqB,GAAG,KAAK,CAAC;IAE9B,YACE,OAA8B;QAE9B,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,YAAY,CAAC,KAAK,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,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;IAED,WAAW;QACT,OAAO,IAAI,CAAC,qBAAqB,CAAC;IACpC,CAAC;IAED,OAAO;QACL,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACrF,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,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
+ {"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