c3f67380bad55152780a7ddbba69d343129b52a4.js 11 KB

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