bg2e-js 2.3.12 → 2.3.13
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 +350 -326
- package/dist/bg2e-js.js.map +1 -1
- package/package.json +56 -56
- package/src/app/AppController.ts +39 -39
- package/src/app/Bg2KeyboardEvent.ts +54 -54
- package/src/app/Bg2MouseEvent.ts +82 -82
- package/src/app/Bg2TouchEvent.ts +18 -18
- package/src/app/Canvas.ts +108 -108
- package/src/app/EventBase.ts +10 -10
- package/src/app/MainLoop.ts +273 -273
- package/src/app/index.ts +24 -24
- package/src/base/Color.ts +134 -134
- package/src/base/Environment.ts +183 -183
- package/src/base/Light.ts +192 -192
- package/src/base/Material.ts +620 -620
- package/src/base/PolyList.ts +365 -365
- package/src/base/Texture.ts +620 -620
- package/src/base/index.ts +81 -81
- package/src/db/Bg2LoaderPlugin.ts +143 -143
- package/src/db/DBPluginApi.ts +48 -48
- package/src/db/Loader.ts +116 -116
- package/src/db/LoaderPlugin.ts +34 -34
- package/src/db/MtlParser.ts +7 -7
- package/src/db/ObjLoaderPlugin.ts +54 -54
- package/src/db/ObjParser.ts +252 -252
- package/src/db/ObjWriterPlugin.ts +18 -18
- package/src/db/VitscnjLoaderPlugin.ts +112 -112
- package/src/db/Writer.ts +52 -52
- package/src/db/WriterPlugin.ts +22 -22
- package/src/db/index.ts +44 -44
- package/src/debug/DebugRenderer.ts +173 -173
- package/src/debug/WebGLTextureViewer.ts +75 -75
- package/src/debug/index.ts +6 -6
- package/src/index.html +11 -11
- package/src/index.ts +33 -33
- package/src/manipulation/SelectionBuffer.ts +81 -81
- package/src/manipulation/SelectionHighlight.ts +105 -84
- package/src/manipulation/SelectionIdAssignVisitor.ts +96 -96
- package/src/manipulation/SelectionManager.ts +196 -196
- package/src/manipulation/SelectionMode.ts +6 -6
- package/src/math/Mat3.ts +259 -259
- package/src/math/Mat4.ts +710 -710
- package/src/math/MatrixStrategy.ts +25 -25
- package/src/math/Quat.ts +65 -65
- package/src/math/Vec.ts +753 -753
- package/src/math/constants.ts +46 -46
- package/src/math/functions.ts +103 -103
- package/src/math/index.ts +74 -74
- package/src/phsics/joint.ts +137 -137
- package/src/primitives/arrow.ts +57 -57
- package/src/primitives/cone.ts +138 -138
- package/src/primitives/cube.ts +60 -60
- package/src/primitives/cylinder.ts +216 -216
- package/src/primitives/index.ts +13 -13
- package/src/primitives/plane.ts +31 -31
- package/src/primitives/sphere.ts +809 -809
- package/src/react/useBg2e.ts +69 -69
- package/src/render/BRDFIntegrationMap.ts +4 -4
- package/src/render/Environment.ts +135 -135
- package/src/render/FrameBuffer.ts +35 -35
- package/src/render/MaterialRenderer.ts +34 -34
- package/src/render/Pipeline.ts +108 -108
- package/src/render/PolyListRenderer.ts +47 -47
- package/src/render/RenderBuffer.ts +197 -197
- package/src/render/RenderQueue.ts +198 -198
- package/src/render/RenderState.ts +116 -116
- package/src/render/Renderer.ts +248 -248
- package/src/render/SceneAppController.ts +250 -250
- package/src/render/SceneRenderer.ts +387 -387
- package/src/render/Shader.ts +32 -32
- package/src/render/ShadowRenderer.ts +176 -176
- package/src/render/SkyCube.ts +105 -105
- package/src/render/SkySphere.ts +117 -117
- package/src/render/TextureMergerRenderer.ts +70 -70
- package/src/render/TextureRenderer.ts +34 -34
- package/src/render/index.ts +67 -67
- package/src/render/webgl/FrameBuffer.ts +9 -9
- package/src/render/webgl/MaterialRenderer.ts +112 -112
- package/src/render/webgl/Pipeline.ts +88 -88
- package/src/render/webgl/PolyListRenderer.ts +260 -260
- package/src/render/webgl/RenderBuffer.ts +226 -226
- package/src/render/webgl/Renderer.ts +262 -262
- package/src/render/webgl/SceneRenderer.ts +67 -67
- package/src/render/webgl/ShaderProgram.ts +424 -424
- package/src/render/webgl/ShadowRenderer.ts +6 -6
- package/src/render/webgl/SkyCube.ts +15 -15
- package/src/render/webgl/SkySphere.ts +15 -15
- package/src/render/webgl/State.ts +152 -152
- package/src/render/webgl/TextureRenderer.ts +167 -167
- package/src/render/webgl/VertexBuffer.ts +137 -137
- package/src/render/webgl/index.ts +35 -35
- package/src/scene/Camera.ts +458 -458
- package/src/scene/Chain.ts +44 -44
- package/src/scene/ChainJoint.ts +58 -58
- package/src/scene/Component.ts +177 -177
- package/src/scene/ComponentMap.ts +106 -106
- package/src/scene/Drawable.ts +154 -154
- package/src/scene/EnvironmentComponent.ts +141 -141
- package/src/scene/FindNodeVisitor.ts +59 -59
- package/src/scene/LightComponent.ts +154 -154
- package/src/scene/MatrixState.ts +46 -46
- package/src/scene/Node.ts +328 -328
- package/src/scene/NodeVisitor.ts +15 -15
- package/src/scene/OrbitCameraController.ts +450 -450
- package/src/scene/SmoothOrbitCameraController.ts +99 -99
- package/src/scene/Transform.ts +73 -73
- package/src/scene/index.ts +60 -60
- package/src/shaders/BasicDiffuseColorShader.ts +111 -111
- package/src/shaders/BasicPBRLightShader.ts +276 -276
- package/src/shaders/DebugRenderShader.ts +97 -97
- package/src/shaders/DepthRenderShader.ts +127 -127
- package/src/shaders/IrradianceMapCubeShader.ts +115 -115
- package/src/shaders/PBRLightIBLShader.ts +486 -486
- package/src/shaders/PickSelectionShader.ts +101 -101
- package/src/shaders/PresentDebugFramebufferShader.ts +118 -118
- package/src/shaders/PresentTextureShader.ts +99 -99
- package/src/shaders/SelectionHighlightShader.ts +143 -127
- package/src/shaders/ShaderFunction.ts +318 -318
- package/src/shaders/SkyCubeShader.ts +93 -93
- package/src/shaders/SkySphereShader.ts +102 -102
- package/src/shaders/SpecularMapCubeShader.ts +164 -164
- package/src/shaders/TextureMergerShader.ts +171 -171
- package/src/shaders/index.ts +36 -36
- package/src/shaders/webgl/color_correction.glsl +47 -47
- package/src/shaders/webgl/constants.glsl +6 -6
- package/src/shaders/webgl/index.ts +70 -70
- package/src/shaders/webgl/normal_map.glsl +9 -9
- package/src/shaders/webgl/pbr.glsl +173 -173
- package/src/shaders/webgl/uniforms.glsl +91 -91
- package/src/shaders/webgl_shader_lib.ts +213 -213
- package/src/tools/BinaryResourceProvider.ts +14 -14
- package/src/tools/ImageResourceProvider.ts +66 -66
- package/src/tools/MaterialModifier.ts +446 -446
- package/src/tools/Resource.ts +203 -203
- package/src/tools/ResourceProvider.ts +69 -69
- package/src/tools/TextResourceProvider.ts +24 -24
- package/src/tools/TextureCache.ts +51 -51
- package/src/tools/TextureResourceDatabase.ts +100 -100
- package/src/tools/UserAgent.ts +362 -362
- package/src/tools/VideoResourceProvider.ts +50 -50
- package/src/tools/WriteStrategy.ts +22 -22
- package/src/tools/base64.ts +11 -11
- package/src/tools/crypto.ts +19 -19
- package/src/tools/endiantess.ts +13 -13
- package/src/tools/image.ts +18 -18
- package/src/tools/index.ts +41 -41
- package/src/tools/processType.ts +39 -39
- package/src/vite-env.d.ts +12 -12
|
@@ -1,250 +1,250 @@
|
|
|
1
|
-
import AppController from "../app/AppController";
|
|
2
|
-
import SelectionHighlight from "../manipulation/SelectionHighlight";
|
|
3
|
-
import SelectionManager from "../manipulation/SelectionManager";
|
|
4
|
-
import { registerComponents } from "../scene";
|
|
5
|
-
import Camera from "../scene/Camera";
|
|
6
|
-
import DebugRenderer from "../debug/DebugRenderer";
|
|
7
|
-
import Vec from "../math/Vec";
|
|
8
|
-
import Node from "../scene/Node";
|
|
9
|
-
import type SceneRenderer from "./SceneRenderer";
|
|
10
|
-
import type Environment from "./Environment";
|
|
11
|
-
import Bg2KeyboardEvent from "../app/Bg2KeyboardEvent";
|
|
12
|
-
import Bg2MouseEvent from "../app/Bg2MouseEvent";
|
|
13
|
-
import Bg2TouchEvent from "../app/Bg2TouchEvent";
|
|
14
|
-
|
|
15
|
-
export default class SceneAppController extends AppController {
|
|
16
|
-
protected _sceneRoot: Node | null = null;
|
|
17
|
-
protected _sceneRenderer: SceneRenderer | null = null;
|
|
18
|
-
protected _environment: Environment | null = null;
|
|
19
|
-
protected _selectionManager: SelectionManager | null = null;
|
|
20
|
-
protected _selectionHighlight: SelectionHighlight | null = null;
|
|
21
|
-
protected _updateOnInputEvents: boolean | undefined;
|
|
22
|
-
protected _debugRenderer: DebugRenderer | null = null;
|
|
23
|
-
protected _updateInputEventsFrameCount: number = 60;
|
|
24
|
-
|
|
25
|
-
get sceneRoot(): Node | null {
|
|
26
|
-
return this._sceneRoot;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
get sceneRenderer(): SceneRenderer | null {
|
|
30
|
-
return this._sceneRenderer;
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
get environment(): Environment | null {
|
|
34
|
-
return this._environment;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
get selectionManager(): SelectionManager | null {
|
|
38
|
-
return this._selectionManager;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
get selectionHighlight(): SelectionHighlight | null {
|
|
42
|
-
return this._selectionHighlight;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
get selectionManagerEnabled(): boolean {
|
|
46
|
-
return true;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
get selectionHighlightEnabled(): boolean {
|
|
50
|
-
return true;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
get updateOnInputEvents(): boolean {
|
|
54
|
-
return this._updateOnInputEvents ?? true;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
set updateOnInputEvents(update: boolean) {
|
|
58
|
-
this._updateOnInputEvents = update;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
get updateInputEventsFrameCount(): number {
|
|
62
|
-
return this._updateInputEventsFrameCount;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
set updateInputEventsFrameCount(count: number) {
|
|
66
|
-
this._updateInputEventsFrameCount = count;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
async loadScene(): Promise<Node> {
|
|
70
|
-
return new Node("Scene Root");
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
async loadEnvironment(): Promise<Environment | null> {
|
|
74
|
-
return null;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
async registerLoaders(): Promise<void> {
|
|
78
|
-
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
async loadDone(): Promise<void> {
|
|
82
|
-
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
async init(): Promise<void> {
|
|
86
|
-
registerComponents();
|
|
87
|
-
|
|
88
|
-
await this.registerLoaders();
|
|
89
|
-
|
|
90
|
-
this._sceneRoot = await this.loadScene();
|
|
91
|
-
|
|
92
|
-
if (!this._sceneRoot) {
|
|
93
|
-
throw new Error("SceneAppController.init: Failed to load scene.");
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
this._environment = await this.loadEnvironment();
|
|
97
|
-
|
|
98
|
-
if (!this._environment) {
|
|
99
|
-
this._environment = this.renderer.factory.environment();
|
|
100
|
-
await this._environment?.load(); // Load black environment
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
this._sceneRenderer = this.renderer.factory.scene();
|
|
104
|
-
await this.sceneRenderer?.init({ shadowMapSize: new Vec(4096, 4096) });
|
|
105
|
-
if (this.environment) {
|
|
106
|
-
await this.sceneRenderer?.setEnvironment(this.environment);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
await this.sceneRenderer?.bindRenderer(this.sceneRoot!);
|
|
110
|
-
|
|
111
|
-
if (this.selectionManagerEnabled) {
|
|
112
|
-
this._selectionManager = new SelectionManager(this.renderer);
|
|
113
|
-
await this._selectionManager.init();
|
|
114
|
-
this._selectionManager.sceneRoot = this.sceneRoot;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
if (this.selectionHighlightEnabled) {
|
|
118
|
-
this._selectionHighlight = new SelectionHighlight(this.renderer);
|
|
119
|
-
await this._selectionHighlight.init();
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
this._debugRenderer = DebugRenderer.Get(this.renderer);
|
|
123
|
-
await this._debugRenderer?.init();
|
|
124
|
-
|
|
125
|
-
await this.loadDone();
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
reshape(width: number, height: number): void {
|
|
129
|
-
if (!this.sceneRoot || !this.sceneRenderer) {
|
|
130
|
-
return;
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
this.sceneRenderer.resize(this.sceneRoot,width,height);
|
|
134
|
-
this.selectionManager?.setViewportSize(width,height);
|
|
135
|
-
this.selectionHighlight?.setViewportSize(width,height);
|
|
136
|
-
this._debugRenderer?.setViewportSize(width,height);
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
async frame(delta: number): Promise<void> {
|
|
140
|
-
if (!this.sceneRoot || !this.sceneRenderer) {
|
|
141
|
-
return;
|
|
142
|
-
}
|
|
143
|
-
this._debugRenderer?.beginFrame();
|
|
144
|
-
|
|
145
|
-
await this.sceneRenderer?.frame(this.sceneRoot, delta);
|
|
146
|
-
if (this.sceneRenderer.postRedisplayFrames > 0) {
|
|
147
|
-
this.mainLoop.postRedisplay({ frames: this.sceneRenderer.postRedisplayFrames });
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
display(): void {
|
|
152
|
-
if (!this.sceneRoot || !this.sceneRenderer) {
|
|
153
|
-
return;
|
|
154
|
-
}
|
|
155
|
-
this.sceneRenderer.draw();
|
|
156
|
-
const camera = Camera.GetMain(this.sceneRoot);
|
|
157
|
-
if (camera) {
|
|
158
|
-
this.selectionHighlight && this.selectionHighlight.draw(this.sceneRoot, camera);
|
|
159
|
-
this._debugRenderer?.draw(camera);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
destroy(): void {
|
|
164
|
-
this.sceneRenderer?.destroy();
|
|
165
|
-
if (this.selectionManagerEnabled) {
|
|
166
|
-
this.selectionManager?.destroy();
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
keyDown(evt: Bg2KeyboardEvent): void {
|
|
171
|
-
this.sceneRoot && this.sceneRenderer?.keyDown(this.sceneRoot, evt);
|
|
172
|
-
if (this.updateOnInputEvents) {
|
|
173
|
-
this.mainLoop.postRedisplay({ frames: this._updateInputEventsFrameCount });
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
keyUp(evt: Bg2KeyboardEvent): void {
|
|
178
|
-
this.sceneRoot && this.sceneRenderer?.keyUp(this.sceneRoot, evt);
|
|
179
|
-
if (this.updateOnInputEvents) {
|
|
180
|
-
this.mainLoop.postRedisplay({ frames: this._updateInputEventsFrameCount });
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
mouseUp(evt: Bg2MouseEvent): void {
|
|
185
|
-
this.sceneRoot && this.sceneRenderer?.mouseUp(this.sceneRoot, evt);
|
|
186
|
-
this.selectionManager?.mouseUp(evt);
|
|
187
|
-
if (this.updateOnInputEvents) {
|
|
188
|
-
this.mainLoop.postRedisplay({ frames: this._updateInputEventsFrameCount });
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
mouseDown(evt: Bg2MouseEvent): void {
|
|
193
|
-
this.sceneRoot && this.sceneRenderer?.mouseDown(this.sceneRoot, evt);
|
|
194
|
-
this.selectionManager?.mouseDown(evt);
|
|
195
|
-
if (this.updateOnInputEvents) {
|
|
196
|
-
this.mainLoop.postRedisplay({ frames: this._updateInputEventsFrameCount });
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
mouseMove(evt: Bg2MouseEvent): void {
|
|
201
|
-
this.sceneRoot && this.sceneRenderer?.mouseMove(this.sceneRoot, evt);
|
|
202
|
-
if (this.updateOnInputEvents) {
|
|
203
|
-
this.mainLoop.postRedisplay({ frames: this._updateInputEventsFrameCount });
|
|
204
|
-
}
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
mouseOut(evt: Bg2MouseEvent): void {
|
|
208
|
-
this.sceneRoot && this.sceneRenderer?.mouseOut(this.sceneRoot, evt);
|
|
209
|
-
if (this.updateOnInputEvents) {
|
|
210
|
-
this.mainLoop.postRedisplay({ frames: this._updateInputEventsFrameCount });
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
mouseDrag(evt: Bg2MouseEvent): void {
|
|
215
|
-
this.sceneRoot && this.sceneRenderer?.mouseDrag(this.sceneRoot, evt);
|
|
216
|
-
if (this.updateOnInputEvents) {
|
|
217
|
-
this.mainLoop.postRedisplay({ frames: this._updateInputEventsFrameCount });
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
mouseWheel(evt: Bg2MouseEvent): void {
|
|
222
|
-
this.sceneRoot && this.sceneRenderer?.mouseWheel(this.sceneRoot, evt);
|
|
223
|
-
if (this.updateOnInputEvents) {
|
|
224
|
-
this.mainLoop.postRedisplay({ frames: this._updateInputEventsFrameCount });
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
touchStart(evt: Bg2TouchEvent): void {
|
|
229
|
-
this.sceneRoot && this.sceneRenderer?.touchStart(this.sceneRoot, evt);
|
|
230
|
-
this.selectionManager?.touchStart(evt);
|
|
231
|
-
if (this.updateOnInputEvents) {
|
|
232
|
-
this.mainLoop.postRedisplay({ frames: this._updateInputEventsFrameCount });
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
touchMove(evt: Bg2TouchEvent): void {
|
|
237
|
-
this.sceneRoot && this.sceneRenderer?.touchMove(this.sceneRoot, evt);
|
|
238
|
-
if (this.updateOnInputEvents) {
|
|
239
|
-
this.mainLoop.postRedisplay({ frames: this._updateInputEventsFrameCount });
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
touchEnd(evt: Bg2TouchEvent): void {
|
|
244
|
-
this.sceneRoot && this.sceneRenderer?.touchEnd(this.sceneRoot, evt);
|
|
245
|
-
this.selectionManager?.touchEnd(evt);
|
|
246
|
-
if (this.updateOnInputEvents) {
|
|
247
|
-
this.mainLoop.postRedisplay({ frames: this._updateInputEventsFrameCount });
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
}
|
|
1
|
+
import AppController from "../app/AppController";
|
|
2
|
+
import SelectionHighlight from "../manipulation/SelectionHighlight";
|
|
3
|
+
import SelectionManager from "../manipulation/SelectionManager";
|
|
4
|
+
import { registerComponents } from "../scene";
|
|
5
|
+
import Camera from "../scene/Camera";
|
|
6
|
+
import DebugRenderer from "../debug/DebugRenderer";
|
|
7
|
+
import Vec from "../math/Vec";
|
|
8
|
+
import Node from "../scene/Node";
|
|
9
|
+
import type SceneRenderer from "./SceneRenderer";
|
|
10
|
+
import type Environment from "./Environment";
|
|
11
|
+
import Bg2KeyboardEvent from "../app/Bg2KeyboardEvent";
|
|
12
|
+
import Bg2MouseEvent from "../app/Bg2MouseEvent";
|
|
13
|
+
import Bg2TouchEvent from "../app/Bg2TouchEvent";
|
|
14
|
+
|
|
15
|
+
export default class SceneAppController extends AppController {
|
|
16
|
+
protected _sceneRoot: Node | null = null;
|
|
17
|
+
protected _sceneRenderer: SceneRenderer | null = null;
|
|
18
|
+
protected _environment: Environment | null = null;
|
|
19
|
+
protected _selectionManager: SelectionManager | null = null;
|
|
20
|
+
protected _selectionHighlight: SelectionHighlight | null = null;
|
|
21
|
+
protected _updateOnInputEvents: boolean | undefined;
|
|
22
|
+
protected _debugRenderer: DebugRenderer | null = null;
|
|
23
|
+
protected _updateInputEventsFrameCount: number = 60;
|
|
24
|
+
|
|
25
|
+
get sceneRoot(): Node | null {
|
|
26
|
+
return this._sceneRoot;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
get sceneRenderer(): SceneRenderer | null {
|
|
30
|
+
return this._sceneRenderer;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
get environment(): Environment | null {
|
|
34
|
+
return this._environment;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
get selectionManager(): SelectionManager | null {
|
|
38
|
+
return this._selectionManager;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
get selectionHighlight(): SelectionHighlight | null {
|
|
42
|
+
return this._selectionHighlight;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
get selectionManagerEnabled(): boolean {
|
|
46
|
+
return true;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
get selectionHighlightEnabled(): boolean {
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
get updateOnInputEvents(): boolean {
|
|
54
|
+
return this._updateOnInputEvents ?? true;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
set updateOnInputEvents(update: boolean) {
|
|
58
|
+
this._updateOnInputEvents = update;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
get updateInputEventsFrameCount(): number {
|
|
62
|
+
return this._updateInputEventsFrameCount;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
set updateInputEventsFrameCount(count: number) {
|
|
66
|
+
this._updateInputEventsFrameCount = count;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
async loadScene(): Promise<Node> {
|
|
70
|
+
return new Node("Scene Root");
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
async loadEnvironment(): Promise<Environment | null> {
|
|
74
|
+
return null;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
async registerLoaders(): Promise<void> {
|
|
78
|
+
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
async loadDone(): Promise<void> {
|
|
82
|
+
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
async init(): Promise<void> {
|
|
86
|
+
registerComponents();
|
|
87
|
+
|
|
88
|
+
await this.registerLoaders();
|
|
89
|
+
|
|
90
|
+
this._sceneRoot = await this.loadScene();
|
|
91
|
+
|
|
92
|
+
if (!this._sceneRoot) {
|
|
93
|
+
throw new Error("SceneAppController.init: Failed to load scene.");
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
this._environment = await this.loadEnvironment();
|
|
97
|
+
|
|
98
|
+
if (!this._environment) {
|
|
99
|
+
this._environment = this.renderer.factory.environment();
|
|
100
|
+
await this._environment?.load(); // Load black environment
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
this._sceneRenderer = this.renderer.factory.scene();
|
|
104
|
+
await this.sceneRenderer?.init({ shadowMapSize: new Vec(4096, 4096) });
|
|
105
|
+
if (this.environment) {
|
|
106
|
+
await this.sceneRenderer?.setEnvironment(this.environment);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
await this.sceneRenderer?.bindRenderer(this.sceneRoot!);
|
|
110
|
+
|
|
111
|
+
if (this.selectionManagerEnabled) {
|
|
112
|
+
this._selectionManager = new SelectionManager(this.renderer);
|
|
113
|
+
await this._selectionManager.init();
|
|
114
|
+
this._selectionManager.sceneRoot = this.sceneRoot;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
if (this.selectionHighlightEnabled) {
|
|
118
|
+
this._selectionHighlight = new SelectionHighlight(this.renderer);
|
|
119
|
+
await this._selectionHighlight.init();
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
this._debugRenderer = DebugRenderer.Get(this.renderer);
|
|
123
|
+
await this._debugRenderer?.init();
|
|
124
|
+
|
|
125
|
+
await this.loadDone();
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
reshape(width: number, height: number): void {
|
|
129
|
+
if (!this.sceneRoot || !this.sceneRenderer) {
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
this.sceneRenderer.resize(this.sceneRoot,width,height);
|
|
134
|
+
this.selectionManager?.setViewportSize(width,height);
|
|
135
|
+
this.selectionHighlight?.setViewportSize(width,height);
|
|
136
|
+
this._debugRenderer?.setViewportSize(width,height);
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
async frame(delta: number): Promise<void> {
|
|
140
|
+
if (!this.sceneRoot || !this.sceneRenderer) {
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
this._debugRenderer?.beginFrame();
|
|
144
|
+
|
|
145
|
+
await this.sceneRenderer?.frame(this.sceneRoot, delta);
|
|
146
|
+
if (this.sceneRenderer.postRedisplayFrames > 0) {
|
|
147
|
+
this.mainLoop.postRedisplay({ frames: this.sceneRenderer.postRedisplayFrames });
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
display(): void {
|
|
152
|
+
if (!this.sceneRoot || !this.sceneRenderer) {
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
this.sceneRenderer.draw();
|
|
156
|
+
const camera = Camera.GetMain(this.sceneRoot);
|
|
157
|
+
if (camera) {
|
|
158
|
+
this.selectionHighlight && this.selectionHighlight.draw(this.sceneRoot, camera);
|
|
159
|
+
this._debugRenderer?.draw(camera);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
destroy(): void {
|
|
164
|
+
this.sceneRenderer?.destroy();
|
|
165
|
+
if (this.selectionManagerEnabled) {
|
|
166
|
+
this.selectionManager?.destroy();
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
keyDown(evt: Bg2KeyboardEvent): void {
|
|
171
|
+
this.sceneRoot && this.sceneRenderer?.keyDown(this.sceneRoot, evt);
|
|
172
|
+
if (this.updateOnInputEvents) {
|
|
173
|
+
this.mainLoop.postRedisplay({ frames: this._updateInputEventsFrameCount });
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
keyUp(evt: Bg2KeyboardEvent): void {
|
|
178
|
+
this.sceneRoot && this.sceneRenderer?.keyUp(this.sceneRoot, evt);
|
|
179
|
+
if (this.updateOnInputEvents) {
|
|
180
|
+
this.mainLoop.postRedisplay({ frames: this._updateInputEventsFrameCount });
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
mouseUp(evt: Bg2MouseEvent): void {
|
|
185
|
+
this.sceneRoot && this.sceneRenderer?.mouseUp(this.sceneRoot, evt);
|
|
186
|
+
this.selectionManager?.mouseUp(evt);
|
|
187
|
+
if (this.updateOnInputEvents) {
|
|
188
|
+
this.mainLoop.postRedisplay({ frames: this._updateInputEventsFrameCount });
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
mouseDown(evt: Bg2MouseEvent): void {
|
|
193
|
+
this.sceneRoot && this.sceneRenderer?.mouseDown(this.sceneRoot, evt);
|
|
194
|
+
this.selectionManager?.mouseDown(evt);
|
|
195
|
+
if (this.updateOnInputEvents) {
|
|
196
|
+
this.mainLoop.postRedisplay({ frames: this._updateInputEventsFrameCount });
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
mouseMove(evt: Bg2MouseEvent): void {
|
|
201
|
+
this.sceneRoot && this.sceneRenderer?.mouseMove(this.sceneRoot, evt);
|
|
202
|
+
if (this.updateOnInputEvents) {
|
|
203
|
+
this.mainLoop.postRedisplay({ frames: this._updateInputEventsFrameCount });
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
mouseOut(evt: Bg2MouseEvent): void {
|
|
208
|
+
this.sceneRoot && this.sceneRenderer?.mouseOut(this.sceneRoot, evt);
|
|
209
|
+
if (this.updateOnInputEvents) {
|
|
210
|
+
this.mainLoop.postRedisplay({ frames: this._updateInputEventsFrameCount });
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
mouseDrag(evt: Bg2MouseEvent): void {
|
|
215
|
+
this.sceneRoot && this.sceneRenderer?.mouseDrag(this.sceneRoot, evt);
|
|
216
|
+
if (this.updateOnInputEvents) {
|
|
217
|
+
this.mainLoop.postRedisplay({ frames: this._updateInputEventsFrameCount });
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
mouseWheel(evt: Bg2MouseEvent): void {
|
|
222
|
+
this.sceneRoot && this.sceneRenderer?.mouseWheel(this.sceneRoot, evt);
|
|
223
|
+
if (this.updateOnInputEvents) {
|
|
224
|
+
this.mainLoop.postRedisplay({ frames: this._updateInputEventsFrameCount });
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
touchStart(evt: Bg2TouchEvent): void {
|
|
229
|
+
this.sceneRoot && this.sceneRenderer?.touchStart(this.sceneRoot, evt);
|
|
230
|
+
this.selectionManager?.touchStart(evt);
|
|
231
|
+
if (this.updateOnInputEvents) {
|
|
232
|
+
this.mainLoop.postRedisplay({ frames: this._updateInputEventsFrameCount });
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
touchMove(evt: Bg2TouchEvent): void {
|
|
237
|
+
this.sceneRoot && this.sceneRenderer?.touchMove(this.sceneRoot, evt);
|
|
238
|
+
if (this.updateOnInputEvents) {
|
|
239
|
+
this.mainLoop.postRedisplay({ frames: this._updateInputEventsFrameCount });
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
touchEnd(evt: Bg2TouchEvent): void {
|
|
244
|
+
this.sceneRoot && this.sceneRenderer?.touchEnd(this.sceneRoot, evt);
|
|
245
|
+
this.selectionManager?.touchEnd(evt);
|
|
246
|
+
if (this.updateOnInputEvents) {
|
|
247
|
+
this.mainLoop.postRedisplay({ frames: this._updateInputEventsFrameCount });
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
}
|