// Update is called once per frame void Update() { int standardActivityPoint = GetStandardActivityPoint(); List <GameObject> currentTurnUnits = units.FindAll(go => go.GetComponent <Unit>().GetCurrentActivityPoint() >= standardActivityPoint); List <GameObject> nextTurnUnits = units.FindAll(go => go.GetComponent <Unit>().GetCurrentActivityPoint() < standardActivityPoint); currentTurnUnits.Sort(SortHelper.Chain(new List <Comparison <GameObject> > { SortHelper.CompareBy <GameObject>(go => go.GetComponent <Unit>().GetCurrentActivityPoint()), SortHelper.CompareBy <GameObject>(go => go.GetComponent <Unit>().GetActualStat(Stat.Dexturity)), SortHelper.CompareBy <GameObject>(go => go.GetInstanceID()) }, reverse: true)); nextTurnUnits.Sort(SortHelper.Chain(new List <Comparison <GameObject> > { SortHelper.CompareBy <GameObject>(go => { int currentAP = go.GetComponent <Unit>().GetCurrentActivityPoint(); int recover = go.GetComponent <Unit>().GetActualStat(Stat.Dexturity); return(currentAP + recover); }), SortHelper.CompareBy <GameObject>(go => go.GetComponent <Unit>().GetActualStat(Stat.Dexturity)), SortHelper.CompareBy <GameObject>(go => go.GetInstanceID()) }, reverse: true)); // 유닛 전체에 대해서도 소팅. 변경점이 있을때마다 반영된다. units.Clear(); units.AddRange(currentTurnUnits); units.AddRange(nextTurnUnits); }
private List <UnitWrapper> SortUnits(BattleData battleData, List <UnitWrapper> units) { UnitManager unitManager = battleData.unitManager; int standardActivityPoint = unitManager.GetStandardActivityPoint(); List <UnitWrapper> thisTurnUnits = units.FindAll(wrapper => GetActivityPoint(battleData, wrapper) >= standardActivityPoint); List <UnitWrapper> nextTurnUnits = units.FindAll(wrapper => GetActivityPoint(battleData, wrapper) < standardActivityPoint); thisTurnUnits.Sort(SortHelper.Chain(new List <Comparison <UnitWrapper> > { SortHelper.CompareBy <UnitWrapper>(wrapper => GetActivityPoint(battleData, wrapper)), SortHelper.CompareBy <UnitWrapper>(wrapper => wrapper.GetUnit().GetActualStat(Stat.Dexturity)), SortHelper.CompareBy <UnitWrapper>(wrapper => wrapper.GetGameObject().GetInstanceID()) }, reverse: true)); nextTurnUnits.Sort(SortHelper.Chain(new List <Comparison <UnitWrapper> > { SortHelper.CompareBy <UnitWrapper>(wrapper => { int ap = GetActivityPoint(battleData, wrapper); int recover = wrapper.GetUnit().GetActualStat(Stat.Dexturity); return(ap + recover); }), SortHelper.CompareBy <UnitWrapper>(wrapper => wrapper.GetUnit().GetActualStat(Stat.Dexturity)), SortHelper.CompareBy <UnitWrapper>(wrapper => wrapper.GetGameObject().GetInstanceID()) }, reverse: true)); List <UnitWrapper> result = new List <UnitWrapper>(); result.AddRange(thisTurnUnits); result.AddRange(nextTurnUnits); return(result); }
public List <GameObject> GetUpdatedReadiedUnits() { readiedUnits.Clear(); // check each unit and add all readied units. foreach (var unit in units) { if (unit.GetComponent <Unit>().GetCurrentActivityPoint() >= standardActivityPoint) { readiedUnits.Add(unit); Debug.Log(unit.GetComponent <Unit>().GetName() + " is readied"); } } // AP가 큰 순서대로 소팅. readiedUnits.Sort(SortHelper.Chain(new List <Comparison <GameObject> > { SortHelper.CompareBy <GameObject>(go => go.GetComponent <Unit>().GetCurrentActivityPoint()), SortHelper.CompareBy <GameObject>(go => go.GetComponent <Unit>().GetActualStat(Stat.Dexturity)), SortHelper.CompareBy <GameObject>(go => go.GetInstanceID()) }, reverse: true)); return(readiedUnits); }