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
|
|
|
|
|
2024-11-26 17:29:26 +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;
|
2024-06-04 15:07:57 +08:00
|
|
|
|
for (int i = 0; i < flagStartIndexs.Count; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
AddFlag(flagStartIndexs[i]);
|
2024-06-05 15:19:45 +08:00
|
|
|
|
}
|
|
|
|
|
|
if (flagStartIndexs.Count <= 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
// 没有旗子,不用管旗子归还点
|
|
|
|
|
|
return;
|
2024-06-04 15:07:57 +08:00
|
|
|
|
}
|
2024-06-03 12:22:29 +08:00
|
|
|
|
|
|
|
|
|
|
// 使用随机出生点生成一个returnPos
|
2024-11-07 17:22:30 +08:00
|
|
|
|
var flagReturnRegionId = levelData.flagEndPoints;
|
|
|
|
|
|
for (int i = 0; i < flagReturnRegionId.Count; i++)
|
2024-06-04 15:07:57 +08:00
|
|
|
|
{
|
2024-11-07 17:22:30 +08:00
|
|
|
|
AddFlagReturnPos(flagReturnRegionId[i]);
|
2024-06-04 15:07:57 +08:00
|
|
|
|
}
|
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
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|