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/dist/bg2e-js.js +24 -8
- package/dist/bg2e-js.js.map +1 -1
- package/package.json +1 -1
- package/src/render/SceneAppController.ts +3 -0
- package/src/render/SceneRenderer.ts +17 -2
- package/src/scene/Component.ts +18 -14
- package/src/scene/Node.ts +14 -0
package/package.json
CHANGED
|
@@ -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
|
|
271
|
+
this._frameVisitor.beginFrame(delta);
|
|
257
272
|
this._frameVisitor.modelMatrix.identity();
|
|
258
273
|
|
|
259
274
|
const mainCamera = Camera.GetMain(sceneRoot);
|
package/src/scene/Component.ts
CHANGED
|
@@ -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:
|
|
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:
|
|
88
|
+
addedToNode(node: Node): void {
|
|
85
89
|
// Override in subclasses if needed
|
|
86
90
|
}
|
|
87
91
|
|
|
88
|
-
removedFromNode(node:
|
|
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:
|
|
163
|
-
keyUp(evt:
|
|
164
|
-
mouseUp(evt:
|
|
165
|
-
mouseDown(evt:
|
|
166
|
-
mouseMove(evt:
|
|
167
|
-
mouseOut(evt:
|
|
168
|
-
mouseDrag(evt:
|
|
169
|
-
mouseWheel(evt:
|
|
170
|
-
touchStart(evt:
|
|
171
|
-
touchMove(evt:
|
|
172
|
-
touchEnd(evt:
|
|
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 {
|