System.register(["__unresolved_0", "cc", "__unresolved_1"], function (_export, _context) { "use strict"; var _reporterNs, _cclegacy, __checkObsolete__, __checkObsoleteInNamespace__, _decorator, Node, Component, UIRenderer, director, UITransform, instantiate, sys, UIOpacity, Label, RenderReactiveHandler, _dec, _dec2, _class, _class2, _descriptor, _descriptor2, _descriptor3, _class3, _crd, ccclass, property, RenderAlternative; function _initializerDefineProperty(target, property, descriptor, context) { if (!descriptor) return; Object.defineProperty(target, property, { enumerable: descriptor.enumerable, configurable: descriptor.configurable, writable: descriptor.writable, value: descriptor.initializer ? descriptor.initializer.call(context) : void 0 }); } function _applyDecoratedDescriptor(target, property, decorators, descriptor, context) { var desc = {}; Object.keys(descriptor).forEach(function (key) { desc[key] = descriptor[key]; }); desc.enumerable = !!desc.enumerable; desc.configurable = !!desc.configurable; if ('value' in desc || desc.initializer) { desc.writable = true; } desc = decorators.slice().reverse().reduce(function (desc, decorator) { return decorator(target, property, desc) || desc; }, desc); if (context && desc.initializer !== void 0) { desc.value = desc.initializer ? desc.initializer.call(context) : void 0; desc.initializer = undefined; } if (desc.initializer === void 0) { Object.defineProperty(target, property, desc); desc = null; } return desc; } function _initializerWarningHelper(descriptor, context) { throw new Error('Decorating class property failed. Please ensure that ' + 'transform-class-properties is enabled and runs after the decorators transform.'); } function _reportPossibleCrUseOfRenderReactiveHandler(extras) { _reporterNs.report("RenderReactiveHandler", "./RenderReactiveHandler", _context.meta, extras); } return { setters: [function (_unresolved_) { _reporterNs = _unresolved_; }, function (_cc) { _cclegacy = _cc.cclegacy; __checkObsolete__ = _cc.__checkObsolete__; __checkObsoleteInNamespace__ = _cc.__checkObsoleteInNamespace__; _decorator = _cc._decorator; Node = _cc.Node; Component = _cc.Component; UIRenderer = _cc.UIRenderer; director = _cc.director; UITransform = _cc.UITransform; instantiate = _cc.instantiate; sys = _cc.sys; UIOpacity = _cc.UIOpacity; Label = _cc.Label; }, function (_unresolved_2) { RenderReactiveHandler = _unresolved_2.RenderReactiveHandler; }], execute: function () { _crd = true; _cclegacy._RF.push({}, "1541daeJmFOIJRUZwZXMr9Q", "RenderAlternative", undefined); __checkObsolete__(['_decorator', 'Node', 'Component', 'UIRenderer', 'Mat4', 'Vec3', 'director', 'UITransform', 'instantiate', 'sys', 'UIOpacity', 'Label']); /** * 目前该渲染代理功能存在的问题 * 1.被代理节点的父级不能出现scaleX和scaleY不一致的情况,被代理节点本身没有这个限制 */ ({ ccclass, property } = _decorator); _export("default", RenderAlternative = (_dec = property(Node), _dec2 = property({ tooltip: '设置同步的间隔(秒为单位),0就是每帧都同步,0.1就是隔0.1秒同步一次' }), ccclass(_class = (_class2 = (_class3 = class RenderAlternative extends Component { constructor(...args) { super(...args); /**渲染层节点 */ _initializerDefineProperty(this, "renderLayer", _descriptor, this); /**渲染的zIndex */ _initializerDefineProperty(this, "renderZIndex", _descriptor2, this); /**同步的间隔(帧为单位) */ _initializerDefineProperty(this, "syncInv", _descriptor3, this); /**渲染的sIndex */ this.sIndex = 0; /**非渲染组件 */ this.proxyRender = null; /**渲染组件 */ this.renderCompnent = null; /**渲染节点的ui控件 */ this.renderUiTrans = null; /**ui控件 */ this.uiTrans = null; /**上次更新的数据 */ this.lastWMat4 = null; /**上次更新的数据 */ this.lastLMat4 = null; /**上次更新的数据 */ this.lastPos = null; /**距离下次刷新累计了多少间隔 */ this.accuTime = 0; /**最后一次刷新时间 */ this.lastFrameTime = null; /**是否进行刷新 */ this.isAttachFrame = false; } static isDirty(renderLayer) { return this._isDirty.has(renderLayer) ? this._isDirty.get(renderLayer) : false; } static setDirty(renderLayer) { if (renderLayer && !this.isDirty(renderLayer)) { this._isDirty.set(renderLayer, true); this.sortOnce(renderLayer); } } static sortOnce(renderLayer) { requestAnimationFrame(() => { renderLayer.children.sort(this.sortChildren); this._isDirty.set(renderLayer, false); }); } static sortChildren(a, b) { //@ts-ignore let aindex = a._rZIndex, bindex = b._rZIndex; if (Number.isFinite(aindex) && Number.isFinite(bindex)) { return aindex - bindex; } else if (!Number.isFinite(aindex)) { return 1; } else { return -1; } } /**获取总的ZIndex */ get zIndex() { let zIndex = this.renderZIndex + this.sIndex * 0.01; let parentNode = this.node.parent; while (parentNode != ((_this$renderLayer = this.renderLayer) == null ? void 0 : _this$renderLayer.parent) && parentNode != director.getScene()) { var _this$renderLayer; let render = parentNode.getComponent(RenderAlternative); if (render) { zIndex += render.zIndex + 1; break; } parentNode = parentNode.parent; } return zIndex; } /** * 设置渲染节点层 * @param layer */ init(layer) { if (layer) { this.renderLayer = layer; } if (!this.renderLayer) { console.warn(`节点${this.node.name}没有设置渲染层`); return null; } return this.initRender(); } /** * 初始化渲染节点 */ initRender() { let node = this.getRender(); node.setParent(this.renderLayer ? this.renderLayer : director.getScene().getChildByName("Canvas")); this.isAttachFrame = true; requestAnimationFrame(this.frameUpdate.bind(this)); return this.doProxy(); } /**生成代理 */ doProxy() { this.proxyRender = new Proxy(this.renderCompnent, new (_crd && RenderReactiveHandler === void 0 ? (_reportPossibleCrUseOfRenderReactiveHandler({ error: Error() }), RenderReactiveHandler) : RenderReactiveHandler)()); return this.proxyRender; } frameUpdate() { let now = sys.now(); !this.lastFrameTime && (this.lastFrameTime = now); let dt = (now - this.lastFrameTime) / 1000; this.lastFrameTime = now; if (this.proxyRender) { this.accuTime += dt; if (this.accuTime >= this.syncInv) { this.accuTime -= this.syncInv; this.updateProp(); } } if (this.isAttachFrame) { requestAnimationFrame(this.frameUpdate.bind(this)); } } /**更新最新状态 */ updateProp() { var _this$node$matrix, _this$lastWMat, _this$lastLMat; let node = this.renderCompnent.node; let uiTrans = this.renderUiTrans; if (!this.node.activeInHierarchy) { node.active = false; return; } node.active = true; ; uiTrans.anchorX != this.uiTrans.anchorX && (uiTrans.anchorX = this.uiTrans.anchorX); uiTrans.anchorY != this.uiTrans.anchorY && (uiTrans.anchorY = this.uiTrans.anchorY); if (uiTrans.width != this.uiTrans.width) { uiTrans.width = this.uiTrans.width; if (this.renderCompnent instanceof Label) { requestAnimationFrame(() => { this.uiTrans.width = uiTrans.width; }); } } if (uiTrans.height != this.uiTrans.height) { uiTrans.height = this.uiTrans.height; if (this.renderCompnent instanceof Label) { requestAnimationFrame(() => { this.uiTrans.height = uiTrans.height; }); } } node.layer != this.node.layer && (node.layer = this.node.layer); let opacity = this.getOpacity(this.node); if (opacity != 255) { let uiOpacity = node.getComponent(UIOpacity) || node.addComponent(UIOpacity); uiOpacity.opacity != opacity && (uiOpacity.opacity = opacity); } let wMat4 = this.node.worldMatrix.clone(); let lMat4 = (_this$node$matrix = this.node.matrix) == null ? void 0 : _this$node$matrix.clone(); if (!((_this$lastWMat = this.lastWMat4) != null && _this$lastWMat.equals(wMat4)) || this.lastLMat4 && !((_this$lastLMat = this.lastLMat4) != null && _this$lastLMat.equals(lMat4))) { this.onAngleChange(); this.onScaleChange(); this.onPosChange(); this.lastLMat4 = lMat4; this.lastWMat4 = wMat4; } //@ts-ignore let old = node._rZIndex; //@ts-ignore node._rZIndex = this.zIndex; if (old != this.zIndex) { RenderAlternative.setDirty(this.renderLayer); } } onDestroy() { this.renderCompnent.node.destroy(); this.renderCompnent = null; this.proxyRender = null; } /** * 获取节点透明度 * @param node */ getOpacity(node) { var _node$getComponent; let opacity = (((_node$getComponent = node.getComponent(UIOpacity)) == null ? void 0 : _node$getComponent.opacity) || 255) / 255; let parentNode = node.parent; while (parentNode != this.renderLayer.parent && parentNode != director.getScene()) { var _parentNode$getCompon; opacity *= (((_parentNode$getCompon = parentNode.getComponent(UIOpacity)) == null ? void 0 : _parentNode$getCompon.opacity) || 255) / 255; parentNode = parentNode.parent; } return opacity * 255; } /**位置变化处理 */ onPosChange() { this.renderCompnent.node.worldPosition = this.node.worldPosition.clone(); } /**旋转变化处理 */ onAngleChange() { this.renderCompnent.node.worldRotation = this.node.worldRotation.clone(); } /**缩放变化处理 */ onScaleChange() { this.renderCompnent.node.worldScale = this.node.worldScale.clone(); } /** * 获取渲染组件 * @param node */ getRender() { let node = instantiate(this.node); node.removeAllChildren(); this.uiTrans = this.node.getComponent(UITransform); this.renderUiTrans = node.getComponent(UITransform); this.renderCompnent = node.getComponent(UIRenderer); this.node.getComponent(UIRenderer).destroy(); for (let i = 0, len = node.components.length; i < len; ++i) { let comp = node.components[i]; if (!(comp instanceof UIRenderer || comp instanceof UITransform)) { comp.destroy(); } } return node; } }, _class3._isDirty = new WeakMap(), _class3), (_descriptor = _applyDecoratedDescriptor(_class2.prototype, "renderLayer", [_dec], { configurable: true, enumerable: true, writable: true, initializer: function () { return null; } }), _descriptor2 = _applyDecoratedDescriptor(_class2.prototype, "renderZIndex", [property], { configurable: true, enumerable: true, writable: true, initializer: function () { return 0; } }), _descriptor3 = _applyDecoratedDescriptor(_class2.prototype, "syncInv", [_dec2], { configurable: true, enumerable: true, writable: true, initializer: function () { return 0.01; } })), _class2)) || _class)); _cclegacy._RF.pop(); _crd = false; } }; }); //# sourceMappingURL=86ed411b7d9943a187670cf73a7e1aa21a63abbb.js.map