@galacean/engine-ui 0.0.0-experimental-backup.4 → 0.0.0-experimental-2.0-game

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.
@@ -0,0 +1,3732 @@
1
+ (function (global, factory) {
2
+ typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@galacean/engine')) :
3
+ typeof define === 'function' && define.amd ? define(['exports', '@galacean/engine'], factory) :
4
+ (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.Galacean = global.Galacean || {}, global.Galacean.UI = {}), global.Galacean));
5
+ })(this, (function (exports, engine) { 'use strict';
6
+
7
+ function _defineProperties(target, props) {
8
+ for (var i = 0; i < props.length; i++) {
9
+ var descriptor = props[i];
10
+ descriptor.enumerable = descriptor.enumerable || false;
11
+ descriptor.configurable = true;
12
+
13
+ if ("value" in descriptor) descriptor.writable = true;
14
+
15
+ Object.defineProperty(target, descriptor.key, descriptor);
16
+ }
17
+ }
18
+ function _create_class(Constructor, protoProps, staticProps) {
19
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
20
+ if (staticProps) _defineProperties(Constructor, staticProps);
21
+
22
+ return Constructor;
23
+ }
24
+
25
+ function _set_prototype_of(o, p) {
26
+ _set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {
27
+ o.__proto__ = p;
28
+
29
+ return o;
30
+ };
31
+
32
+ return _set_prototype_of(o, p);
33
+ }
34
+
35
+ function _inherits(subClass, superClass) {
36
+ if (typeof superClass !== "function" && superClass !== null) {
37
+ throw new TypeError("Super expression must either be null or a function");
38
+ }
39
+
40
+ subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } });
41
+
42
+ if (superClass) _set_prototype_of(subClass, superClass);
43
+ }
44
+
45
+ function _instanceof(left, right) {
46
+ if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
47
+ return !!right[Symbol.hasInstance](left);
48
+ } else return left instanceof right;
49
+ }
50
+
51
+ /******************************************************************************
52
+ Copyright (c) Microsoft Corporation.
53
+
54
+ Permission to use, copy, modify, and/or distribute this software for any
55
+ purpose with or without fee is hereby granted.
56
+
57
+ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
58
+ REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
59
+ AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
60
+ INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
61
+ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
62
+ OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
63
+ PERFORMANCE OF THIS SOFTWARE.
64
+ ***************************************************************************** */
65
+
66
+ function __decorate(decorators, target, key, desc) {
67
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
68
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
69
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
70
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
71
+ }
72
+
73
+ typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
74
+ var e = new Error(message);
75
+ return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
76
+ };
77
+
78
+ var UIGroup = /*#__PURE__*/ function(Component) {
79
+ _inherits(UIGroup, Component);
80
+ function UIGroup(entity) {
81
+ var _this;
82
+ _this = Component.call(this, entity) || this, /** @internal */ _this._indexInGroup = -1, /** @internal */ _this._indexInRootCanvas = -1, /** @internal */ _this._disorderedElements = new engine.DisorderedArray(), /** @internal */ _this._globalAlpha = 1, /** @internal */ _this._globalInteractive = true, _this._alpha = 1, _this._interactive = true, _this._ignoreParentGroup = false, /** @internal */ _this._rootCanvasListeningEntities = [], /** @internal */ _this._groupListeningEntities = [], /** @internal */ _this._isRootCanvasDirty = false, /** @internal */ _this._isGroupDirty = false, /** @internal */ _this._groupDirtyFlags = 0;
83
+ _this._rootCanvasListener = _this._rootCanvasListener.bind(_this);
84
+ _this._groupListener = _this._groupListener.bind(_this);
85
+ return _this;
86
+ }
87
+ var _proto = UIGroup.prototype;
88
+ /**
89
+ * @internal
90
+ */ _proto._getGlobalAlpha = function _getGlobalAlpha() {
91
+ if (this._isContainDirtyFlag(1)) {
92
+ if (this._ignoreParentGroup) {
93
+ this._globalAlpha = this._alpha;
94
+ } else {
95
+ var parentGroup = this._getGroup();
96
+ this._globalAlpha = this._alpha * (parentGroup ? parentGroup._getGlobalAlpha() : 1);
97
+ }
98
+ this._setDirtyFlagFalse(1);
99
+ }
100
+ return this._globalAlpha;
101
+ };
102
+ /**
103
+ * @internal
104
+ */ _proto._getGlobalInteractive = function _getGlobalInteractive() {
105
+ if (this._isContainDirtyFlag(2)) {
106
+ if (this._ignoreParentGroup) {
107
+ this._globalInteractive = this._interactive;
108
+ } else {
109
+ var parentGroup = this._getGroup();
110
+ this._globalInteractive = this._interactive && (!parentGroup || parentGroup._getGlobalInteractive());
111
+ }
112
+ this._setDirtyFlagFalse(2);
113
+ }
114
+ return this._globalInteractive;
115
+ };
116
+ // @ts-ignore
117
+ _proto._onEnableInScene = function _onEnableInScene() {
118
+ Utils.setRootCanvasDirty(this);
119
+ Utils.setGroupDirty(this);
120
+ // @ts-ignore
121
+ this.entity._dispatchModify(EntityUIModifyFlags.GroupEnableInScene);
122
+ };
123
+ // @ts-ignore
124
+ _proto._onDisableInScene = function _onDisableInScene() {
125
+ Utils.cleanRootCanvas(this);
126
+ Utils.cleanGroup(this);
127
+ var disorderedElements = this._disorderedElements;
128
+ disorderedElements.forEach(function(element) {
129
+ Utils.setGroupDirty(element);
130
+ });
131
+ disorderedElements.length = 0;
132
+ disorderedElements.garbageCollection();
133
+ this._isRootCanvasDirty = this._isGroupDirty = false;
134
+ };
135
+ /**
136
+ * @internal
137
+ */ _proto._getRootCanvas = function _getRootCanvas() {
138
+ this._isRootCanvasDirty && Utils.setRootCanvas(this, Utils.searchRootCanvasInParents(this));
139
+ return this._rootCanvas;
140
+ };
141
+ /**
142
+ * @internal
143
+ */ _proto._getGroup = function _getGroup() {
144
+ this._isGroupDirty && Utils.setGroup(this, Utils.searchGroupInParents(this));
145
+ return this._group;
146
+ };
147
+ /**
148
+ * @internal
149
+ */ _proto._groupListener = function _groupListener(flag) {
150
+ if (flag === engine.EntityModifyFlags.Parent || flag === EntityUIModifyFlags.GroupEnableInScene) {
151
+ Utils.setGroupDirty(this);
152
+ }
153
+ };
154
+ /**
155
+ * @internal
156
+ */ _proto._rootCanvasListener = function _rootCanvasListener(flag) {
157
+ if (flag === engine.EntityModifyFlags.Parent || flag === EntityUIModifyFlags.CanvasEnableInScene) {
158
+ Utils.setRootCanvasDirty(this);
159
+ Utils.setGroupDirty(this);
160
+ }
161
+ };
162
+ /**
163
+ * @internal
164
+ */ _proto._onGroupModify = function _onGroupModify(flags, isPass) {
165
+ if (isPass === void 0) isPass = false;
166
+ if (isPass && this._ignoreParentGroup) return;
167
+ if (this._isContainDirtyFlags(flags)) return;
168
+ this._setDirtyFlagTrue(flags);
169
+ this._disorderedElements.forEach(function(element) {
170
+ element._onGroupModify(flags, true);
171
+ });
172
+ };
173
+ _proto._isContainDirtyFlags = function _isContainDirtyFlags(targetDirtyFlags) {
174
+ return (this._groupDirtyFlags & targetDirtyFlags) === targetDirtyFlags;
175
+ };
176
+ _proto._isContainDirtyFlag = function _isContainDirtyFlag(type) {
177
+ return (this._groupDirtyFlags & type) != 0;
178
+ };
179
+ _proto._setDirtyFlagTrue = function _setDirtyFlagTrue(type) {
180
+ this._groupDirtyFlags |= type;
181
+ };
182
+ _proto._setDirtyFlagFalse = function _setDirtyFlagFalse(type) {
183
+ this._groupDirtyFlags &= ~type;
184
+ };
185
+ _create_class(UIGroup, [
186
+ {
187
+ key: "ignoreParentGroup",
188
+ get: /**
189
+ * Whether to ignore the parent group.
190
+ * @remarks If this parameter set to `true`,
191
+ * all settings of the parent group will be ignored.
192
+ */ function get() {
193
+ return this._ignoreParentGroup;
194
+ },
195
+ set: function set(value) {
196
+ if (this._ignoreParentGroup !== value) {
197
+ this._ignoreParentGroup = value;
198
+ this._onGroupModify(3);
199
+ }
200
+ }
201
+ },
202
+ {
203
+ key: "interactive",
204
+ get: /**
205
+ * Whether the group is interactive.
206
+ */ function get() {
207
+ return this._interactive;
208
+ },
209
+ set: function set(value) {
210
+ if (this._interactive !== value) {
211
+ this._interactive = value;
212
+ this._onGroupModify(2);
213
+ }
214
+ }
215
+ },
216
+ {
217
+ key: "alpha",
218
+ get: /**
219
+ * The alpha value of the group.
220
+ */ function get() {
221
+ return this._alpha;
222
+ },
223
+ set: function set(value) {
224
+ value = Math.max(0, Math.min(value, 1));
225
+ if (this._alpha !== value) {
226
+ this._alpha = value;
227
+ this._onGroupModify(1);
228
+ }
229
+ }
230
+ }
231
+ ]);
232
+ return UIGroup;
233
+ }(engine.Component);
234
+ __decorate([
235
+ engine.ignoreClone
236
+ ], UIGroup.prototype, "_indexInGroup", void 0);
237
+ __decorate([
238
+ engine.ignoreClone
239
+ ], UIGroup.prototype, "_indexInRootCanvas", void 0);
240
+ __decorate([
241
+ engine.ignoreClone
242
+ ], UIGroup.prototype, "_disorderedElements", void 0);
243
+ __decorate([
244
+ engine.ignoreClone
245
+ ], UIGroup.prototype, "_globalAlpha", void 0);
246
+ __decorate([
247
+ engine.ignoreClone
248
+ ], UIGroup.prototype, "_globalInteractive", void 0);
249
+ __decorate([
250
+ engine.assignmentClone
251
+ ], UIGroup.prototype, "_alpha", void 0);
252
+ __decorate([
253
+ engine.assignmentClone
254
+ ], UIGroup.prototype, "_interactive", void 0);
255
+ __decorate([
256
+ engine.assignmentClone
257
+ ], UIGroup.prototype, "_ignoreParentGroup", void 0);
258
+ __decorate([
259
+ engine.ignoreClone
260
+ ], UIGroup.prototype, "_rootCanvasListeningEntities", void 0);
261
+ __decorate([
262
+ engine.ignoreClone
263
+ ], UIGroup.prototype, "_groupListeningEntities", void 0);
264
+ __decorate([
265
+ engine.ignoreClone
266
+ ], UIGroup.prototype, "_isRootCanvasDirty", void 0);
267
+ __decorate([
268
+ engine.ignoreClone
269
+ ], UIGroup.prototype, "_isGroupDirty", void 0);
270
+ __decorate([
271
+ engine.ignoreClone
272
+ ], UIGroup.prototype, "_groupDirtyFlags", void 0);
273
+ __decorate([
274
+ engine.ignoreClone
275
+ ], UIGroup.prototype, "_groupListener", null);
276
+ __decorate([
277
+ engine.ignoreClone
278
+ ], UIGroup.prototype, "_rootCanvasListener", null);
279
+ var GroupModifyFlags = /*#__PURE__*/ function(GroupModifyFlags) {
280
+ GroupModifyFlags[GroupModifyFlags["None"] = 0] = "None";
281
+ GroupModifyFlags[GroupModifyFlags["GlobalAlpha"] = 1] = "GlobalAlpha";
282
+ GroupModifyFlags[GroupModifyFlags["GlobalInteractive"] = 2] = "GlobalInteractive";
283
+ GroupModifyFlags[GroupModifyFlags["All"] = 3] = "All";
284
+ return GroupModifyFlags;
285
+ }({});
286
+
287
+ var Utils = /*#__PURE__*/ function() {
288
+ function Utils() {}
289
+ Utils.setRootCanvasDirty = function setRootCanvasDirty(element) {
290
+ if (element._isRootCanvasDirty) return;
291
+ element._isRootCanvasDirty = true;
292
+ this._registerRootCanvas(element, null);
293
+ element._onRootCanvasModify == null ? void 0 : element._onRootCanvasModify.call(element, RootCanvasModifyFlags.All);
294
+ };
295
+ Utils.setRootCanvas = function setRootCanvas(element, rootCanvas) {
296
+ element._isRootCanvasDirty = false;
297
+ this._registerRootCanvas(element, rootCanvas);
298
+ var fromEntity = _instanceof(element, exports.UICanvas) ? element.entity.parent : element.entity;
299
+ var _rootCanvas_entity_parent;
300
+ var toEntity = (_rootCanvas_entity_parent = rootCanvas == null ? void 0 : rootCanvas.entity.parent) != null ? _rootCanvas_entity_parent : null;
301
+ this._registerListener(fromEntity, toEntity, element._rootCanvasListener, element._rootCanvasListeningEntities);
302
+ };
303
+ Utils.cleanRootCanvas = function cleanRootCanvas(element) {
304
+ this._registerRootCanvas(element, null);
305
+ this._unRegisterListener(element._rootCanvasListener, element._rootCanvasListeningEntities);
306
+ };
307
+ Utils.searchRootCanvasInParents = function searchRootCanvasInParents(element) {
308
+ var entity = _instanceof(element, exports.UICanvas) ? element.entity.parent : element.entity;
309
+ while(entity){
310
+ // @ts-ignore
311
+ var components = entity._components;
312
+ for(var i = 0, n = components.length; i < n; i++){
313
+ var component = components[i];
314
+ if (component.enabled && _instanceof(component, exports.UICanvas) && component._isRootCanvas) {
315
+ return component;
316
+ }
317
+ }
318
+ entity = entity.parent;
319
+ }
320
+ return null;
321
+ };
322
+ Utils.setGroupDirty = function setGroupDirty(element) {
323
+ if (element._isGroupDirty) return;
324
+ element._isGroupDirty = true;
325
+ this._registerGroup(element, null);
326
+ element._onGroupModify(GroupModifyFlags.All);
327
+ };
328
+ Utils.setGroup = function setGroup(element, group) {
329
+ element._isGroupDirty = false;
330
+ this._registerGroup(element, group);
331
+ var rootCanvas = element._getRootCanvas();
332
+ if (rootCanvas) {
333
+ var fromEntity = _instanceof(element, UIGroup) ? element.entity.parent : element.entity;
334
+ var _group_entity;
335
+ var toEntity = (_group_entity = group == null ? void 0 : group.entity) != null ? _group_entity : rootCanvas.entity.parent;
336
+ this._registerListener(fromEntity, toEntity, element._groupListener, element._groupListeningEntities);
337
+ } else {
338
+ this._unRegisterListener(element._groupListener, element._groupListeningEntities);
339
+ }
340
+ };
341
+ Utils.cleanGroup = function cleanGroup(element) {
342
+ this._registerGroup(element, null);
343
+ this._unRegisterListener(element._groupListener, element._groupListeningEntities);
344
+ };
345
+ Utils.searchGroupInParents = function searchGroupInParents(element) {
346
+ var rootCanvas = element._getRootCanvas();
347
+ if (!rootCanvas) return null;
348
+ var entity = _instanceof(element, UIGroup) ? element.entity.parent : element.entity;
349
+ var rootCanvasParent = rootCanvas.entity.parent;
350
+ while(entity && entity !== rootCanvasParent){
351
+ // @ts-ignore
352
+ var components = entity._components;
353
+ for(var i = 0, n = components.length; i < n; i++){
354
+ var component = components[i];
355
+ if (component.enabled && _instanceof(component, UIGroup)) {
356
+ return component;
357
+ }
358
+ }
359
+ entity = entity.parent;
360
+ }
361
+ return null;
362
+ };
363
+ Utils._registerRootCanvas = function _registerRootCanvas(element, canvas) {
364
+ var preCanvas = element._rootCanvas;
365
+ if (preCanvas !== canvas) {
366
+ if (preCanvas) {
367
+ var replaced = preCanvas._disorderedElements.deleteByIndex(element._indexInRootCanvas);
368
+ replaced && (replaced._indexInRootCanvas = element._indexInRootCanvas);
369
+ element._indexInRootCanvas = -1;
370
+ }
371
+ if (canvas) {
372
+ var disorderedElements = canvas._disorderedElements;
373
+ element._indexInRootCanvas = disorderedElements.length;
374
+ disorderedElements.add(element);
375
+ }
376
+ element._rootCanvas = canvas;
377
+ }
378
+ };
379
+ Utils._registerGroup = function _registerGroup(element, group) {
380
+ var preGroup = element._group;
381
+ if (preGroup !== group) {
382
+ if (preGroup) {
383
+ var replaced = preGroup._disorderedElements.deleteByIndex(element._indexInGroup);
384
+ replaced && (replaced._indexInGroup = element._indexInGroup);
385
+ element._indexInGroup = -1;
386
+ }
387
+ if (group) {
388
+ var disorderedElements = group._disorderedElements;
389
+ element._indexInGroup = disorderedElements.length;
390
+ disorderedElements.add(element);
391
+ }
392
+ element._group = group;
393
+ element._onGroupModify(GroupModifyFlags.All);
394
+ }
395
+ };
396
+ Utils._registerListener = function _registerListener(entity, root, listener, listeningEntities) {
397
+ var count = 0;
398
+ while(entity && entity !== root){
399
+ var preEntity = listeningEntities[count];
400
+ if (preEntity !== entity) {
401
+ // @ts-ignore
402
+ preEntity == null ? void 0 : preEntity._unRegisterModifyListener(listener);
403
+ listeningEntities[count] = entity;
404
+ // @ts-ignore
405
+ entity._registerModifyListener(listener);
406
+ }
407
+ entity = entity.parent;
408
+ count++;
409
+ }
410
+ listeningEntities.length = count;
411
+ };
412
+ Utils._unRegisterListener = function _unRegisterListener(listener, listeningEntities) {
413
+ for(var i = 0, n = listeningEntities.length; i < n; i++){
414
+ // @ts-ignore
415
+ listeningEntities[i]._unRegisterModifyListener(listener);
416
+ }
417
+ listeningEntities.length = 0;
418
+ };
419
+ return Utils;
420
+ }();
421
+
422
+ /**
423
+ * Render mode for ui canvas.
424
+ */ var CanvasRenderMode = /*#__PURE__*/ function(CanvasRenderMode) {
425
+ /**
426
+ * The UI canvas will be rendered directly onto the screen and adapted to screen space,
427
+ * overlaying other rendering elements in the same scene.
428
+ * @remarks if the `engine.canvas` size change, the UI canvas will automatically adapt.
429
+ */ CanvasRenderMode[CanvasRenderMode["ScreenSpaceOverlay"] = 0] = "ScreenSpaceOverlay";
430
+ /**
431
+ * The UI canvas is placed at a specified distance in front of the camera and adapted to screen space,
432
+ * with all objects rendered by the camera.
433
+ * @remarks if the camera's properties or the `engine.canvas` size change, the UI canvas will automatically adapt.
434
+ * @remarks if set `ScreenSpaceCamera` but no corresponding camera is assigned, the actual rendering mode defaults to `ScreenSpaceOverlay`.
435
+ */ CanvasRenderMode[CanvasRenderMode["ScreenSpaceCamera"] = 1] = "ScreenSpaceCamera";
436
+ /**
437
+ * The UI canvas is placed in the 3D world space and rendered by every camera in the same scene.
438
+ */ CanvasRenderMode[CanvasRenderMode["WorldSpace"] = 2] = "WorldSpace";
439
+ return CanvasRenderMode;
440
+ }({});
441
+
442
+ /**
443
+ * Resolution adaptation mode.
444
+ * @remarks Only effective in screen space.
445
+ */ var ResolutionAdaptationMode = /*#__PURE__*/ function(ResolutionAdaptationMode) {
446
+ /** Adapt based on width.(`referenceResolution.x`) */ ResolutionAdaptationMode[ResolutionAdaptationMode["WidthAdaptation"] = 0] = "WidthAdaptation";
447
+ /** Adapt based on height.(`referenceResolution.y`) */ ResolutionAdaptationMode[ResolutionAdaptationMode["HeightAdaptation"] = 1] = "HeightAdaptation";
448
+ /** Adapt based on both width and height.(`referenceResolution`) */ ResolutionAdaptationMode[ResolutionAdaptationMode["BothAdaptation"] = 2] = "BothAdaptation";
449
+ /** Adapt to the side with a larger ratio. */ ResolutionAdaptationMode[ResolutionAdaptationMode["ExpandAdaptation"] = 3] = "ExpandAdaptation";
450
+ /** Adapt to the side with smaller ratio. */ ResolutionAdaptationMode[ResolutionAdaptationMode["ShrinkAdaptation"] = 4] = "ShrinkAdaptation";
451
+ return ResolutionAdaptationMode;
452
+ }({});
453
+
454
+ /** Horizontal alignment mode. */ var HorizontalAlignmentMode = /*#__PURE__*/ function(HorizontalAlignmentMode) {
455
+ /** No horizontal alignment. */ HorizontalAlignmentMode[HorizontalAlignmentMode["None"] = 0] = "None";
456
+ /** Left-aligned, `alignLeft` drives `position.x`. */ HorizontalAlignmentMode[HorizontalAlignmentMode["Left"] = 1] = "Left";
457
+ /** Right-aligned, `alignRight` drives `position.x`. */ HorizontalAlignmentMode[HorizontalAlignmentMode["Right"] = 2] = "Right";
458
+ /** Horizontal stretch, `alignLeft` and `alignRight` drive `position.x` and `size.x`. */ HorizontalAlignmentMode[HorizontalAlignmentMode["LeftAndRight"] = 3] = "LeftAndRight";
459
+ /** Center-aligned, `alignCenter` drives `position.x`. */ HorizontalAlignmentMode[HorizontalAlignmentMode["Center"] = 4] = "Center";
460
+ return HorizontalAlignmentMode;
461
+ }({});
462
+
463
+ /** Vertical alignment mode. */ var VerticalAlignmentMode = /*#__PURE__*/ function(VerticalAlignmentMode) {
464
+ /** No vertical alignment. */ VerticalAlignmentMode[VerticalAlignmentMode["None"] = 0] = "None";
465
+ /** Top-aligned, `alignTop` drives `position.y`. */ VerticalAlignmentMode[VerticalAlignmentMode["Top"] = 1] = "Top";
466
+ /** Bottom-aligned, `alignBottom` drives `position.y`. */ VerticalAlignmentMode[VerticalAlignmentMode["Bottom"] = 2] = "Bottom";
467
+ /** Vertical stretch, `alignTop` and `alignBottom` drive `position.y` and `size.y`. */ VerticalAlignmentMode[VerticalAlignmentMode["TopAndBottom"] = 3] = "TopAndBottom";
468
+ /** Middle-aligned, `alignMiddle` drives `position.y`. */ VerticalAlignmentMode[VerticalAlignmentMode["Middle"] = 4] = "Middle";
469
+ return VerticalAlignmentMode;
470
+ }({});
471
+
472
+ /**
473
+ * The Transform component exclusive to the UI element.
474
+ */ var UITransform = /*#__PURE__*/ function(Transform) {
475
+ _inherits(UITransform, Transform);
476
+ function UITransform(entity) {
477
+ var _this;
478
+ _this = Transform.call(this, entity) || this, _this._size = new engine.Vector2(100, 100), _this._pivot = new engine.Vector2(0.5, 0.5), _this._rect = new engine.Rect(-50, -50, 100, 100), _this._alignLeft = 0, _this._alignRight = 0, _this._alignCenter = 0, _this._alignTop = 0, _this._alignBottom = 0, _this._alignMiddle = 0, _this._horizontalAlignment = HorizontalAlignmentMode.None, _this._verticalAlignment = VerticalAlignmentMode.None;
479
+ _this._onSizeChanged = _this._onSizeChanged.bind(_this);
480
+ _this._onPivotChanged = _this._onPivotChanged.bind(_this);
481
+ // @ts-ignore
482
+ _this._size._onValueChanged = _this._onSizeChanged;
483
+ // @ts-ignore
484
+ _this._pivot._onValueChanged = _this._onPivotChanged;
485
+ return _this;
486
+ }
487
+ var _proto = UITransform.prototype;
488
+ /**
489
+ * @internal
490
+ */ _proto._parentChange = function _parentChange() {
491
+ this._isParentDirty = true;
492
+ // Reparent invalidates the world state of the entire subtree:
493
+ // 1) `_updateWorldFlagWithParentRectChange` has an early-exit that skips
494
+ // propagation when self's world dirty flags are already all set —
495
+ // invalid after reparent.
496
+ // 2) Descendants may have cached a stale `_parentTransformCache`
497
+ // (e.g. `_getParentTransform` called while ancestor chain was partially
498
+ // constructed during clone/instantiate). Force them to re-resolve on
499
+ // next access.
500
+ this._propagateReparentDirtyUI(engine.TransformModifyFlags.WmWpWeWqWsWus);
501
+ };
502
+ _proto._propagateReparentDirtyUI = function _propagateReparentDirtyUI(flags) {
503
+ var selfChange = false;
504
+ var _this = this, horizontalAlignment = _this._horizontalAlignment, verticalAlignment = _this._verticalAlignment;
505
+ if (horizontalAlignment || verticalAlignment) {
506
+ if (horizontalAlignment === HorizontalAlignmentMode.LeftAndRight || verticalAlignment === VerticalAlignmentMode.TopAndBottom) {
507
+ this._updateSizeByAlignment();
508
+ this._updateRectBySizeAndPivot();
509
+ selfChange = true;
510
+ }
511
+ this._updatePositionByAlignment();
512
+ this._setDirtyFlagTrue(engine.TransformModifyFlags.LocalMatrix);
513
+ flags |= engine.TransformModifyFlags.WmWp;
514
+ }
515
+ this._worldAssociatedChange(flags);
516
+ var children = this.entity.children;
517
+ for(var i = 0, n = children.length; i < n; i++){
518
+ var transform = children[i].transform;
519
+ if (!transform) continue;
520
+ transform._isParentDirty = true;
521
+ if (typeof transform._propagateReparentDirtyUI === "function") {
522
+ transform._propagateReparentDirtyUI(flags);
523
+ } else if (typeof transform._propagateReparentDirty === "function") {
524
+ transform._propagateReparentDirty(flags);
525
+ }
526
+ }
527
+ if (selfChange) {
528
+ // @ts-ignore
529
+ this._entity._updateFlagManager.dispatch(512);
530
+ }
531
+ };
532
+ // @ts-ignore
533
+ _proto._cloneTo = function _cloneTo(target) {
534
+ // @ts-ignore
535
+ Transform.prototype._cloneTo.call(this, target);
536
+ var size = target._size, pivot = target._pivot;
537
+ // @ts-ignore
538
+ size._onValueChanged = pivot._onValueChanged = null;
539
+ size.copyFrom(this._size);
540
+ pivot.copyFrom(this._pivot);
541
+ // @ts-ignore
542
+ size._onValueChanged = target._onSizeChanged;
543
+ // @ts-ignore
544
+ pivot._onValueChanged = target._onPivotChanged;
545
+ };
546
+ _proto._onLocalMatrixChanging = function _onLocalMatrixChanging() {
547
+ // `super._onLocalMatrixChanging()` will set `LocalMatrix` dirty flag `false`
548
+ // If there is an alignment, `position` and `localMatrix` will be reset again
549
+ if (this._horizontalAlignment || this._verticalAlignment) {
550
+ this._updatePositionByAlignment();
551
+ this._setDirtyFlagTrue(engine.TransformModifyFlags.LocalMatrix);
552
+ } else {
553
+ Transform.prototype._onLocalMatrixChanging.call(this);
554
+ }
555
+ };
556
+ _proto._onWorldMatrixChanging = function _onWorldMatrixChanging() {
557
+ // `super._onWorldMatrixChanging()` will set `WorldMatrix` dirty flag `false`
558
+ // If there is an alignment, `position` and `worldMatrix` will be reset again(`worldMatrix` dirty flag is already `true`)
559
+ !this._horizontalAlignment && !this._verticalAlignment && Transform.prototype._onWorldMatrixChanging.call(this);
560
+ };
561
+ _proto._onPositionChanged = function _onPositionChanged() {
562
+ (this._horizontalAlignment || this._verticalAlignment) && this._updatePositionByAlignment();
563
+ Transform.prototype._onPositionChanged.call(this);
564
+ };
565
+ _proto._onWorldPositionChanged = function _onWorldPositionChanged() {
566
+ Transform.prototype._onWorldPositionChanged.call(this);
567
+ if (this._horizontalAlignment || this._verticalAlignment) {
568
+ this._setDirtyFlagTrue(engine.TransformModifyFlags.WorldPosition);
569
+ }
570
+ };
571
+ _proto._updatePositionByAlignment = function _updatePositionByAlignment() {
572
+ var _this__getParentTransform;
573
+ var parentRect = (_this__getParentTransform = this._getParentTransform()) == null ? void 0 : _this__getParentTransform._rect;
574
+ if (parentRect) {
575
+ var position = this.position;
576
+ // @ts-ignore
577
+ position._onValueChanged = null;
578
+ var rect = this._rect;
579
+ switch(this._horizontalAlignment){
580
+ case HorizontalAlignmentMode.Left:
581
+ case HorizontalAlignmentMode.LeftAndRight:
582
+ position.x = parentRect.x - rect.x + this._alignLeft;
583
+ break;
584
+ case HorizontalAlignmentMode.Center:
585
+ position.x = parentRect.x + parentRect.width * 0.5 - rect.x - rect.width * 0.5 + this._alignCenter;
586
+ break;
587
+ case HorizontalAlignmentMode.Right:
588
+ position.x = parentRect.x + parentRect.width - rect.x - rect.width - this._alignRight;
589
+ break;
590
+ }
591
+ switch(this._verticalAlignment){
592
+ case VerticalAlignmentMode.Top:
593
+ position.y = parentRect.y + parentRect.height - rect.y - rect.height - this._alignTop;
594
+ break;
595
+ case VerticalAlignmentMode.Middle:
596
+ position.y = parentRect.y + parentRect.height * 0.5 - rect.y - rect.height * 0.5 + this._alignMiddle;
597
+ break;
598
+ case VerticalAlignmentMode.Bottom:
599
+ case VerticalAlignmentMode.TopAndBottom:
600
+ position.y = parentRect.y - rect.y + this._alignBottom;
601
+ break;
602
+ }
603
+ // @ts-ignore
604
+ position._onValueChanged = this._onPositionChanged;
605
+ }
606
+ };
607
+ _proto._updateSizeByAlignment = function _updateSizeByAlignment() {
608
+ var _this__getParentTransform;
609
+ var parentRect = (_this__getParentTransform = this._getParentTransform()) == null ? void 0 : _this__getParentTransform._rect;
610
+ if (parentRect) {
611
+ var size = this._size;
612
+ // @ts-ignore
613
+ size._onValueChanged = null;
614
+ // The values of size must be greater than 0
615
+ if (this._horizontalAlignment === HorizontalAlignmentMode.LeftAndRight) {
616
+ size.x = Math.max(parentRect.width - this._alignLeft - this._alignRight, 0);
617
+ }
618
+ if (this._verticalAlignment === VerticalAlignmentMode.TopAndBottom) {
619
+ size.y = Math.max(parentRect.height - this._alignTop - this._alignBottom, 0);
620
+ }
621
+ // @ts-ignore
622
+ size._onValueChanged = this._onSizeChanged;
623
+ }
624
+ };
625
+ _proto._updateRectBySizeAndPivot = function _updateRectBySizeAndPivot() {
626
+ var _this = this, size = _this.size, pivot = _this._pivot;
627
+ var x = -pivot.x * size.x;
628
+ var y = -pivot.y * size.y;
629
+ this._rect.set(x, y, size.x, size.y);
630
+ };
631
+ _proto._onSizeChanged = function _onSizeChanged() {
632
+ if (this._horizontalAlignment === HorizontalAlignmentMode.LeftAndRight || this._verticalAlignment === VerticalAlignmentMode.TopAndBottom) {
633
+ this._updateSizeByAlignment();
634
+ }
635
+ this._updateRectBySizeAndPivot();
636
+ this._updateWorldFlagWithSelfRectChange();
637
+ // @ts-ignore
638
+ this._entity._updateFlagManager.dispatch(512);
639
+ };
640
+ _proto._onPivotChanged = function _onPivotChanged() {
641
+ this._updateRectBySizeAndPivot();
642
+ this._updateWorldFlagWithSelfRectChange();
643
+ // @ts-ignore
644
+ this._entity._updateFlagManager.dispatch(1024);
645
+ };
646
+ _proto._updateWorldFlagWithSelfRectChange = function _updateWorldFlagWithSelfRectChange() {
647
+ var worldFlags = 0;
648
+ if (this._horizontalAlignment || this._verticalAlignment) {
649
+ this._updatePositionByAlignment();
650
+ this._setDirtyFlagTrue(engine.TransformModifyFlags.LocalMatrix);
651
+ worldFlags = engine.TransformModifyFlags.WmWp;
652
+ !this._isContainDirtyFlags(worldFlags) && this._worldAssociatedChange(worldFlags);
653
+ }
654
+ var children = this.entity.children;
655
+ for(var i = 0, n = children.length; i < n; i++){
656
+ var _children_i_transform__updateWorldFlagWithParentRectChange, _children_i_transform;
657
+ (_children_i_transform = children[i].transform) == null ? void 0 : (_children_i_transform__updateWorldFlagWithParentRectChange = _children_i_transform._updateWorldFlagWithParentRectChange) == null ? void 0 : _children_i_transform__updateWorldFlagWithParentRectChange.call(_children_i_transform, worldFlags);
658
+ }
659
+ };
660
+ _proto._updateWorldFlagWithParentRectChange = function _updateWorldFlagWithParentRectChange(flags, parentChange) {
661
+ if (parentChange === void 0) parentChange = true;
662
+ var selfChange = false;
663
+ if (parentChange) {
664
+ var _this = this, horizontalAlignment = _this._horizontalAlignment, verticalAlignment = _this._verticalAlignment;
665
+ if (horizontalAlignment || verticalAlignment) {
666
+ if (horizontalAlignment === HorizontalAlignmentMode.LeftAndRight || verticalAlignment === VerticalAlignmentMode.TopAndBottom) {
667
+ this._updateSizeByAlignment();
668
+ this._updateRectBySizeAndPivot();
669
+ selfChange = true;
670
+ }
671
+ this._updatePositionByAlignment();
672
+ this._setDirtyFlagTrue(engine.TransformModifyFlags.LocalMatrix);
673
+ flags |= engine.TransformModifyFlags.WmWp;
674
+ }
675
+ }
676
+ var containDirtyFlags = this._isContainDirtyFlags(flags);
677
+ !containDirtyFlags && this._worldAssociatedChange(flags);
678
+ if (selfChange || !containDirtyFlags) {
679
+ var children = this.entity.children;
680
+ for(var i = 0, n = children.length; i < n; i++){
681
+ var _children_i_transform__updateWorldFlagWithParentRectChange, _children_i_transform;
682
+ (_children_i_transform = children[i].transform) == null ? void 0 : (_children_i_transform__updateWorldFlagWithParentRectChange = _children_i_transform._updateWorldFlagWithParentRectChange) == null ? void 0 : _children_i_transform__updateWorldFlagWithParentRectChange.call(_children_i_transform, flags, selfChange);
683
+ }
684
+ }
685
+ // @ts-ignore
686
+ selfChange && this._entity._updateFlagManager.dispatch(512);
687
+ };
688
+ _create_class(UITransform, [
689
+ {
690
+ key: "size",
691
+ get: /**
692
+ * Width and height of UI element.
693
+ */ function get() {
694
+ return this._size;
695
+ },
696
+ set: function set(value) {
697
+ var _this = this, size = _this._size;
698
+ if (size === value) return;
699
+ (size.x !== value.x || size.y !== value.y) && size.copyFrom(value);
700
+ }
701
+ },
702
+ {
703
+ key: "pivot",
704
+ get: /**
705
+ * Pivot of UI element.
706
+ */ function get() {
707
+ return this._pivot;
708
+ },
709
+ set: function set(value) {
710
+ var _this = this, pivot = _this._pivot;
711
+ if (pivot === value) return;
712
+ (pivot.x !== value.x || pivot.y !== value.y) && pivot.copyFrom(value);
713
+ }
714
+ },
715
+ {
716
+ key: "horizontalAlignment",
717
+ get: /**
718
+ * Horizontal alignment mode.
719
+ *
720
+ * @remarks
721
+ * Controls how the element aligns horizontally within its parent:
722
+ * - `Left` - Align to parent's left edge
723
+ * - `Center` - Align to parent's horizontal center
724
+ * - `Right` - Align to parent's right edge
725
+ * - `LeftAndRight` - Align to both left and right edges (stretch to fill width)
726
+ */ function get() {
727
+ return this._horizontalAlignment;
728
+ },
729
+ set: function set(value) {
730
+ if (this._horizontalAlignment === value) return;
731
+ this._horizontalAlignment = value;
732
+ switch(value){
733
+ case HorizontalAlignmentMode.Left:
734
+ case HorizontalAlignmentMode.Right:
735
+ case HorizontalAlignmentMode.Center:
736
+ this._onPositionChanged();
737
+ break;
738
+ case HorizontalAlignmentMode.LeftAndRight:
739
+ this._onPositionChanged();
740
+ this._onSizeChanged();
741
+ break;
742
+ }
743
+ }
744
+ },
745
+ {
746
+ key: "alignLeft",
747
+ get: /**
748
+ * Left margin when horizontalAlignment is Left or LeftAndRight.
749
+ *
750
+ * @remarks
751
+ * Only effective when horizontalAlignment includes Left mode.
752
+ * Distance from the parent's left edge to the element's left edge.
753
+ */ function get() {
754
+ return this._alignLeft;
755
+ },
756
+ set: function set(value) {
757
+ if (!Number.isFinite(value)) return;
758
+ if (engine.MathUtil.equals(value, this._alignLeft)) return;
759
+ this._alignLeft = value;
760
+ if (this._horizontalAlignment & HorizontalAlignmentMode.Left) {
761
+ this._onPositionChanged();
762
+ this._horizontalAlignment & HorizontalAlignmentMode.Right && this._onSizeChanged();
763
+ }
764
+ }
765
+ },
766
+ {
767
+ key: "alignRight",
768
+ get: /**
769
+ * Right margin when horizontalAlignment is Right or LeftAndRight.
770
+ *
771
+ * @remarks
772
+ * Only effective when horizontalAlignment includes Right mode.
773
+ * Distance from the parent's right edge to the element's right edge.
774
+ */ function get() {
775
+ return this._alignRight;
776
+ },
777
+ set: function set(value) {
778
+ if (!Number.isFinite(value)) return;
779
+ if (engine.MathUtil.equals(value, this._alignRight)) return;
780
+ this._alignRight = value;
781
+ if (this._horizontalAlignment & HorizontalAlignmentMode.Right) {
782
+ this._onPositionChanged();
783
+ this._horizontalAlignment & HorizontalAlignmentMode.Left && this._onSizeChanged();
784
+ }
785
+ }
786
+ },
787
+ {
788
+ key: "alignCenter",
789
+ get: /**
790
+ * Horizontal center offset when horizontalAlignment is Center.
791
+ *
792
+ * @remarks
793
+ * Only effective when horizontalAlignment is Center mode.
794
+ * Positive values move the element to the right, negative values to the left.
795
+ */ function get() {
796
+ return this._alignCenter;
797
+ },
798
+ set: function set(value) {
799
+ if (!Number.isFinite(value)) return;
800
+ if (engine.MathUtil.equals(value, this._alignCenter)) return;
801
+ this._alignCenter = value;
802
+ this._horizontalAlignment & HorizontalAlignmentMode.Center && this._onPositionChanged();
803
+ }
804
+ },
805
+ {
806
+ key: "verticalAlignment",
807
+ get: /**
808
+ * Vertical alignment mode.
809
+ *
810
+ * @remarks
811
+ * Controls how the element aligns vertically within its parent:
812
+ * - `Top` - Align to parent's top edge
813
+ * - `Middle` - Align to parent's vertical center
814
+ * - `Bottom` - Align to parent's bottom edge
815
+ * - `TopAndBottom` - Align to both top and bottom edges (stretch to fill height)
816
+ */ function get() {
817
+ return this._verticalAlignment;
818
+ },
819
+ set: function set(value) {
820
+ if (this._verticalAlignment === value) return;
821
+ this._verticalAlignment = value;
822
+ switch(value){
823
+ case VerticalAlignmentMode.Top:
824
+ case VerticalAlignmentMode.Bottom:
825
+ case VerticalAlignmentMode.Middle:
826
+ this._onPositionChanged();
827
+ break;
828
+ case VerticalAlignmentMode.TopAndBottom:
829
+ this._onPositionChanged();
830
+ this._onSizeChanged();
831
+ break;
832
+ }
833
+ }
834
+ },
835
+ {
836
+ key: "alignTop",
837
+ get: /**
838
+ * Top margin when verticalAlignment is Top or TopAndBottom.
839
+ *
840
+ * @remarks
841
+ * Only effective when verticalAlignment includes Top mode.
842
+ * Used to offset the element from the parent's top edge.
843
+ */ function get() {
844
+ return this._alignTop;
845
+ },
846
+ set: function set(value) {
847
+ if (!Number.isFinite(value)) return;
848
+ if (engine.MathUtil.equals(value, this._alignTop)) return;
849
+ this._alignTop = value;
850
+ if (this._verticalAlignment & VerticalAlignmentMode.Top) {
851
+ this._onPositionChanged();
852
+ this._verticalAlignment & VerticalAlignmentMode.Bottom && this._onSizeChanged();
853
+ }
854
+ }
855
+ },
856
+ {
857
+ key: "alignBottom",
858
+ get: /**
859
+ * Bottom inset used in vertical alignment formulas.
860
+ */ function get() {
861
+ return this._alignBottom;
862
+ },
863
+ set: function set(value) {
864
+ if (!Number.isFinite(value)) return;
865
+ if (engine.MathUtil.equals(value, this._alignBottom)) return;
866
+ this._alignBottom = value;
867
+ if (this._verticalAlignment & VerticalAlignmentMode.Bottom) {
868
+ this._onPositionChanged();
869
+ this._verticalAlignment & VerticalAlignmentMode.Top && this._onSizeChanged();
870
+ }
871
+ }
872
+ },
873
+ {
874
+ key: "alignMiddle",
875
+ get: /**
876
+ * Vertical middle offset relative to parent's middle.
877
+ */ function get() {
878
+ return this._alignMiddle;
879
+ },
880
+ set: function set(value) {
881
+ if (!Number.isFinite(value)) return;
882
+ if (engine.MathUtil.equals(value, this._alignMiddle)) return;
883
+ this._alignMiddle = value;
884
+ this._verticalAlignment & VerticalAlignmentMode.Middle && this._onPositionChanged();
885
+ }
886
+ }
887
+ ]);
888
+ return UITransform;
889
+ }(engine.Transform);
890
+ __decorate([
891
+ engine.ignoreClone
892
+ ], UITransform.prototype, "_size", void 0);
893
+ __decorate([
894
+ engine.ignoreClone
895
+ ], UITransform.prototype, "_pivot", void 0);
896
+ __decorate([
897
+ engine.deepClone
898
+ ], UITransform.prototype, "_rect", void 0);
899
+ __decorate([
900
+ engine.ignoreClone
901
+ ], UITransform.prototype, "_onPositionChanged", null);
902
+ __decorate([
903
+ engine.ignoreClone
904
+ ], UITransform.prototype, "_onWorldPositionChanged", null);
905
+ __decorate([
906
+ engine.ignoreClone
907
+ ], UITransform.prototype, "_onSizeChanged", null);
908
+ __decorate([
909
+ engine.ignoreClone
910
+ ], UITransform.prototype, "_onPivotChanged", null);
911
+ /**
912
+ * @internal
913
+ * extends TransformModifyFlags
914
+ */ var UITransformModifyFlags = /*#__PURE__*/ function(UITransformModifyFlags) {
915
+ UITransformModifyFlags[UITransformModifyFlags["Size"] = 512] = "Size";
916
+ UITransformModifyFlags[UITransformModifyFlags["Pivot"] = 1024] = "Pivot";
917
+ return UITransformModifyFlags;
918
+ }({});
919
+
920
+ exports.UIRenderer = /*#__PURE__*/ function(Renderer) {
921
+ _inherits(UIRenderer, Renderer);
922
+ function UIRenderer(entity) {
923
+ var _this;
924
+ _this = Renderer.call(this, entity) || this, /**
925
+ * Custom boundary for raycast detection.
926
+ * @remarks this is based on `this.entity.transform`.
927
+ */ _this.raycastPadding = new engine.Vector4(0, 0, 0, 0), /** @internal */ _this._indexInRootCanvas = -1, /** @internal */ _this._isRootCanvasDirty = false, /** @internal */ _this._rootCanvasListeningEntities = [], /** @internal */ _this._indexInGroup = -1, /** @internal */ _this._isGroupDirty = false, /** @internal */ _this._groupListeningEntities = [], _this._raycastEnabled = false, _this._color = new engine.Color(1, 1, 1, 1);
928
+ _this._dirtyUpdateFlag = engine.RendererUpdateFlags.WorldVolume | 2;
929
+ _this._onColorChanged = _this._onColorChanged.bind(_this);
930
+ //@ts-ignore
931
+ _this._color._onValueChanged = _this._onColorChanged;
932
+ _this._groupListener = _this._groupListener.bind(_this);
933
+ _this._rootCanvasListener = _this._rootCanvasListener.bind(_this);
934
+ return _this;
935
+ }
936
+ var _proto = UIRenderer.prototype;
937
+ // @ts-ignore
938
+ _proto._canBatch = function _canBatch(elementA, elementB) {
939
+ return engine.BatchUtils.canBatchSprite(elementA, elementB);
940
+ };
941
+ // @ts-ignore
942
+ _proto._batch = function _batch(elementA, elementB) {
943
+ engine.BatchUtils.batchFor2D(elementA, elementB);
944
+ };
945
+ // @ts-ignore
946
+ _proto._updateTransformShaderData = function _updateTransformShaderData(context, onlyMVP, batched) {
947
+ // @ts-ignore
948
+ Renderer.prototype._updateTransformShaderData.call(this, context, onlyMVP, true);
949
+ };
950
+ // @ts-ignore
951
+ _proto._prepareRender = function _prepareRender(context) {
952
+ // Update once per frame per renderer, not influenced by batched
953
+ if (this._renderFrameCount !== this.engine.time.frameCount) {
954
+ this._update(context);
955
+ }
956
+ this._render(context);
957
+ // union camera global macro and renderer macro.
958
+ engine.ShaderMacroCollection.unionCollection(context.camera._globalShaderMacro, // @ts-ignore
959
+ this.shaderData._macroCollection, //@ts-ignore
960
+ this._globalShaderMacro);
961
+ };
962
+ // @ts-ignore
963
+ _proto._onEnableInScene = function _onEnableInScene() {
964
+ // @ts-ignore
965
+ this._overrideUpdate && this.scene._componentsManager.addOnUpdateRenderers(this);
966
+ this.entity._updateUIHierarchyVersion(exports.UICanvas._hierarchyCounter);
967
+ Utils.setRootCanvasDirty(this);
968
+ Utils.setGroupDirty(this);
969
+ };
970
+ // @ts-ignore
971
+ _proto._onDisableInScene = function _onDisableInScene() {
972
+ // @ts-ignore
973
+ this._overrideUpdate && this.scene._componentsManager.removeOnUpdateRenderers(this);
974
+ this.entity._updateUIHierarchyVersion(exports.UICanvas._hierarchyCounter);
975
+ Utils.cleanRootCanvas(this);
976
+ Utils.cleanGroup(this);
977
+ };
978
+ /**
979
+ * @internal
980
+ */ _proto._getGlobalAlpha = function _getGlobalAlpha() {
981
+ var _this__getGroup;
982
+ var _this__getGroup__getGlobalAlpha;
983
+ return (_this__getGroup__getGlobalAlpha = (_this__getGroup = this._getGroup()) == null ? void 0 : _this__getGroup._getGlobalAlpha()) != null ? _this__getGroup__getGlobalAlpha : 1;
984
+ };
985
+ /**
986
+ * @internal
987
+ */ _proto._getRootCanvas = function _getRootCanvas() {
988
+ this._isRootCanvasDirty && Utils.setRootCanvas(this, Utils.searchRootCanvasInParents(this));
989
+ return this._rootCanvas;
990
+ };
991
+ /**
992
+ * @internal
993
+ */ _proto._getGroup = function _getGroup() {
994
+ this._isGroupDirty && Utils.setGroup(this, Utils.searchGroupInParents(this));
995
+ return this._group;
996
+ };
997
+ /**
998
+ * @internal
999
+ */ _proto._groupListener = function _groupListener(flag) {
1000
+ if (flag === engine.EntityModifyFlags.Parent || flag === EntityUIModifyFlags.GroupEnableInScene) {
1001
+ Utils.setGroupDirty(this);
1002
+ }
1003
+ };
1004
+ /**
1005
+ * @internal
1006
+ */ _proto._rootCanvasListener = function _rootCanvasListener(flag, entity) {
1007
+ switch(flag){
1008
+ case engine.EntityModifyFlags.Parent:
1009
+ Utils.setRootCanvasDirty(this);
1010
+ Utils.setGroupDirty(this);
1011
+ case engine.EntityModifyFlags.Child:
1012
+ entity._updateUIHierarchyVersion(exports.UICanvas._hierarchyCounter);
1013
+ break;
1014
+ }
1015
+ };
1016
+ /**
1017
+ * @internal
1018
+ */ _proto._onGroupModify = function _onGroupModify(flags) {
1019
+ if (flags & GroupModifyFlags.GlobalAlpha) {
1020
+ this._dirtyUpdateFlag |= 2;
1021
+ }
1022
+ };
1023
+ _proto._onColorChanged = function _onColorChanged() {
1024
+ this._dirtyUpdateFlag |= 2;
1025
+ };
1026
+ /**
1027
+ * @internal
1028
+ */ _proto._getChunkManager = function _getChunkManager() {
1029
+ // @ts-ignore
1030
+ return this.engine._batcherManager.primitiveChunkManagerUI;
1031
+ };
1032
+ /**
1033
+ * @internal
1034
+ */ _proto._raycast = function _raycast(ray, out, distance) {
1035
+ if (distance === void 0) distance = Number.MAX_SAFE_INTEGER;
1036
+ var plane = UIRenderer._tempPlane;
1037
+ var transform = this._transformEntity.transform;
1038
+ var normal = plane.normal.copyFrom(transform.worldForward);
1039
+ plane.distance = -engine.Vector3.dot(normal, transform.worldPosition);
1040
+ var curDistance = ray.intersectPlane(plane);
1041
+ if (curDistance >= 0 && curDistance < distance) {
1042
+ var hitPointWorld = ray.getPoint(curDistance, UIRenderer._tempVec30);
1043
+ var worldMatrixInv = UIRenderer._tempMat;
1044
+ engine.Matrix.invert(transform.worldMatrix, worldMatrixInv);
1045
+ var localPosition = UIRenderer._tempVec31;
1046
+ engine.Vector3.transformCoordinate(hitPointWorld, worldMatrixInv, localPosition);
1047
+ if (this._hitTest(localPosition)) {
1048
+ out.component = this;
1049
+ out.distance = curDistance;
1050
+ out.entity = this.entity;
1051
+ out.normal.copyFrom(normal);
1052
+ out.point.copyFrom(hitPointWorld);
1053
+ return true;
1054
+ }
1055
+ }
1056
+ return false;
1057
+ };
1058
+ _proto._hitTest = function _hitTest(localPosition) {
1059
+ var x = localPosition.x, y = localPosition.y;
1060
+ var uiTransform = this._transformEntity.transform;
1061
+ var _uiTransform_size = uiTransform.size, width = _uiTransform_size.x, height = _uiTransform_size.y;
1062
+ var _uiTransform_pivot = uiTransform.pivot, pivotX = _uiTransform_pivot.x, pivotY = _uiTransform_pivot.y;
1063
+ var _this_raycastPadding = this.raycastPadding, paddingLeft = _this_raycastPadding.x, paddingBottom = _this_raycastPadding.y, paddingRight = _this_raycastPadding.z, paddingTop = _this_raycastPadding.w;
1064
+ return x >= -width * pivotX + paddingLeft && x <= width * (1 - pivotX) - paddingRight && y >= -height * pivotY + paddingTop && y <= height * (1 - pivotY) - paddingBottom;
1065
+ };
1066
+ _proto._onDestroy = function _onDestroy() {
1067
+ if (this._subChunk) {
1068
+ this._getChunkManager().freeSubChunk(this._subChunk);
1069
+ this._subChunk = null;
1070
+ }
1071
+ Renderer.prototype._onDestroy.call(this);
1072
+ //@ts-ignore
1073
+ this._color._onValueChanged = null;
1074
+ this._color = null;
1075
+ };
1076
+ _create_class(UIRenderer, [
1077
+ {
1078
+ key: "color",
1079
+ get: /**
1080
+ * Rendering color for the ui renderer.
1081
+ */ function get() {
1082
+ return this._color;
1083
+ },
1084
+ set: function set(value) {
1085
+ if (this._color !== value) {
1086
+ this._color.copyFrom(value);
1087
+ }
1088
+ }
1089
+ },
1090
+ {
1091
+ key: "raycastEnabled",
1092
+ get: /**
1093
+ * Whether this renderer be picked up by raycast.
1094
+ */ function get() {
1095
+ return this._raycastEnabled;
1096
+ },
1097
+ set: function set(value) {
1098
+ this._raycastEnabled = value;
1099
+ }
1100
+ }
1101
+ ]);
1102
+ return UIRenderer;
1103
+ }(engine.Renderer);
1104
+ /** @internal */ exports.UIRenderer._tempVec30 = new engine.Vector3();
1105
+ /** @internal */ exports.UIRenderer._tempVec31 = new engine.Vector3();
1106
+ /** @internal */ exports.UIRenderer._tempMat = new engine.Matrix();
1107
+ /** @internal */ exports.UIRenderer._tempPlane = new engine.Plane();
1108
+ /** @internal */ exports.UIRenderer._textureProperty = engine.ShaderProperty.getByName("renderer_UITexture");
1109
+ __decorate([
1110
+ engine.deepClone
1111
+ ], exports.UIRenderer.prototype, "raycastPadding", void 0);
1112
+ __decorate([
1113
+ engine.ignoreClone
1114
+ ], exports.UIRenderer.prototype, "_indexInRootCanvas", void 0);
1115
+ __decorate([
1116
+ engine.ignoreClone
1117
+ ], exports.UIRenderer.prototype, "_isRootCanvasDirty", void 0);
1118
+ __decorate([
1119
+ engine.ignoreClone
1120
+ ], exports.UIRenderer.prototype, "_rootCanvasListeningEntities", void 0);
1121
+ __decorate([
1122
+ engine.ignoreClone
1123
+ ], exports.UIRenderer.prototype, "_indexInGroup", void 0);
1124
+ __decorate([
1125
+ engine.ignoreClone
1126
+ ], exports.UIRenderer.prototype, "_isGroupDirty", void 0);
1127
+ __decorate([
1128
+ engine.ignoreClone
1129
+ ], exports.UIRenderer.prototype, "_groupListeningEntities", void 0);
1130
+ __decorate([
1131
+ engine.ignoreClone
1132
+ ], exports.UIRenderer.prototype, "_subChunk", void 0);
1133
+ __decorate([
1134
+ engine.assignmentClone
1135
+ ], exports.UIRenderer.prototype, "_raycastEnabled", void 0);
1136
+ __decorate([
1137
+ engine.deepClone
1138
+ ], exports.UIRenderer.prototype, "_color", void 0);
1139
+ __decorate([
1140
+ engine.ignoreClone
1141
+ ], exports.UIRenderer.prototype, "_groupListener", null);
1142
+ __decorate([
1143
+ engine.ignoreClone
1144
+ ], exports.UIRenderer.prototype, "_rootCanvasListener", null);
1145
+ __decorate([
1146
+ engine.ignoreClone
1147
+ ], exports.UIRenderer.prototype, "_onColorChanged", null);
1148
+ exports.UIRenderer = __decorate([
1149
+ engine.dependentComponents(UITransform, engine.DependentMode.AutoAdd)
1150
+ ], exports.UIRenderer);
1151
+ /**
1152
+ * @remarks Extends `RendererUpdateFlags`.
1153
+ */ var UIRendererUpdateFlags = /*#__PURE__*/ function(UIRendererUpdateFlags) {
1154
+ UIRendererUpdateFlags[UIRendererUpdateFlags["Color"] = 2] = "Color";
1155
+ return UIRendererUpdateFlags;
1156
+ }({});
1157
+
1158
+ /**
1159
+ * Interactive component.
1160
+ */ var UIInteractive = /*#__PURE__*/ function(Script) {
1161
+ _inherits(UIInteractive, Script);
1162
+ function UIInteractive(entity) {
1163
+ var _this;
1164
+ _this = Script.call(this, entity) || this, /** @internal */ _this._indexInRootCanvas = -1, /** @internal */ _this._isRootCanvasDirty = false, /** @internal */ _this._rootCanvasListeningEntities = [], /** @internal */ _this._indexInGroup = -1, /** @internal */ _this._isGroupDirty = false, /** @internal */ _this._groupListeningEntities = [], /** @internal */ _this._globalInteractive = false, /** @internal */ _this._globalInteractiveDirty = false, _this._transitions = [], _this._interactive = true, _this._state = 0, /** @todo Multi-touch points are not considered yet. */ _this._isPointerInside = false, _this._isPointerDragging = false;
1165
+ _this._groupListener = _this._groupListener.bind(_this);
1166
+ _this._rootCanvasListener = _this._rootCanvasListener.bind(_this);
1167
+ return _this;
1168
+ }
1169
+ var _proto = UIInteractive.prototype;
1170
+ /**
1171
+ * Add transition on this interactive.
1172
+ * @param transition - The transition
1173
+ */ _proto.addTransition = function addTransition(transition) {
1174
+ var interactive = transition._interactive;
1175
+ if (interactive !== this) {
1176
+ interactive == null ? void 0 : interactive.removeTransition(transition);
1177
+ this._transitions.push(transition);
1178
+ transition._interactive = this;
1179
+ transition._setState(this._state, true);
1180
+ }
1181
+ };
1182
+ /**
1183
+ * Remove a transition.
1184
+ * @param shape - The transition.
1185
+ */ _proto.removeTransition = function removeTransition(transition) {
1186
+ var transitions = this._transitions;
1187
+ var lastOneIndex = transitions.length - 1;
1188
+ for(var i = lastOneIndex; i >= 0; i--){
1189
+ if (transitions[i] === transition) {
1190
+ i !== lastOneIndex && (transitions[i] = transitions[lastOneIndex]);
1191
+ transitions.length = lastOneIndex;
1192
+ transition._interactive = null;
1193
+ break;
1194
+ }
1195
+ }
1196
+ };
1197
+ /**
1198
+ * Remove all transitions.
1199
+ */ _proto.clearTransitions = function clearTransitions() {
1200
+ var transitions = this._transitions;
1201
+ for(var i = 0, n = transitions.length; i < n; i++){
1202
+ transitions[i]._interactive = null;
1203
+ }
1204
+ transitions.length = 0;
1205
+ };
1206
+ _proto.onUpdate = function onUpdate(deltaTime) {
1207
+ if (this._getGlobalInteractive()) {
1208
+ var transitions = this._transitions;
1209
+ for(var i = 0, n = transitions.length; i < n; i++){
1210
+ transitions[i]._onUpdate(deltaTime);
1211
+ }
1212
+ }
1213
+ };
1214
+ _proto.onPointerBeginDrag = function onPointerBeginDrag() {
1215
+ this._isPointerDragging = true;
1216
+ this._updateState(false);
1217
+ };
1218
+ _proto.onPointerEndDrag = function onPointerEndDrag() {
1219
+ this._isPointerDragging = false;
1220
+ this._updateState(false);
1221
+ };
1222
+ _proto.onPointerEnter = function onPointerEnter() {
1223
+ this._isPointerInside = true;
1224
+ this._updateState(false);
1225
+ };
1226
+ _proto.onPointerExit = function onPointerExit() {
1227
+ this._isPointerInside = false;
1228
+ this._updateState(false);
1229
+ };
1230
+ _proto.onDestroy = function onDestroy() {
1231
+ Script.prototype.onDestroy.call(this);
1232
+ var transitions = this._transitions;
1233
+ for(var i = transitions.length - 1; i >= 0; i--){
1234
+ transitions[i].destroy();
1235
+ }
1236
+ };
1237
+ /**
1238
+ * @internal
1239
+ */ _proto._getRootCanvas = function _getRootCanvas() {
1240
+ this._isRootCanvasDirty && Utils.setRootCanvas(this, Utils.searchRootCanvasInParents(this));
1241
+ return this._rootCanvas;
1242
+ };
1243
+ /**
1244
+ * @internal
1245
+ */ _proto._getGroup = function _getGroup() {
1246
+ this._isGroupDirty && Utils.setGroup(this, Utils.searchGroupInParents(this));
1247
+ return this._group;
1248
+ };
1249
+ // @ts-ignore
1250
+ _proto._onEnableInScene = function _onEnableInScene() {
1251
+ // @ts-ignore
1252
+ Script.prototype._onEnableInScene.call(this);
1253
+ Utils.setRootCanvasDirty(this);
1254
+ Utils.setGroupDirty(this);
1255
+ this._updateState(true);
1256
+ };
1257
+ // @ts-ignore
1258
+ _proto._onDisableInScene = function _onDisableInScene() {
1259
+ // @ts-ignore
1260
+ Script.prototype._onDisableInScene.call(this);
1261
+ Utils.cleanRootCanvas(this);
1262
+ Utils.cleanGroup(this);
1263
+ this._isPointerInside = this._isPointerDragging = false;
1264
+ };
1265
+ /**
1266
+ * @internal
1267
+ */ _proto._groupListener = function _groupListener(flag) {
1268
+ if (flag === engine.EntityModifyFlags.Parent || flag === EntityUIModifyFlags.GroupEnableInScene) {
1269
+ Utils.setGroupDirty(this);
1270
+ }
1271
+ };
1272
+ /**
1273
+ * @internal
1274
+ */ _proto._rootCanvasListener = function _rootCanvasListener(flag) {
1275
+ if (flag === engine.EntityModifyFlags.Parent || flag === EntityUIModifyFlags.CanvasEnableInScene) {
1276
+ Utils.setRootCanvasDirty(this);
1277
+ Utils.setGroupDirty(this);
1278
+ }
1279
+ };
1280
+ /**
1281
+ * @internal
1282
+ */ _proto._onGroupModify = function _onGroupModify(flags) {
1283
+ if (flags & GroupModifyFlags.GlobalInteractive) {
1284
+ this._globalInteractiveDirty = true;
1285
+ }
1286
+ };
1287
+ /**
1288
+ * @internal
1289
+ */ _proto._getGlobalInteractive = function _getGlobalInteractive() {
1290
+ if (this._globalInteractiveDirty) {
1291
+ var group = this._getGroup();
1292
+ var globalInteractive = this._interactive && (!group || group._getGlobalInteractive());
1293
+ if (this._globalInteractive !== globalInteractive) {
1294
+ this._globalInteractive = globalInteractive;
1295
+ this._updateState(true);
1296
+ }
1297
+ this._globalInteractiveDirty = false;
1298
+ }
1299
+ return this._globalInteractive;
1300
+ };
1301
+ _proto._updateState = function _updateState(instant) {
1302
+ var state = this._getInteractiveState();
1303
+ if (this._state !== state) {
1304
+ this._state = state;
1305
+ var transitions = this._transitions;
1306
+ for(var i = 0, n = transitions.length; i < n; i++){
1307
+ transitions[i]._setState(state, instant);
1308
+ }
1309
+ }
1310
+ };
1311
+ _proto._getInteractiveState = function _getInteractiveState() {
1312
+ if (!this._getGlobalInteractive()) {
1313
+ return 3;
1314
+ }
1315
+ if (this._isPointerDragging) {
1316
+ return 1;
1317
+ } else {
1318
+ return this._isPointerInside ? 2 : 0;
1319
+ }
1320
+ };
1321
+ _create_class(UIInteractive, [
1322
+ {
1323
+ key: "transitions",
1324
+ get: /**
1325
+ * The transitions of this interactive.
1326
+ */ function get() {
1327
+ return this._transitions;
1328
+ }
1329
+ },
1330
+ {
1331
+ key: "interactive",
1332
+ get: /**
1333
+ * Whether the interactive is enabled.
1334
+ */ function get() {
1335
+ return this._interactive;
1336
+ },
1337
+ set: function set(value) {
1338
+ if (this._interactive !== value) {
1339
+ this._interactive = value;
1340
+ this._globalInteractiveDirty = true;
1341
+ }
1342
+ }
1343
+ }
1344
+ ]);
1345
+ return UIInteractive;
1346
+ }(engine.Script);
1347
+ __decorate([
1348
+ engine.ignoreClone
1349
+ ], UIInteractive.prototype, "_indexInRootCanvas", void 0);
1350
+ __decorate([
1351
+ engine.ignoreClone
1352
+ ], UIInteractive.prototype, "_isRootCanvasDirty", void 0);
1353
+ __decorate([
1354
+ engine.ignoreClone
1355
+ ], UIInteractive.prototype, "_rootCanvasListeningEntities", void 0);
1356
+ __decorate([
1357
+ engine.ignoreClone
1358
+ ], UIInteractive.prototype, "_indexInGroup", void 0);
1359
+ __decorate([
1360
+ engine.ignoreClone
1361
+ ], UIInteractive.prototype, "_isGroupDirty", void 0);
1362
+ __decorate([
1363
+ engine.ignoreClone
1364
+ ], UIInteractive.prototype, "_groupListeningEntities", void 0);
1365
+ __decorate([
1366
+ engine.ignoreClone
1367
+ ], UIInteractive.prototype, "_globalInteractive", void 0);
1368
+ __decorate([
1369
+ engine.ignoreClone
1370
+ ], UIInteractive.prototype, "_globalInteractiveDirty", void 0);
1371
+ __decorate([
1372
+ engine.deepClone
1373
+ ], UIInteractive.prototype, "_transitions", void 0);
1374
+ __decorate([
1375
+ engine.assignmentClone
1376
+ ], UIInteractive.prototype, "_interactive", void 0);
1377
+ __decorate([
1378
+ engine.ignoreClone
1379
+ ], UIInteractive.prototype, "_state", void 0);
1380
+ __decorate([
1381
+ engine.ignoreClone
1382
+ ], UIInteractive.prototype, "_isPointerInside", void 0);
1383
+ __decorate([
1384
+ engine.ignoreClone
1385
+ ], UIInteractive.prototype, "_isPointerDragging", void 0);
1386
+ __decorate([
1387
+ engine.ignoreClone
1388
+ ], UIInteractive.prototype, "_groupListener", null);
1389
+ __decorate([
1390
+ engine.ignoreClone
1391
+ ], UIInteractive.prototype, "_rootCanvasListener", null);
1392
+ __decorate([
1393
+ engine.ignoreClone
1394
+ ], UIInteractive.prototype, "_onGroupModify", null);
1395
+ var InteractiveState = /*#__PURE__*/ function(InteractiveState) {
1396
+ InteractiveState[InteractiveState["Normal"] = 0] = "Normal";
1397
+ InteractiveState[InteractiveState["Pressed"] = 1] = "Pressed";
1398
+ InteractiveState[InteractiveState["Hover"] = 2] = "Hover";
1399
+ InteractiveState[InteractiveState["Disable"] = 3] = "Disable";
1400
+ return InteractiveState;
1401
+ }({});
1402
+
1403
+ exports.UICanvas = /*#__PURE__*/ function(Component) {
1404
+ _inherits(UICanvas, Component);
1405
+ function UICanvas(entity) {
1406
+ var _this;
1407
+ _this = Component.call(this, entity) || this, /** @internal */ _this._canvasIndex = -1, /** @internal */ _this._indexInRootCanvas = -1, /** @internal */ _this._isRootCanvasDirty = false, /** @internal */ _this._rootCanvasListeningEntities = [], /** @internal */ _this._isRootCanvas = false, /** @internal */ _this._sortDistance = 0, /** @internal */ _this._orderedRenderers = [], /** @internal */ _this._realRenderMode = 4, /** @internal */ _this._disorderedElements = new engine.DisorderedArray(), _this._renderMode = CanvasRenderMode.WorldSpace, _this._resolutionAdaptationMode = ResolutionAdaptationMode.HeightAdaptation, _this._sortOrder = 0, _this._distance = 10, _this._referenceResolution = new engine.Vector2(800, 600), _this._referenceResolutionPerUnit = 100, _this._hierarchyVersion = -1, _this._center = new engine.Vector3();
1408
+ _this._onCanvasSizeListener = _this._onCanvasSizeListener.bind(_this);
1409
+ _this._onCameraModifyListener = _this._onCameraModifyListener.bind(_this);
1410
+ _this._onCameraTransformListener = _this._onCameraTransformListener.bind(_this);
1411
+ _this._onReferenceResolutionChanged = _this._onReferenceResolutionChanged.bind(_this);
1412
+ // @ts-ignore
1413
+ _this._referenceResolution._onValueChanged = _this._onReferenceResolutionChanged;
1414
+ _this._rootCanvasListener = _this._rootCanvasListener.bind(_this);
1415
+ _this._centerDirtyFlag = entity.registerWorldChangeFlag();
1416
+ return _this;
1417
+ }
1418
+ var _proto = UICanvas.prototype;
1419
+ /**
1420
+ * @internal
1421
+ */ _proto._raycast = function _raycast(ray, out, distance) {
1422
+ if (distance === void 0) distance = Number.MAX_SAFE_INTEGER;
1423
+ var renderers = this._getRenderers();
1424
+ for(var i = renderers.length - 1; i >= 0; i--){
1425
+ var element = renderers[i];
1426
+ if (element.raycastEnabled && element._raycast(ray, out, distance)) {
1427
+ return true;
1428
+ }
1429
+ }
1430
+ out.component = null;
1431
+ out.entity = null;
1432
+ out.distance = 0;
1433
+ out.point.set(0, 0, 0);
1434
+ out.normal.set(0, 0, 0);
1435
+ return false;
1436
+ };
1437
+ /**
1438
+ * @internal
1439
+ */ _proto._getRootCanvas = function _getRootCanvas() {
1440
+ return this._rootCanvas;
1441
+ };
1442
+ /**
1443
+ * @internal
1444
+ */ _proto._canRender = function _canRender(camera) {
1445
+ return this._realRenderMode !== CanvasRenderMode.ScreenSpaceCamera || this._camera === camera;
1446
+ };
1447
+ /**
1448
+ * @internal
1449
+ */ _proto._canDispatchEvent = function _canDispatchEvent(camera) {
1450
+ var realMode = this._realRenderMode;
1451
+ if (realMode === CanvasRenderMode.ScreenSpaceOverlay) {
1452
+ return true;
1453
+ }
1454
+ var assignedCamera = this._camera;
1455
+ // @ts-ignore
1456
+ return !assignedCamera || !assignedCamera._phasedActiveInScene || assignedCamera === camera;
1457
+ };
1458
+ /**
1459
+ * @internal
1460
+ */ _proto._prepareRender = function _prepareRender(context) {
1461
+ var _this = this, engine = _this.engine, mode = _this._realRenderMode;
1462
+ var _context_camera = context.camera, enableFrustumCulling = _context_camera.enableFrustumCulling, cullingMask = _context_camera.cullingMask, frustum = _context_camera._frustum;
1463
+ var frameCount = engine.time.frameCount;
1464
+ // @ts-ignore
1465
+ var renderElement = this._renderElement = engine._renderElementPool.get();
1466
+ var virtualCamera = context.virtualCamera;
1467
+ this._updateSortDistance(virtualCamera.isOrthographic, virtualCamera.position, virtualCamera.forward);
1468
+ renderElement.set(this.sortOrder, this._sortDistance);
1469
+ var _engine_canvas = engine.canvas, width = _engine_canvas.width, height = _engine_canvas.height;
1470
+ var renderers = this._getRenderers();
1471
+ for(var i = 0, n = renderers.length; i < n; i++){
1472
+ var renderer = renderers[i];
1473
+ // Filter by camera culling mask
1474
+ if (!(cullingMask & renderer.entity.layer)) {
1475
+ continue;
1476
+ }
1477
+ // Filter by camera frustum
1478
+ if (enableFrustumCulling) {
1479
+ switch(mode){
1480
+ case CanvasRenderMode.ScreenSpaceOverlay:
1481
+ var _renderer_bounds = renderer.bounds, min = _renderer_bounds.min, max = _renderer_bounds.max;
1482
+ if (min.x > width || max.x < 0 || min.y > height || max.y < 0) {
1483
+ continue;
1484
+ }
1485
+ break;
1486
+ case CanvasRenderMode.ScreenSpaceCamera:
1487
+ case CanvasRenderMode.WorldSpace:
1488
+ if (!frustum.intersectsBox(renderer.bounds)) {
1489
+ continue;
1490
+ }
1491
+ break;
1492
+ }
1493
+ }
1494
+ renderer._prepareRender(context);
1495
+ renderer._renderFrameCount = frameCount;
1496
+ }
1497
+ };
1498
+ /**
1499
+ * @internal
1500
+ */ _proto._updateSortDistance = function _updateSortDistance(isOrthographic, cameraPosition, cameraForward) {
1501
+ switch(this._realRenderMode){
1502
+ case CanvasRenderMode.ScreenSpaceOverlay:
1503
+ this._sortDistance = 0;
1504
+ break;
1505
+ case CanvasRenderMode.ScreenSpaceCamera:
1506
+ this._sortDistance = this._distance;
1507
+ break;
1508
+ case CanvasRenderMode.WorldSpace:
1509
+ var boundsCenter = this._getCenter();
1510
+ if (isOrthographic) {
1511
+ var distance = UICanvas._tempVec3;
1512
+ engine.Vector3.subtract(boundsCenter, cameraPosition, distance);
1513
+ this._sortDistance = engine.Vector3.dot(distance, cameraForward);
1514
+ } else {
1515
+ this._sortDistance = engine.Vector3.distanceSquared(boundsCenter, cameraPosition);
1516
+ }
1517
+ break;
1518
+ }
1519
+ };
1520
+ // @ts-ignore
1521
+ _proto._onEnableInScene = function _onEnableInScene() {
1522
+ var entity = this.entity;
1523
+ // @ts-ignore
1524
+ entity._dispatchModify(4, this);
1525
+ var rootCanvas = Utils.searchRootCanvasInParents(this);
1526
+ this._setIsRootCanvas(!rootCanvas);
1527
+ Utils.setRootCanvas(this, rootCanvas);
1528
+ };
1529
+ // @ts-ignore
1530
+ _proto._onDisableInScene = function _onDisableInScene() {
1531
+ this._setIsRootCanvas(false);
1532
+ Utils.cleanRootCanvas(this);
1533
+ };
1534
+ /**
1535
+ * @internal
1536
+ */ _proto._rootCanvasListener = function _rootCanvasListener(flag, param) {
1537
+ if (this._isRootCanvas) {
1538
+ if (flag === engine.EntityModifyFlags.Parent) {
1539
+ var rootCanvas = Utils.searchRootCanvasInParents(this);
1540
+ this._setIsRootCanvas(!rootCanvas);
1541
+ Utils.setRootCanvas(this, rootCanvas);
1542
+ } else if (flag === 4) {
1543
+ this._setIsRootCanvas(false);
1544
+ Utils.setRootCanvas(this, param);
1545
+ }
1546
+ } else {
1547
+ if (flag === engine.EntityModifyFlags.Parent) {
1548
+ var rootCanvas1 = Utils.searchRootCanvasInParents(this);
1549
+ this._setIsRootCanvas(!rootCanvas1);
1550
+ Utils.setRootCanvas(this, rootCanvas1);
1551
+ }
1552
+ }
1553
+ };
1554
+ /**
1555
+ * @internal
1556
+ */ _proto._cloneTo = function _cloneTo(target) {
1557
+ target.renderMode = this._renderMode;
1558
+ };
1559
+ _proto._getRenderers = function _getRenderers() {
1560
+ var _this = this, renderers = _this._orderedRenderers, entity = _this.entity;
1561
+ var uiHierarchyVersion = entity._uiHierarchyVersion;
1562
+ if (this._hierarchyVersion !== uiHierarchyVersion) {
1563
+ renderers.length = this._walk(this.entity, renderers);
1564
+ UICanvas._tempGroupAbleList.length = 0;
1565
+ this._hierarchyVersion = uiHierarchyVersion;
1566
+ ++UICanvas._hierarchyCounter;
1567
+ }
1568
+ return renderers;
1569
+ };
1570
+ _proto._adapterPoseInScreenSpace = function _adapterPoseInScreenSpace() {
1571
+ var transform = this.entity.transform;
1572
+ var realRenderMode = this._realRenderMode;
1573
+ if (realRenderMode === CanvasRenderMode.ScreenSpaceCamera) {
1574
+ var cameraEntity = this._camera.entity;
1575
+ if (!this._isSameOrChildEntity(cameraEntity)) {
1576
+ var cameraTransform = cameraEntity.transform;
1577
+ var cameraWorldPosition = cameraTransform.worldPosition, cameraWorldForward = cameraTransform.worldForward;
1578
+ var distance = this._distance;
1579
+ transform.setWorldPosition(cameraWorldPosition.x + cameraWorldForward.x * distance, cameraWorldPosition.y + cameraWorldForward.y * distance, cameraWorldPosition.z + cameraWorldForward.z * distance);
1580
+ transform.worldRotationQuaternion.copyFrom(cameraTransform.worldRotationQuaternion);
1581
+ }
1582
+ } else {
1583
+ var canvas = this.engine.canvas;
1584
+ transform.setWorldPosition(canvas.width * 0.5, canvas.height * 0.5, 0);
1585
+ transform.worldRotationQuaternion.set(0, 0, 0, 1);
1586
+ }
1587
+ };
1588
+ _proto._adapterSizeInScreenSpace = function _adapterSizeInScreenSpace() {
1589
+ var transform = this.entity.transform;
1590
+ var realRenderMode = this._realRenderMode;
1591
+ var _this__referenceResolution = this._referenceResolution, width = _this__referenceResolution.x, height = _this__referenceResolution.y;
1592
+ var curWidth;
1593
+ var curHeight;
1594
+ if (realRenderMode === CanvasRenderMode.ScreenSpaceCamera) {
1595
+ var camera = this._camera;
1596
+ curHeight = camera.isOrthographic ? camera.orthographicSize * 2 : 2 * (Math.tan(engine.MathUtil.degreeToRadian(camera.fieldOfView * 0.5)) * this._distance);
1597
+ curWidth = camera.aspectRatio * curHeight;
1598
+ } else {
1599
+ var canvas = this.engine.canvas;
1600
+ curHeight = canvas.height;
1601
+ curWidth = canvas.width;
1602
+ }
1603
+ var expectX, expectY, expectZ;
1604
+ switch(this._resolutionAdaptationMode){
1605
+ case ResolutionAdaptationMode.WidthAdaptation:
1606
+ expectX = expectY = expectZ = curWidth / width;
1607
+ break;
1608
+ case ResolutionAdaptationMode.HeightAdaptation:
1609
+ expectX = expectY = expectZ = curHeight / height;
1610
+ break;
1611
+ case ResolutionAdaptationMode.BothAdaptation:
1612
+ expectX = curWidth / width;
1613
+ expectY = curHeight / height;
1614
+ expectZ = (expectX + expectY) * 0.5;
1615
+ break;
1616
+ case ResolutionAdaptationMode.ExpandAdaptation:
1617
+ expectX = expectY = expectZ = Math.min(curWidth / width, curHeight / height);
1618
+ break;
1619
+ case ResolutionAdaptationMode.ShrinkAdaptation:
1620
+ expectX = expectY = expectZ = Math.max(curWidth / width, curHeight / height);
1621
+ break;
1622
+ }
1623
+ var worldMatrix = UICanvas._tempMat;
1624
+ engine.Matrix.affineTransformation(UICanvas._tempVec3.set(expectX, expectY, expectZ), transform.worldRotationQuaternion, transform.worldPosition, worldMatrix);
1625
+ transform.worldMatrix = worldMatrix;
1626
+ transform.size.set(curWidth / expectX, curHeight / expectY);
1627
+ };
1628
+ _proto._walk = function _walk(entity, renderers, depth, group) {
1629
+ if (depth === void 0) depth = 0;
1630
+ if (group === void 0) group = null;
1631
+ // @ts-ignore
1632
+ var components = entity._components;
1633
+ var tempGroupAbleList = UICanvas._tempGroupAbleList;
1634
+ var groupAbleCount = 0;
1635
+ for(var i = 0, n = components.length; i < n; i++){
1636
+ var component = components[i];
1637
+ if (!component.enabled) continue;
1638
+ if (_instanceof(component, exports.UIRenderer)) {
1639
+ renderers[depth] = component;
1640
+ ++depth;
1641
+ component._isRootCanvasDirty && Utils.setRootCanvas(component, this);
1642
+ if (component._isGroupDirty) {
1643
+ tempGroupAbleList[groupAbleCount++] = component;
1644
+ }
1645
+ } else if (_instanceof(component, UIInteractive)) {
1646
+ component._isRootCanvasDirty && Utils.setRootCanvas(component, this);
1647
+ if (component._isGroupDirty) {
1648
+ tempGroupAbleList[groupAbleCount++] = component;
1649
+ }
1650
+ } else if (_instanceof(component, UIGroup)) {
1651
+ component._isRootCanvasDirty && Utils.setRootCanvas(component, this);
1652
+ component._isGroupDirty && Utils.setGroup(component, group);
1653
+ group = component;
1654
+ }
1655
+ }
1656
+ for(var i1 = 0; i1 < groupAbleCount; i1++){
1657
+ Utils.setGroup(tempGroupAbleList[i1], group);
1658
+ }
1659
+ var children = entity.children;
1660
+ for(var i2 = 0, n1 = children.length; i2 < n1; i2++){
1661
+ var child = children[i2];
1662
+ child.isActive && (depth = this._walk(child, renderers, depth, group));
1663
+ }
1664
+ return depth;
1665
+ };
1666
+ _proto._updateCameraObserver = function _updateCameraObserver() {
1667
+ var camera = this._isRootCanvas && this._renderMode === CanvasRenderMode.ScreenSpaceCamera ? this._camera : null;
1668
+ var preCamera = this._cameraObserver;
1669
+ if (preCamera !== camera) {
1670
+ this._cameraObserver = camera;
1671
+ if (preCamera) {
1672
+ // @ts-ignore
1673
+ preCamera.entity._updateFlagManager.removeListener(this._onCameraTransformListener);
1674
+ // @ts-ignore
1675
+ preCamera._unRegisterModifyListener(this._onCameraModifyListener);
1676
+ }
1677
+ if (camera) {
1678
+ // @ts-ignore
1679
+ camera.entity._updateFlagManager.addListener(this._onCameraTransformListener);
1680
+ // @ts-ignore
1681
+ camera._registerModifyListener(this._onCameraModifyListener);
1682
+ }
1683
+ }
1684
+ };
1685
+ _proto._onCameraModifyListener = function _onCameraModifyListener(flag) {
1686
+ if (this._realRenderMode === CanvasRenderMode.ScreenSpaceCamera) {
1687
+ switch(flag){
1688
+ case engine.CameraModifyFlags.ProjectionType:
1689
+ case engine.CameraModifyFlags.AspectRatio:
1690
+ this._adapterSizeInScreenSpace();
1691
+ break;
1692
+ case engine.CameraModifyFlags.FieldOfView:
1693
+ !this._camera.isOrthographic && this._adapterSizeInScreenSpace();
1694
+ break;
1695
+ case engine.CameraModifyFlags.OrthographicSize:
1696
+ this._camera.isOrthographic && this._adapterSizeInScreenSpace();
1697
+ break;
1698
+ case engine.CameraModifyFlags.DisableInScene:
1699
+ this._setRealRenderMode(CanvasRenderMode.ScreenSpaceOverlay);
1700
+ break;
1701
+ }
1702
+ } else {
1703
+ flag === engine.CameraModifyFlags.EnableInScene && this._setRealRenderMode(CanvasRenderMode.ScreenSpaceCamera);
1704
+ }
1705
+ };
1706
+ _proto._onCameraTransformListener = function _onCameraTransformListener() {
1707
+ this._realRenderMode === CanvasRenderMode.ScreenSpaceCamera && this._adapterPoseInScreenSpace();
1708
+ };
1709
+ _proto._addCanvasListener = function _addCanvasListener() {
1710
+ // @ts-ignore
1711
+ this.engine.canvas._sizeUpdateFlagManager.addListener(this._onCanvasSizeListener);
1712
+ };
1713
+ _proto._removeCanvasListener = function _removeCanvasListener() {
1714
+ // @ts-ignore
1715
+ this.engine.canvas._sizeUpdateFlagManager.removeListener(this._onCanvasSizeListener);
1716
+ };
1717
+ _proto._onCanvasSizeListener = function _onCanvasSizeListener() {
1718
+ var canvas = this.engine.canvas;
1719
+ this.entity.transform.setWorldPosition(canvas.width * 0.5, canvas.height * 0.5, 0);
1720
+ this._adapterSizeInScreenSpace();
1721
+ };
1722
+ _proto._onReferenceResolutionChanged = function _onReferenceResolutionChanged() {
1723
+ var realRenderMode = this._realRenderMode;
1724
+ if (realRenderMode === CanvasRenderMode.ScreenSpaceOverlay || realRenderMode === CanvasRenderMode.ScreenSpaceCamera) {
1725
+ this._adapterSizeInScreenSpace();
1726
+ }
1727
+ };
1728
+ _proto._setIsRootCanvas = function _setIsRootCanvas(isRootCanvas) {
1729
+ var _this = this;
1730
+ if (this._isRootCanvas !== isRootCanvas) {
1731
+ this._isRootCanvas = isRootCanvas;
1732
+ this._updateCameraObserver();
1733
+ this._setRealRenderMode(this._getRealRenderMode());
1734
+ if (isRootCanvas) {
1735
+ this.entity._updateUIHierarchyVersion(UICanvas._hierarchyCounter);
1736
+ } else {
1737
+ var _this1 = this, disorderedElements = _this1._disorderedElements;
1738
+ disorderedElements.forEach(function(element) {
1739
+ if (_instanceof(element, UICanvas)) {
1740
+ var rootCanvas = Utils.searchRootCanvasInParents(element);
1741
+ element._setIsRootCanvas(!rootCanvas);
1742
+ Utils.setRootCanvas(element, rootCanvas);
1743
+ } else {
1744
+ Utils.setRootCanvasDirty(_this);
1745
+ Utils.setGroupDirty(element);
1746
+ }
1747
+ });
1748
+ disorderedElements.length = 0;
1749
+ disorderedElements.garbageCollection();
1750
+ this._orderedRenderers.length = 0;
1751
+ }
1752
+ }
1753
+ };
1754
+ _proto._getCenter = function _getCenter() {
1755
+ if (this._centerDirtyFlag.flag) {
1756
+ var center = this._center;
1757
+ var uiTransform = this.entity.transform;
1758
+ var pivot = uiTransform.pivot, size = uiTransform.size;
1759
+ center.set((0.5 - pivot.x) * size.x, (0.5 - pivot.y) * size.y, 0);
1760
+ engine.Vector3.transformCoordinate(center, uiTransform.worldMatrix, center);
1761
+ this._centerDirtyFlag.flag = false;
1762
+ }
1763
+ return this._center;
1764
+ };
1765
+ _proto._getRealRenderMode = function _getRealRenderMode() {
1766
+ if (this._isRootCanvas) {
1767
+ var _this__camera;
1768
+ var mode = this._renderMode;
1769
+ // @ts-ignore
1770
+ if (mode === CanvasRenderMode.ScreenSpaceCamera && !((_this__camera = this._camera) == null ? void 0 : _this__camera._phasedActiveInScene)) {
1771
+ return CanvasRenderMode.ScreenSpaceOverlay;
1772
+ } else {
1773
+ return mode;
1774
+ }
1775
+ } else {
1776
+ return 4;
1777
+ }
1778
+ };
1779
+ _proto._setRealRenderMode = function _setRealRenderMode(curRealMode) {
1780
+ var preRealMode = this._realRenderMode;
1781
+ if (preRealMode !== curRealMode) {
1782
+ this._realRenderMode = curRealMode;
1783
+ // @ts-ignore
1784
+ var componentsManager = this.scene._componentsManager;
1785
+ switch(preRealMode){
1786
+ case CanvasRenderMode.ScreenSpaceOverlay:
1787
+ this._removeCanvasListener();
1788
+ case CanvasRenderMode.ScreenSpaceCamera:
1789
+ case CanvasRenderMode.WorldSpace:
1790
+ componentsManager.removeUICanvas(this, preRealMode === CanvasRenderMode.ScreenSpaceOverlay);
1791
+ break;
1792
+ }
1793
+ switch(curRealMode){
1794
+ case CanvasRenderMode.ScreenSpaceOverlay:
1795
+ this._addCanvasListener();
1796
+ case CanvasRenderMode.ScreenSpaceCamera:
1797
+ this._adapterPoseInScreenSpace();
1798
+ this._adapterSizeInScreenSpace();
1799
+ case CanvasRenderMode.WorldSpace:
1800
+ componentsManager.addUICanvas(this, curRealMode === CanvasRenderMode.ScreenSpaceOverlay);
1801
+ break;
1802
+ }
1803
+ }
1804
+ };
1805
+ _proto._isSameOrChildEntity = function _isSameOrChildEntity(cameraEntity) {
1806
+ var canvasEntity = this.entity;
1807
+ while(cameraEntity){
1808
+ if (cameraEntity === canvasEntity) return true;
1809
+ cameraEntity = cameraEntity.parent;
1810
+ }
1811
+ return false;
1812
+ };
1813
+ _create_class(UICanvas, [
1814
+ {
1815
+ key: "referenceResolutionPerUnit",
1816
+ get: /**
1817
+ * The conversion ratio between reference resolution and unit for UI elements in this canvas.
1818
+ */ function get() {
1819
+ return this._referenceResolutionPerUnit;
1820
+ },
1821
+ set: function set(value) {
1822
+ if (this._referenceResolutionPerUnit !== value) {
1823
+ this._referenceResolutionPerUnit = value;
1824
+ this._disorderedElements.forEach(function(element) {
1825
+ element._onRootCanvasModify == null ? void 0 : element._onRootCanvasModify.call(element, 1);
1826
+ });
1827
+ }
1828
+ }
1829
+ },
1830
+ {
1831
+ key: "referenceResolution",
1832
+ get: /**
1833
+ * The reference resolution of the UI canvas in `ScreenSpaceCamera` and `ScreenSpaceOverlay` mode.
1834
+ */ function get() {
1835
+ return this._referenceResolution;
1836
+ },
1837
+ set: function set(value) {
1838
+ var referenceResolution = this._referenceResolution;
1839
+ if (referenceResolution === value) return;
1840
+ (referenceResolution.x !== value.x || referenceResolution.y !== value.y) && referenceResolution.copyFrom(value);
1841
+ }
1842
+ },
1843
+ {
1844
+ key: "renderMode",
1845
+ get: /**
1846
+ * The rendering mode of the UI canvas.
1847
+ */ function get() {
1848
+ return this._renderMode;
1849
+ },
1850
+ set: function set(mode) {
1851
+ var preMode = this._renderMode;
1852
+ if (preMode !== mode) {
1853
+ this._renderMode = mode;
1854
+ this._updateCameraObserver();
1855
+ this._setRealRenderMode(this._getRealRenderMode());
1856
+ }
1857
+ }
1858
+ },
1859
+ {
1860
+ key: "camera",
1861
+ get: /**
1862
+ * The camera associated with this canvas.
1863
+ * @remarks
1864
+ * - `ScreenSpaceCamera` mode: Used for rendering adaptation. Defaults to `ScreenSpaceOverlay` if not assigned.
1865
+ * - `WorldSpace` mode: Used for event detection. If not assigned, events are handled by the highest-priority camera.
1866
+ */ function get() {
1867
+ return this._camera;
1868
+ },
1869
+ set: function set(value) {
1870
+ var preCamera = this._camera;
1871
+ if (preCamera !== value) {
1872
+ if (value && this._isSameOrChildEntity(value.entity)) {
1873
+ engine.Logger.warn("Camera entity matching or nested within the canvas entity disables canvas auto-adaptation in ScreenSpaceCamera mode.");
1874
+ }
1875
+ this._camera = value;
1876
+ this._updateCameraObserver();
1877
+ var preRenderMode = this._realRenderMode;
1878
+ var curRenderMode = this._getRealRenderMode();
1879
+ if (preRenderMode === curRenderMode) {
1880
+ if (curRenderMode === CanvasRenderMode.ScreenSpaceCamera) {
1881
+ this._adapterPoseInScreenSpace();
1882
+ this._adapterSizeInScreenSpace();
1883
+ }
1884
+ } else {
1885
+ this._setRealRenderMode(curRenderMode);
1886
+ }
1887
+ }
1888
+ }
1889
+ },
1890
+ {
1891
+ key: "renderCamera",
1892
+ get: /**
1893
+ * @deprecated Use {@link camera} instead.
1894
+ */ function get() {
1895
+ return this.camera;
1896
+ },
1897
+ set: function set(value) {
1898
+ this.camera = value;
1899
+ }
1900
+ },
1901
+ {
1902
+ key: "resolutionAdaptationMode",
1903
+ get: /**
1904
+ * The screen resolution adaptation mode of the UI canvas in `ScreenSpaceCamera` and `ScreenSpaceOverlay` mode.
1905
+ */ function get() {
1906
+ return this._resolutionAdaptationMode;
1907
+ },
1908
+ set: function set(value) {
1909
+ if (this._resolutionAdaptationMode !== value) {
1910
+ this._resolutionAdaptationMode = value;
1911
+ var realRenderMode = this._realRenderMode;
1912
+ if (realRenderMode === CanvasRenderMode.ScreenSpaceCamera || realRenderMode === CanvasRenderMode.ScreenSpaceOverlay) {
1913
+ this._adapterSizeInScreenSpace();
1914
+ }
1915
+ }
1916
+ }
1917
+ },
1918
+ {
1919
+ key: "sortOrder",
1920
+ get: /**
1921
+ * The rendering order priority of the UI canvas in `ScreenSpaceOverlay` mode.
1922
+ */ function get() {
1923
+ return this._sortOrder;
1924
+ },
1925
+ set: function set(value) {
1926
+ if (this._sortOrder !== value) {
1927
+ this._sortOrder = value;
1928
+ this._realRenderMode === CanvasRenderMode.ScreenSpaceOverlay && // @ts-ignore
1929
+ (this.scene._componentsManager._overlayCanvasesSortingFlag = true);
1930
+ }
1931
+ }
1932
+ },
1933
+ {
1934
+ key: "distance",
1935
+ get: /**
1936
+ * The distance between the UI canvas and the camera in `ScreenSpaceCamera` mode.
1937
+ */ function get() {
1938
+ return this._distance;
1939
+ },
1940
+ set: function set(value) {
1941
+ if (this._distance !== value) {
1942
+ this._distance = value;
1943
+ if (this._realRenderMode === CanvasRenderMode.ScreenSpaceCamera) {
1944
+ this._adapterPoseInScreenSpace();
1945
+ this._adapterSizeInScreenSpace();
1946
+ }
1947
+ }
1948
+ }
1949
+ }
1950
+ ]);
1951
+ return UICanvas;
1952
+ }(engine.Component);
1953
+ /** @internal */ exports.UICanvas._hierarchyCounter = 1;
1954
+ exports.UICanvas._tempGroupAbleList = [];
1955
+ exports.UICanvas._tempVec3 = new engine.Vector3();
1956
+ exports.UICanvas._tempMat = new engine.Matrix();
1957
+ __decorate([
1958
+ engine.ignoreClone
1959
+ ], exports.UICanvas.prototype, "_canvasIndex", void 0);
1960
+ __decorate([
1961
+ engine.ignoreClone
1962
+ ], exports.UICanvas.prototype, "_indexInRootCanvas", void 0);
1963
+ __decorate([
1964
+ engine.ignoreClone
1965
+ ], exports.UICanvas.prototype, "_isRootCanvasDirty", void 0);
1966
+ __decorate([
1967
+ engine.ignoreClone
1968
+ ], exports.UICanvas.prototype, "_rootCanvasListeningEntities", void 0);
1969
+ __decorate([
1970
+ engine.ignoreClone
1971
+ ], exports.UICanvas.prototype, "_isRootCanvas", void 0);
1972
+ __decorate([
1973
+ engine.ignoreClone
1974
+ ], exports.UICanvas.prototype, "_renderElement", void 0);
1975
+ __decorate([
1976
+ engine.ignoreClone
1977
+ ], exports.UICanvas.prototype, "_sortDistance", void 0);
1978
+ __decorate([
1979
+ engine.ignoreClone
1980
+ ], exports.UICanvas.prototype, "_orderedRenderers", void 0);
1981
+ __decorate([
1982
+ engine.ignoreClone
1983
+ ], exports.UICanvas.prototype, "_realRenderMode", void 0);
1984
+ __decorate([
1985
+ engine.ignoreClone
1986
+ ], exports.UICanvas.prototype, "_disorderedElements", void 0);
1987
+ __decorate([
1988
+ engine.ignoreClone
1989
+ ], exports.UICanvas.prototype, "_renderMode", void 0);
1990
+ __decorate([
1991
+ engine.assignmentClone
1992
+ ], exports.UICanvas.prototype, "_resolutionAdaptationMode", void 0);
1993
+ __decorate([
1994
+ engine.assignmentClone
1995
+ ], exports.UICanvas.prototype, "_sortOrder", void 0);
1996
+ __decorate([
1997
+ engine.assignmentClone
1998
+ ], exports.UICanvas.prototype, "_distance", void 0);
1999
+ __decorate([
2000
+ engine.deepClone
2001
+ ], exports.UICanvas.prototype, "_referenceResolution", void 0);
2002
+ __decorate([
2003
+ engine.assignmentClone
2004
+ ], exports.UICanvas.prototype, "_referenceResolutionPerUnit", void 0);
2005
+ __decorate([
2006
+ engine.ignoreClone
2007
+ ], exports.UICanvas.prototype, "_hierarchyVersion", void 0);
2008
+ __decorate([
2009
+ engine.ignoreClone
2010
+ ], exports.UICanvas.prototype, "_center", void 0);
2011
+ __decorate([
2012
+ engine.ignoreClone
2013
+ ], exports.UICanvas.prototype, "_centerDirtyFlag", void 0);
2014
+ __decorate([
2015
+ engine.ignoreClone
2016
+ ], exports.UICanvas.prototype, "_rootCanvasListener", null);
2017
+ __decorate([
2018
+ engine.ignoreClone
2019
+ ], exports.UICanvas.prototype, "_onCameraModifyListener", null);
2020
+ __decorate([
2021
+ engine.ignoreClone
2022
+ ], exports.UICanvas.prototype, "_onCameraTransformListener", null);
2023
+ __decorate([
2024
+ engine.ignoreClone
2025
+ ], exports.UICanvas.prototype, "_onCanvasSizeListener", null);
2026
+ __decorate([
2027
+ engine.ignoreClone
2028
+ ], exports.UICanvas.prototype, "_onReferenceResolutionChanged", null);
2029
+ exports.UICanvas = __decorate([
2030
+ engine.dependentComponents(UITransform, engine.DependentMode.AutoAdd)
2031
+ ], exports.UICanvas);
2032
+ /**
2033
+ * @remarks Extends `EntityModifyFlags`.
2034
+ */ var EntityUIModifyFlags = /*#__PURE__*/ function(EntityUIModifyFlags) {
2035
+ EntityUIModifyFlags[EntityUIModifyFlags["CanvasEnableInScene"] = 4] = "CanvasEnableInScene";
2036
+ EntityUIModifyFlags[EntityUIModifyFlags["GroupEnableInScene"] = 8] = "GroupEnableInScene";
2037
+ return EntityUIModifyFlags;
2038
+ }({});
2039
+ var RootCanvasModifyFlags = /*#__PURE__*/ function(RootCanvasModifyFlags) {
2040
+ RootCanvasModifyFlags[RootCanvasModifyFlags["None"] = 0] = "None";
2041
+ RootCanvasModifyFlags[RootCanvasModifyFlags["ReferenceResolutionPerUnit"] = 1] = "ReferenceResolutionPerUnit";
2042
+ RootCanvasModifyFlags[RootCanvasModifyFlags["All"] = 1] = "All";
2043
+ return RootCanvasModifyFlags;
2044
+ }({});
2045
+
2046
+ var Button = /*#__PURE__*/ function(UIInteractive) {
2047
+ _inherits(Button, UIInteractive);
2048
+ function Button() {
2049
+ var _this;
2050
+ _this = UIInteractive.apply(this, arguments) || this, /** Signal emitted when the button is clicked. */ _this.onClick = new engine.Signal();
2051
+ return _this;
2052
+ }
2053
+ var _proto = Button.prototype;
2054
+ _proto.onPointerClick = function onPointerClick(event) {
2055
+ if (!this._getGlobalInteractive()) return;
2056
+ this.onClick.invoke(event);
2057
+ };
2058
+ _proto.onDestroy = function onDestroy() {
2059
+ UIInteractive.prototype.onDestroy.call(this);
2060
+ this.onClick.removeAll();
2061
+ };
2062
+ /**
2063
+ * Add a listening function for click.
2064
+ * @deprecated Use `onClick.on(listener, context)` instead.
2065
+ */ _proto.addClicked = function addClicked(listener) {
2066
+ this.onClick.on(listener);
2067
+ };
2068
+ /**
2069
+ * Remove a listening function of click.
2070
+ * @deprecated Use `onClick.off(listener, context)` instead.
2071
+ */ _proto.removeClicked = function removeClicked(listener) {
2072
+ this.onClick.off(listener);
2073
+ };
2074
+ return Button;
2075
+ }(UIInteractive);
2076
+ __decorate([
2077
+ engine.deepClone
2078
+ ], Button.prototype, "onClick", void 0);
2079
+
2080
+ /**
2081
+ * Determines how the Image element's size is controlled relative to the sprite.
2082
+ */ var SpriteSizeMode = /*#__PURE__*/ function(SpriteSizeMode) {
2083
+ /** The image size is controlled manually via UITransform (default, existing behavior). */ SpriteSizeMode[SpriteSizeMode["Custom"] = 0] = "Custom";
2084
+ /** The image size is automatically set to the sprite's natural dimensions when the sprite changes. */ SpriteSizeMode[SpriteSizeMode["Automatic"] = 1] = "Automatic";
2085
+ return SpriteSizeMode;
2086
+ }({});
2087
+ /**
2088
+ * UI element that renders an image.
2089
+ */ var Image = /*#__PURE__*/ function(UIRenderer1) {
2090
+ _inherits(Image, UIRenderer1);
2091
+ function Image(entity) {
2092
+ var _this;
2093
+ _this = UIRenderer1.call(this, entity) || this, _this._sprite = null, _this._tileMode = engine.SpriteTileMode.Continuous, _this._tiledAdaptiveThreshold = 0.5, _this._filledMode = engine.SpriteFilledMode.Radial360, _this._filledAmount = 1, _this._filledOrigin = engine.SpriteFilledOrigin.Bottom, _this._filledClockWise = true, _this._sizeMode = 0;
2094
+ _this.drawMode = engine.SpriteDrawMode.Simple;
2095
+ // @ts-ignore
2096
+ _this.setMaterial(_this._engine._getUIDefaultMaterial());
2097
+ _this._onSpriteChange = _this._onSpriteChange.bind(_this);
2098
+ return _this;
2099
+ }
2100
+ var _proto = Image.prototype;
2101
+ /**
2102
+ * @internal
2103
+ */ _proto._onRootCanvasModify = function _onRootCanvasModify(flag) {
2104
+ if (flag & RootCanvasModifyFlags.ReferenceResolutionPerUnit) {
2105
+ var drawMode = this._drawMode;
2106
+ if (drawMode === engine.SpriteDrawMode.Tiled) {
2107
+ this._dirtyUpdateFlag |= 15;
2108
+ } else if (drawMode === engine.SpriteDrawMode.Sliced) {
2109
+ this._dirtyUpdateFlag |= engine.RendererUpdateFlags.WorldVolume;
2110
+ }
2111
+ }
2112
+ };
2113
+ /**
2114
+ * @internal
2115
+ */ _proto._cloneTo = function _cloneTo(target) {
2116
+ // @ts-ignore
2117
+ UIRenderer1.prototype._cloneTo.call(this, target);
2118
+ target.sprite = this._sprite;
2119
+ target.drawMode = this._drawMode;
2120
+ };
2121
+ _proto._updateBounds = function _updateBounds(worldBounds) {
2122
+ var sprite = this._sprite;
2123
+ var rootCanvas = this._getRootCanvas();
2124
+ if (sprite && rootCanvas) {
2125
+ var transform = this._transformEntity.transform;
2126
+ var size = transform.size;
2127
+ this._assembler.updatePositions(this, transform.worldMatrix, size.x, size.y, transform.pivot, false, false, rootCanvas.referenceResolutionPerUnit);
2128
+ } else {
2129
+ var worldPosition = this._transformEntity.transform.worldPosition;
2130
+ worldBounds.min.copyFrom(worldPosition);
2131
+ worldBounds.max.copyFrom(worldPosition);
2132
+ }
2133
+ };
2134
+ _proto._render = function _render(context) {
2135
+ var _this = this, sprite = _this._sprite;
2136
+ var transform = this._transformEntity.transform;
2137
+ var _transform_size = transform.size, width = _transform_size.x, height = _transform_size.y;
2138
+ if (!(sprite == null ? void 0 : sprite.texture) || !width || !height) {
2139
+ return;
2140
+ }
2141
+ var material = this.getMaterial();
2142
+ if (!material) {
2143
+ return;
2144
+ }
2145
+ // @todo: This question needs to be raised rather than hidden.
2146
+ if (material.destroyed) {
2147
+ // @ts-ignore
2148
+ material = this._engine._getUIDefaultMaterial();
2149
+ }
2150
+ var alpha = this._getGlobalAlpha();
2151
+ if (this._color.a * alpha <= 0) {
2152
+ return;
2153
+ }
2154
+ var _this1 = this, dirtyUpdateFlag = _this1._dirtyUpdateFlag;
2155
+ var canvas = this._getRootCanvas();
2156
+ // Update position
2157
+ if (dirtyUpdateFlag & engine.RendererUpdateFlags.WorldVolume) {
2158
+ this._assembler.updatePositions(this, transform.worldMatrix, width, height, transform.pivot, false, false, canvas.referenceResolutionPerUnit);
2159
+ dirtyUpdateFlag &= ~engine.RendererUpdateFlags.WorldVolume;
2160
+ }
2161
+ // Update uv
2162
+ if (dirtyUpdateFlag & 4) {
2163
+ this._assembler.updateUVs(this);
2164
+ dirtyUpdateFlag &= ~4;
2165
+ }
2166
+ // Update color
2167
+ if (dirtyUpdateFlag & UIRendererUpdateFlags.Color) {
2168
+ this._assembler.updateColor(this, alpha);
2169
+ dirtyUpdateFlag &= ~UIRendererUpdateFlags.Color;
2170
+ }
2171
+ this._dirtyUpdateFlag = dirtyUpdateFlag;
2172
+ // Init sub render element.
2173
+ var engine$1 = context.camera.engine;
2174
+ var subRenderElement = engine$1._subRenderElementPool.get();
2175
+ var subChunk = this._subChunk;
2176
+ subRenderElement.set(this, material, subChunk.chunk.primitive, subChunk.subMesh, this.sprite.texture, subChunk);
2177
+ if (canvas._realRenderMode === CanvasRenderMode.ScreenSpaceOverlay) {
2178
+ subRenderElement.shaderPasses = material.shader.subShaders[0].passes;
2179
+ subRenderElement.renderQueueFlags = engine.RenderQueueFlags.All;
2180
+ }
2181
+ canvas._renderElement.addSubRenderElement(subRenderElement);
2182
+ };
2183
+ _proto._onTransformChanged = function _onTransformChanged(type) {
2184
+ if (type & UITransformModifyFlags.Size && this._drawMode === engine.SpriteDrawMode.Tiled) {
2185
+ this._dirtyUpdateFlag |= 15;
2186
+ }
2187
+ this._dirtyUpdateFlag |= engine.RendererUpdateFlags.WorldVolume;
2188
+ };
2189
+ _proto._onDestroy = function _onDestroy() {
2190
+ var sprite = this._sprite;
2191
+ if (sprite) {
2192
+ this._addResourceReferCount(sprite, -1);
2193
+ // @ts-ignore
2194
+ sprite._updateFlagManager.removeListener(this._onSpriteChange);
2195
+ this._sprite = null;
2196
+ }
2197
+ UIRenderer1.prototype._onDestroy.call(this);
2198
+ };
2199
+ _proto._onSpriteChange = function _onSpriteChange(type) {
2200
+ switch(type){
2201
+ case engine.SpriteModifyFlags.texture:
2202
+ this.shaderData.setTexture(exports.UIRenderer._textureProperty, this.sprite.texture);
2203
+ break;
2204
+ case engine.SpriteModifyFlags.size:
2205
+ if (this._sizeMode === 1) {
2206
+ this._applySpriteSize();
2207
+ }
2208
+ switch(this._drawMode){
2209
+ case engine.SpriteDrawMode.Sliced:
2210
+ this._dirtyUpdateFlag |= engine.RendererUpdateFlags.WorldVolume;
2211
+ break;
2212
+ case engine.SpriteDrawMode.Tiled:
2213
+ this._dirtyUpdateFlag |= 7;
2214
+ break;
2215
+ case engine.SpriteDrawMode.Filled:
2216
+ this._dirtyUpdateFlag |= 7;
2217
+ break;
2218
+ }
2219
+ break;
2220
+ case engine.SpriteModifyFlags.border:
2221
+ switch(this._drawMode){
2222
+ case engine.SpriteDrawMode.Sliced:
2223
+ this._dirtyUpdateFlag |= 5;
2224
+ break;
2225
+ case engine.SpriteDrawMode.Tiled:
2226
+ this._dirtyUpdateFlag |= 7;
2227
+ break;
2228
+ }
2229
+ break;
2230
+ case engine.SpriteModifyFlags.region:
2231
+ case engine.SpriteModifyFlags.atlasRegionOffset:
2232
+ this._dirtyUpdateFlag |= 5;
2233
+ break;
2234
+ case engine.SpriteModifyFlags.atlasRegion:
2235
+ this._dirtyUpdateFlag |= 4;
2236
+ break;
2237
+ case engine.SpriteModifyFlags.destroy:
2238
+ this.sprite = null;
2239
+ break;
2240
+ }
2241
+ };
2242
+ _proto._applySpriteSize = function _applySpriteSize() {
2243
+ var sprite = this._sprite;
2244
+ if (sprite) {
2245
+ this._transformEntity.transform.size.set(sprite.width, sprite.height);
2246
+ }
2247
+ };
2248
+ _create_class(Image, [
2249
+ {
2250
+ key: "drawMode",
2251
+ get: /**
2252
+ * The draw mode of the image.
2253
+ */ function get() {
2254
+ return this._drawMode;
2255
+ },
2256
+ set: function set(value) {
2257
+ if (this._drawMode !== value) {
2258
+ this._drawMode = value;
2259
+ switch(value){
2260
+ case engine.SpriteDrawMode.Simple:
2261
+ this._assembler = engine.SimpleSpriteAssembler;
2262
+ break;
2263
+ case engine.SpriteDrawMode.Sliced:
2264
+ this._assembler = engine.SlicedSpriteAssembler;
2265
+ break;
2266
+ case engine.SpriteDrawMode.Tiled:
2267
+ this._assembler = engine.TiledSpriteAssembler;
2268
+ break;
2269
+ case engine.SpriteDrawMode.Filled:
2270
+ this._assembler = engine.FilledSpriteAssembler;
2271
+ break;
2272
+ }
2273
+ this._assembler.resetData(this);
2274
+ this._dirtyUpdateFlag |= 7;
2275
+ }
2276
+ }
2277
+ },
2278
+ {
2279
+ key: "sizeMode",
2280
+ get: /**
2281
+ * The size mode of the image. When set to `Automatic`, the UITransform size
2282
+ * is automatically synchronized to the sprite's natural dimensions.
2283
+ */ function get() {
2284
+ return this._sizeMode;
2285
+ },
2286
+ set: function set(value) {
2287
+ if (this._sizeMode !== value) {
2288
+ this._sizeMode = value;
2289
+ if (value === 1 && this._sprite) {
2290
+ this._applySpriteSize();
2291
+ }
2292
+ }
2293
+ }
2294
+ },
2295
+ {
2296
+ key: "tileMode",
2297
+ get: /**
2298
+ * The tiling mode of the image. (Only works in tiled mode.)
2299
+ */ function get() {
2300
+ return this._tileMode;
2301
+ },
2302
+ set: function set(value) {
2303
+ if (this._tileMode !== value) {
2304
+ this._tileMode = value;
2305
+ if (this.drawMode === engine.SpriteDrawMode.Tiled) {
2306
+ this._dirtyUpdateFlag |= 7;
2307
+ }
2308
+ }
2309
+ }
2310
+ },
2311
+ {
2312
+ key: "tiledAdaptiveThreshold",
2313
+ get: /**
2314
+ * Stretch Threshold in Tile Adaptive Mode, specified in normalized. (Only works in tiled adaptive mode.)
2315
+ */ function get() {
2316
+ return this._tiledAdaptiveThreshold;
2317
+ },
2318
+ set: function set(value) {
2319
+ if (value !== this._tiledAdaptiveThreshold) {
2320
+ value = engine.MathUtil.clamp(value, 0, 1);
2321
+ this._tiledAdaptiveThreshold = value;
2322
+ if (this.drawMode === engine.SpriteDrawMode.Tiled) {
2323
+ this._dirtyUpdateFlag |= 7;
2324
+ }
2325
+ }
2326
+ }
2327
+ },
2328
+ {
2329
+ key: "filledAmount",
2330
+ get: /**
2331
+ * The fill amount of the image, range from 0 to 1. (Only works in filled mode.)
2332
+ */ function get() {
2333
+ return this._filledAmount;
2334
+ },
2335
+ set: function set(value) {
2336
+ value = engine.MathUtil.clamp(value, 0, 1);
2337
+ if (this._filledAmount !== value) {
2338
+ this._filledAmount = value;
2339
+ if (this._drawMode === engine.SpriteDrawMode.Filled) {
2340
+ this._dirtyUpdateFlag |= 5;
2341
+ }
2342
+ }
2343
+ }
2344
+ },
2345
+ {
2346
+ key: "filledMode",
2347
+ get: /**
2348
+ * The fill mode of the image. (Only works in filled mode.)
2349
+ */ function get() {
2350
+ return this._filledMode;
2351
+ },
2352
+ set: function set(value) {
2353
+ if (this._filledMode !== value) {
2354
+ this._filledMode = value;
2355
+ this._filledOrigin = value === engine.SpriteFilledMode.Radial90 ? engine.SpriteFilledOrigin.BottomLeft : engine.SpriteFilledOrigin.Bottom;
2356
+ if (this._drawMode === engine.SpriteDrawMode.Filled) {
2357
+ this._dirtyUpdateFlag |= 5;
2358
+ }
2359
+ }
2360
+ }
2361
+ },
2362
+ {
2363
+ key: "filledOrigin",
2364
+ get: /**
2365
+ * The fill origin of the image. (Only works in filled mode.)
2366
+ */ function get() {
2367
+ return this._filledOrigin;
2368
+ },
2369
+ set: function set(value) {
2370
+ if (this._filledOrigin !== value) {
2371
+ this._filledOrigin = value;
2372
+ if (this._drawMode === engine.SpriteDrawMode.Filled) {
2373
+ this._dirtyUpdateFlag |= 5;
2374
+ }
2375
+ }
2376
+ }
2377
+ },
2378
+ {
2379
+ key: "filledClockWise",
2380
+ get: /**
2381
+ * Whether the fill is clockwise. (Only works in filled radial mode.)
2382
+ */ function get() {
2383
+ return this._filledClockWise;
2384
+ },
2385
+ set: function set(value) {
2386
+ if (this._filledClockWise !== value) {
2387
+ this._filledClockWise = value;
2388
+ if (this._drawMode === engine.SpriteDrawMode.Filled) {
2389
+ this._dirtyUpdateFlag |= 5;
2390
+ }
2391
+ }
2392
+ }
2393
+ },
2394
+ {
2395
+ key: "sprite",
2396
+ get: /**
2397
+ * The Sprite to render.
2398
+ */ function get() {
2399
+ return this._sprite;
2400
+ },
2401
+ set: function set(value) {
2402
+ var lastSprite = this._sprite;
2403
+ if (lastSprite !== value) {
2404
+ if (lastSprite) {
2405
+ this._addResourceReferCount(lastSprite, -1);
2406
+ // @ts-ignore
2407
+ lastSprite._updateFlagManager.removeListener(this._onSpriteChange);
2408
+ }
2409
+ this._dirtyUpdateFlag |= 7;
2410
+ if (value) {
2411
+ this._addResourceReferCount(value, 1);
2412
+ // @ts-ignore
2413
+ value._updateFlagManager.addListener(this._onSpriteChange);
2414
+ this.shaderData.setTexture(exports.UIRenderer._textureProperty, value.texture);
2415
+ } else {
2416
+ this.shaderData.setTexture(exports.UIRenderer._textureProperty, null);
2417
+ }
2418
+ this._sprite = value;
2419
+ if (this._sizeMode === 1 && value) {
2420
+ this._applySpriteSize();
2421
+ }
2422
+ }
2423
+ }
2424
+ }
2425
+ ]);
2426
+ return Image;
2427
+ }(exports.UIRenderer);
2428
+ __decorate([
2429
+ engine.ignoreClone
2430
+ ], Image.prototype, "_sprite", void 0);
2431
+ __decorate([
2432
+ engine.ignoreClone
2433
+ ], Image.prototype, "_drawMode", void 0);
2434
+ __decorate([
2435
+ engine.ignoreClone
2436
+ ], Image.prototype, "_assembler", void 0);
2437
+ __decorate([
2438
+ engine.assignmentClone
2439
+ ], Image.prototype, "_tileMode", void 0);
2440
+ __decorate([
2441
+ engine.assignmentClone
2442
+ ], Image.prototype, "_tiledAdaptiveThreshold", void 0);
2443
+ __decorate([
2444
+ engine.assignmentClone
2445
+ ], Image.prototype, "_filledMode", void 0);
2446
+ __decorate([
2447
+ engine.assignmentClone
2448
+ ], Image.prototype, "_filledAmount", void 0);
2449
+ __decorate([
2450
+ engine.assignmentClone
2451
+ ], Image.prototype, "_filledOrigin", void 0);
2452
+ __decorate([
2453
+ engine.assignmentClone
2454
+ ], Image.prototype, "_filledClockWise", void 0);
2455
+ __decorate([
2456
+ engine.assignmentClone
2457
+ ], Image.prototype, "_sizeMode", void 0);
2458
+ __decorate([
2459
+ engine.ignoreClone
2460
+ ], Image.prototype, "_onTransformChanged", null);
2461
+ __decorate([
2462
+ engine.ignoreClone
2463
+ ], Image.prototype, "_onSpriteChange", null);
2464
+
2465
+ /**
2466
+ * UI component used to render text.
2467
+ */ var Text = /*#__PURE__*/ function(UIRenderer1) {
2468
+ _inherits(Text, UIRenderer1);
2469
+ function Text(entity) {
2470
+ var _this;
2471
+ _this = UIRenderer1.call(this, entity) || this, _this._textChunks = Array(), _this._subFont = null, _this._text = "", _this._localBounds = new engine.BoundingBox(), _this._font = null, _this._fontSize = 24, _this._fontStyle = engine.FontStyle.None, _this._lineSpacing = 0, _this._characterSpacing = 0, _this._horizontalAlignment = engine.TextHorizontalAlignment.Center, _this._verticalAlignment = engine.TextVerticalAlignment.Center, _this._enableWrapping = false, _this._overflowMode = engine.OverflowMode.Overflow;
2472
+ var engine$1 = _this.engine;
2473
+ // @ts-ignore
2474
+ _this.font = engine$1._textDefaultFont;
2475
+ _this.raycastEnabled = false;
2476
+ // @ts-ignore
2477
+ _this.setMaterial(engine$1._basicResources.textDefaultMaterial);
2478
+ return _this;
2479
+ }
2480
+ var _proto = Text.prototype;
2481
+ /**
2482
+ * @internal
2483
+ */ _proto._onDestroy = function _onDestroy() {
2484
+ if (this._font) {
2485
+ this._addResourceReferCount(this._font, -1);
2486
+ this._font = null;
2487
+ }
2488
+ UIRenderer1.prototype._onDestroy.call(this);
2489
+ this._freeTextChunks();
2490
+ this._textChunks = null;
2491
+ this._subFont && (this._subFont = null);
2492
+ };
2493
+ // @ts-ignore
2494
+ _proto._cloneTo = function _cloneTo(target) {
2495
+ // @ts-ignore
2496
+ UIRenderer1.prototype._cloneTo.call(this, target);
2497
+ target.font = this._font;
2498
+ target._subFont = this._subFont;
2499
+ };
2500
+ /**
2501
+ * @internal
2502
+ */ _proto._isContainDirtyFlag = function _isContainDirtyFlag(type) {
2503
+ return (this._dirtyUpdateFlag & type) != 0;
2504
+ };
2505
+ /**
2506
+ * @internal
2507
+ */ _proto._setDirtyFlagTrue = function _setDirtyFlagTrue(type) {
2508
+ this._dirtyUpdateFlag |= type;
2509
+ };
2510
+ /**
2511
+ * @internal
2512
+ */ _proto._setDirtyFlagFalse = function _setDirtyFlagFalse(type) {
2513
+ this._dirtyUpdateFlag &= ~type;
2514
+ };
2515
+ /**
2516
+ * @internal
2517
+ */ _proto._getSubFont = function _getSubFont() {
2518
+ if (!this._subFont) {
2519
+ this._resetSubFont();
2520
+ }
2521
+ return this._subFont;
2522
+ };
2523
+ /**
2524
+ * @internal
2525
+ */ _proto._onRootCanvasModify = function _onRootCanvasModify(flag) {
2526
+ if (flag === RootCanvasModifyFlags.ReferenceResolutionPerUnit) {
2527
+ this._setDirtyFlagTrue(8);
2528
+ }
2529
+ };
2530
+ _proto._updateBounds = function _updateBounds(worldBounds) {
2531
+ var transform = this._transformEntity.transform;
2532
+ var _transform_size = transform.size, width = _transform_size.x, height = _transform_size.y;
2533
+ var _transform_pivot = transform.pivot, pivotX = _transform_pivot.x, pivotY = _transform_pivot.y;
2534
+ worldBounds.min.set(-width * pivotX, -height * pivotY, 0);
2535
+ worldBounds.max.set(width * (1 - pivotX), height * (1 - pivotY), 0);
2536
+ engine.BoundingBox.transform(worldBounds, this._transformEntity.transform.worldMatrix, worldBounds);
2537
+ };
2538
+ _proto._render = function _render(context) {
2539
+ if (this._isTextNoVisible()) {
2540
+ return;
2541
+ }
2542
+ if (this._isContainDirtyFlag(4)) {
2543
+ this._resetSubFont();
2544
+ this._setDirtyFlagFalse(4);
2545
+ }
2546
+ var canvas = this._getRootCanvas();
2547
+ if (this._isContainDirtyFlag(8)) {
2548
+ this._updateLocalData();
2549
+ this._setDirtyFlagFalse(8);
2550
+ }
2551
+ if (this._isContainDirtyFlag(16)) {
2552
+ this._updatePosition();
2553
+ this._setDirtyFlagFalse(16);
2554
+ }
2555
+ if (this._isContainDirtyFlag(UIRendererUpdateFlags.Color)) {
2556
+ this._updateColor();
2557
+ this._setDirtyFlagFalse(UIRendererUpdateFlags.Color);
2558
+ }
2559
+ var engine$1 = context.camera.engine;
2560
+ var textSubRenderElementPool = engine$1._textSubRenderElementPool;
2561
+ var material = this.getMaterial();
2562
+ var renderElement = canvas._renderElement;
2563
+ var textChunks = this._textChunks;
2564
+ var isOverlay = canvas._realRenderMode === CanvasRenderMode.ScreenSpaceOverlay;
2565
+ for(var i = 0, n = textChunks.length; i < n; ++i){
2566
+ var // @ts-ignore
2567
+ _subRenderElement;
2568
+ var _textChunks_i = textChunks[i], subChunk = _textChunks_i.subChunk, texture = _textChunks_i.texture;
2569
+ var subRenderElement = textSubRenderElementPool.get();
2570
+ subRenderElement.set(this, material, subChunk.chunk.primitive, subChunk.subMesh, texture, subChunk);
2571
+ (_subRenderElement = subRenderElement).shaderData || (_subRenderElement.shaderData = new engine.ShaderData(engine.ShaderDataGroup.RenderElement));
2572
+ subRenderElement.shaderData.setTexture(Text._textTextureProperty, texture);
2573
+ if (isOverlay) {
2574
+ subRenderElement.shaderPasses = material.shader.subShaders[0].passes;
2575
+ subRenderElement.renderQueueFlags = engine.RenderQueueFlags.All;
2576
+ }
2577
+ renderElement.addSubRenderElement(subRenderElement);
2578
+ }
2579
+ };
2580
+ _proto._resetSubFont = function _resetSubFont() {
2581
+ var font = this._font;
2582
+ // @ts-ignore
2583
+ this._subFont = font._getSubFont(this.fontSize, this.fontStyle);
2584
+ this._subFont.nativeFontString = engine.TextUtils.getNativeFontString(font.name, this.fontSize, this.fontStyle);
2585
+ };
2586
+ _proto._updatePosition = function _updatePosition() {
2587
+ var e = this._transformEntity.transform.worldMatrix.elements;
2588
+ // prettier-ignore
2589
+ var e0 = e[0], e1 = e[1], e2 = e[2], e4 = e[4], e5 = e[5], e6 = e[6], e12 = e[12], e13 = e[13], e14 = e[14];
2590
+ var up = exports.UIRenderer._tempVec31.set(e4, e5, e6);
2591
+ var right = exports.UIRenderer._tempVec30.set(e0, e1, e2);
2592
+ var worldPositions = Text._worldPositions;
2593
+ var worldPosition0 = worldPositions[0], worldPosition1 = worldPositions[1], worldPosition2 = worldPositions[2], worldPosition3 = worldPositions[3];
2594
+ var textChunks = this._textChunks;
2595
+ for(var i = 0, n = textChunks.length; i < n; ++i){
2596
+ var _textChunks_i = textChunks[i], subChunk = _textChunks_i.subChunk, charRenderInfos = _textChunks_i.charRenderInfos;
2597
+ for(var j = 0, m = charRenderInfos.length; j < m; ++j){
2598
+ var charRenderInfo = charRenderInfos[j];
2599
+ var localPositions = charRenderInfo.localPositions;
2600
+ var topLeftX = localPositions.x, topLeftY = localPositions.y;
2601
+ // Top-Left
2602
+ worldPosition0.set(topLeftX * e0 + topLeftY * e4 + e12, topLeftX * e1 + topLeftY * e5 + e13, topLeftX * e2 + topLeftY * e6 + e14);
2603
+ // Right offset
2604
+ engine.Vector3.scale(right, localPositions.z - topLeftX, worldPosition1);
2605
+ // Top-Right
2606
+ engine.Vector3.add(worldPosition0, worldPosition1, worldPosition1);
2607
+ // Up offset
2608
+ engine.Vector3.scale(up, localPositions.w - topLeftY, worldPosition2);
2609
+ // Bottom-Left
2610
+ engine.Vector3.add(worldPosition0, worldPosition2, worldPosition3);
2611
+ // Bottom-Right
2612
+ engine.Vector3.add(worldPosition1, worldPosition2, worldPosition2);
2613
+ var vertices = subChunk.chunk.vertices;
2614
+ for(var k = 0, o = subChunk.vertexArea.start + charRenderInfo.indexInChunk * 36; k < 4; ++k, o += 9){
2615
+ worldPositions[k].copyToArray(vertices, o);
2616
+ }
2617
+ }
2618
+ }
2619
+ };
2620
+ _proto._updateColor = function _updateColor() {
2621
+ var _this__color = this._color, r = _this__color.r, g = _this__color.g, b = _this__color.b, a = _this__color.a;
2622
+ var finalAlpha = a * this._getGlobalAlpha();
2623
+ var textChunks = this._textChunks;
2624
+ for(var i = 0, n = textChunks.length; i < n; ++i){
2625
+ var subChunk = textChunks[i].subChunk;
2626
+ var vertexArea = subChunk.vertexArea;
2627
+ var vertexCount = vertexArea.size / 9;
2628
+ var vertices = subChunk.chunk.vertices;
2629
+ for(var j = 0, o = vertexArea.start + 5; j < vertexCount; ++j, o += 9){
2630
+ vertices[o] = r;
2631
+ vertices[o + 1] = g;
2632
+ vertices[o + 2] = b;
2633
+ vertices[o + 3] = finalAlpha;
2634
+ }
2635
+ }
2636
+ };
2637
+ _proto._updateLocalData = function _updateLocalData() {
2638
+ // @ts-ignore
2639
+ var pixelsPerResolution = engine.Engine._pixelsPerUnit / this._getRootCanvas().referenceResolutionPerUnit;
2640
+ var _this__localBounds = this._localBounds, min = _this__localBounds.min, max = _this__localBounds.max;
2641
+ var charRenderInfos = Text._charRenderInfos;
2642
+ var charFont = this._getSubFont();
2643
+ var _this__transformEntity_transform = this._transformEntity.transform, size = _this__transformEntity_transform.size, pivot = _this__transformEntity_transform.pivot;
2644
+ var rendererWidth = size.x;
2645
+ var rendererHeight = size.y;
2646
+ var offsetWidth = rendererWidth * (0.5 - pivot.x);
2647
+ var offsetHeight = rendererHeight * (0.5 - pivot.y);
2648
+ var characterSpacing = this._characterSpacing * this._fontSize;
2649
+ var textMetrics = this.enableWrapping ? engine.TextUtils.measureTextWithWrap(this, rendererWidth * pixelsPerResolution, rendererHeight * pixelsPerResolution, this._lineSpacing * this._fontSize, characterSpacing) : engine.TextUtils.measureTextWithoutWrap(this, rendererHeight * pixelsPerResolution, this._lineSpacing * this._fontSize, characterSpacing);
2650
+ var height = textMetrics.height, lines = textMetrics.lines, lineWidths = textMetrics.lineWidths, lineHeight = textMetrics.lineHeight, lineMaxSizes = textMetrics.lineMaxSizes;
2651
+ // @ts-ignore
2652
+ var charRenderInfoPool = this.engine._charRenderInfoPool;
2653
+ var linesLen = lines.length;
2654
+ var renderElementCount = 0;
2655
+ if (linesLen > 0) {
2656
+ var horizontalAlignment = this.horizontalAlignment;
2657
+ var pixelsPerUnitReciprocal = 1.0 / pixelsPerResolution;
2658
+ rendererWidth *= pixelsPerResolution;
2659
+ rendererHeight *= pixelsPerResolution;
2660
+ var halfRendererWidth = rendererWidth * 0.5;
2661
+ var halfLineHeight = lineHeight * 0.5;
2662
+ var startY = 0;
2663
+ var topDiff = lineHeight * 0.5 - lineMaxSizes[0].ascent;
2664
+ var bottomDiff = lineHeight * 0.5 - lineMaxSizes[linesLen - 1].descent - 1;
2665
+ switch(this.verticalAlignment){
2666
+ case engine.TextVerticalAlignment.Top:
2667
+ startY = rendererHeight * 0.5 - halfLineHeight + topDiff;
2668
+ break;
2669
+ case engine.TextVerticalAlignment.Center:
2670
+ startY = height * 0.5 - halfLineHeight - (bottomDiff - topDiff) * 0.5;
2671
+ break;
2672
+ case engine.TextVerticalAlignment.Bottom:
2673
+ startY = height - rendererHeight * 0.5 - halfLineHeight - bottomDiff;
2674
+ break;
2675
+ }
2676
+ var firstLine = -1;
2677
+ var minX = Number.MAX_SAFE_INTEGER;
2678
+ var minY = Number.MAX_SAFE_INTEGER;
2679
+ var maxX = Number.MIN_SAFE_INTEGER;
2680
+ var maxY = Number.MIN_SAFE_INTEGER;
2681
+ for(var i = 0; i < linesLen; ++i){
2682
+ var lineWidth = lineWidths[i];
2683
+ if (lineWidth > 0) {
2684
+ var line = lines[i];
2685
+ var startX = 0;
2686
+ var firstRow = -1;
2687
+ if (firstLine < 0) {
2688
+ firstLine = i;
2689
+ }
2690
+ switch(horizontalAlignment){
2691
+ case engine.TextHorizontalAlignment.Left:
2692
+ startX = -halfRendererWidth;
2693
+ break;
2694
+ case engine.TextHorizontalAlignment.Center:
2695
+ startX = -lineWidth * 0.5;
2696
+ break;
2697
+ case engine.TextHorizontalAlignment.Right:
2698
+ startX = halfRendererWidth - lineWidth;
2699
+ break;
2700
+ }
2701
+ for(var j = 0, n = line.length; j < n; ++j){
2702
+ var char = line[j];
2703
+ var charInfo = charFont._getCharInfo(char);
2704
+ if (charInfo.h > 0) {
2705
+ firstRow < 0 && (firstRow = j);
2706
+ var charRenderInfo = charRenderInfos[renderElementCount++] = charRenderInfoPool.get();
2707
+ var localPositions = charRenderInfo.localPositions;
2708
+ charRenderInfo.texture = charFont._getTextureByIndex(charInfo.index);
2709
+ charRenderInfo.uvs = charInfo.uvs;
2710
+ var w = charInfo.w, ascent = charInfo.ascent, descent = charInfo.descent;
2711
+ var left = (startX + offsetWidth) * pixelsPerUnitReciprocal;
2712
+ var right = (startX + w + offsetWidth) * pixelsPerUnitReciprocal;
2713
+ var top = (startY + ascent + offsetHeight) * pixelsPerUnitReciprocal;
2714
+ var bottom = (startY - descent + offsetHeight) * pixelsPerUnitReciprocal;
2715
+ localPositions.set(left, top, right, bottom);
2716
+ i === firstLine && (maxY = Math.max(maxY, top));
2717
+ minY = Math.min(minY, bottom);
2718
+ j === firstRow && (minX = Math.min(minX, left));
2719
+ maxX = Math.max(maxX, right);
2720
+ }
2721
+ startX += charInfo.xAdvance + characterSpacing;
2722
+ }
2723
+ }
2724
+ startY -= lineHeight;
2725
+ }
2726
+ if (firstLine < 0) {
2727
+ min.set(0, 0, 0);
2728
+ max.set(0, 0, 0);
2729
+ } else {
2730
+ min.set(minX, minY, 0);
2731
+ max.set(maxX, maxY, 0);
2732
+ }
2733
+ } else {
2734
+ min.set(0, 0, 0);
2735
+ max.set(0, 0, 0);
2736
+ }
2737
+ charFont._getLastIndex() > 0 && charRenderInfos.sort(function(a, b) {
2738
+ return a.texture.instanceId - b.texture.instanceId;
2739
+ });
2740
+ this._freeTextChunks();
2741
+ if (renderElementCount === 0) {
2742
+ return;
2743
+ }
2744
+ var textChunks = this._textChunks;
2745
+ var curTextChunk = new TextChunk();
2746
+ textChunks.push(curTextChunk);
2747
+ var chunkMaxVertexCount = this._getChunkManager().maxVertexCount;
2748
+ var curCharRenderInfo = charRenderInfos[0];
2749
+ var curTexture = curCharRenderInfo.texture;
2750
+ curTextChunk.texture = curTexture;
2751
+ var curCharInfos = curTextChunk.charRenderInfos;
2752
+ curCharInfos.push(curCharRenderInfo);
2753
+ for(var i1 = 1; i1 < renderElementCount; ++i1){
2754
+ var charRenderInfo1 = charRenderInfos[i1];
2755
+ var texture = charRenderInfo1.texture;
2756
+ if (curTexture !== texture || curCharInfos.length * 4 + 4 > chunkMaxVertexCount) {
2757
+ this._buildChunk(curTextChunk, curCharInfos.length);
2758
+ curTextChunk = new TextChunk();
2759
+ textChunks.push(curTextChunk);
2760
+ curTexture = texture;
2761
+ curTextChunk.texture = texture;
2762
+ curCharInfos = curTextChunk.charRenderInfos;
2763
+ }
2764
+ curCharInfos.push(charRenderInfo1);
2765
+ }
2766
+ var charLength = curCharInfos.length;
2767
+ if (charLength > 0) {
2768
+ this._buildChunk(curTextChunk, charLength);
2769
+ }
2770
+ charRenderInfos.length = 0;
2771
+ };
2772
+ _proto._onTransformChanged = function _onTransformChanged(type) {
2773
+ if (type & UITransformModifyFlags.Size || type & UITransformModifyFlags.Pivot) {
2774
+ this._dirtyUpdateFlag |= 8;
2775
+ }
2776
+ UIRenderer1.prototype._onTransformChanged.call(this, type);
2777
+ this._setDirtyFlagTrue(16);
2778
+ };
2779
+ _proto._isTextNoVisible = function _isTextNoVisible() {
2780
+ var size = this._transformEntity.transform.size;
2781
+ return !this._font || this._text === "" || this._fontSize === 0 || this.enableWrapping && size.x <= 0 || this.overflowMode === engine.OverflowMode.Truncate && size.y <= 0 || !this._getRootCanvas();
2782
+ };
2783
+ _proto._buildChunk = function _buildChunk(textChunk, count) {
2784
+ var _this_color = this.color, r = _this_color.r, g = _this_color.g, b = _this_color.b, a = _this_color.a;
2785
+ var finalAlpha = a * this._getGlobalAlpha();
2786
+ var tempIndices = engine.CharRenderInfo.triangles;
2787
+ var tempIndicesLength = tempIndices.length;
2788
+ var subChunk = textChunk.subChunk = this._getChunkManager().allocateSubChunk(count * 4);
2789
+ var vertices = subChunk.chunk.vertices;
2790
+ var indices = subChunk.indices = [];
2791
+ var charRenderInfos = textChunk.charRenderInfos;
2792
+ for(var i = 0, ii = 0, io = 0, vo = subChunk.vertexArea.start + 3; i < count; ++i, io += 4){
2793
+ var charRenderInfo = charRenderInfos[i];
2794
+ charRenderInfo.indexInChunk = i;
2795
+ // Set indices
2796
+ for(var j = 0; j < tempIndicesLength; ++j){
2797
+ indices[ii++] = tempIndices[j] + io;
2798
+ }
2799
+ // Set uv and color for vertices
2800
+ for(var j1 = 0; j1 < 4; ++j1, vo += 9){
2801
+ var uv = charRenderInfo.uvs[j1];
2802
+ uv.copyToArray(vertices, vo);
2803
+ vertices[vo + 2] = r;
2804
+ vertices[vo + 3] = g;
2805
+ vertices[vo + 4] = b;
2806
+ vertices[vo + 5] = finalAlpha;
2807
+ }
2808
+ }
2809
+ return subChunk;
2810
+ };
2811
+ _proto._freeTextChunks = function _freeTextChunks() {
2812
+ var textChunks = this._textChunks;
2813
+ // @ts-ignore
2814
+ var charRenderInfoPool = this.engine._charRenderInfoPool;
2815
+ var manager = this._getChunkManager();
2816
+ for(var i = 0, n = textChunks.length; i < n; ++i){
2817
+ var textChunk = textChunks[i];
2818
+ var charRenderInfos = textChunk.charRenderInfos;
2819
+ for(var j = 0, m = charRenderInfos.length; j < m; ++j){
2820
+ charRenderInfoPool.return(charRenderInfos[j]);
2821
+ }
2822
+ charRenderInfos.length = 0;
2823
+ manager.freeSubChunk(textChunk.subChunk);
2824
+ textChunk.subChunk = null;
2825
+ textChunk.texture = null;
2826
+ }
2827
+ textChunks.length = 0;
2828
+ };
2829
+ _create_class(Text, [
2830
+ {
2831
+ key: "text",
2832
+ get: /**
2833
+ * Rendering string for the Text.
2834
+ */ function get() {
2835
+ return this._text;
2836
+ },
2837
+ set: function set(value) {
2838
+ value = value || "";
2839
+ if (this._text !== value) {
2840
+ this._text = value;
2841
+ this._setDirtyFlagTrue(25);
2842
+ }
2843
+ }
2844
+ },
2845
+ {
2846
+ key: "font",
2847
+ get: /**
2848
+ * The font of the Text.
2849
+ */ function get() {
2850
+ return this._font;
2851
+ },
2852
+ set: function set(value) {
2853
+ var lastFont = this._font;
2854
+ if (lastFont !== value) {
2855
+ lastFont && this._addResourceReferCount(lastFont, -1);
2856
+ value && this._addResourceReferCount(value, 1);
2857
+ this._font = value;
2858
+ this._setDirtyFlagTrue(29);
2859
+ }
2860
+ }
2861
+ },
2862
+ {
2863
+ key: "fontSize",
2864
+ get: /**
2865
+ * The font size of the Text.
2866
+ */ function get() {
2867
+ return this._fontSize;
2868
+ },
2869
+ set: function set(value) {
2870
+ if (this._fontSize !== value) {
2871
+ this._fontSize = value;
2872
+ this._setDirtyFlagTrue(29);
2873
+ }
2874
+ }
2875
+ },
2876
+ {
2877
+ key: "fontStyle",
2878
+ get: /**
2879
+ * The style of the font.
2880
+ */ function get() {
2881
+ return this._fontStyle;
2882
+ },
2883
+ set: function set(value) {
2884
+ if (this.fontStyle !== value) {
2885
+ this._fontStyle = value;
2886
+ this._setDirtyFlagTrue(29);
2887
+ }
2888
+ }
2889
+ },
2890
+ {
2891
+ key: "lineSpacing",
2892
+ get: /**
2893
+ * The space between two lines, in em (ratio of fontSize).
2894
+ */ function get() {
2895
+ return this._lineSpacing;
2896
+ },
2897
+ set: function set(value) {
2898
+ if (this._lineSpacing !== value) {
2899
+ this._lineSpacing = value;
2900
+ this._setDirtyFlagTrue(25);
2901
+ }
2902
+ }
2903
+ },
2904
+ {
2905
+ key: "characterSpacing",
2906
+ get: /**
2907
+ * The space between two characters, in em (ratio of fontSize).
2908
+ */ function get() {
2909
+ return this._characterSpacing;
2910
+ },
2911
+ set: function set(value) {
2912
+ if (this._characterSpacing !== value) {
2913
+ this._characterSpacing = value;
2914
+ this._setDirtyFlagTrue(25);
2915
+ }
2916
+ }
2917
+ },
2918
+ {
2919
+ key: "horizontalAlignment",
2920
+ get: /**
2921
+ * The horizontal alignment.
2922
+ */ function get() {
2923
+ return this._horizontalAlignment;
2924
+ },
2925
+ set: function set(value) {
2926
+ if (this._horizontalAlignment !== value) {
2927
+ this._horizontalAlignment = value;
2928
+ this._setDirtyFlagTrue(25);
2929
+ }
2930
+ }
2931
+ },
2932
+ {
2933
+ key: "verticalAlignment",
2934
+ get: /**
2935
+ * The vertical alignment.
2936
+ */ function get() {
2937
+ return this._verticalAlignment;
2938
+ },
2939
+ set: function set(value) {
2940
+ if (this._verticalAlignment !== value) {
2941
+ this._verticalAlignment = value;
2942
+ this._setDirtyFlagTrue(25);
2943
+ }
2944
+ }
2945
+ },
2946
+ {
2947
+ key: "enableWrapping",
2948
+ get: /**
2949
+ * Whether wrap text to next line when exceeds the width of the container.
2950
+ */ function get() {
2951
+ return this._enableWrapping;
2952
+ },
2953
+ set: function set(value) {
2954
+ if (this._enableWrapping !== value) {
2955
+ this._enableWrapping = value;
2956
+ this._setDirtyFlagTrue(25);
2957
+ }
2958
+ }
2959
+ },
2960
+ {
2961
+ key: "overflowMode",
2962
+ get: /**
2963
+ * The overflow mode.
2964
+ */ function get() {
2965
+ return this._overflowMode;
2966
+ },
2967
+ set: function set(value) {
2968
+ if (this._overflowMode !== value) {
2969
+ this._overflowMode = value;
2970
+ this._setDirtyFlagTrue(25);
2971
+ }
2972
+ }
2973
+ },
2974
+ {
2975
+ key: "maskLayer",
2976
+ get: /**
2977
+ * The mask layer the sprite renderer belongs to.
2978
+ */ function get() {
2979
+ return this._maskLayer;
2980
+ },
2981
+ set: function set(value) {
2982
+ this._maskLayer = value;
2983
+ }
2984
+ },
2985
+ {
2986
+ key: "bounds",
2987
+ get: /**
2988
+ * The bounding volume of the TextRenderer.
2989
+ */ function get() {
2990
+ if (this._isTextNoVisible()) {
2991
+ if (this._isContainDirtyFlag(engine.RendererUpdateFlags.WorldVolume)) {
2992
+ var localBounds = this._localBounds;
2993
+ localBounds.min.set(0, 0, 0);
2994
+ localBounds.max.set(0, 0, 0);
2995
+ this._updateBounds(this._bounds);
2996
+ this._setDirtyFlagFalse(engine.RendererUpdateFlags.WorldVolume);
2997
+ }
2998
+ return this._bounds;
2999
+ }
3000
+ this._isContainDirtyFlag(4) && this._resetSubFont();
3001
+ this._isContainDirtyFlag(8) && this._updateLocalData();
3002
+ this._isContainDirtyFlag(16) && this._updatePosition();
3003
+ this._isContainDirtyFlag(engine.RendererUpdateFlags.WorldVolume) && this._updateBounds(this._bounds);
3004
+ this._setDirtyFlagFalse(29);
3005
+ return this._bounds;
3006
+ }
3007
+ }
3008
+ ]);
3009
+ return Text;
3010
+ }(exports.UIRenderer);
3011
+ Text._textTextureProperty = engine.ShaderProperty.getByName("renderElement_TextTexture");
3012
+ Text._worldPositions = [
3013
+ new engine.Vector3(),
3014
+ new engine.Vector3(),
3015
+ new engine.Vector3(),
3016
+ new engine.Vector3()
3017
+ ];
3018
+ Text._charRenderInfos = [];
3019
+ __decorate([
3020
+ engine.ignoreClone
3021
+ ], Text.prototype, "_textChunks", void 0);
3022
+ __decorate([
3023
+ engine.ignoreClone
3024
+ ], Text.prototype, "_subFont", void 0);
3025
+ __decorate([
3026
+ engine.assignmentClone
3027
+ ], Text.prototype, "_text", void 0);
3028
+ __decorate([
3029
+ engine.ignoreClone
3030
+ ], Text.prototype, "_localBounds", void 0);
3031
+ __decorate([
3032
+ engine.assignmentClone
3033
+ ], Text.prototype, "_font", void 0);
3034
+ __decorate([
3035
+ engine.assignmentClone
3036
+ ], Text.prototype, "_fontSize", void 0);
3037
+ __decorate([
3038
+ engine.assignmentClone
3039
+ ], Text.prototype, "_fontStyle", void 0);
3040
+ __decorate([
3041
+ engine.assignmentClone
3042
+ ], Text.prototype, "_lineSpacing", void 0);
3043
+ __decorate([
3044
+ engine.assignmentClone
3045
+ ], Text.prototype, "_characterSpacing", void 0);
3046
+ __decorate([
3047
+ engine.assignmentClone
3048
+ ], Text.prototype, "_horizontalAlignment", void 0);
3049
+ __decorate([
3050
+ engine.assignmentClone
3051
+ ], Text.prototype, "_verticalAlignment", void 0);
3052
+ __decorate([
3053
+ engine.assignmentClone
3054
+ ], Text.prototype, "_enableWrapping", void 0);
3055
+ __decorate([
3056
+ engine.assignmentClone
3057
+ ], Text.prototype, "_overflowMode", void 0);
3058
+ __decorate([
3059
+ engine.ignoreClone
3060
+ ], Text.prototype, "_onTransformChanged", null);
3061
+ var TextChunk = function TextChunk() {
3062
+ this.charRenderInfos = new Array();
3063
+ };
3064
+
3065
+ /**
3066
+ * The transition behavior of UIInteractive.
3067
+ */ var Transition = /*#__PURE__*/ function() {
3068
+ function Transition() {
3069
+ this._duration = 0;
3070
+ this._countDown = 0;
3071
+ this._finalState = InteractiveState.Normal;
3072
+ }
3073
+ var _proto = Transition.prototype;
3074
+ _proto.destroy = function destroy() {
3075
+ var _this__interactive;
3076
+ (_this__interactive = this._interactive) == null ? void 0 : _this__interactive.removeTransition(this);
3077
+ this._target = null;
3078
+ };
3079
+ /**
3080
+ * @internal
3081
+ */ _proto._setState = function _setState(state, instant) {
3082
+ this._finalState = state;
3083
+ var value = this._getValueByState(state);
3084
+ if (instant) {
3085
+ this._countDown = 0;
3086
+ this._initialValue = this._finalValue = value;
3087
+ } else {
3088
+ this._countDown = this._duration;
3089
+ this._initialValue = this._getTargetValueCopy();
3090
+ this._finalValue = value;
3091
+ }
3092
+ this._updateValue();
3093
+ };
3094
+ /**
3095
+ * @internal
3096
+ */ _proto._onUpdate = function _onUpdate(delta) {
3097
+ if (this._countDown > 0) {
3098
+ this._countDown -= delta;
3099
+ this._updateValue();
3100
+ }
3101
+ };
3102
+ _proto._onStateValueDirty = function _onStateValueDirty(state, preValue, curValue) {
3103
+ // @ts-ignore
3104
+ _instanceof(preValue, engine.ReferResource) && preValue._addReferCount(-1);
3105
+ // @ts-ignore
3106
+ _instanceof(curValue, engine.ReferResource) && curValue._addReferCount(1);
3107
+ if (this._finalState === state) {
3108
+ this._finalValue = curValue;
3109
+ this._updateValue();
3110
+ }
3111
+ };
3112
+ _proto._updateValue = function _updateValue() {
3113
+ var _this__target;
3114
+ var weight = this._duration ? 1 - this._countDown / this._duration : 1;
3115
+ this._updateCurrentValue(this._initialValue, this._finalValue, weight);
3116
+ ((_this__target = this._target) == null ? void 0 : _this__target.enabled) && this._applyValue(this._currentValue);
3117
+ };
3118
+ _proto._getValueByState = function _getValueByState(state) {
3119
+ switch(state){
3120
+ case InteractiveState.Normal:
3121
+ return this.normal;
3122
+ case InteractiveState.Pressed:
3123
+ return this.pressed;
3124
+ case InteractiveState.Hover:
3125
+ return this.hover;
3126
+ case InteractiveState.Disable:
3127
+ return this.disabled;
3128
+ }
3129
+ };
3130
+ _create_class(Transition, [
3131
+ {
3132
+ key: "normal",
3133
+ get: /**
3134
+ * The normal state of the transition.
3135
+ */ function get() {
3136
+ return this._normal;
3137
+ },
3138
+ set: function set(value) {
3139
+ var preNormal = this._normal;
3140
+ if (preNormal !== value) {
3141
+ this._normal = value;
3142
+ this._onStateValueDirty(InteractiveState.Normal, preNormal, value);
3143
+ }
3144
+ }
3145
+ },
3146
+ {
3147
+ key: "pressed",
3148
+ get: /**
3149
+ * The pressed state of the transition.
3150
+ */ function get() {
3151
+ return this._pressed;
3152
+ },
3153
+ set: function set(value) {
3154
+ var prePressed = this._pressed;
3155
+ if (prePressed !== value) {
3156
+ this._pressed = value;
3157
+ this._onStateValueDirty(InteractiveState.Pressed, prePressed, value);
3158
+ }
3159
+ }
3160
+ },
3161
+ {
3162
+ key: "hover",
3163
+ get: /**
3164
+ * The hover state of the transition.
3165
+ */ function get() {
3166
+ return this._hover;
3167
+ },
3168
+ set: function set(value) {
3169
+ var preHover = this._hover;
3170
+ if (preHover !== value) {
3171
+ this._hover = value;
3172
+ this._onStateValueDirty(InteractiveState.Hover, preHover, value);
3173
+ }
3174
+ }
3175
+ },
3176
+ {
3177
+ key: "disabled",
3178
+ get: /**
3179
+ * The disabled state of the transition.
3180
+ */ function get() {
3181
+ return this._disabled;
3182
+ },
3183
+ set: function set(value) {
3184
+ var preDisabled = this._disabled;
3185
+ if (preDisabled !== value) {
3186
+ this._disabled = value;
3187
+ this._onStateValueDirty(InteractiveState.Disable, preDisabled, value);
3188
+ }
3189
+ }
3190
+ },
3191
+ {
3192
+ key: "target",
3193
+ get: /**
3194
+ * The target of the transition.
3195
+ */ function get() {
3196
+ return this._target;
3197
+ },
3198
+ set: function set(value) {
3199
+ if (this._target !== value) {
3200
+ this._target = value;
3201
+ (value == null ? void 0 : value.enabled) && this._applyValue(this._currentValue);
3202
+ }
3203
+ }
3204
+ },
3205
+ {
3206
+ key: "duration",
3207
+ get: /**
3208
+ * The duration of the transition.
3209
+ */ function get() {
3210
+ return this._duration;
3211
+ },
3212
+ set: function set(value) {
3213
+ if (value < 0) value = 0;
3214
+ var preDuration = this._duration;
3215
+ if (preDuration !== value) {
3216
+ this._duration = value;
3217
+ if (this._countDown > 0) {
3218
+ this._countDown = value * (1 - this._countDown / preDuration);
3219
+ this._updateValue();
3220
+ }
3221
+ }
3222
+ }
3223
+ }
3224
+ ]);
3225
+ return Transition;
3226
+ }();
3227
+
3228
+ /**
3229
+ * Color transition.
3230
+ */ var ColorTransition = /*#__PURE__*/ function(Transition) {
3231
+ _inherits(ColorTransition, Transition);
3232
+ function ColorTransition() {
3233
+ var _this;
3234
+ _this = Transition.call(this) || this, _this._color = new engine.Color();
3235
+ _this._normal = new engine.Color(1, 1, 1, 1);
3236
+ _this._hover = new engine.Color(0.9130986517934192, 0.9130986517934192, 0.9130986517934192, 1);
3237
+ _this._pressed = new engine.Color(0.5775804404296506, 0.5775804404296506, 0.5775804404296506, 1);
3238
+ _this._disabled = new engine.Color(0.5775804404296506, 0.5775804404296506, 0.5775804404296506, 1);
3239
+ _this._duration = 0.1;
3240
+ _this._currentValue = new engine.Color();
3241
+ _this._onNormalValueChanged = _this._onNormalValueChanged.bind(_this);
3242
+ _this._onHoverValueChanged = _this._onHoverValueChanged.bind(_this);
3243
+ _this._onPressedValueChanged = _this._onPressedValueChanged.bind(_this);
3244
+ _this._onDisabledValueChanged = _this._onDisabledValueChanged.bind(_this);
3245
+ // @ts-ignore
3246
+ _this._normal._onValueChanged = _this._onNormalValueChanged;
3247
+ // @ts-ignore
3248
+ _this._hover._onValueChanged = _this._onHoverValueChanged;
3249
+ // @ts-ignore
3250
+ _this._pressed._onValueChanged = _this._onPressedValueChanged;
3251
+ // @ts-ignore
3252
+ _this._disabled._onValueChanged = _this._onDisabledValueChanged;
3253
+ return _this;
3254
+ }
3255
+ var _proto = ColorTransition.prototype;
3256
+ _proto._onNormalValueChanged = function _onNormalValueChanged() {
3257
+ if (this._finalState === InteractiveState.Normal) {
3258
+ this._finalValue = this._normal;
3259
+ this._updateValue();
3260
+ }
3261
+ };
3262
+ _proto._onHoverValueChanged = function _onHoverValueChanged() {
3263
+ if (this._finalState === InteractiveState.Hover) {
3264
+ this._finalValue = this._hover;
3265
+ this._updateValue();
3266
+ }
3267
+ };
3268
+ _proto._onPressedValueChanged = function _onPressedValueChanged() {
3269
+ if (this._finalState === InteractiveState.Pressed) {
3270
+ this._finalValue = this._pressed;
3271
+ this._updateValue();
3272
+ }
3273
+ };
3274
+ _proto._onDisabledValueChanged = function _onDisabledValueChanged() {
3275
+ if (this._finalState === InteractiveState.Disable) {
3276
+ this._finalValue = this._disabled;
3277
+ this._updateValue();
3278
+ }
3279
+ };
3280
+ _proto._getTargetValueCopy = function _getTargetValueCopy() {
3281
+ var _this__target;
3282
+ var color = this._color;
3283
+ color.copyFrom(((_this__target = this._target) == null ? void 0 : _this__target.color) || this._normal);
3284
+ return color;
3285
+ };
3286
+ _proto._updateCurrentValue = function _updateCurrentValue(srcValue, destValue, weight) {
3287
+ if (weight >= 1) {
3288
+ this._currentValue.copyFrom(destValue);
3289
+ } else {
3290
+ engine.Color.lerp(srcValue, destValue, weight, this._currentValue);
3291
+ }
3292
+ };
3293
+ _proto._applyValue = function _applyValue(value) {
3294
+ this._target.color = value;
3295
+ };
3296
+ return ColorTransition;
3297
+ }(Transition);
3298
+
3299
+ /**
3300
+ * Scale transition.
3301
+ */ var ScaleTransition = /*#__PURE__*/ function(Transition) {
3302
+ _inherits(ScaleTransition, Transition);
3303
+ function ScaleTransition() {
3304
+ var _this;
3305
+ _this = Transition.call(this) || this;
3306
+ _this._normal = 1;
3307
+ _this._hover = 1;
3308
+ _this._pressed = 1.2;
3309
+ _this._disabled = 1;
3310
+ _this._duration = 0.1;
3311
+ return _this;
3312
+ }
3313
+ var _proto = ScaleTransition.prototype;
3314
+ _proto._getTargetValueCopy = function _getTargetValueCopy() {
3315
+ var _this__target;
3316
+ return ((_this__target = this._target) == null ? void 0 : _this__target.entity.transform.scale.x) || this._normal;
3317
+ };
3318
+ _proto._updateCurrentValue = function _updateCurrentValue(srcValue, destValue, weight) {
3319
+ this._currentValue = weight >= 1 ? destValue : (destValue - srcValue) * weight + srcValue;
3320
+ };
3321
+ _proto._applyValue = function _applyValue(value) {
3322
+ this._target.entity.transform.setScale(value, value, value);
3323
+ };
3324
+ return ScaleTransition;
3325
+ }(Transition);
3326
+
3327
+ /**
3328
+ * Sprite transition.
3329
+ */ var SpriteTransition = /*#__PURE__*/ function(Transition) {
3330
+ _inherits(SpriteTransition, Transition);
3331
+ function SpriteTransition() {
3332
+ return Transition.apply(this, arguments) || this;
3333
+ }
3334
+ var _proto = SpriteTransition.prototype;
3335
+ /**
3336
+ * @internal
3337
+ */ _proto.destroy = function destroy() {
3338
+ Transition.prototype.destroy.call(this);
3339
+ if (this._normal) {
3340
+ // @ts-ignore
3341
+ this._normal._addReferCount(-1);
3342
+ this._normal = null;
3343
+ }
3344
+ if (this._hover) {
3345
+ // @ts-ignore
3346
+ this._hover._addReferCount(-1);
3347
+ this._hover = null;
3348
+ }
3349
+ if (this._pressed) {
3350
+ // @ts-ignore
3351
+ this._pressed._addReferCount(-1);
3352
+ this._pressed = null;
3353
+ }
3354
+ if (this._disabled) {
3355
+ // @ts-ignore
3356
+ this._disabled._addReferCount(-1);
3357
+ this._disabled = null;
3358
+ }
3359
+ this._initialValue = this._currentValue = this._finalValue = null;
3360
+ this._target = null;
3361
+ };
3362
+ _proto._getTargetValueCopy = function _getTargetValueCopy() {
3363
+ var _this__target;
3364
+ return (_this__target = this._target) == null ? void 0 : _this__target.sprite;
3365
+ };
3366
+ _proto._updateCurrentValue = function _updateCurrentValue(srcValue, destValue, weight) {
3367
+ this._currentValue = weight >= 1 ? destValue : srcValue;
3368
+ };
3369
+ _proto._applyValue = function _applyValue(value) {
3370
+ this._target.sprite = value;
3371
+ };
3372
+ return SpriteTransition;
3373
+ }(Transition);
3374
+
3375
+ var GUIComponent = /*#__PURE__*/Object.freeze({
3376
+ __proto__: null,
3377
+ get UICanvas () { return exports.UICanvas; },
3378
+ UIGroup: UIGroup,
3379
+ get UIRenderer () { return exports.UIRenderer; },
3380
+ UITransform: UITransform,
3381
+ Button: Button,
3382
+ Image: Image,
3383
+ SpriteSizeMode: SpriteSizeMode,
3384
+ Text: Text,
3385
+ ColorTransition: ColorTransition,
3386
+ ScaleTransition: ScaleTransition,
3387
+ SpriteTransition: SpriteTransition,
3388
+ Transition: Transition
3389
+ });
3390
+
3391
+ var uiDefaultFs = "#include <common>\nuniform sampler2D renderer_UITexture;\n\nvarying vec2 v_uv;\nvarying vec4 v_color;\n\nvoid main() {\n vec4 baseColor = texture2DSRGB(renderer_UITexture, v_uv);\n vec4 finalColor = baseColor * v_color;\n #ifdef ENGINE_SHOULD_SRGB_CORRECT\n finalColor = outputSRGBCorrection(finalColor);\n #endif\n gl_FragColor = finalColor;\n}"; // eslint-disable-line
3392
+
3393
+ var uiDefaultVs = "uniform mat4 renderer_MVPMat;\n\nattribute vec3 POSITION;\nattribute vec2 TEXCOORD_0;\nattribute vec4 COLOR_0;\n\nvarying vec2 v_uv;\nvarying vec4 v_color;\n\nvoid main() {\n gl_Position = renderer_MVPMat * vec4(POSITION, 1.0);\n\n v_uv = TEXCOORD_0;\n v_color = COLOR_0;\n}\n"; // eslint-disable-line
3394
+
3395
+ /**
3396
+ * @internal
3397
+ */ var UIHitResult = function UIHitResult() {
3398
+ this.entity = null;
3399
+ this.distance = 0;
3400
+ this.point = new engine.Vector3();
3401
+ this.normal = new engine.Vector3();
3402
+ this.component = null;
3403
+ };
3404
+
3405
+ exports.UIPointerEventEmitter = /*#__PURE__*/ function(PointerEventEmitter1) {
3406
+ _inherits(UIPointerEventEmitter, PointerEventEmitter1);
3407
+ function UIPointerEventEmitter() {
3408
+ var _this;
3409
+ _this = PointerEventEmitter1.apply(this, arguments) || this, _this._enteredPath = [], _this._pressedPath = [], _this._draggedPath = [];
3410
+ return _this;
3411
+ }
3412
+ var _proto = UIPointerEventEmitter.prototype;
3413
+ _proto._init = function _init() {
3414
+ this._hitResult = new UIHitResult();
3415
+ };
3416
+ _proto.processRaycast = function processRaycast(scenes, pointer) {
3417
+ var ray = engine.PointerEventEmitter._tempRay;
3418
+ var hitResult = this._hitResult;
3419
+ var position = pointer.position;
3420
+ var x = position.x, y = position.y;
3421
+ for(var i = scenes.length - 1; i >= 0; i--){
3422
+ var scene = scenes[i];
3423
+ if (!scene.isActive || scene.destroyed) continue;
3424
+ // @ts-ignore
3425
+ var componentsManager = scene._componentsManager;
3426
+ // Overlay Canvas
3427
+ var canvasElements = componentsManager._overlayCanvases;
3428
+ // Screen to world ( Assume that world units have a one-to-one relationship with pixel units )
3429
+ ray.origin.set(position.x, scene.engine.canvas.height - position.y, 1);
3430
+ ray.direction.set(0, 0, -1);
3431
+ for(var j = canvasElements.length - 1; j >= 0; j--){
3432
+ if (canvasElements.get(j)._raycast(ray, hitResult)) {
3433
+ this._updateRaycast(hitResult.component, pointer);
3434
+ return;
3435
+ }
3436
+ }
3437
+ var cameras = componentsManager._activeCameras;
3438
+ for(var j1 = cameras.length - 1; j1 >= 0; j1--){
3439
+ var camera = cameras.get(j1);
3440
+ if (camera.renderTarget) continue;
3441
+ var pixelViewport = camera.pixelViewport;
3442
+ if (x < pixelViewport.x || y < pixelViewport.y || x > pixelViewport.x + pixelViewport.width || y > pixelViewport.y + pixelViewport.height) {
3443
+ continue;
3444
+ }
3445
+ camera.screenPointToRay(pointer.position, ray);
3446
+ // Other canvases
3447
+ var isOrthographic = camera.isOrthographic;
3448
+ var _camera_entity_transform = camera.entity.transform, cameraPosition = _camera_entity_transform.worldPosition, cameraForward = _camera_entity_transform.worldForward;
3449
+ // Sort by rendering order
3450
+ canvasElements = componentsManager._canvases;
3451
+ for(var k = 0, n = canvasElements.length; k < n; k++){
3452
+ canvasElements.get(k)._updateSortDistance(isOrthographic, cameraPosition, cameraForward);
3453
+ }
3454
+ canvasElements.sort(function(a, b) {
3455
+ return a.sortOrder - b.sortOrder || a._sortDistance - b._sortDistance;
3456
+ });
3457
+ for(var k1 = 0, n1 = canvasElements.length; k1 < n1; k1++){
3458
+ canvasElements.get(k1)._canvasIndex = k1;
3459
+ }
3460
+ var farClipPlane = camera.farClipPlane;
3461
+ // Post-rendering first detection
3462
+ for(var k2 = 0, n2 = canvasElements.length; k2 < n2; k2++){
3463
+ var canvas = canvasElements.get(k2);
3464
+ if (!canvas._canDispatchEvent(camera)) continue;
3465
+ if (canvas._raycast(ray, hitResult, farClipPlane)) {
3466
+ this._updateRaycast(hitResult.component, pointer);
3467
+ return;
3468
+ }
3469
+ }
3470
+ if (camera.clearFlags & engine.CameraClearFlags.Color) {
3471
+ this._updateRaycast(null);
3472
+ return;
3473
+ }
3474
+ }
3475
+ this._updateRaycast(null);
3476
+ }
3477
+ };
3478
+ _proto.processDrag = function processDrag(pointer) {
3479
+ var draggedPath = this._draggedPath;
3480
+ if (draggedPath.length > 0) {
3481
+ this._bubble(draggedPath, pointer, this._fireDrag);
3482
+ }
3483
+ };
3484
+ _proto.processDown = function processDown(pointer) {
3485
+ var enteredPath = this._enteredPath;
3486
+ var pressedPath = this._pressedPath;
3487
+ var draggedPath = this._draggedPath;
3488
+ var length = draggedPath.length = pressedPath.length = enteredPath.length;
3489
+ if (length > 0) {
3490
+ for(var i = 0; i < length; i++){
3491
+ pressedPath[i] = draggedPath[i] = enteredPath[i];
3492
+ }
3493
+ this._bubble(pressedPath, pointer, this._fireDown);
3494
+ this._bubble(draggedPath, pointer, this._fireBeginDrag);
3495
+ }
3496
+ };
3497
+ _proto.processUp = function processUp(pointer) {
3498
+ var enteredPath = this._enteredPath;
3499
+ var pressedPath = this._pressedPath;
3500
+ if (enteredPath.length > 0) {
3501
+ this._bubble(enteredPath, pointer, this._fireUp);
3502
+ if (pressedPath.length > 0) {
3503
+ var common = UIPointerEventEmitter._tempArray0;
3504
+ if (this._findCommonInPath(enteredPath, pressedPath, common)) {
3505
+ var eventData = this._createEventData(pointer);
3506
+ for(var i = 0, n = common.length; i < n; i++){
3507
+ this._fireClick(common[i], eventData);
3508
+ }
3509
+ common.length = 0;
3510
+ }
3511
+ }
3512
+ }
3513
+ pressedPath.length = 0;
3514
+ var draggedPath = this._draggedPath;
3515
+ if (draggedPath.length > 0) {
3516
+ this._bubble(draggedPath, pointer, this._fireEndDrag);
3517
+ draggedPath.length = 0;
3518
+ }
3519
+ if (enteredPath.length > 0) {
3520
+ this._bubble(enteredPath, pointer, this._fireDrop);
3521
+ }
3522
+ };
3523
+ _proto.processLeave = function processLeave(pointer) {
3524
+ var enteredPath = this._enteredPath;
3525
+ if (enteredPath.length > 0) {
3526
+ this._bubble(enteredPath, pointer, this._fireExit);
3527
+ enteredPath.length = 0;
3528
+ }
3529
+ var draggedPath = this._draggedPath;
3530
+ if (draggedPath.length > 0) {
3531
+ this._bubble(draggedPath, pointer, this._fireEndDrag);
3532
+ draggedPath.length = 0;
3533
+ }
3534
+ this._pressedPath.length = 0;
3535
+ };
3536
+ _proto.dispose = function dispose() {
3537
+ this._enteredPath.length = this._pressedPath.length = this._draggedPath.length = 0;
3538
+ };
3539
+ _proto._updateRaycast = function _updateRaycast(element, pointer) {
3540
+ if (pointer === void 0) pointer = null;
3541
+ var enteredPath = this._enteredPath;
3542
+ var curPath = this._composedPath(element, UIPointerEventEmitter._path);
3543
+ var add = UIPointerEventEmitter._tempArray0;
3544
+ var del = UIPointerEventEmitter._tempArray1;
3545
+ if (this._findDiffInPath(enteredPath, curPath, add, del)) {
3546
+ var eventData = this._createEventData(pointer);
3547
+ for(var i = 0, n = add.length; i < n; i++){
3548
+ this._fireEnter(add[i], eventData);
3549
+ }
3550
+ for(var i1 = 0, n1 = del.length; i1 < n1; i1++){
3551
+ this._fireExit(del[i1], eventData);
3552
+ }
3553
+ var length = enteredPath.length = curPath.length;
3554
+ for(var i2 = 0; i2 < length; i2++){
3555
+ enteredPath[i2] = curPath[i2];
3556
+ }
3557
+ add.length = del.length = 0;
3558
+ }
3559
+ curPath.length = 0;
3560
+ };
3561
+ _proto._composedPath = function _composedPath(element, path) {
3562
+ if (!element) {
3563
+ path.length = 0;
3564
+ return path;
3565
+ }
3566
+ var entity = path[0] = element.entity;
3567
+ var i = 1;
3568
+ var rootEntity = element._getRootCanvas().entity;
3569
+ for(; i < UIPointerEventEmitter._MAX_PATH_DEPTH && !!entity && entity !== rootEntity; i++){
3570
+ entity = path[i] = entity.parent;
3571
+ }
3572
+ path.length = i;
3573
+ return path;
3574
+ };
3575
+ _proto._findCommonInPath = function _findCommonInPath(prePath, curPath, common) {
3576
+ var idSet = UIPointerEventEmitter._tempSet;
3577
+ idSet.clear();
3578
+ for(var i = 0, n = prePath.length; i < n; i++){
3579
+ idSet.add(prePath[i].instanceId);
3580
+ }
3581
+ var hasCommon = false;
3582
+ for(var i1 = 0, n1 = curPath.length; i1 < n1; i1++){
3583
+ var entity = curPath[i1];
3584
+ if (idSet.has(entity.instanceId)) {
3585
+ common.push(entity);
3586
+ hasCommon = true;
3587
+ }
3588
+ }
3589
+ return hasCommon;
3590
+ };
3591
+ _proto._findDiffInPath = function _findDiffInPath(prePath, curPath, add, del) {
3592
+ var idSet = UIPointerEventEmitter._tempSet;
3593
+ idSet.clear();
3594
+ var changed = false;
3595
+ for(var i = 0, n = prePath.length; i < n; i++){
3596
+ idSet.add(prePath[i].instanceId);
3597
+ }
3598
+ for(var i1 = 0, n1 = curPath.length; i1 < n1; i1++){
3599
+ var entity = curPath[i1];
3600
+ if (!idSet.has(entity.instanceId)) {
3601
+ add.push(entity);
3602
+ changed = true;
3603
+ }
3604
+ }
3605
+ idSet.clear();
3606
+ for(var i2 = 0, n2 = curPath.length; i2 < n2; i2++){
3607
+ idSet.add(curPath[i2].instanceId);
3608
+ }
3609
+ for(var i3 = 0, n3 = prePath.length; i3 < n3; i3++){
3610
+ var entity1 = prePath[i3];
3611
+ if (!idSet.has(entity1.instanceId)) {
3612
+ del.push(entity1);
3613
+ changed = true;
3614
+ }
3615
+ }
3616
+ return changed;
3617
+ };
3618
+ _proto._bubble = function _bubble(path, pointer, fireEvent) {
3619
+ var length = path.length;
3620
+ if (length <= 0) return;
3621
+ var eventData = this._createEventData(pointer);
3622
+ for(var i = 0; i < length; i++){
3623
+ fireEvent(path[i], eventData);
3624
+ }
3625
+ };
3626
+ return UIPointerEventEmitter;
3627
+ }(engine.PointerEventEmitter);
3628
+ exports.UIPointerEventEmitter._MAX_PATH_DEPTH = 2048;
3629
+ exports.UIPointerEventEmitter._tempSet = new Set();
3630
+ exports.UIPointerEventEmitter._path = [];
3631
+ exports.UIPointerEventEmitter._tempArray0 = [];
3632
+ exports.UIPointerEventEmitter._tempArray1 = [];
3633
+ exports.UIPointerEventEmitter = __decorate([
3634
+ engine.registerPointerEventEmitter()
3635
+ ], exports.UIPointerEventEmitter);
3636
+
3637
+ var EngineExtension = /*#__PURE__*/ function() {
3638
+ function EngineExtension() {}
3639
+ var _proto = EngineExtension.prototype;
3640
+ _proto._getUIDefaultMaterial = function _getUIDefaultMaterial() {
3641
+ if (!this._uiDefaultMaterial) {
3642
+ var shader = _getOrCreateUIShader();
3643
+ // @ts-ignore
3644
+ var material = new engine.Material(this, shader);
3645
+ var renderState = material.renderState;
3646
+ var target = renderState.blendState.targetBlendState;
3647
+ target.enabled = true;
3648
+ target.sourceColorBlendFactor = engine.BlendFactor.SourceAlpha;
3649
+ target.destinationColorBlendFactor = engine.BlendFactor.OneMinusSourceAlpha;
3650
+ target.sourceAlphaBlendFactor = engine.BlendFactor.One;
3651
+ target.destinationAlphaBlendFactor = engine.BlendFactor.OneMinusSourceAlpha;
3652
+ target.colorBlendOperation = target.alphaBlendOperation = engine.BlendOperation.Add;
3653
+ renderState.depthState.writeEnabled = false;
3654
+ renderState.rasterState.cullMode = engine.CullMode.Off;
3655
+ renderState.renderQueueType = engine.RenderQueueType.Transparent;
3656
+ material.isGCIgnored = true;
3657
+ this._uiDefaultMaterial = material;
3658
+ }
3659
+ return this._uiDefaultMaterial;
3660
+ };
3661
+ return EngineExtension;
3662
+ }();
3663
+ var EntityExtension = /*#__PURE__*/ function() {
3664
+ function EntityExtension() {
3665
+ this._uiHierarchyVersion = 0;
3666
+ }
3667
+ var _proto = EntityExtension.prototype;
3668
+ _proto._updateUIHierarchyVersion = function _updateUIHierarchyVersion(version) {
3669
+ if (this._uiHierarchyVersion !== version) {
3670
+ var // @ts-ignore
3671
+ _this_parent;
3672
+ this._uiHierarchyVersion = version;
3673
+ (_this_parent = this.parent) == null ? void 0 : _this_parent._updateUIHierarchyVersion(version);
3674
+ }
3675
+ };
3676
+ return EntityExtension;
3677
+ }();
3678
+ function ApplyMixins(derivedCtor, baseCtors) {
3679
+ baseCtors.forEach(function(baseCtor) {
3680
+ Object.getOwnPropertyNames(baseCtor.prototype).forEach(function(name) {
3681
+ Object.defineProperty(derivedCtor.prototype, name, Object.getOwnPropertyDescriptor(baseCtor.prototype, name) || Object.create(null));
3682
+ });
3683
+ });
3684
+ }
3685
+ ApplyMixins(engine.Engine, [
3686
+ EngineExtension
3687
+ ]);
3688
+ ApplyMixins(engine.Entity, [
3689
+ EntityExtension
3690
+ ]);
3691
+ /**
3692
+ * Register GUI components for the editor.
3693
+ */ function registerGUI() {
3694
+ for(var key in GUIComponent){
3695
+ engine.Loader.registerClass(key, GUIComponent[key]);
3696
+ }
3697
+ _getOrCreateUIShader();
3698
+ }
3699
+ function _getOrCreateUIShader() {
3700
+ var shader = engine.Shader.find("ui");
3701
+ if (!shader) {
3702
+ shader = engine.Shader.create("ui", [
3703
+ new engine.ShaderPass("Forward", uiDefaultVs, uiDefaultFs, {
3704
+ pipelineStage: engine.PipelineStage.Forward
3705
+ })
3706
+ ]);
3707
+ }
3708
+ return shader;
3709
+ }
3710
+
3711
+ exports.Button = Button;
3712
+ exports.CanvasRenderMode = CanvasRenderMode;
3713
+ exports.ColorTransition = ColorTransition;
3714
+ exports.EngineExtension = EngineExtension;
3715
+ exports.EntityExtension = EntityExtension;
3716
+ exports.HorizontalAlignmentMode = HorizontalAlignmentMode;
3717
+ exports.Image = Image;
3718
+ exports.ResolutionAdaptationMode = ResolutionAdaptationMode;
3719
+ exports.ScaleTransition = ScaleTransition;
3720
+ exports.SpriteSizeMode = SpriteSizeMode;
3721
+ exports.SpriteTransition = SpriteTransition;
3722
+ exports.Text = Text;
3723
+ exports.Transition = Transition;
3724
+ exports.UIGroup = UIGroup;
3725
+ exports.UITransform = UITransform;
3726
+ exports.VerticalAlignmentMode = VerticalAlignmentMode;
3727
+ exports.registerGUI = registerGUI;
3728
+
3729
+ Object.defineProperty(exports, '__esModule', { value: true });
3730
+
3731
+ }));
3732
+ //# sourceMappingURL=browser.js.map