SelectDifficultyPanel.ts 2.8 KB

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