skillManager.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import { Node, NodePool, sp, Vec3 } from "cc";
  2. import { cocosUtil } from "../../utils/cocosUtil";
  3. import { constants } from "../data/constants";
  4. import { designManager } from "./designManager";
  5. import { resManager } from "./resManager";
  6. export class skillManager {
  7. private static _instance: skillManager;
  8. private constructor() { }
  9. public static get instance(): skillManager {
  10. if (!this._instance) {
  11. this._instance = new skillManager();
  12. }
  13. return this._instance;
  14. }
  15. skeletonDatasObj: any = {};
  16. namePoolObj: any = {};
  17. loadAllSkillEffect(onProgress?: Function, onComplete?: Function) {
  18. resManager.instance.loadAssetByBundleDir(constants.bundles.common.name,
  19. constants.bundles.common.spine.skillDir, sp.SkeletonData, onProgress, (skeletonDataArr) => {
  20. for (let i in skeletonDataArr) {
  21. let skeletonData = skeletonDataArr[i];
  22. this.skeletonDatasObj[skeletonData.name] = skeletonData;
  23. }
  24. });
  25. }
  26. showSkillEffect(id: number, worldPos: Vec3, parent: Node, cb?: Function) {
  27. let row = designManager.instance.getRowById(constants.tableName.skill, id);
  28. if (!row || !row.name) {
  29. if (cb) {
  30. cb();
  31. }
  32. return;
  33. }
  34. let name = row.body;
  35. let skeletonData = this.skeletonDatasObj[name];
  36. let tmpFunc = () => {
  37. let node = this.getPoolByName(name).get();
  38. let skeleton = null;
  39. if (!node) {
  40. node = new Node();
  41. skeleton = node.addComponent(sp.Skeleton);
  42. skeleton.premultipliedAlpha = false;
  43. skeleton.skeletonData = skeletonData;
  44. } else {
  45. skeleton = node.getComponent(sp.Skeleton);
  46. }
  47. if (name == "ljf") {
  48. node.setScale(1.3, 1.3);
  49. }
  50. skeleton.setAnimation(0, "animation", false);
  51. node.parent = parent;
  52. let pos = cocosUtil.convertToNodeSpace(node, worldPos);
  53. node.position = pos;
  54. skeleton.setCompleteListener(() => {
  55. this.getPoolByName(name).put(node);
  56. if (cb) {
  57. cb();
  58. }
  59. });
  60. };
  61. if (!skeletonData) {
  62. let path = constants.bundles.common.spine.skillDir + "/" + name + "/" + name;
  63. resManager.instance.loadAsset(constants.bundles.common.name, path, sp.SkeletonData, () => { }, (err, sd) => {
  64. if (err) {
  65. return;
  66. }
  67. skeletonData = sd;
  68. this.skeletonDatasObj[name] = skeletonData;
  69. tmpFunc();
  70. });
  71. return;
  72. }
  73. tmpFunc();
  74. }
  75. getPoolByName(name: string): NodePool {
  76. let pool = this.namePoolObj[name];
  77. if (!pool) {
  78. pool = new NodePool();
  79. this.namePoolObj[name] = pool;
  80. }
  81. return pool;
  82. }
  83. }