bg2e-js 2.3.2 → 2.3.4

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bg2e-js",
3
- "version": "2.3.2",
3
+ "version": "2.3.4",
4
4
  "description": "a graphics engine for productivity applications",
5
5
  "main": "./dist/bg2e-js.js",
6
6
  "types": "./src/index.ts",
@@ -143,6 +143,9 @@ export default class SceneAppController extends AppController {
143
143
  this._debugRenderer?.beginFrame();
144
144
 
145
145
  await this.sceneRenderer?.frame(this.sceneRoot, delta);
146
+ if (this.sceneRenderer.postRedisplayFrames > 0) {
147
+ this.mainLoop.postRedisplay({ frames: this.sceneRenderer.postRedisplayFrames });
148
+ }
146
149
  }
147
150
 
148
151
  display(): void {
@@ -25,6 +25,7 @@ export class FrameVisitor extends NodeVisitor {
25
25
  _delta: number;
26
26
  _modelMatrix: Mat4;
27
27
  _matrixStack: Mat4[];
28
+ _postRedisplayFrames: number = 0;
28
29
 
29
30
  constructor(renderQueue: RenderQueue) {
30
31
  super();
@@ -35,9 +36,17 @@ export class FrameVisitor extends NodeVisitor {
35
36
  }
36
37
 
37
38
  get delta(): number { return this._delta; }
38
- set delta(d: number) { this._delta = d; }
39
39
 
40
40
  get modelMatrix(): Mat4 { return this._modelMatrix; }
41
+
42
+ get postRedisplayFrames() : number {
43
+ return this._postRedisplayFrames;
44
+ }
45
+
46
+ beginFrame(delta: number): void {
47
+ this._delta = delta;
48
+ this._postRedisplayFrames = 0;
49
+ }
41
50
 
42
51
  visit(node: Node): void {
43
52
  this._matrixStack.push(new Mat4(this._modelMatrix));
@@ -47,6 +56,8 @@ export class FrameVisitor extends NodeVisitor {
47
56
  didVisit(node: Node): void {
48
57
  this._modelMatrix = this._matrixStack[this._matrixStack.length - 1] || Mat4.MakeIdentity();
49
58
  this._matrixStack.pop();
59
+ this._postRedisplayFrames = Math.max(this._postRedisplayFrames, node.postRedisplayFrames);
60
+ node.postRedisplayFrames = 0;
50
61
  }
51
62
  }
52
63
 
@@ -156,6 +167,10 @@ export default class SceneRenderer {
156
167
  return this._renderQueue;
157
168
  }
158
169
 
170
+ get postRedisplayFrames() : number {
171
+ return this._frameVisitor ? this._frameVisitor.postRedisplayFrames : 0;
172
+ }
173
+
159
174
  async init({ shadowMapSize = new Vec(1024, 1024) }: { shadowMapSize?: Vec | number } = {}): Promise<void> {
160
175
  if (typeof(shadowMapSize) === "number") {
161
176
  shadowMapSize = new Vec(shadowMapSize, shadowMapSize);
@@ -253,7 +268,7 @@ export default class SceneRenderer {
253
268
  this._sceneRoot = sceneRoot;
254
269
 
255
270
  this._renderQueue?.newFrame();
256
- this._frameVisitor.delta = delta;
271
+ this._frameVisitor.beginFrame(delta);
257
272
  this._frameVisitor.modelMatrix.identity();
258
273
 
259
274
  const mainCamera = Camera.GetMain(sceneRoot);
@@ -4,6 +4,10 @@ import Drawable from "./Drawable";
4
4
  import LightComponent from "./LightComponent";
5
5
  import Node from "./Node";
6
6
  import Transform from "./Transform";
7
+ import Bg2KeyboardEvent from "../app/Bg2KeyboardEvent";
8
+ import Bg2MouseEvent from "../app/Bg2MouseEvent";
9
+ import Bg2TouchEvent from "../app/Bg2TouchEvent";
10
+ import Loader from "../db/Loader";
7
11
 
8
12
  // Type definitions
9
13
  type ComponentConstructor<T extends Component = Component> = new () => T;
@@ -41,7 +45,7 @@ export const createComponent = (typeId: string): Component | null => {
41
45
  return null;
42
46
  };
43
47
 
44
- export const deserializeComponent = async (sceneData: any, loader: any): Promise<Component | null> => {
48
+ export const deserializeComponent = async (sceneData: any, loader: Loader): Promise<Component | null> => {
45
49
  const componentInstance = createComponent(sceneData.type);
46
50
  if (!componentInstance) {
47
51
  return null;
@@ -81,11 +85,11 @@ export default class Component {
81
85
  // Override in subclasses if needed
82
86
  }
83
87
 
84
- addedToNode(node: any): void {
88
+ addedToNode(node: Node): void {
85
89
  // Override in subclasses if needed
86
90
  }
87
91
 
88
- removedFromNode(node: any): void {
92
+ removedFromNode(node: Node): void {
89
93
  // Override in subclasses if needed
90
94
  }
91
95
 
@@ -159,15 +163,15 @@ export default class Component {
159
163
  // draw(renderQueue: any, modelMatrix: any): void {}
160
164
 
161
165
  // Event callbacks
162
- keyDown(evt: any): void {}
163
- keyUp(evt: any): void {}
164
- mouseUp(evt: any): void {}
165
- mouseDown(evt: any): void {}
166
- mouseMove(evt: any): void {}
167
- mouseOut(evt: any): void {}
168
- mouseDrag(evt: any): void {}
169
- mouseWheel(evt: any): void {}
170
- touchStart(evt: any): void {}
171
- touchMove(evt: any): void {}
172
- touchEnd(evt: any): void {}
166
+ keyDown(evt: Bg2KeyboardEvent): void {}
167
+ keyUp(evt: Bg2KeyboardEvent): void {}
168
+ mouseUp(evt: Bg2MouseEvent): void {}
169
+ mouseDown(evt: Bg2MouseEvent): void {}
170
+ mouseMove(evt: Bg2MouseEvent): void {}
171
+ mouseOut(evt: Bg2MouseEvent): void {}
172
+ mouseDrag(evt: Bg2MouseEvent): void {}
173
+ mouseWheel(evt: Bg2MouseEvent): void {}
174
+ touchStart(evt: Bg2TouchEvent): void {}
175
+ touchMove(evt: Bg2TouchEvent): void {}
176
+ touchEnd(evt: Bg2TouchEvent): void {}
173
177
  }
package/src/scene/Node.ts CHANGED
@@ -35,6 +35,8 @@ export default class Node {
35
35
  private _bindedRenderer?: Renderer;
36
36
  private _sceneChanged: boolean = false;
37
37
 
38
+ private _postRedisplayFrames: number = 0;
39
+
38
40
  constructor(name: string = "") {
39
41
  this._name = name;
40
42
  this._enabled = true;
@@ -217,6 +219,18 @@ export default class Node {
217
219
  }
218
220
  }
219
221
  }
222
+
223
+ // Used by components to require a redraw of the scene for a certain number of frames.
224
+ // This is needed, for example, when a component changes the material of a drawable,
225
+ // so the change is reflected inmediately in the screen, or when a component generates
226
+ // an animation that needs to be updated for a certain number of frames.
227
+ get postRedisplayFrames(): number {
228
+ return this._postRedisplayFrames;
229
+ }
230
+
231
+ set postRedisplayFrames(frames: number) {
232
+ this._postRedisplayFrames = frames;
233
+ }
220
234
 
221
235
  // Most usual components
222
236
  get transform(): Transform | undefined {