71b930d6142312f684efd1718dfcd7bfd1e95eaa.js 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511
  1. System.register(["cc"], function (_export, _context) {
  2. "use strict";
  3. var _cclegacy, __checkObsolete__, __checkObsoleteInNamespace__, TrailData, CCInteger, CurveRange, Director, DynamicAtlasManager, GradientRange, SpriteFrame, UIRenderer, UITransform, _decorator, director, v2, _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _class2, _class3, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _crd, ccclass, property, executeInEditMode, menu, MotionTrail, simple;
  4. 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 }); }
  5. 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.'); }
  6. 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; }
  7. return {
  8. setters: [function (_cc) {
  9. _cclegacy = _cc.cclegacy;
  10. __checkObsolete__ = _cc.__checkObsolete__;
  11. __checkObsoleteInNamespace__ = _cc.__checkObsoleteInNamespace__;
  12. CCInteger = _cc.CCInteger;
  13. CurveRange = _cc.CurveRange;
  14. Director = _cc.Director;
  15. DynamicAtlasManager = _cc.DynamicAtlasManager;
  16. GradientRange = _cc.GradientRange;
  17. SpriteFrame = _cc.SpriteFrame;
  18. UIRenderer = _cc.UIRenderer;
  19. UITransform = _cc.UITransform;
  20. _decorator = _cc._decorator;
  21. director = _cc.director;
  22. v2 = _cc.v2;
  23. }],
  24. execute: function () {
  25. _crd = true;
  26. _cclegacy._RF.push({}, "bb8ffN3AwpEqJr3cZDOVdXJ", "MotionTrail", undefined);
  27. TrailData = class TrailData {
  28. constructor() {
  29. this.x = 0;
  30. this.y = 0;
  31. this.dis = 0;
  32. this.cos = 0;
  33. this.sin = 0;
  34. }
  35. };
  36. __checkObsolete__(['CCInteger', 'CurveRange', 'Director', 'DynamicAtlasManager', 'GradientRange', 'IAssembler', 'RenderData', 'SpriteFrame', 'UIRenderer', 'UITransform', 'Vec2', 'Vec3', '__private', '_decorator', 'director', 'v2']);
  37. ({
  38. ccclass,
  39. property,
  40. executeInEditMode,
  41. menu
  42. } = _decorator);
  43. _export("default", MotionTrail = (_dec = menu('Comp/MotionTrail'), _dec2 = executeInEditMode(), _dec3 = property({
  44. visible: false
  45. }), _dec4 = property({
  46. type: SpriteFrame,
  47. displayName: 'SpriteFrame'
  48. }), _dec5 = property({
  49. displayName: '世界坐标',
  50. tooltip: '顶点坐标是世界坐标还是本地坐标'
  51. }), _dec6 = property({
  52. displayName: '偏移'
  53. }), _dec7 = property({
  54. type: CCInteger,
  55. displayName: '拖尾长度'
  56. }), _dec8 = property({
  57. type: CurveRange,
  58. displayName: '宽度变化',
  59. range: [0, 1]
  60. }), _dec9 = property({
  61. type: CurveRange,
  62. displayName: '宽度变化',
  63. range: [0, 1]
  64. }), _dec10 = property({
  65. type: GradientRange,
  66. displayName: '颜色变化'
  67. }), _dec11 = property({
  68. type: GradientRange,
  69. displayName: '颜色变化'
  70. }), ccclass(_class2 = _dec(_class2 = _dec2(_class2 = (_class3 = class MotionTrail extends UIRenderer {
  71. constructor() {
  72. super(...arguments);
  73. _initializerDefineProperty(this, "_spriteFrame", _descriptor, this);
  74. _initializerDefineProperty(this, "_isWorldXY", _descriptor2, this);
  75. _initializerDefineProperty(this, "offset", _descriptor3, this);
  76. _initializerDefineProperty(this, "_length", _descriptor4, this);
  77. this.trailData = [];
  78. _initializerDefineProperty(this, "_sizeCurveRange", _descriptor5, this);
  79. _initializerDefineProperty(this, "_colorCurveRange", _descriptor6, this);
  80. this._useVertexOpacity = true;
  81. }
  82. get color() {
  83. return this._color;
  84. }
  85. get spriteFrame() {
  86. return this._spriteFrame;
  87. }
  88. set spriteFrame(value) {
  89. this._spriteFrame = value;
  90. }
  91. get isWorldXY() {
  92. return this._isWorldXY;
  93. }
  94. set isWorldXY(value) {
  95. this._isWorldXY = value;
  96. }
  97. get length() {
  98. return this._length;
  99. }
  100. set length(value) {
  101. this._length = Math.max(value, 0);
  102. this.updateLength();
  103. this.updateWidth();
  104. this.resetPos();
  105. this.freshBuffer();
  106. }
  107. get sizeCurveRange() {
  108. return this._sizeCurveRange;
  109. }
  110. set sizeCurveRange(value) {
  111. this._sizeCurveRange = value;
  112. this.updateWidth();
  113. }
  114. get colorCurveRange() {
  115. return this._colorCurveRange;
  116. }
  117. set colorCurveRange(value) {
  118. this._colorCurveRange = value;
  119. this._updateColor();
  120. }
  121. _render(render) {
  122. render.commitComp(this, this.renderData, this._spriteFrame, this._assembler, null);
  123. }
  124. _flushAssembler() {
  125. this._assembler = simple;
  126. if (!this._renderData) {
  127. this._renderData = this.requestRenderData();
  128. ;
  129. this._renderData.material = this.getRenderMaterial(0);
  130. this.freshBuffer();
  131. this.markForUpdateRenderData();
  132. if (this._spriteFrame) {
  133. this._assembler.updateUVs(this);
  134. }
  135. this._updateColor();
  136. }
  137. } //更新buffer
  138. freshBuffer() {
  139. var len = this.length;
  140. var count = 4 + (len - 2) * 2;
  141. this._renderData.dataLength = count;
  142. this._renderData.resize(count, (count - 2) * 3);
  143. }
  144. updateLength() {
  145. var trailLen = this.length;
  146. var sub = trailLen - this.trailData.length;
  147. if (sub > 0) {
  148. for (var i = 0; i < sub; ++i) {
  149. this.trailData.push(new TrailData());
  150. }
  151. } else if (sub < 0) {
  152. this.trailData.splice(trailLen);
  153. }
  154. }
  155. updateWidth() {
  156. var data = this.trailData;
  157. var trailLen = this.length;
  158. var width = this.getComponent(UITransform).width / 2;
  159. for (var i = 0; i < trailLen; ++i) {
  160. data[i].dis = this.sizeCurveRange.evaluate(i / (trailLen - 1), 0) * width;
  161. }
  162. }
  163. resetPos() {
  164. var data = this.trailData;
  165. var tx = this.offset.x;
  166. var ty = this.offset.y;
  167. if (this.isWorldXY) {
  168. tx += this.node.worldPosition.x;
  169. ty += this.node.worldPosition.y;
  170. } else {
  171. tx += this.node.position.x;
  172. ty += this.node.position.y;
  173. }
  174. for (var i = 0, len = this.length; i < len; i++) {
  175. data[i].x = tx;
  176. data[i].y = ty;
  177. }
  178. }
  179. onLoad() {
  180. this.length = this._length;
  181. }
  182. onEnable() {
  183. super.onEnable();
  184. director.once(Director.EVENT_BEFORE_DRAW, this.resetPos, this);
  185. }
  186. }, (_applyDecoratedDescriptor(_class3.prototype, "color", [_dec3], Object.getOwnPropertyDescriptor(_class3.prototype, "color"), _class3.prototype), _descriptor = _applyDecoratedDescriptor(_class3.prototype, "_spriteFrame", [property], {
  187. configurable: true,
  188. enumerable: true,
  189. writable: true,
  190. initializer: function initializer() {
  191. return null;
  192. }
  193. }), _applyDecoratedDescriptor(_class3.prototype, "spriteFrame", [_dec4], Object.getOwnPropertyDescriptor(_class3.prototype, "spriteFrame"), _class3.prototype), _descriptor2 = _applyDecoratedDescriptor(_class3.prototype, "_isWorldXY", [property], {
  194. configurable: true,
  195. enumerable: true,
  196. writable: true,
  197. initializer: function initializer() {
  198. return true;
  199. }
  200. }), _applyDecoratedDescriptor(_class3.prototype, "isWorldXY", [_dec5], Object.getOwnPropertyDescriptor(_class3.prototype, "isWorldXY"), _class3.prototype), _descriptor3 = _applyDecoratedDescriptor(_class3.prototype, "offset", [_dec6], {
  201. configurable: true,
  202. enumerable: true,
  203. writable: true,
  204. initializer: function initializer() {
  205. return v2(0, 0);
  206. }
  207. }), _descriptor4 = _applyDecoratedDescriptor(_class3.prototype, "_length", [property], {
  208. configurable: true,
  209. enumerable: true,
  210. writable: true,
  211. initializer: function initializer() {
  212. return 20;
  213. }
  214. }), _applyDecoratedDescriptor(_class3.prototype, "length", [_dec7], Object.getOwnPropertyDescriptor(_class3.prototype, "length"), _class3.prototype), _descriptor5 = _applyDecoratedDescriptor(_class3.prototype, "_sizeCurveRange", [_dec8], {
  215. configurable: true,
  216. enumerable: true,
  217. writable: true,
  218. initializer: function initializer() {
  219. return new CurveRange();
  220. }
  221. }), _applyDecoratedDescriptor(_class3.prototype, "sizeCurveRange", [_dec9], Object.getOwnPropertyDescriptor(_class3.prototype, "sizeCurveRange"), _class3.prototype), _descriptor6 = _applyDecoratedDescriptor(_class3.prototype, "_colorCurveRange", [_dec10], {
  222. configurable: true,
  223. enumerable: true,
  224. writable: true,
  225. initializer: function initializer() {
  226. return new GradientRange();
  227. }
  228. }), _applyDecoratedDescriptor(_class3.prototype, "colorCurveRange", [_dec11], Object.getOwnPropertyDescriptor(_class3.prototype, "colorCurveRange"), _class3.prototype)), _class3)) || _class2) || _class2) || _class2));
  229. simple = {
  230. updateRenderData(trail) {
  231. var frame = trail.spriteFrame;
  232. DynamicAtlasManager.instance.packToDynamicAtlas(trail, frame);
  233. this.updateUVs(trail); // dirty need
  234. //this.updateColor(sprite);// dirty need
  235. var renderData = trail.renderData;
  236. if (renderData && frame) {
  237. if (renderData.vertDirty) {
  238. this.updateVertexData(trail);
  239. }
  240. renderData.updateRenderData(trail, frame);
  241. }
  242. },
  243. updateWorldVerts(trail) {
  244. var renderData = trail.renderData;
  245. var vData = renderData.chunk.vb;
  246. var len = trail.length;
  247. if (len < 1) return;
  248. var tx = 0,
  249. ty = 0;
  250. var data = trail.trailData;
  251. if (!trail.isWorldXY) {
  252. tx = trail.node.position.x;
  253. ty = trail.node.position.y;
  254. }
  255. var ax = 0,
  256. ay = 0;
  257. var curIdx = 0;
  258. var tempData = null;
  259. var tempNextData = null; //
  260. for (var i = 0; i < len; ++i) {
  261. tempData = data[i];
  262. var sameIdx = i;
  263. for (; sameIdx < len; ++sameIdx) {
  264. tempNextData = data[sameIdx];
  265. if (tempNextData.x != tempData.x || tempNextData.y != tempData.y) {
  266. break;
  267. }
  268. }
  269. sameIdx -= 1;
  270. if (sameIdx == i) {
  271. ax = tempData.x - tx;
  272. ay = tempData.y - ty;
  273. vData[curIdx] = ax + tempData.dis * tempData.sin;
  274. vData[curIdx + 1] = ay - tempData.dis * tempData.cos;
  275. vData[curIdx + 2] = 0;
  276. curIdx += renderData.floatStride;
  277. vData[curIdx] = ax - tempData.dis * tempData.sin;
  278. vData[curIdx + 1] = ay + tempData.dis * tempData.cos;
  279. vData[curIdx + 2] = 0;
  280. curIdx += renderData.floatStride;
  281. } else {
  282. tempData = data[sameIdx];
  283. ax = tempData.x - tx;
  284. ay = tempData.y - ty;
  285. vData[curIdx] = ax + tempData.dis * tempData.sin;
  286. vData[curIdx + 1] = ay - tempData.dis * tempData.cos;
  287. vData[curIdx + 2] = 0;
  288. curIdx += renderData.floatStride;
  289. vData[curIdx] = ax - tempData.dis * tempData.sin;
  290. vData[curIdx + 1] = ay + tempData.dis * tempData.cos;
  291. vData[curIdx + 2] = 0;
  292. curIdx += renderData.floatStride;
  293. for (; i < sameIdx; ++i) {
  294. vData[curIdx] = vData[curIdx - renderData.floatStride * 2];
  295. vData[curIdx + 1] = vData[curIdx - renderData.floatStride * 2 + 1];
  296. vData[curIdx + 2] = 0;
  297. curIdx += renderData.floatStride;
  298. vData[curIdx] = vData[curIdx - renderData.floatStride * 2];
  299. vData[curIdx + 1] = vData[curIdx - renderData.floatStride * 2 + 1];
  300. vData[curIdx + 2] = 0;
  301. curIdx += renderData.floatStride;
  302. }
  303. }
  304. }
  305. },
  306. fillBuffers(trail) {
  307. if (trail.spriteFrame == null) return;
  308. var renderData = trail.renderData;
  309. var chunk = renderData.chunk;
  310. this.update(trail);
  311. this.updateWorldVerts(trail, chunk); // quick version
  312. var vidOrigin = chunk.vertexOffset;
  313. var meshBuffer = chunk.meshBuffer;
  314. var ib = chunk.meshBuffer.iData;
  315. var indexOffset = meshBuffer.indexOffset;
  316. var vid = vidOrigin;
  317. var len = trail.length - 1;
  318. for (var i = 0; i < len; i++) {
  319. ib[indexOffset++] = vid + 0;
  320. ib[indexOffset++] = vid + 1;
  321. ib[indexOffset++] = vid + 2;
  322. ib[indexOffset++] = vid + 1;
  323. ib[indexOffset++] = vid + 3;
  324. ib[indexOffset++] = vid + 2;
  325. vid += 2;
  326. }
  327. meshBuffer.indexOffset += len * 6;
  328. },
  329. updateVertexData(trail) {
  330. var renderData = trail.renderData;
  331. renderData.vertDirty = true;
  332. },
  333. updateUVs(trail) {
  334. if (trail.spriteFrame == null) return;
  335. var renderData = trail.renderData;
  336. var vData = renderData.chunk.vb;
  337. var uv = trail.spriteFrame.uv;
  338. var length = trail.length - 1;
  339. var uvStep = length == 0 ? 0 : 1 / length;
  340. var curIdx = 3;
  341. var subV = uv[7] - uv[1];
  342. for (var i = 0; i < length; i++) {
  343. vData[curIdx] = uv[0];
  344. vData[curIdx + 1] = uv[1] + subV * i * uvStep;
  345. curIdx += renderData.floatStride;
  346. vData[curIdx] = uv[0];
  347. vData[curIdx + 1] = uv[3] + subV * i * uvStep;
  348. curIdx += renderData.floatStride;
  349. }
  350. vData[curIdx] = uv[0];
  351. vData[curIdx + 1] = uv[7];
  352. curIdx += renderData.floatStride;
  353. vData[curIdx] = uv[0];
  354. vData[curIdx + 1] = uv[5];
  355. curIdx += renderData.floatStride;
  356. },
  357. updateColor(trail) {
  358. var renderData = trail.renderData;
  359. var vData = renderData.chunk.vb;
  360. var total = 4 + (trail.length - 2) * 2;
  361. var stepTotal = trail.length;
  362. var stepIdx = -1;
  363. var colorOffset = 5;
  364. var curC, random;
  365. for (var i = 0; i < total; i++) {
  366. if (i % 2 == 0) {
  367. random = trail.colorCurveRange.mode === GradientRange.Mode.TwoGradients || trail.colorCurveRange.mode === GradientRange.Mode.TwoColors ? Math.random() : 0;
  368. curC = trail.colorCurveRange.evaluate(stepIdx / stepTotal, random);
  369. stepIdx++;
  370. }
  371. vData[colorOffset] = curC.r / 255;
  372. vData[colorOffset + 1] = curC.g / 255;
  373. vData[colorOffset + 2] = curC.b / 255;
  374. vData[colorOffset + 3] = curC.a / 255;
  375. colorOffset += renderData.floatStride;
  376. }
  377. },
  378. update(trail) {
  379. if (trail.length === 0) return;
  380. var data = trail.trailData;
  381. for (var i = trail.length - 1; i > 0; --i) {
  382. var cur = data[i],
  383. prev = data[i - 1];
  384. cur.x = prev.x;
  385. cur.y = prev.y;
  386. cur.sin = prev.sin;
  387. cur.cos = prev.cos;
  388. }
  389. var pos = null;
  390. if (trail.isWorldXY) {
  391. pos = trail.node.worldPosition;
  392. } else {
  393. pos = trail.node.position;
  394. }
  395. var fristData = data[0];
  396. fristData.x = trail.offset.x + pos.x;
  397. fristData.y = trail.offset.y + pos.y;
  398. var secondData = data[1];
  399. var radian = Math.atan2(secondData.y - fristData.y, secondData.x - fristData.x);
  400. fristData.sin = Math.sin(radian);
  401. fristData.cos = Math.cos(radian);
  402. },
  403. updateOpacity(trail, alpha) {
  404. var renderData = trail.renderData;
  405. var vData = renderData.chunk.vb;
  406. var total = 4 + (trail.length - 2) * 2;
  407. var stepTotal = trail.length;
  408. var stepIdx = -1;
  409. var colorOffset = 5;
  410. var curC, random;
  411. for (var i = 0; i < total; i++) {
  412. if (i % 2 == 0) {
  413. random = trail.colorCurveRange.mode === GradientRange.Mode.TwoGradients || trail.colorCurveRange.mode === GradientRange.Mode.TwoColors ? Math.random() : 0;
  414. curC = trail.colorCurveRange.evaluate(stepIdx / stepTotal, random);
  415. stepIdx++;
  416. }
  417. vData[colorOffset + 3] = curC.a / 255 * alpha;
  418. colorOffset += renderData.floatStride;
  419. }
  420. }
  421. };
  422. _cclegacy._RF.pop();
  423. _crd = false;
  424. }
  425. };
  426. });
  427. //# sourceMappingURL=71b930d6142312f684efd1718dfcd7bfd1e95eaa.js.map