import { _decorator, Component, EditBox, instantiate, Node, Prefab } from 'cc'; import { Difficulty, DifficutyData } from '../../script/Manager/LocalDataMgr'; import { LayerMgr } from '../../script/Manager/LayerMgr'; import { DifficultyItem } from './DifficultyItem'; const { ccclass, property } = _decorator; @ccclass('SelectDifficultyPanel') export class SelectDifficultyPanel extends Component { @property(Node) itemRoot: Node = null; @property(Node) itemPrefab:Node = null; @property(EditBox) countEditBox:EditBox = null; _difficultyData: DifficutyData = null _items: Node[] = []; _itemPool: Node[] = []; protected start(): void { this.countEditBox.node.on('editing-did-ended', this.onEditChange, this); } init() { this._difficultyData = Difficulty.getDifficutyData(); const targetCount = this._difficultyData.difficutyCount; const currentCount = this._items.length; // 情况1:需要添加新项目 if(targetCount > currentCount) { for (let i = currentCount; i < targetCount; i++) { this.createItem(i); } } // 情况2:需要删除多余项目 else if(targetCount < currentCount) { const removeCount = currentCount - targetCount; for (let i = 0; i < removeCount; i++) { const item = this._items.pop(); item.removeFromParent(); item.active = false; this._itemPool.push(item); } } // 更新所有项目的数据 for (let i = 0; i < this._items.length; i++) { const scaleValue = i < this._difficultyData.scales.length ? this._difficultyData.scales[i] : 0; this._items[i].getComponent(DifficultyItem).init(i, scaleValue); } this.countEditBox.string = this._difficultyData.difficutyCount.toString(); } createItem(index: number) { let itemNode = this._itemPool.length > 0? this._itemPool.pop(): instantiate(this.itemPrefab); itemNode.parent = this.itemRoot; this._items.push(itemNode); itemNode.active = true itemNode.getComponent(DifficultyItem).init(index, this._difficultyData.scales[index]) } onEditChange(ed:EditBox) { let count = Number(ed.string); if(isNaN(count)) { return; } Difficulty.difficutyData.difficutyCount = count; Difficulty.createOrDeleteOtherScale(); this.init() Difficulty.saveDifficutyData(); } onUseSysDataClick() { Difficulty.setDataToDefault(); Difficulty.createOrDeleteOtherScale(); // 重置时应用新逻辑 this.init(); // 刷新UI this.node.active = false } onUseCurrentData() { this.node.active = false } }