using System.Collections.Generic; using Gameplay.Level; namespace Gameplay.Fight.Flag { public class FlagManager { public static FlagManager instance { get; private set; } public static void CreateInstance() { instance = new FlagManager(); } private List _returnPoints = new List(); private List _flagInsts = new List(); public List FlagInsts => _flagInsts; private FlagManager() { } public void Init() { var levelData = LevelManager.Instance.CurrentLevel.GetLevelData(); var flagStartIndexs = levelData.flagStartPoints; for (int i = 0; i < flagStartIndexs.Count; i++) { AddFlag(flagStartIndexs[i]); } if (flagStartIndexs.Count <= 0) { // 没有旗子,不用管旗子归还点 return; } // 使用随机出生点生成一个returnPos var flagReturnRegionId = levelData.flagEndPoints; for (int i = 0; i < flagReturnRegionId.Count; i++) { AddFlagReturnPos(flagReturnRegionId[i]); } } public void AddFlagReturnPos(int cellIndex) { var newReturnPos = new FlagReturnPos(cellIndex); _returnPoints.Add(newReturnPos); } public void AddFlag(int cellIndex) { var newFlag = new FlagInst(cellIndex); _flagInsts.Add(newFlag); } public FlagInst PickFlag(int cellIndex) { for (int i = 0; i < _flagInsts.Count; i++) { var flagInst = _flagInsts[i]; if (flagInst.cellIndex == cellIndex) { _flagInsts.RemoveAt(i); return flagInst; } } return null; } public bool CheckArrived(int cellIndex) { for (int i = 0; i < _returnPoints.Count; i++) { var returnPos = _returnPoints[i]; if (returnPos.cellIndex == cellIndex) { return true; } } return false; } public void Dispose() { for (int i = 0; i < _returnPoints.Count; i++) { var returnPos = _returnPoints[i]; returnPos.Dispose(); } _returnPoints.Clear(); for (int i = 0; i < _flagInsts.Count; i++) { var flagInst = _flagInsts[i]; flagInst.Dispose(); } _flagInsts.Clear(); } } }