NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Fight/Flag/FlagManager.cs

104 lines
2.8 KiB
C#
Raw Normal View History

2024-05-30 19:41:10 +08:00
using System.Collections.Generic;
2024-05-31 16:46:35 +08:00
using Gameplay.Level;
2024-11-25 14:34:18 +08:00
2024-05-30 19:41:10 +08:00
namespace Gameplay.Fight.Flag
2024-05-30 19:23:59 +08:00
{
public class FlagManager
{
public static FlagManager instance { get; private set; }
public static void CreateInstance()
{
instance = new FlagManager();
}
2024-05-30 19:41:10 +08:00
2024-05-31 16:46:35 +08:00
private List<FlagReturnPos> _returnPoints = new List<FlagReturnPos>();
private List<FlagInst> _flagInsts = new List<FlagInst>();
2024-05-30 19:23:59 +08:00
public List<FlagInst> FlagInsts => _flagInsts;
2024-05-30 19:23:59 +08:00
private FlagManager()
{
}
public void Init()
{
2024-05-31 16:46:35 +08:00
var levelData = LevelManager.Instance.CurrentLevel.GetLevelData();
2024-11-07 15:05:36 +08:00
var flagStartIndexs = levelData.flagStartPoints;
for (int i = 0; i < flagStartIndexs.Count; i++)
{
AddFlag(flagStartIndexs[i]);
}
if (flagStartIndexs.Count <= 0)
{
// 没有旗子,不用管旗子归还点
return;
}
2024-06-03 12:22:29 +08:00
// 使用随机出生点生成一个returnPos
var flagReturnRegionId = levelData.flagEndPoints;
for (int i = 0; i < flagReturnRegionId.Count; i++)
{
AddFlagReturnPos(flagReturnRegionId[i]);
}
2024-05-30 19:23:59 +08:00
}
2024-05-30 19:41:10 +08:00
public void AddFlagReturnPos(int cellIndex)
{
2024-05-31 16:46:35 +08:00
var newReturnPos = new FlagReturnPos(cellIndex);
_returnPoints.Add(newReturnPos);
2024-05-30 19:41:10 +08:00
}
public void AddFlag(int cellIndex)
{
2024-05-31 16:46:35 +08:00
var newFlag = new FlagInst(cellIndex);
_flagInsts.Add(newFlag);
2024-05-30 19:41:10 +08:00
}
2024-05-31 19:44:10 +08:00
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;
}
2024-11-25 14:34:18 +08:00
public bool CheckArrived(int cellIndex)
2024-05-31 19:44:10 +08:00
{
for (int i = 0; i < _returnPoints.Count; i++)
{
var returnPos = _returnPoints[i];
if (returnPos.cellIndex == cellIndex)
{
return true;
}
}
return false;
}
2024-05-30 19:23:59 +08:00
public void Dispose()
{
2024-05-31 16:46:35 +08:00
for (int i = 0; i < _returnPoints.Count; i++)
{
var returnPos = _returnPoints[i];
returnPos.Dispose();
}
_returnPoints.Clear();
2024-05-30 19:23:59 +08:00
2024-05-31 16:46:35 +08:00
for (int i = 0; i < _flagInsts.Count; i++)
{
var flagInst = _flagInsts[i];
flagInst.Dispose();
}
_flagInsts.Clear();
2024-05-30 19:23:59 +08:00
}
}
}