@needle-tools/engine 2.40.0-pre → 2.41.0-pre

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 (52) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/needle-engine.d.ts +269 -123
  3. package/dist/needle-engine.js +389 -389
  4. package/dist/needle-engine.js.map +4 -4
  5. package/dist/needle-engine.min.js +41 -41
  6. package/dist/needle-engine.min.js.map +4 -4
  7. package/lib/engine/engine_gizmos.d.ts +1 -0
  8. package/lib/engine/engine_gizmos.js +16 -4
  9. package/lib/engine/engine_gizmos.js.map +1 -1
  10. package/lib/engine/engine_math.d.ts +9 -6
  11. package/lib/engine/engine_math.js +9 -0
  12. package/lib/engine/engine_math.js.map +1 -1
  13. package/lib/engine/engine_physics.js +14 -6
  14. package/lib/engine/engine_physics.js.map +1 -1
  15. package/lib/engine/engine_serialization_core.js +2 -0
  16. package/lib/engine/engine_serialization_core.js.map +1 -1
  17. package/lib/engine/engine_utils.d.ts +1 -0
  18. package/lib/engine/engine_utils.js +3 -0
  19. package/lib/engine/engine_utils.js.map +1 -1
  20. package/lib/engine-components/AnimationCurve.js +20 -5
  21. package/lib/engine-components/AnimationCurve.js.map +1 -1
  22. package/lib/engine-components/Light.d.ts +2 -0
  23. package/lib/engine-components/Light.js +33 -9
  24. package/lib/engine-components/Light.js.map +1 -1
  25. package/lib/engine-components/ParticleSystem.d.ts +15 -26
  26. package/lib/engine-components/ParticleSystem.js +251 -184
  27. package/lib/engine-components/ParticleSystem.js.map +1 -1
  28. package/lib/engine-components/ParticleSystemModules.d.ts +208 -63
  29. package/lib/engine-components/ParticleSystemModules.js +640 -153
  30. package/lib/engine-components/ParticleSystemModules.js.map +1 -1
  31. package/lib/engine-components/WebXR.js +8 -3
  32. package/lib/engine-components/WebXR.js.map +1 -1
  33. package/lib/engine-components/codegen/components.d.ts +6 -0
  34. package/lib/engine-components/codegen/components.js +6 -0
  35. package/lib/engine-components/codegen/components.js.map +1 -1
  36. package/package.json +3 -1
  37. package/src/engine/codegen/register_types.js +24 -0
  38. package/src/engine/engine_gizmos.ts +19 -4
  39. package/src/engine/engine_math.ts +19 -6
  40. package/src/engine/engine_physics.ts +17 -7
  41. package/src/engine/engine_serialization_core.ts +1 -0
  42. package/src/engine/engine_utils.ts +5 -0
  43. package/src/engine-components/AnimationCurve.ts +25 -11
  44. package/src/engine-components/Light.ts +39 -8
  45. package/src/engine-components/ParticleSystem.ts +314 -194
  46. package/src/engine-components/ParticleSystemModules.ts +537 -154
  47. package/src/engine-components/WebXR.ts +11 -8
  48. package/src/engine-components/codegen/components.ts +6 -0
  49. package/src/engine/dist/engine_physics.js +0 -739
  50. package/src/engine/dist/engine_setup.js +0 -777
  51. package/src/engine-components/dist/CharacterController.js +0 -123
  52. package/src/engine-components/dist/RigidBody.js +0 -458
@@ -1,777 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- var __generator = (this && this.__generator) || function (thisArg, body) {
12
- var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
- return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
- function verb(n) { return function (v) { return step([n, v]); }; }
15
- function step(op) {
16
- if (f) throw new TypeError("Generator is already executing.");
17
- while (_) try {
18
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
- if (y = 0, t) op = [op[0] & 2, t.value];
20
- switch (op[0]) {
21
- case 0: case 1: t = op; break;
22
- case 4: _.label++; return { value: op[1], done: false };
23
- case 5: _.label++; y = op[1]; op = [0]; continue;
24
- case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
- default:
26
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
- if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
- if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
- if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
- if (t[2]) _.ops.pop();
31
- _.trys.pop(); continue;
32
- }
33
- op = body.call(thisArg, _);
34
- } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
- if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
- }
37
- };
38
- exports.__esModule = true;
39
- exports.Context = exports.registerComponent = exports.XRSessionMode = exports.FrameEvent = exports.ContextArgs = exports.build_scene_functions = void 0;
40
- var three_1 = require("three");
41
- var THREE = require("three");
42
- var engine_input_1 = require("./engine_input");
43
- var engine_physics_1 = require("./engine_physics");
44
- var engine_time_1 = require("./engine_time");
45
- var engine_networking_1 = require("./engine_networking");
46
- var engine_networking_instantiate_1 = require("./engine_networking_instantiate");
47
- var looputils = require("./engine_mainloop_utils");
48
- var utils = require("./engine_utils");
49
- var EffectComposer_js_1 = require("three/examples/jsm/postprocessing/EffectComposer.js");
50
- var RenderPass_1 = require("three/examples/jsm/postprocessing/RenderPass");
51
- var engine_networking_files_1 = require("./engine_networking_files");
52
- var engine_assetdatabase_1 = require("./engine_assetdatabase");
53
- var engine_three_utils_1 = require("./engine_three_utils");
54
- var Stats = require("three/examples/jsm/libs/stats.module");
55
- var engine_rendererdata_1 = require("./engine_rendererdata");
56
- var engine_addressables_1 = require("./engine_addressables");
57
- var engine_application_1 = require("./engine_application");
58
- var engine_lightdata_1 = require("./engine_lightdata");
59
- var engine_playerview_1 = require("./engine_playerview");
60
- var engine_gameobject_1 = require("./engine_gameobject");
61
- var debug = utils.getParam("debugSetup");
62
- var stats = utils.getParam("stats");
63
- // this is where functions that setup unity scenes will be pushed into
64
- // those will be accessed from our custom html element to load them into their context
65
- exports.build_scene_functions = {};
66
- var ContextArgs = /** @class */ (function () {
67
- function ContextArgs(domElement) {
68
- this.alias = undefined;
69
- this.renderer = undefined;
70
- this.domElement = domElement !== null && domElement !== void 0 ? domElement : document.body;
71
- }
72
- return ContextArgs;
73
- }());
74
- exports.ContextArgs = ContextArgs;
75
- var FrameEvent;
76
- (function (FrameEvent) {
77
- FrameEvent[FrameEvent["EarlyUpdate"] = 0] = "EarlyUpdate";
78
- FrameEvent[FrameEvent["Update"] = 1] = "Update";
79
- FrameEvent[FrameEvent["LateUpdate"] = 2] = "LateUpdate";
80
- FrameEvent[FrameEvent["OnBeforeRender"] = 3] = "OnBeforeRender";
81
- FrameEvent[FrameEvent["OnAfterRender"] = 4] = "OnAfterRender";
82
- FrameEvent[FrameEvent["PrePhysicsStep"] = 9] = "PrePhysicsStep";
83
- FrameEvent[FrameEvent["PostPhysicsStep"] = 10] = "PostPhysicsStep";
84
- })(FrameEvent = exports.FrameEvent || (exports.FrameEvent = {}));
85
- var XRSessionMode;
86
- (function (XRSessionMode) {
87
- XRSessionMode["ImmersiveVR"] = "immersive-vr";
88
- XRSessionMode["ImmersiveAR"] = "immersive-ar";
89
- })(XRSessionMode = exports.XRSessionMode || (exports.XRSessionMode = {}));
90
- function registerComponent(script, context) {
91
- var _a;
92
- if (!script)
93
- return;
94
- var new_scripts = (_a = context === null || context === void 0 ? void 0 : context.new_scripts) !== null && _a !== void 0 ? _a : Context.Current.new_scripts;
95
- if (!new_scripts.includes(script)) {
96
- new_scripts.push(script);
97
- }
98
- }
99
- exports.registerComponent = registerComponent;
100
- var Context = /** @class */ (function () {
101
- function Context(args) {
102
- var _this = this;
103
- this.isManagedExternally = false;
104
- this._resolutionScaleFactor = 1;
105
- this.xrSessionMode = undefined;
106
- this.composer = null;
107
- // all scripts
108
- this.scripts = [];
109
- // scripts with update event
110
- this.scripts_earlyUpdate = [];
111
- this.scripts_update = [];
112
- this.scripts_lateUpdate = [];
113
- this.scripts_onBeforeRender = [];
114
- this.scripts_onAfterRender = [];
115
- this.scripts_WithCorroutines = [];
116
- this.coroutines = {};
117
- this.post_setup_callbacks = [];
118
- this.pre_update_callbacks = [];
119
- this.pre_render_callbacks = [];
120
- this.post_render_callbacks = [];
121
- this.new_scripts = [];
122
- this.new_script_start = [];
123
- this.new_scripts_pre_setup_callbacks = [];
124
- this.new_scripts_post_setup_callbacks = [];
125
- this.mainLight = null;
126
- this._sizeChanged = false;
127
- this._isCreated = false;
128
- this._stats = stats ? Stats["default"]() : null;
129
- this._cameraStack = [];
130
- this._onBeforeRenderListeners = {};
131
- this._requireDepthTexture = false;
132
- this._requireColorTexture = false;
133
- this._isRendering = false;
134
- this.name = (args === null || args === void 0 ? void 0 : args.name) || "";
135
- this.alias = args === null || args === void 0 ? void 0 : args.alias;
136
- this.domElement = (args === null || args === void 0 ? void 0 : args.domElement) || document.body;
137
- if (args === null || args === void 0 ? void 0 : args.renderer) {
138
- this.renderer = args.renderer;
139
- this.isManagedExternally = true;
140
- }
141
- else {
142
- var useComposer = utils.getParam("postfx");
143
- this.renderer = new three_1.WebGLRenderer({ antialias: true });
144
- // some tonemapping other than "NONE" is required for adjusting exposure with EXR environments
145
- this.renderer.toneMappingExposure = 1; // range [0...inf] instead of the usual -15..15
146
- this.renderer.toneMapping = THREE.NoToneMapping; // could also set to LinearToneMapping, ACESFilmicToneMapping
147
- this.renderer.setClearColor(new THREE.Color('lightgrey'), 0);
148
- // @ts-ignore
149
- this.renderer.antialias = true;
150
- // @ts-ignore
151
- this.renderer.alpha = false;
152
- this.renderer.shadowMap.enabled = true;
153
- this.renderer.shadowMap.type = THREE.PCFSoftShadowMap;
154
- this.renderer.setSize(this.domWidth, this.domHeight);
155
- this.renderer.outputEncoding = THREE.sRGBEncoding;
156
- this.renderer.physicallyCorrectLights = true;
157
- this.composer = useComposer ? new EffectComposer_js_1.EffectComposer(this.renderer) : null;
158
- }
159
- this.scene = new THREE.Scene();
160
- this.application = new engine_application_1.Application(this);
161
- this.time = new engine_time_1.Time();
162
- this.input = new engine_input_1.Input(this);
163
- this.physics = new engine_physics_1.Physics(this);
164
- this.connection = new engine_networking_1.NetworkConnection(this);
165
- this.assets = new engine_assetdatabase_1.AssetDatabase();
166
- this.rendererData = new engine_rendererdata_1.RendererData(this);
167
- this.addressables = new engine_addressables_1.Addressables(this);
168
- this.lightmaps = new engine_lightdata_1.LightDataRegistry(this);
169
- this.players = new engine_playerview_1.PlayerViewManager(this);
170
- window.addEventListener('resize', function () { return _this._sizeChanged = true; });
171
- var ro = new ResizeObserver(function (_) { return _this._sizeChanged = true; });
172
- ro.observe(this.domElement);
173
- }
174
- Object.defineProperty(Context, "Current", {
175
- get: function () {
176
- return this._current;
177
- },
178
- set: function (context) {
179
- this._current = context;
180
- },
181
- enumerable: false,
182
- configurable: true
183
- });
184
- Object.defineProperty(Context.prototype, "resolutionScaleFactor", {
185
- get: function () { return this._resolutionScaleFactor; },
186
- /** use to scale the resolution up or down of the renderer. default is 1 */
187
- set: function (val) {
188
- if (val === this._resolutionScaleFactor)
189
- return;
190
- if (typeof val !== "number")
191
- return;
192
- if (val <= 0) {
193
- console.error("Invalid resolution scale factor", val);
194
- return;
195
- }
196
- this._resolutionScaleFactor = val;
197
- this.updateSize();
198
- },
199
- enumerable: false,
200
- configurable: true
201
- });
202
- Object.defineProperty(Context.prototype, "domWidth", {
203
- get: function () { return this.domElement.clientWidth; },
204
- enumerable: false,
205
- configurable: true
206
- });
207
- Object.defineProperty(Context.prototype, "domHeight", {
208
- get: function () { return this.domElement.clientHeight; },
209
- enumerable: false,
210
- configurable: true
211
- });
212
- Object.defineProperty(Context.prototype, "domX", {
213
- get: function () { return this.domElement.offsetLeft; },
214
- enumerable: false,
215
- configurable: true
216
- });
217
- Object.defineProperty(Context.prototype, "domY", {
218
- get: function () { return this.domElement.offsetTop; },
219
- enumerable: false,
220
- configurable: true
221
- });
222
- Object.defineProperty(Context.prototype, "isInXR", {
223
- get: function () { var _a; return ((_a = this.renderer.xr) === null || _a === void 0 ? void 0 : _a.isPresenting) || false; },
224
- enumerable: false,
225
- configurable: true
226
- });
227
- Object.defineProperty(Context.prototype, "isInVR", {
228
- get: function () { return this.xrSessionMode === XRSessionMode.ImmersiveVR; },
229
- enumerable: false,
230
- configurable: true
231
- });
232
- Object.defineProperty(Context.prototype, "isInAR", {
233
- get: function () { return this.xrSessionMode === XRSessionMode.ImmersiveAR; },
234
- enumerable: false,
235
- configurable: true
236
- });
237
- Object.defineProperty(Context.prototype, "xrSession", {
238
- get: function () { var _a; return (_a = this.renderer.xr) === null || _a === void 0 ? void 0 : _a.getSession(); },
239
- enumerable: false,
240
- configurable: true
241
- });
242
- Object.defineProperty(Context.prototype, "arOverlayElement", {
243
- get: function () {
244
- var el = this.domElement;
245
- if (typeof el.getAROverlayContainer === "function")
246
- return el.getAROverlayContainer();
247
- return this.domElement;
248
- },
249
- enumerable: false,
250
- configurable: true
251
- });
252
- Object.defineProperty(Context.prototype, "mainCamera", {
253
- get: function () {
254
- if (this.mainCameraComponent) {
255
- var cam = this.mainCameraComponent;
256
- if (!cam.cam)
257
- cam.buildCamera();
258
- return cam.cam;
259
- }
260
- return null;
261
- },
262
- enumerable: false,
263
- configurable: true
264
- });
265
- // private _requestSizeUpdate : boolean = false;
266
- Context.prototype.updateSize = function () {
267
- if (!this.isManagedExternally && !this.renderer.xr.isPresenting) {
268
- this._sizeChanged = false;
269
- var scaleFactor = this.resolutionScaleFactor;
270
- var width = this.domWidth * scaleFactor;
271
- var height = this.domHeight * scaleFactor;
272
- var camera = this.mainCamera;
273
- this.updateAspect(camera);
274
- this.renderer.setSize(width, height);
275
- this.renderer.setPixelRatio(window.devicePixelRatio);
276
- // avoid setting pixel values here since this can cause pingpong updates
277
- // e.g. when system scale is set to 125%
278
- // https://github.com/needle-tools/needle-engine-support/issues/69
279
- this.renderer.domElement.style.width = "100%";
280
- this.renderer.domElement.style.height = "100%";
281
- if (this.composer) {
282
- this.composer.setSize(width, height);
283
- this.composer.setPixelRatio(window.devicePixelRatio);
284
- }
285
- }
286
- };
287
- Context.prototype.updateAspect = function (camera) {
288
- if (!camera)
289
- return;
290
- var width = this.domWidth;
291
- var height = this.domHeight;
292
- var pa = camera.aspect;
293
- camera.aspect = width / height;
294
- if (pa !== camera.aspect)
295
- camera.updateProjectionMatrix();
296
- };
297
- Context.prototype.onCreate = function (buildScene, opts) {
298
- if (this._isCreated) {
299
- console.warn("Context already created");
300
- return null;
301
- }
302
- this._isCreated = true;
303
- return this.internalOnCreate(buildScene, opts);
304
- };
305
- Context.prototype.onDestroy = function () {
306
- var _a, _b;
307
- if (!this._isCreated)
308
- return;
309
- this._isCreated = false;
310
- engine_gameobject_1.destroy(this.scene, true);
311
- (_a = this.renderer) === null || _a === void 0 ? void 0 : _a.setAnimationLoop(null);
312
- if (!this.isManagedExternally) {
313
- (_b = this.renderer) === null || _b === void 0 ? void 0 : _b.dispose();
314
- }
315
- };
316
- Context.prototype.registerCoroutineUpdate = function (script, coroutine, evt) {
317
- if (!this.coroutines[evt])
318
- this.coroutines[evt] = [];
319
- this.coroutines[evt].push({ comp: script, main: coroutine });
320
- return coroutine;
321
- };
322
- Context.prototype.unregisterCoroutineUpdate = function (coroutine, evt) {
323
- if (!this.coroutines[evt])
324
- return;
325
- var idx = this.coroutines[evt].findIndex(function (c) { return c.main === coroutine; });
326
- if (idx >= 0)
327
- this.coroutines[evt].splice(idx, 1);
328
- };
329
- Context.prototype.stopAllCoroutinesFrom = function (script) {
330
- for (var evt in this.coroutines) {
331
- var rout = this.coroutines[evt];
332
- for (var i = rout.length - 1; i >= 0; i--) {
333
- var r = rout[i];
334
- if (r.comp === script) {
335
- rout.splice(i, 1);
336
- }
337
- }
338
- }
339
- };
340
- Context.prototype.setCurrentCamera = function (cam) {
341
- var _a;
342
- if (!cam)
343
- return;
344
- if (!cam.cam)
345
- cam.buildCamera(); // < to build camera
346
- if (!cam.cam) {
347
- console.warn("Camera component is missing camera", cam);
348
- return;
349
- }
350
- var index = this._cameraStack.indexOf(cam);
351
- if (index >= 0)
352
- this._cameraStack.splice(index, 1);
353
- this._cameraStack.push(cam);
354
- this.mainCameraComponent = cam;
355
- var camera = cam.cam;
356
- if (camera.isPerspectiveCamera)
357
- this.updateAspect(camera);
358
- (_a = this.mainCameraComponent) === null || _a === void 0 ? void 0 : _a.applyClearFlagsIfIsActiveCamera();
359
- };
360
- Context.prototype.removeCamera = function (cam) {
361
- if (!cam)
362
- return;
363
- var index = this._cameraStack.indexOf(cam);
364
- if (index >= 0)
365
- this._cameraStack.splice(index, 1);
366
- if (this.mainCameraComponent === cam) {
367
- this.mainCameraComponent = undefined;
368
- if (this._cameraStack.length > 0) {
369
- var last = this._cameraStack[this._cameraStack.length - 1];
370
- this.setCurrentCamera(last);
371
- }
372
- }
373
- };
374
- /** use this to subscribe to onBeforeRender events on threejs objects */
375
- Context.prototype.addBeforeRenderListener = function (target, callback) {
376
- var _this = this;
377
- if (!this._onBeforeRenderListeners[target.uuid]) {
378
- this._onBeforeRenderListeners[target.uuid] = [];
379
- var onBeforeRenderCallback = function (renderer, scene, camera, geometry, material, group) {
380
- var arr = _this._onBeforeRenderListeners[target.uuid];
381
- if (!arr)
382
- return;
383
- for (var i = 0; i < arr.length; i++) {
384
- var fn = arr[i];
385
- fn(renderer, scene, camera, geometry, material, group);
386
- }
387
- };
388
- target.onBeforeRender = onBeforeRenderCallback;
389
- }
390
- this._onBeforeRenderListeners[target.uuid].push(callback);
391
- };
392
- Context.prototype.removeBeforeRenderListener = function (target, callback) {
393
- if (this._onBeforeRenderListeners[target.uuid]) {
394
- var arr = this._onBeforeRenderListeners[target.uuid];
395
- var idx = arr.indexOf(callback);
396
- if (idx >= 0)
397
- arr.splice(idx, 1);
398
- }
399
- };
400
- Object.defineProperty(Context.prototype, "isRendering", {
401
- get: function () { return this._isRendering; },
402
- enumerable: false,
403
- configurable: true
404
- });
405
- Context.prototype.setRequireDepth = function (val) {
406
- this._requireDepthTexture = val;
407
- };
408
- Context.prototype.setRequireColor = function (val) {
409
- this._requireColorTexture = val;
410
- };
411
- Object.defineProperty(Context.prototype, "depthTexture", {
412
- get: function () {
413
- var _a;
414
- return ((_a = this._renderTarget) === null || _a === void 0 ? void 0 : _a.depthTexture) || null;
415
- },
416
- enumerable: false,
417
- configurable: true
418
- });
419
- Object.defineProperty(Context.prototype, "opaqueColorTexture", {
420
- get: function () {
421
- var _a;
422
- return ((_a = this._renderTarget) === null || _a === void 0 ? void 0 : _a.texture) || null;
423
- },
424
- enumerable: false,
425
- configurable: true
426
- });
427
- Context.prototype.internalOnCreate = function (buildScene, opts) {
428
- return __awaiter(this, void 0, void 0, function () {
429
- var prepare_succeeded, err_1, i, script, arr, i, renderPass;
430
- return __generator(this, function (_a) {
431
- switch (_a.label) {
432
- case 0:
433
- // TODO: we could configure if we need physics
434
- return [4 /*yield*/, this.physics.createWorld()];
435
- case 1:
436
- // TODO: we could configure if we need physics
437
- _a.sent();
438
- prepare_succeeded = true;
439
- _a.label = 2;
440
- case 2:
441
- _a.trys.push([2, 5, , 6]);
442
- Context.Current = this;
443
- if (!buildScene) return [3 /*break*/, 4];
444
- return [4 /*yield*/, buildScene(this, opts)];
445
- case 3:
446
- _a.sent();
447
- _a.label = 4;
448
- case 4: return [3 /*break*/, 6];
449
- case 5:
450
- err_1 = _a.sent();
451
- console.error(err_1);
452
- prepare_succeeded = false;
453
- return [3 /*break*/, 6];
454
- case 6:
455
- if (!prepare_succeeded)
456
- return [2 /*return*/];
457
- // console.log(prepare_succeeded);
458
- if (!this.isManagedExternally)
459
- this.domElement.prepend(this.renderer.domElement);
460
- engine_networking_instantiate_1.beginListenInstantiate(this);
461
- engine_networking_instantiate_1.beginListenDestroy(this);
462
- engine_networking_files_1.beginListenFileSpawn(this);
463
- // Setup
464
- Context._current = this;
465
- for (i = 0; i < this.new_scripts.length; i++) {
466
- script = this.new_scripts[i];
467
- if (script.gameObject !== undefined && script.gameObject !== null) {
468
- if (script.gameObject.userData === undefined)
469
- script.gameObject.userData = {};
470
- if (script.gameObject.userData.components === undefined)
471
- script.gameObject.userData.components = [];
472
- arr = script.gameObject.userData.components;
473
- if (!arr.includes(script))
474
- arr.push(script);
475
- }
476
- // if (script.gameObject && !this.raycastTargets.includes(script.gameObject)) {
477
- // this.raycastTargets.push(script.gameObject);
478
- // }
479
- }
480
- if (!this.post_setup_callbacks) return [3 /*break*/, 10];
481
- i = 0;
482
- _a.label = 7;
483
- case 7:
484
- if (!(i < this.post_setup_callbacks.length)) return [3 /*break*/, 10];
485
- Context._current = this;
486
- return [4 /*yield*/, this.post_setup_callbacks[i](this)];
487
- case 8:
488
- _a.sent();
489
- _a.label = 9;
490
- case 9:
491
- i++;
492
- return [3 /*break*/, 7];
493
- case 10:
494
- if (!this.mainCamera) {
495
- // console.error("MISSING camera", this);
496
- // return;
497
- // Context._current = this;
498
- // //@ts-ignore
499
- // const cams = findObjectsOfType(Camera, this);
500
- // console.log(cams);
501
- // // get main camera, fallback to first camera
502
- // const mc: Camera = cams.find(c => c.tag == "MainCamera") ?? cams.find(_ => true) as Camera;
503
- // if (mc) {
504
- // if (mc.tag !== "MainCamera")
505
- // console.warn("No mainCamera configured. Some components rely on a mainCamera object being present. " +
506
- // "When exporting your scene, make sure to set the mainCamera tag on your camera. Using \"" + mc.name + "\" as mainCamera now.");
507
- // this.setCurrentCamera(mc);
508
- // }
509
- // else {
510
- // console.error("No camera found");
511
- // const cam = createCameraWithOrbitControl(this.scene);
512
- // this.setCurrentCamera(cam);
513
- // }
514
- }
515
- Context._current = this;
516
- looputils.processNewScripts(this);
517
- // const mainCam = this.mainCameraComponent as Camera;
518
- // if (mainCam) {
519
- // mainCam.applyClearFlagsIfIsActiveCamera();
520
- // }
521
- if (!this.isManagedExternally && this.composer && this.mainCamera) {
522
- renderPass = new RenderPass_1.RenderPass(this.scene, this.mainCamera);
523
- this.renderer.setSize(this.domWidth, this.domHeight);
524
- this.composer.addPass(renderPass);
525
- this.composer.setSize(this.domWidth, this.domHeight);
526
- }
527
- this._sizeChanged = true;
528
- if (this._stats) {
529
- this._stats.showPanel(1);
530
- this.domElement.appendChild(this._stats.dom);
531
- }
532
- this.renderer.setAnimationLoop(this.render.bind(this));
533
- if (debug)
534
- engine_three_utils_1.logHierarchy(this.scene, true);
535
- return [2 /*return*/];
536
- }
537
- });
538
- });
539
- };
540
- Context.prototype.render = function (_, frame) {
541
- var _a, _b;
542
- (_a = this._stats) === null || _a === void 0 ? void 0 : _a.begin();
543
- Context._current = this;
544
- this.time.update();
545
- looputils.processNewScripts(this);
546
- looputils.updateIsActive();
547
- looputils.processStart(this);
548
- while (this._cameraStack.length > 0 && (!this.mainCameraComponent || this.mainCameraComponent.destroyed)) {
549
- this._cameraStack.splice(this._cameraStack.length - 1, 1);
550
- var last = this._cameraStack[this._cameraStack.length - 1];
551
- this.setCurrentCamera(last);
552
- }
553
- if (this.pre_update_callbacks) {
554
- for (var i in this.pre_update_callbacks) {
555
- this.pre_update_callbacks[i]();
556
- }
557
- }
558
- for (var i = 0; i < this.scripts_earlyUpdate.length; i++) {
559
- var script = this.scripts_earlyUpdate[i];
560
- if (!script.activeAndEnabled)
561
- continue;
562
- if (script.earlyUpdate !== undefined) {
563
- Context._current = this;
564
- script.earlyUpdate();
565
- }
566
- }
567
- this.executeCoroutines(FrameEvent.EarlyUpdate);
568
- for (var i = 0; i < this.scripts_update.length; i++) {
569
- var script = this.scripts_update[i];
570
- if (!script.activeAndEnabled)
571
- continue;
572
- if (script.update !== undefined) {
573
- Context._current = this;
574
- script.update();
575
- }
576
- }
577
- this.executeCoroutines(FrameEvent.Update);
578
- for (var i = 0; i < this.scripts_lateUpdate.length; i++) {
579
- var script = this.scripts_lateUpdate[i];
580
- if (!script.activeAndEnabled)
581
- continue;
582
- if (script.lateUpdate !== undefined) {
583
- Context._current = this;
584
- script.lateUpdate();
585
- }
586
- }
587
- // this.mainLight = null;
588
- this.executeCoroutines(FrameEvent.LateUpdate);
589
- try {
590
- var physicsSteps = 1;
591
- var dt = this.time.deltaTime / physicsSteps;
592
- for (var i = 0; i < physicsSteps; i++) {
593
- this.executeCoroutines(FrameEvent.PrePhysicsStep);
594
- this.physics.step(dt);
595
- this.executeCoroutines(FrameEvent.PostPhysicsStep);
596
- }
597
- }
598
- catch (err) {
599
- console.error(err);
600
- }
601
- this.physics.postStep();
602
- // should we move these callbacks in the regular three onBeforeRender events?
603
- for (var i = 0; i < this.scripts_onBeforeRender.length; i++) {
604
- var script = this.scripts_onBeforeRender[i];
605
- if (!script.activeAndEnabled)
606
- continue;
607
- // if(script.isActiveAndEnabled === false) continue;
608
- if (script.onBeforeRender !== undefined) {
609
- Context._current = this;
610
- script.onBeforeRender(frame);
611
- }
612
- }
613
- this.executeCoroutines(FrameEvent.OnBeforeRender);
614
- if (this._sizeChanged)
615
- this.updateSize();
616
- if (this.pre_render_callbacks) {
617
- for (var i in this.pre_render_callbacks) {
618
- this.pre_render_callbacks[i]();
619
- }
620
- }
621
- this._isRendering = true;
622
- this.renderRequiredTextures();
623
- if (!this.isManagedExternally) {
624
- if (this.composer && !this.isInXR) {
625
- this.composer.render();
626
- }
627
- else if (this.mainCamera) {
628
- this.renderer.render(this.scene, this.mainCamera);
629
- }
630
- }
631
- this._isRendering = false;
632
- for (var i = 0; i < this.scripts_onAfterRender.length; i++) {
633
- var script = this.scripts_onAfterRender[i];
634
- if (!script.activeAndEnabled)
635
- continue;
636
- if (script.onAfterRender !== undefined) {
637
- Context._current = this;
638
- script.onAfterRender();
639
- }
640
- }
641
- this.executeCoroutines(FrameEvent.OnAfterRender);
642
- if (this.post_render_callbacks) {
643
- for (var i in this.post_render_callbacks) {
644
- this.post_render_callbacks[i]();
645
- }
646
- }
647
- this.connection.sendBufferedMessagesNow();
648
- (_b = this._stats) === null || _b === void 0 ? void 0 : _b.end();
649
- };
650
- Context.prototype.renderRequiredTextures = function () {
651
- if (!this.mainCamera)
652
- return;
653
- if (!this._requireDepthTexture && !this._requireColorTexture)
654
- return;
655
- if (!this._renderTarget) {
656
- this._renderTarget = new THREE.WebGLRenderTarget(this.domWidth, this.domHeight);
657
- if (this._requireDepthTexture) {
658
- var dt = new three_1.DepthTexture(this.domWidth, this.domHeight);
659
- ;
660
- this._renderTarget.depthTexture = dt;
661
- }
662
- if (this._requireColorTexture) {
663
- this._renderTarget.texture = new THREE.Texture();
664
- this._renderTarget.texture.generateMipmaps = false;
665
- this._renderTarget.texture.minFilter = THREE.NearestFilter;
666
- this._renderTarget.texture.magFilter = THREE.NearestFilter;
667
- this._renderTarget.texture.format = THREE.RGBAFormat;
668
- }
669
- }
670
- var rt = this._renderTarget;
671
- if (rt.texture) {
672
- rt.texture.encoding = this.renderer.outputEncoding;
673
- }
674
- var prevTarget = this.renderer.getRenderTarget();
675
- this.renderer.setRenderTarget(rt);
676
- this.renderer.render(this.scene, this.mainCamera);
677
- this.renderer.setRenderTarget(prevTarget);
678
- };
679
- Context.prototype.executeCoroutines = function (evt) {
680
- if (this.coroutines[evt]) {
681
- var evts = this.coroutines[evt];
682
- for (var i = 0; i < evts.length; i++) {
683
- var evt_1 = evts[i];
684
- var remove = !evt_1.comp || evt_1.comp.destroyed || !evt_1.main || evt_1.comp["enabled"] === false;
685
- if (remove) {
686
- evts.splice(i, 1);
687
- --i;
688
- continue;
689
- }
690
- var iter = evt_1.chained;
691
- if (iter && iter.length > 0) {
692
- var last = iter[iter.length - 1];
693
- var res_1 = last.next();
694
- if (res_1.done) {
695
- iter.pop();
696
- }
697
- if (isGenerator(res_1)) {
698
- if (!evt_1.chained)
699
- evt_1.chained = [];
700
- evt_1.chained.push(res_1.value);
701
- }
702
- if (!res_1.done)
703
- continue;
704
- }
705
- var res = evt_1.main.next();
706
- if (res.done === true) {
707
- evts.splice(i, 1);
708
- --i;
709
- continue;
710
- }
711
- var val = res.value;
712
- if (isGenerator(val)) {
713
- // invoke once if its a generator
714
- // this means e.g. WaitForFrame(1) works and will capture
715
- // the frame it was created
716
- var gen = val;
717
- var res_2 = gen.next();
718
- if (res_2.done)
719
- continue;
720
- if (!evt_1.chained)
721
- evt_1.chained = [];
722
- evt_1.chained.push(val);
723
- }
724
- }
725
- }
726
- function isGenerator(val) {
727
- if (val) {
728
- if (val.next && val["return"]) {
729
- return true;
730
- }
731
- }
732
- return false;
733
- }
734
- };
735
- return Context;
736
- }());
737
- exports.Context = Context;
738
- // const scene = new THREE.Scene();
739
- // const useComposer = utils.getParam("postfx");
740
- // const renderer = new WebGLRenderer({ antialias: true });
741
- // const composer = useComposer ? new EffectComposer(renderer) : undefined;
742
- // renderer.setClearColor(new THREE.Color('lightgrey'), 0)
743
- // renderer.antialias = true;
744
- // renderer.alpha = false;
745
- // renderer.shadowMap.enabled = true;
746
- // renderer.shadowMap.type = THREE.PCFSoftShadowMap;
747
- // renderer.setSize(window.innerWidth, window.innerHeight);
748
- // renderer.outputEncoding = THREE.sRGBEncoding;
749
- // renderer.physicallyCorrectLights = true;
750
- // document.body.appendChild(renderer.domElement);
751
- // // generation pushes loading requests in this array
752
- // const sceneData: {
753
- // mainCamera: THREE.Camera | undefined
754
- // } = {
755
- // preparing: [],
756
- // resolving: [],
757
- // scripts: [],
758
- // raycastTargets: [],
759
- // mainCamera: undefined,
760
- // mainCameraComponent: undefined,
761
- // };
762
- // // contains a list of functions to be called after loading is done
763
- // const post_setup_callbacks = [];
764
- // const pre_render_Callbacks = [];
765
- // const post_render_callbacks = [];
766
- // const new_scripts = [];
767
- // const new_scripts_post_setup_callbacks = [];
768
- // const new_scripts_pre_setup_callbacks = [];
769
- // export {
770
- // scene, renderer, composer,
771
- // new_scripts,
772
- // new_scripts_post_setup_callbacks, new_scripts_pre_setup_callbacks,
773
- // sceneData,
774
- // post_setup_callbacks,
775
- // pre_render_Callbacks,
776
- // post_render_callbacks
777
- // }