Exemple #1
0
    // 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);
    }
Exemple #2
0
        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);
        }
Exemple #3
0
    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);
    }