SelectSkinPanel.ts 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import { _decorator, AssetManager, Button, Component, instantiate, Node, sp, Vec2 } from 'cc';
  2. import { getSelectAllKeys, selectedSkinList, 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. const { ccclass, property } = _decorator;
  7. @ccclass('SelectSkinPanel')
  8. export class SelectSkinPanel extends Component {
  9. @property(Node)
  10. itemRoot: Node = null;
  11. @property(Node)
  12. itemPrefab: Node = null;
  13. @property({type:Vec2,tooltip:"spine偏移量"})
  14. spineoffset:Vec2 = new Vec2(0,0);
  15. @property(Button)
  16. btnClose: Button = null;
  17. _skinData: SkinData = null
  18. _allSkinList:{ [key: number]: string };
  19. _items: Node[] = [];
  20. _itemPool: Node[] = [];
  21. _hasCreatedItems:boolean = false;
  22. protected start(): void {
  23. this.btnClose.node.on(Node.EventType.TOUCH_END,()=>this.node.active = false,this)
  24. }
  25. init() {
  26. LayerMgr.instance.loadBundle("editor", () => {
  27. this._allSkinList = selectedSkinList
  28. this._skinData = Skin.getSkinData();
  29. let allSkillKeys = getSelectAllKeys()
  30. let count = allSkillKeys.length;
  31. for(let i = 0; i < count; i++){
  32. this.createItem(allSkillKeys[i],this.spineoffset);
  33. }
  34. });
  35. }
  36. createItem(key: number,spineOffset:Vec2) {
  37. let itemNode = this._itemPool.length > 0 ? this._itemPool.pop() : instantiate(this.itemPrefab);
  38. itemNode.parent = this.itemRoot;
  39. this._items.push(itemNode);
  40. itemNode.active = true
  41. let skPath = selectedSkinList[key]
  42. this.loadSpine(skPath, (spineData: sp.SkeletonData) => {
  43. itemNode.getComponent(SkinItem).init(key,spineData,"loop2",spineOffset,this.judgeSelect(key))
  44. })
  45. }
  46. onSingleSkinClick() {
  47. }
  48. onMultiSkinClick() {
  49. }
  50. judgeSelect(key)
  51. {
  52. let selSkins = this._skinData.selectedSkinList
  53. let index = selSkins.indexOf(key)
  54. return index !== -1
  55. }
  56. spineDataMap: Map<string, sp.SkeletonData> = new Map();
  57. /**
  58. * 加载spine数据
  59. * @param path spine数据路径
  60. * @param callback 回调函数
  61. */
  62. loadSpineData(bundleName: BundleName | string, spinepath: string, callback: (spineData: sp.SkeletonData) => void) {
  63. let bundle: AssetManager.Bundle = LayerMgr.instance.getBundle(bundleName)
  64. if (bundle) {
  65. bundle.load(spinepath, sp.SkeletonData, (err, res) => {
  66. if (err) {
  67. console.error(err)
  68. return
  69. }
  70. let spineData: sp.SkeletonData = (res as sp.SkeletonData);
  71. callback(spineData)
  72. })
  73. }
  74. }
  75. loadSpine(path: string, callback: (spineData: sp.SkeletonData) => void) {
  76. if (this.spineDataMap.has(path)) {
  77. callback(this.spineDataMap.get(path));
  78. return;
  79. }
  80. this.loadSpineData("editor", path, (spineData: sp.SkeletonData) => {
  81. this.spineDataMap.set(path, spineData);
  82. callback(spineData);
  83. });
  84. }
  85. clearSelectAllSkins()
  86. {
  87. Skin.removeAllSelectSkin()
  88. }
  89. }