SelectSkinPanel.ts 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. import { _decorator, AssetManager, Button, Component, instantiate, Node, Prefab, sp, Vec2 } from 'cc';
  2. import { allSkinList, getAllSkinKeys, Skin, SkinData } from '../../script/Manager/LocalDataMgr';
  3. import { SkinItem } from './SkinItem';
  4. import { LayerMgr } from '../../script/Manager/LayerMgr';
  5. import { BundleName } from '../../script/Config/EnumCfg';
  6. import EventMgr from '../../script/Manager/EventMgr';
  7. import { SkinItem2 } from './SkinItem2';
  8. const { ccclass, property } = _decorator;
  9. @ccclass('SelectSkinPanel')
  10. export class SelectSkinPanel extends Component {
  11. @property(Node)
  12. itemRoot: Node = null;
  13. @property(Node)
  14. itemPrefab: Node = null;
  15. @property({type:Vec2,tooltip:"spine偏移量"})
  16. spineoffset:Vec2 = new Vec2(0,0);
  17. @property(Button)
  18. btnClose: Button = null;
  19. @property(Boolean)
  20. addListenerShowUsingLabel:boolean = false;
  21. _skinData: SkinData = null
  22. _allSkinList:{ [key: number]: string };
  23. _items: Node[] = [];
  24. _hasCreatedItems:boolean = false;
  25. protected start(): void {
  26. this.btnClose.node.on(Node.EventType.TOUCH_END,this.onBtnCloseClick,this)
  27. if(this.addListenerShowUsingLabel)
  28. EventMgr.ins.addEventListener("showUsingLabel",this.showUsingLabel,this)
  29. else
  30. EventMgr.ins.addEventListener("refreshSelectFrame",this.showSelectFrame,this)
  31. }
  32. init() {
  33. if(this._hasCreatedItems) return;
  34. this._hasCreatedItems = true;
  35. this._allSkinList = allSkinList
  36. this._skinData = Skin.getSkinData();
  37. let allSkillKeys = getAllSkinKeys()
  38. let count = allSkillKeys.length;
  39. for (let i = 0; i < count; i++) {
  40. this.createItem(allSkillKeys[i], this.spineoffset);
  41. }
  42. }
  43. onBtnCloseClick()
  44. {
  45. this.node.active = false
  46. EventMgr.ins.dispatchEvent("regenerate")
  47. }
  48. createItem(key: number,spineOffset:Vec2) {
  49. let itemNode = instantiate(this.itemPrefab);
  50. itemNode.parent = this.itemRoot;
  51. this._items.push(itemNode);
  52. itemNode.active = true
  53. let spPath = allSkinList[key]
  54. this.loadSpineData("editor",spPath, (spine: Prefab) => {
  55. itemNode.getComponent(SkinItem).init(key,spine,"loop2",spineOffset,this.judgeSelect(key))
  56. })
  57. }
  58. onSingleSkinClick() {
  59. Skin.setSelectStatu(true)
  60. }
  61. onMultiSkinClick() {
  62. Skin.setSelectStatu(false)
  63. }
  64. judgeSelect(key)
  65. {
  66. let selSkins = this._skinData.selectedSkinList
  67. let index = selSkins.indexOf(key)
  68. return index !== -1
  69. }
  70. // spineDataMap: Map<string, sp.SkeletonData> = new Map();
  71. spineDataMap: Map<string, Prefab> = new Map();
  72. // /**
  73. // * 加载spine数据
  74. // * @param path spine数据路径
  75. // * @param callback 回调函数
  76. // */
  77. // loadSpineData(bundleName: BundleName | string, spinepath: string, callback: (spineData: sp.SkeletonData) => void) {
  78. // let bundle: AssetManager.Bundle = LayerMgr.instance.getBundle(bundleName)
  79. // if (bundle) {
  80. // bundle.load(spinepath, sp.SkeletonData, (err, res) => {
  81. // if (err) {
  82. // console.error(err)
  83. // return
  84. // }
  85. // let spineData: sp.SkeletonData = (res as sp.SkeletonData);
  86. // callback(spineData)
  87. // })
  88. // }
  89. // }
  90. loadSpineData(bundleName: BundleName | string, spinepath: string, callback: (sp:Prefab) => void) {
  91. let bundle: AssetManager.Bundle = LayerMgr.instance.getBundle(bundleName)
  92. if (bundle) {
  93. bundle.load(spinepath, Prefab, (err, res) => {
  94. if (err) {
  95. console.error(err)
  96. return
  97. }
  98. let spineData: Prefab = (res as Prefab);
  99. callback(spineData)
  100. })
  101. }
  102. }
  103. // loadSpine(path: string, callback: (spineData: sp.SkeletonData) => void) {
  104. // if (this.spineDataMap.has(path)) {
  105. // callback(this.spineDataMap.get(path));
  106. // return;
  107. // }
  108. // this.loadSpineData("editor", path, (spineData: sp.SkeletonData) => {
  109. // this.spineDataMap.set(path, spineData);
  110. // callback(spineData);
  111. // });
  112. // }
  113. loadSpine(path: string, callback: (sp:Prefab) => void) {
  114. if (this.spineDataMap.has(path)) {
  115. callback(this.spineDataMap.get(path));
  116. return;
  117. }
  118. this.loadSpineData("editor", path, (sp:Prefab) => {
  119. this.spineDataMap.set(path, sp);
  120. callback(sp);
  121. });
  122. }
  123. clearSelectAllSkins()
  124. {
  125. Skin.removeAllSelectSkin()
  126. this.refreshSkinSelectioin()
  127. EventMgr.ins.dispatchEvent("regenerate")
  128. }
  129. refreshSkinSelectioin()
  130. {
  131. let allSkillKeys = getAllSkinKeys()
  132. let count = allSkillKeys.length;
  133. for(let i = 0; i < count; i++){
  134. let item = this._items[i]
  135. item.getComponent(SkinItem).setSelectSkin(false)
  136. }
  137. }
  138. showUsingLabel(para:any[2])
  139. {
  140. let item = para[0]
  141. let isUnlock = para[1]
  142. this._items.forEach(element => {
  143. if(element == item && isUnlock)
  144. (element.getComponent(SkinItem) as SkinItem2).usingLabel.active = true
  145. else
  146. (element.getComponent(SkinItem) as SkinItem2).usingLabel.active = false
  147. });
  148. }
  149. showSelectFrame(item)
  150. {
  151. if(Skin.skinData.singleSelect == "true")
  152. {
  153. this._items.forEach(element => {
  154. if(element !== item)
  155. element.getComponent(SkinItem).setSelevtFrame(false)
  156. });
  157. }
  158. }
  159. }