@jolly-pixel/engine 1.3.0 → 2.1.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 (118) hide show
  1. package/README.md +19 -19
  2. package/dist/actor/Actor.d.ts +26 -15
  3. package/dist/actor/Actor.d.ts.map +1 -1
  4. package/dist/actor/Actor.js +108 -78
  5. package/dist/actor/Actor.js.map +1 -1
  6. package/dist/actor/ActorComponent.d.ts +12 -5
  7. package/dist/actor/ActorComponent.d.ts.map +1 -1
  8. package/dist/actor/ActorComponent.js +34 -11
  9. package/dist/actor/ActorComponent.js.map +1 -1
  10. package/dist/actor/ActorTree.d.ts +4 -3
  11. package/dist/actor/ActorTree.d.ts.map +1 -1
  12. package/dist/actor/ActorTree.js +10 -3
  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.js +4 -4
  31. package/dist/components/camera/Camera3DControls.js.map +1 -1
  32. package/dist/components/renderers/model/ModelRenderer.js +2 -2
  33. package/dist/components/renderers/model/ModelRenderer.js.map +1 -1
  34. package/dist/components/renderers/sprite/SpriteRenderer.class.js +2 -2
  35. package/dist/components/renderers/sprite/SpriteRenderer.class.js.map +1 -1
  36. package/dist/components/renderers/text/TextRenderer.class.js +3 -3
  37. package/dist/components/renderers/text/TextRenderer.class.js.map +1 -1
  38. package/dist/components/renderers/tiled/TileMapRenderer.js +2 -2
  39. package/dist/components/renderers/tiled/TileMapRenderer.js.map +1 -1
  40. package/dist/components/renderers/tiled/TileObject.js +4 -4
  41. package/dist/components/renderers/tiled/TileObject.js.map +1 -1
  42. package/dist/components/script/Behavior.d.ts +4 -3
  43. package/dist/components/script/Behavior.d.ts.map +1 -1
  44. package/dist/components/script/Behavior.js +0 -1
  45. package/dist/components/script/Behavior.js.map +1 -1
  46. package/dist/components/script/BehaviorInitializer.d.ts +5 -4
  47. package/dist/components/script/BehaviorInitializer.d.ts.map +1 -1
  48. package/dist/components/script/BehaviorInitializer.js +1 -2
  49. package/dist/components/script/BehaviorInitializer.js.map +1 -1
  50. package/dist/components/types.d.ts +2 -0
  51. package/dist/components/types.d.ts.map +1 -1
  52. package/dist/index.d.ts +1 -0
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +1 -0
  55. package/dist/index.js.map +1 -1
  56. package/dist/systems/SceneManager.d.ts +28 -0
  57. package/dist/systems/SceneManager.d.ts.map +1 -0
  58. package/dist/systems/{Scene.js → SceneManager.js} +61 -22
  59. package/dist/systems/SceneManager.js.map +1 -0
  60. package/dist/systems/World.d.ts +46 -0
  61. package/dist/systems/World.d.ts.map +1 -0
  62. package/dist/systems/World.js +96 -0
  63. package/dist/systems/World.js.map +1 -0
  64. package/dist/systems/generators/IntegerIncrement.d.ts +6 -0
  65. package/dist/systems/generators/IntegerIncrement.d.ts.map +1 -0
  66. package/dist/systems/generators/IntegerIncrement.js +10 -0
  67. package/dist/systems/generators/IntegerIncrement.js.map +1 -0
  68. package/dist/systems/generators/PersistentIdIncrement.d.ts +8 -0
  69. package/dist/systems/generators/PersistentIdIncrement.d.ts.map +1 -0
  70. package/dist/systems/generators/PersistentIdIncrement.js +23 -0
  71. package/dist/systems/generators/PersistentIdIncrement.js.map +1 -0
  72. package/dist/systems/index.d.ts +4 -2
  73. package/dist/systems/index.d.ts.map +1 -1
  74. package/dist/systems/index.js +4 -2
  75. package/dist/systems/index.js.map +1 -1
  76. package/dist/systems/rendering/Renderer.d.ts +2 -0
  77. package/dist/systems/rendering/Renderer.d.ts.map +1 -1
  78. package/dist/systems/rendering/ThreeRenderer.d.ts +10 -6
  79. package/dist/systems/rendering/ThreeRenderer.d.ts.map +1 -1
  80. package/dist/systems/rendering/ThreeRenderer.js +64 -40
  81. package/dist/systems/rendering/ThreeRenderer.js.map +1 -1
  82. package/dist/{utils/types.d.ts → types.d.ts} +1 -0
  83. package/dist/types.d.ts.map +1 -0
  84. package/dist/types.js.map +1 -0
  85. package/dist/ui/UINode.d.ts +3 -2
  86. package/dist/ui/UINode.d.ts.map +1 -1
  87. package/dist/ui/UINode.js +6 -6
  88. package/dist/ui/UINode.js.map +1 -1
  89. package/dist/ui/UIRenderer.d.ts +6 -6
  90. package/dist/ui/UIRenderer.d.ts.map +1 -1
  91. package/dist/ui/UIRenderer.js +16 -17
  92. package/dist/ui/UIRenderer.js.map +1 -1
  93. package/dist/ui/UISprite.d.ts +3 -2
  94. package/dist/ui/UISprite.d.ts.map +1 -1
  95. package/dist/ui/UISprite.js +2 -3
  96. package/dist/ui/UISprite.js.map +1 -1
  97. package/dist/ui/UIText.d.ts +4 -3
  98. package/dist/ui/UIText.d.ts.map +1 -1
  99. package/dist/ui/UIText.js.map +1 -1
  100. package/dist/ui/common.d.ts +2 -0
  101. package/dist/ui/common.d.ts.map +1 -0
  102. package/dist/ui/common.js +2 -0
  103. package/dist/ui/common.js.map +1 -0
  104. package/dist/utils/createViewHelper.d.ts +1 -1
  105. package/dist/utils/createViewHelper.d.ts.map +1 -1
  106. package/dist/utils/createViewHelper.js +4 -4
  107. package/dist/utils/createViewHelper.js.map +1 -1
  108. package/package.json +1 -1
  109. package/dist/systems/GameInstance.d.ts +0 -34
  110. package/dist/systems/GameInstance.d.ts.map +0 -1
  111. package/dist/systems/GameInstance.js +0 -63
  112. package/dist/systems/GameInstance.js.map +0 -1
  113. package/dist/systems/Scene.d.ts +0 -30
  114. package/dist/systems/Scene.d.ts.map +0 -1
  115. package/dist/systems/Scene.js.map +0 -1
  116. package/dist/utils/types.d.ts.map +0 -1
  117. package/dist/utils/types.js.map +0 -1
  118. /package/dist/{utils/types.js → types.js} +0 -0
package/README.md CHANGED
@@ -1,4 +1,4 @@
1
- <p align="center"><h1 align="center">
1
+ <h1 align="center">
2
2
  engine
3
3
  </h1>
4
4
 
@@ -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
+ 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,40 +1,51 @@
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 = Record<string, unknown>> {
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 = Record<string, unknown>> extends ActorTree<TContext> {
17
- gameInstance: GameInstance<any, TContext>;
17
+ export declare class Actor<TContext = WorldDefaultContext> extends ActorTree<TContext> {
18
+ #private;
19
+ static Id: IntegerIncrement;
20
+ static PersistentId: PersistentIdIncrement;
21
+ world: World<any, TContext>;
22
+ id: number;
23
+ persistentId: string;
18
24
  name: string;
19
- awoken: boolean;
20
25
  parent: Actor<TContext> | null;
21
26
  components: Component[];
27
+ componentsRequiringUpdate: Component[];
22
28
  behaviors: Record<string, Behavior<any, TContext>[]>;
23
- transform: Transform;
29
+ awoken: boolean;
24
30
  pendingForDestruction: boolean;
25
- threeObject: THREE.Group<THREE.Object3DEventMap>;
26
- constructor(gameInstance: GameInstance<any, any>, options: ActorOptions<TContext>);
27
- 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;
28
- registerComponentAndGet<T extends ComponentConstructor>(componentClass: T, ...args: RequiresOptions<T> extends true ? [options: ConstructorParameters<T>[1]] : [options?: ConstructorParameters<T>[1]]): InstanceType<T>;
29
- getComponentByName<T extends ActorComponent<TContext>>(actor: Actor<TContext>, componentName: string): T;
31
+ object3D: THREE.Group<THREE.Object3DEventMap>;
32
+ transform: Transform;
33
+ constructor(world: World<any, TContext>, options: ActorOptions<TContext>);
34
+ 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;
35
+ addComponentAndGet<T extends ComponentConstructor>(componentClass: T, ...args: RequiresOptions<T> extends true ? [options: ConstructorParameters<T>[1]] : [options?: ConstructorParameters<T>[1]]): InstanceType<T>;
36
+ getComponent(typeName: string): Component | null;
37
+ getComponent<T>(componentClass: new (...args: any[]) => T): T | null;
38
+ getComponents<T extends Component>(componentClass: new (...args: any[]) => T): IterableIterator<T>;
39
+ addChildren(...objects: THREE.Object3D[]): this;
40
+ removeChildren(...objects: THREE.Object3D[]): this;
30
41
  awake(): void;
31
42
  update(deltaTime: number): void;
43
+ fixedUpdate(deltaTime: number): void;
44
+ toString(): string;
32
45
  isDestroyed(): boolean;
33
46
  destroy(): void;
47
+ static disposeObject3D(object: THREE.Object3D): void;
34
48
  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
49
  setParent(newParent: Actor<TContext>, keepLocal?: boolean): void;
39
50
  }
40
51
  export {};
@@ -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,137 +1,167 @@
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
- awoken = false;
11
18
  parent = null;
12
19
  components = [];
20
+ componentsRequiringUpdate = [];
13
21
  behaviors = {};
14
- transform;
22
+ awoken = false;
15
23
  pendingForDestruction = false;
16
- threeObject = new THREE.Group();
17
- constructor(gameInstance, options) {
24
+ object3D = new THREE.Group();
25
+ transform;
26
+ constructor(world, options) {
18
27
  super();
19
28
  const { name, parent = null, visible = true, layer } = options;
20
- if (parent !== null && parent.pendingForDestruction) {
29
+ if (parent !== null &&
30
+ parent.pendingForDestruction) {
21
31
  throw new Error("Cannot add actor to a parent that is pending for destruction.");
22
32
  }
23
- this.gameInstance = gameInstance;
33
+ this.world = world;
24
34
  this.name = name;
25
35
  this.parent = parent;
26
- this.threeObject.visible = visible;
27
- this.threeObject.name = this.name;
28
- this.threeObject.userData.isActor = true;
36
+ this.object3D.visible = visible;
37
+ this.object3D.name = this.name;
38
+ this.object3D.userData.isActor = true;
29
39
  if (layer) {
30
40
  const layers = Array.isArray(layer) ? layer : [layer];
31
41
  for (const layer of layers) {
32
- this.threeObject.layers.enable(layer);
33
- this.gameInstance.scene.getSource().layers.enable(layer);
42
+ this.object3D.layers.enable(layer);
43
+ this.world.sceneManager.getSource().layers.enable(layer);
34
44
  }
35
45
  }
36
- this.transform = new Transform(this.threeObject);
46
+ this.transform = new Transform(this.object3D);
37
47
  if (parent) {
38
48
  parent.add(this);
39
- parent.threeObject.add(this.threeObject);
40
- this.threeObject.updateMatrixWorld(false);
49
+ parent.object3D.add(this.object3D);
50
+ this.object3D.updateMatrixWorld(false);
41
51
  }
42
52
  else {
43
- this.gameInstance.scene.tree.add(this);
53
+ this.world.sceneManager.tree.add(this);
44
54
  }
55
+ this.world.sceneManager.registerActor(this);
45
56
  }
46
- registerComponent(componentClass, ...args) {
47
- const [options, callback] = args;
48
- const component = new componentClass(this, options);
49
- callback?.(component);
57
+ #initializeComponent(component) {
50
58
  if (this.awoken) {
51
59
  component.awake?.();
52
60
  }
61
+ if (("update" in component && typeof component.update === "function") ||
62
+ ("fixedUpdate" in component && typeof component.fixedUpdate === "function")) {
63
+ component.needUpdate = true;
64
+ }
65
+ }
66
+ addComponent(componentClass, ...args) {
67
+ const [options, callback] = args;
68
+ const component = new componentClass(this, options);
69
+ callback?.(component);
70
+ this.#initializeComponent(component);
53
71
  return this;
54
72
  }
55
- registerComponentAndGet(componentClass, ...args) {
73
+ addComponentAndGet(componentClass, ...args) {
56
74
  const [options] = args;
57
75
  const component = new componentClass(this, options);
58
- if (this.awoken) {
59
- component.awake?.();
60
- }
76
+ this.#initializeComponent(component);
61
77
  return component;
62
78
  }
63
- getComponentByName(actor, componentName) {
64
- const component = actor.components.find((comp) => comp.typeName === componentName);
65
- if (!component) {
66
- throw new Error(`Component with typeName "${componentName}" not found on actor "${actor.name}"`);
79
+ getComponent(typeNameOrClass) {
80
+ if (typeof typeNameOrClass === "string") {
81
+ for (const comp of this.components) {
82
+ if (comp.typeName === typeNameOrClass && !isPendingForDestruction(comp)) {
83
+ return comp;
84
+ }
85
+ }
86
+ return null;
87
+ }
88
+ for (const comp of this.components) {
89
+ if (comp instanceof typeNameOrClass && !isPendingForDestruction(comp)) {
90
+ return comp;
91
+ }
92
+ }
93
+ return null;
94
+ }
95
+ *getComponents(componentClass) {
96
+ for (const comp of this.components) {
97
+ if (comp instanceof componentClass && !isPendingForDestruction(comp)) {
98
+ yield comp;
99
+ }
67
100
  }
68
- return component;
101
+ }
102
+ addChildren(...objects) {
103
+ this.object3D.add(...objects);
104
+ return this;
105
+ }
106
+ removeChildren(...objects) {
107
+ for (const object of objects) {
108
+ this.object3D.remove(object);
109
+ Actor.disposeObject3D(object);
110
+ }
111
+ return this;
69
112
  }
70
113
  awake() {
71
114
  this.components.forEach((component) => component.awake?.());
72
115
  }
73
116
  update(deltaTime) {
74
117
  if (!this.pendingForDestruction) {
75
- this.components.forEach((component) => component.update?.(deltaTime));
118
+ this.componentsRequiringUpdate.forEach((component) => component.update?.(deltaTime));
119
+ }
120
+ }
121
+ fixedUpdate(deltaTime) {
122
+ if (!this.pendingForDestruction) {
123
+ this.componentsRequiringUpdate.forEach((component) => component.fixedUpdate?.(deltaTime));
76
124
  }
77
125
  }
126
+ toString() {
127
+ return `${this.name}:${this.id}-${this.persistentId}`;
128
+ }
78
129
  isDestroyed() {
79
130
  return this.pendingForDestruction;
80
131
  }
81
132
  destroy() {
133
+ this.world.sceneManager.unregisterActor(this);
82
134
  for (let i = this.components.length - 1; i >= 0; i--) {
83
135
  this.components[i].destroy?.();
84
136
  }
85
137
  if (this.parent === null) {
86
- this.gameInstance.scene.tree.remove(this);
138
+ this.world.sceneManager.tree.remove(this);
87
139
  }
88
140
  else {
89
- this.parent.threeObject.remove(this.threeObject);
141
+ this.parent.object3D.remove(this.object3D);
90
142
  this.parent.remove(this);
91
143
  }
92
- this.threeObject.clear();
93
- }
94
- markDestructionPending() {
95
- this.pendingForDestruction = true;
96
- this.destroyAllActors();
144
+ this.object3D.traverse((child) => Actor.disposeObject3D(child));
145
+ this.object3D.clear();
97
146
  }
98
- addBehavior(behaviorClass, properties = Object.create(null)) {
99
- const behavior = new behaviorClass(this);
100
- for (const [propertyName, value] of Object.entries(properties)) {
101
- behavior.setProperty(propertyName, value);
102
- }
103
- if (this.awoken) {
104
- // @ts-ignore
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;
147
+ static disposeObject3D(object) {
148
+ if ("geometry" in object && object.geometry instanceof THREE.BufferGeometry) {
149
+ object.geometry.dispose();
150
+ }
151
+ if ("material" in object) {
152
+ const materials = Array.isArray(object.material)
153
+ ? object.material
154
+ : [object.material];
155
+ for (const material of materials) {
156
+ if (material instanceof THREE.Material) {
157
+ material.dispose();
118
158
  }
119
159
  }
120
160
  }
121
- return null;
122
161
  }
123
- *getBehaviors(behaviorClass) {
124
- for (const behaviorName in this.behaviors) {
125
- if (!Object.hasOwn(this.behaviors, behaviorName)) {
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
- }
162
+ markDestructionPending() {
163
+ this.pendingForDestruction = true;
164
+ this.destroyAllActors();
135
165
  }
136
166
  setParent(newParent, keepLocal = false) {
137
167
  if (this.pendingForDestruction) {
@@ -143,20 +173,20 @@ export class Actor extends ActorTree {
143
173
  if (!keepLocal) {
144
174
  this.transform.getGlobalMatrix(Transform.Matrix);
145
175
  }
146
- const oldSiblings = (this.parent === null) ? this.gameInstance.scene.tree : this.parent;
176
+ const oldSiblings = (this.parent === null) ? this.world.sceneManager.tree : this.parent;
147
177
  oldSiblings.remove(this);
148
- this.threeObject.parent?.remove(this.threeObject);
178
+ this.object3D.parent?.remove(this.object3D);
149
179
  this.parent = newParent;
150
180
  const siblings = (newParent === null) ?
151
- this.gameInstance.scene.tree :
181
+ this.world.sceneManager.tree :
152
182
  newParent;
153
183
  siblings.add(this);
154
184
  const threeParent = (newParent === null) ?
155
- this.gameInstance.scene.getSource() :
156
- newParent.threeObject;
157
- threeParent.add(this.threeObject);
185
+ this.world.sceneManager.getSource() :
186
+ newParent.object3D;
187
+ threeParent.add(this.object3D);
158
188
  if (keepLocal) {
159
- this.threeObject.updateMatrixWorld(false);
189
+ this.object3D.updateMatrixWorld(false);
160
190
  }
161
191
  else {
162
192
  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":"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"}
@@ -1,23 +1,30 @@
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 = Record<string, unknown>> {
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 = Record<string, unknown>> 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;
19
+ persistentId: string;
17
20
  actor: Actor<TContext>;
18
21
  typeName: FreeComponentEnum;
19
22
  pendingForDestruction: boolean;
20
23
  constructor(options: ActorComponentOptions<TContext>);
24
+ get needUpdate(): boolean;
25
+ set needUpdate(value: boolean);
26
+ get context(): TContext;
27
+ toString(): string;
21
28
  isDestroyed(): boolean;
22
29
  destroy(): void;
23
30
  }
@@ -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,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IACvE,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,CAAC,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAE,SAAQ,YAAY,CAAC,oBAAoB,CAAE,YAAW,SAAS;;IAC7H,SAAS,CAAC,MAAM,CAAC,EAAE,SAAK;IAExB,MAAM,CAAC,cAAc;IAIrB,MAAM,CAAC,OAAO;IAId,EAAE,SAAmC;IACrC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IACvB,QAAQ,EAAE,iBAAiB,CAAC;IAE5B,qBAAqB,UAAS;gBAG5B,OAAO,EAAE,qBAAqB,CAAC,QAAQ,CAAC;IA0B1C,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;IAG5B,qBAAqB,UAAS;gBAG5B,OAAO,EAAE,qBAAqB,CAAC,QAAQ,CAAC;IAc1C,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,UAAU,CAAC,KAAK,EAAE,OAAO,EAc5B;IAED,IAAI,OAAO,IAAI,QAAQ,CAEtB;IAcQ,QAAQ,IAAI,MAAM;IAI3B,WAAW;IAIX,OAAO;CAaR"}
@@ -3,28 +3,47 @@ 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;
15
+ #needUpdate = false;
17
16
  pendingForDestruction = false;
18
17
  constructor(options) {
19
18
  super();
20
19
  this.actor = options.actor;
21
20
  this.typeName = options.typeName;
22
21
  this.actor.components.push(this);
23
- this.actor.gameInstance.scene.componentsToBeStarted.push(this);
22
+ this.actor.world.sceneManager.componentsToBeStarted.push(this);
24
23
  // Defer the initialization of signal decorators to ensure
25
24
  // that the component instance is fully constructed
26
25
  queueMicrotask(() => this.#initSignalDecorators());
27
26
  }
27
+ get needUpdate() {
28
+ return this.#needUpdate;
29
+ }
30
+ set needUpdate(value) {
31
+ this.#needUpdate = value;
32
+ if (this.#needUpdate) {
33
+ if (!this.actor.componentsRequiringUpdate.includes(this)) {
34
+ this.actor.componentsRequiringUpdate.push(this);
35
+ }
36
+ }
37
+ else {
38
+ const index = this.actor.componentsRequiringUpdate.indexOf(this);
39
+ if (index !== -1) {
40
+ this.actor.componentsRequiringUpdate.splice(index, 1);
41
+ }
42
+ }
43
+ }
44
+ get context() {
45
+ return this.actor.world.context;
46
+ }
28
47
  #initSignalDecorators() {
29
48
  const proto = Object.getPrototypeOf(this);
30
49
  const metadata = getSignalMetadata(proto);
@@ -35,13 +54,17 @@ export class ActorComponent extends EventEmitter {
35
54
  }
36
55
  this.emit("metadataInitialized");
37
56
  }
57
+ toString() {
58
+ return `${this.typeName}:${this.id}-${this.persistentId}`;
59
+ }
38
60
  isDestroyed() {
39
61
  return this.pendingForDestruction;
40
62
  }
41
63
  destroy() {
42
- const startIndex = this.actor.gameInstance.scene.componentsToBeStarted.indexOf(this);
64
+ this.needUpdate = false;
65
+ const startIndex = this.actor.world.sceneManager.componentsToBeStarted.indexOf(this);
43
66
  if (startIndex !== -1) {
44
- this.actor.gameInstance.scene.componentsToBeStarted.splice(startIndex, 1);
67
+ this.actor.world.sceneManager.componentsToBeStarted.splice(startIndex, 1);
45
68
  }
46
69
  const index = this.actor.components.indexOf(this);
47
70
  if (index !== -1) {