SelectDifficultyPanel.ts 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import { _decorator, Component, EditBox, instantiate, Node, Prefab } from 'cc';
  2. import { Difficulty, DifficutyData } from '../../script/Manager/LocalDataMgr';
  3. import { LayerMgr } from '../../script/Manager/LayerMgr';
  4. import { DifficultyItem } from './DifficultyItem';
  5. import EventMgr from '../../script/Manager/EventMgr';
  6. const { ccclass, property } = _decorator;
  7. @ccclass('SelectDifficultyPanel')
  8. export class SelectDifficultyPanel extends Component {
  9. @property(Node)
  10. itemRoot: Node = null;
  11. @property(Node)
  12. itemPrefab:Node = null;
  13. @property(EditBox)
  14. countEditBox:EditBox = null;
  15. _difficultyData: DifficutyData = null
  16. _items: Node[] = [];
  17. _itemPool: Node[] = [];
  18. protected start(): void {
  19. this.countEditBox.node.on('editing-did-ended', this.onEditChange, this);
  20. }
  21. init() {
  22. this._difficultyData = Difficulty.getDifficutyData();
  23. const targetCount = this._difficultyData.difficutyCount;
  24. const currentCount = this._items.length;
  25. // 情况1:需要添加新项目
  26. if(targetCount > currentCount) {
  27. for (let i = currentCount; i < targetCount; i++) {
  28. this.createItem(i);
  29. }
  30. }
  31. // 情况2:需要删除多余项目
  32. else if(targetCount < currentCount) {
  33. const removeCount = currentCount - targetCount;
  34. for (let i = 0; i < removeCount; i++) {
  35. const item = this._items.pop();
  36. item.removeFromParent();
  37. item.active = false;
  38. this._itemPool.push(item);
  39. }
  40. }
  41. // 更新所有项目的数据
  42. for (let i = 0; i < this._items.length; i++) {
  43. const scaleValue = i < this._difficultyData.scales.length
  44. ? this._difficultyData.scales[i]
  45. : 0;
  46. this._items[i].getComponent(DifficultyItem).init(i, scaleValue);
  47. }
  48. this.countEditBox.string = this._difficultyData.difficutyCount.toString();
  49. }
  50. createItem(index: number) {
  51. let itemNode = this._itemPool.length > 0? this._itemPool.pop(): instantiate(this.itemPrefab);
  52. itemNode.parent = this.itemRoot;
  53. this._items.push(itemNode);
  54. itemNode.active = true
  55. itemNode.getComponent(DifficultyItem).init(index, this._difficultyData.scales[index])
  56. }
  57. onEditChange(ed:EditBox)
  58. {
  59. let count = Number(ed.string);
  60. if(isNaN(count))
  61. {
  62. return;
  63. }
  64. Difficulty.difficutyData.difficutyCount = count;
  65. Difficulty.createOrDeleteOtherScale();
  66. this.init()
  67. Difficulty.saveDifficutyData();
  68. }
  69. onUseSysDataClick()
  70. {
  71. Difficulty.setDataToDefault();
  72. // Difficulty.createOrDeleteOtherScale(); // 重置时应用新逻辑
  73. this.init(); // 刷新UI
  74. this.node.active = false
  75. EventMgr.ins.dispatchEvent("regenerate")
  76. }
  77. onUseCurrentData()
  78. {
  79. this.node.active = false
  80. EventMgr.ins.dispatchEvent("regenerate")
  81. }
  82. }