179d382cdfab0be9a507575be1266c9b003a3259.js 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  1. System.register(["__unresolved_0", "cc", "__unresolved_1", "__unresolved_2", "__unresolved_3", "__unresolved_4", "__unresolved_5"], function (_export, _context) {
  2. "use strict";
  3. var _reporterNs, _cclegacy, __checkObsolete__, __checkObsoleteInNamespace__, Animation, NodePool, ParticleSystem, Prefab, sp, message, resLoader, ViewUtil, EffectEvent, EffectFinishedRelease, EffectSingleCase, _crd;
  4. function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
  5. function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
  6. function _reportPossibleCrUseOfmessage(extras) {
  7. _reporterNs.report("message", "../../core/common/event/MessageManager", _context.meta, extras);
  8. }
  9. function _reportPossibleCrUseOfresLoader(extras) {
  10. _reporterNs.report("resLoader", "../../core/common/loader/ResLoader", _context.meta, extras);
  11. }
  12. function _reportPossibleCrUseOfViewUtil(extras) {
  13. _reporterNs.report("ViewUtil", "../../core/utils/ViewUtil", _context.meta, extras);
  14. }
  15. function _reportPossibleCrUseOfEffectEvent(extras) {
  16. _reporterNs.report("EffectEvent", "./EffectEvent", _context.meta, extras);
  17. }
  18. function _reportPossibleCrUseOfEffectFinishedRelease(extras) {
  19. _reporterNs.report("EffectFinishedRelease", "./EffectFinishedRelease", _context.meta, extras);
  20. }
  21. _export("EffectSingleCase", void 0);
  22. return {
  23. setters: [function (_unresolved_) {
  24. _reporterNs = _unresolved_;
  25. }, function (_cc) {
  26. _cclegacy = _cc.cclegacy;
  27. __checkObsolete__ = _cc.__checkObsolete__;
  28. __checkObsoleteInNamespace__ = _cc.__checkObsoleteInNamespace__;
  29. Animation = _cc.Animation;
  30. NodePool = _cc.NodePool;
  31. ParticleSystem = _cc.ParticleSystem;
  32. Prefab = _cc.Prefab;
  33. sp = _cc.sp;
  34. }, function (_unresolved_2) {
  35. message = _unresolved_2.message;
  36. }, function (_unresolved_3) {
  37. resLoader = _unresolved_3.resLoader;
  38. }, function (_unresolved_4) {
  39. ViewUtil = _unresolved_4.ViewUtil;
  40. }, function (_unresolved_5) {
  41. EffectEvent = _unresolved_5.EffectEvent;
  42. }, function (_unresolved_6) {
  43. EffectFinishedRelease = _unresolved_6.EffectFinishedRelease;
  44. }],
  45. execute: function () {
  46. _crd = true;
  47. _cclegacy._RF.push({}, "bf338Z+oYxIUbd4bPREw9Ud", "EffectSingleCase", undefined);
  48. /*
  49. * @Author: dgflash
  50. * @Date: 2021-10-12 14:00:43
  51. * @LastEditors: dgflash
  52. * @LastEditTime: 2023-03-06 14:40:34
  53. */
  54. __checkObsolete__(['Animation', 'Node', 'NodePool', 'ParticleSystem', 'Prefab', 'sp', 'Vec3']);
  55. /** 特效参数 */
  56. /**
  57. * 动画特效对象池管理器,加载动画后自动播放,播放完后自动回收到池中
  58. * 1、支持Spine动画
  59. * 2、支持Cocos Animation动画
  60. * 3、支持Cocos ParticleSystem粒子动画
  61. */
  62. _export("EffectSingleCase", EffectSingleCase = class EffectSingleCase {
  63. static get instance() {
  64. if (this._instance == null) {
  65. this._instance = new EffectSingleCase();
  66. }
  67. return this._instance;
  68. }
  69. /** 全局动画播放速度 */
  70. get speed() {
  71. return this._speed;
  72. }
  73. set speed(value) {
  74. this._speed = value;
  75. this.effects_use.forEach((value, key) => {
  76. this.setSpeed(key);
  77. });
  78. }
  79. /** 对象池集合 */
  80. constructor() {
  81. this._speed = 1;
  82. this.effects = new Map();
  83. /** 正在使用中的显示对象集合 */
  84. this.effects_use = new Map();
  85. /** 对象池中用到的资源 - 这里只管理本对象加载的资源,预加载资源由其它对象自己施放 */
  86. this.res = new Map();
  87. (_crd && message === void 0 ? (_reportPossibleCrUseOfmessage({
  88. error: Error()
  89. }), message) : message).on((_crd && EffectEvent === void 0 ? (_reportPossibleCrUseOfEffectEvent({
  90. error: Error()
  91. }), EffectEvent) : EffectEvent).Put, this.onPut, this);
  92. }
  93. onPut(event, node) {
  94. this.put(node);
  95. }
  96. /**
  97. * 获取指定资源池中对象数量
  98. * @param path 预制资源路径
  99. */
  100. getCount(path) {
  101. var np = this.effects.get(path);
  102. if (np) {
  103. return np.size();
  104. }
  105. return 0;
  106. }
  107. /** 池中预加载显示对象 */
  108. preload(count, path, bundleName) {
  109. var _this = this;
  110. if (bundleName === void 0) {
  111. bundleName = (_crd && resLoader === void 0 ? (_reportPossibleCrUseOfresLoader({
  112. error: Error()
  113. }), resLoader) : resLoader).defaultBundleName;
  114. }
  115. return new Promise( /*#__PURE__*/_asyncToGenerator(function* (resolve, reject) {
  116. var np = _this.effects.get(path);
  117. if (np == null) {
  118. np = new NodePool();
  119. _this.effects.set(path, np);
  120. }
  121. _this.res.set(path, bundleName);
  122. yield (_crd && resLoader === void 0 ? (_reportPossibleCrUseOfresLoader({
  123. error: Error()
  124. }), resLoader) : resLoader).loadAsync(bundleName, path, Prefab);
  125. for (var i = 0; i < count; i++) {
  126. var node = (_crd && ViewUtil === void 0 ? (_reportPossibleCrUseOfViewUtil({
  127. error: Error()
  128. }), ViewUtil) : ViewUtil).createPrefabNode(path); //@ts-ignore
  129. node.res_path = path;
  130. np.put(node);
  131. }
  132. resolve();
  133. }));
  134. }
  135. /**
  136. * 加载资源并生成节点对象
  137. * @param path 预制资源路径
  138. * @param parent 父节点
  139. * @param params 显示参数
  140. */
  141. loadAndShow(path, parent, params) {
  142. var _this2 = this;
  143. return new Promise( /*#__PURE__*/_asyncToGenerator(function* (resolve, reject) {
  144. var np = _this2.effects.get(path);
  145. if (np == undefined) {
  146. if (params && params.bundleName) {
  147. _this2.res.set(path, params.bundleName);
  148. yield (_crd && resLoader === void 0 ? (_reportPossibleCrUseOfresLoader({
  149. error: Error()
  150. }), resLoader) : resLoader).loadAsync(params.bundleName, path, Prefab);
  151. } else {
  152. _this2.res.set(path, (_crd && resLoader === void 0 ? (_reportPossibleCrUseOfresLoader({
  153. error: Error()
  154. }), resLoader) : resLoader).defaultBundleName);
  155. yield (_crd && resLoader === void 0 ? (_reportPossibleCrUseOfresLoader({
  156. error: Error()
  157. }), resLoader) : resLoader).loadAsync(path, Prefab);
  158. }
  159. var node = _this2.show(path, parent, params);
  160. resolve(node);
  161. } else {
  162. var _node = _this2.show(path, parent, params);
  163. resolve(_node);
  164. }
  165. }));
  166. }
  167. /**
  168. * 显示预制对象
  169. * @param path 预制资源路径
  170. * @param parent 父节点
  171. * @param params 显示参数
  172. */
  173. show(path, parent, params) {
  174. var np = this.effects.get(path);
  175. if (np == null) {
  176. np = new NodePool();
  177. this.effects.set(path, np);
  178. }
  179. var node; // 创建池中新显示对象
  180. if (np.size() == 0) {
  181. node = (_crd && ViewUtil === void 0 ? (_reportPossibleCrUseOfViewUtil({
  182. error: Error()
  183. }), ViewUtil) : ViewUtil).createPrefabNode(path); //@ts-ignore
  184. node.res_path = path;
  185. if (params && params.isPlayFinishedRelease) {
  186. node.addComponent(_crd && EffectFinishedRelease === void 0 ? (_reportPossibleCrUseOfEffectFinishedRelease({
  187. error: Error()
  188. }), EffectFinishedRelease) : EffectFinishedRelease);
  189. }
  190. } // 池中获取没使用的显示对象
  191. else {
  192. node = np.get();
  193. } // 设置动画播放速度
  194. this.setSpeed(node); // 设置显示对象位置
  195. if (params) {
  196. if (params.pos) node.position = params.pos;
  197. if (params.worldPos) node.worldPosition = params.worldPos;
  198. } // 显示到屏幕上
  199. if (parent) node.parent = parent; // 记录缓冲池中放出的节点
  200. this.effects_use.set(node, true);
  201. return node;
  202. }
  203. /**
  204. * 回收对象
  205. * @param name 预制对象名称
  206. * @param node 节点
  207. */
  208. put(node) {
  209. //@ts-ignore
  210. var name = node.res_path;
  211. if (name) {
  212. var np = this.effects.get(name);
  213. if (np) {
  214. // 回收使用的节点
  215. this.effects_use.delete(node); // 回到到池中
  216. np.put(node);
  217. }
  218. }
  219. }
  220. /**
  221. * 清除对象池数据
  222. * @param path 参数为空时,清除所有对象池数据;指定名时,清楚指定数据
  223. */
  224. clear(path) {
  225. if (path) {
  226. var np = this.effects.get(path);
  227. np.clear();
  228. } else {
  229. this.effects.forEach(np => {
  230. np.clear();
  231. });
  232. this.effects.clear();
  233. }
  234. }
  235. /**
  236. * 释放对象池中显示对象的资源内存
  237. * @param path 资源路径
  238. */
  239. release(path) {
  240. if (path) {
  241. this.clear(path);
  242. var bundleName = this.res.get(path);
  243. (_crd && resLoader === void 0 ? (_reportPossibleCrUseOfresLoader({
  244. error: Error()
  245. }), resLoader) : resLoader).release(path, bundleName);
  246. this.res.delete(path);
  247. } else {
  248. // 施放池中对象内存
  249. this.clear(); // 施放对象资源内存
  250. this.res.forEach((bundleName, path) => {
  251. (_crd && resLoader === void 0 ? (_reportPossibleCrUseOfresLoader({
  252. error: Error()
  253. }), resLoader) : resLoader).release(path, bundleName);
  254. });
  255. this.res.clear();
  256. }
  257. }
  258. /** 设置动画速度 */
  259. setSpeed(node) {
  260. // SPINE动画
  261. var spine = node.getComponent(sp.Skeleton);
  262. if (spine) {
  263. spine.timeScale = this.speed;
  264. } else {
  265. // COCOS动画
  266. var anims = node.getComponentsInChildren(Animation);
  267. if (anims.length > 0) {
  268. anims.forEach(animator => {
  269. var _animator$defaultClip;
  270. var aniName = (_animator$defaultClip = animator.defaultClip) == null ? void 0 : _animator$defaultClip.name;
  271. if (aniName) {
  272. var aniState = animator.getState(aniName);
  273. if (aniState) {
  274. aniState.speed = this.speed;
  275. }
  276. }
  277. });
  278. } // 粒子动画
  279. else if (ParticleSystem) {
  280. var particles = node.getComponentsInChildren(ParticleSystem);
  281. particles.forEach(particle => {
  282. particle.simulationSpeed = this.speed;
  283. });
  284. }
  285. }
  286. }
  287. });
  288. EffectSingleCase._instance = void 0;
  289. _cclegacy._RF.pop();
  290. _crd = false;
  291. }
  292. };
  293. });
  294. //# sourceMappingURL=179d382cdfab0be9a507575be1266c9b003a3259.js.map