void Awake()
 {
     health   = GetComponentInChildren <Player_HealthController>();
     movement = GetComponent <PlanetMovement>();
     ability  = GetComponent <ISpecialAbility>();
     Camera.main.GetComponent <CameraFollow>().AddPlayers(gameObject.transform);
 }
예제 #2
0
        //специальные действия выполняют все юниты, начиная с первого (нулевой в дуэли сражается)
        private IEnumerable <ActionResult> DoSpecialActionsForArmy(IArmy myArmy, IArmy enemyArmy, Random random)
        {
            List <ActionResult> results = new List <ActionResult>();

            for (int i = 1; i < myArmy.Count; i++)
            {
                if (myArmy.GetUnit(i).IsAlive())
                {
                    ISpecialAbility unit = myArmy.GetUnit(i) as ISpecialAbility;
                    if (unit != null)
                    {
                        results.Add(unit.DoSpecialAction(i, myArmy, enemyArmy, random));
                    }
                }
            }
            return(results);
        }
예제 #3
0
        public void SpecialAbilities(IArmy enemiesArmy)
        {
            int unitsCount = this.Units.Count();

            for (int i = 0; i < unitsCount; i++)
            {
                IUnit unit = this.Units[i];
                if (!unit.isDead())
                {
                    ISpecialAbility saUnit = unit as ISpecialAbility;
                    if (saUnit != null && saUnit.SpecialAbilityProc())
                    {
                        saUnit.DoSpecialAbility(this, enemiesArmy);
                    }
                }
            }
        }
예제 #4
0
        public List <IUnit> getSpecialAbilityTargets(IArmy friendlyArmy, IArmy enemiesArmy, ISpecialAbility unit)
        {
            List <IUnit> friendlyUnits = friendlyArmy.Units;
            int          position      = friendlyUnits.IndexOf(unit);

            int          i = 0;
            List <IUnit> availableRange = new List <IUnit>();

            foreach (var armyUnit in friendlyUnits)
            {
                if (!armyUnit.isDead() && Math.Abs(position - i) <= unit.SpecialAbilityRange && i != position)
                {
                    availableRange.Add(armyUnit);
                }
                i++;
            }

            int range = unit.SpecialAbilityRange - position;

            i = 0;

            while (i < range && i < enemiesArmy.Units.Count)
            {
                IUnit armyUnit = enemiesArmy.Units[i];
                if (!armyUnit.isDead())
                {
                    availableRange.Add(armyUnit);
                }
                i++;
            }

            return(availableRange);
        }
예제 #5
0
        public List <IUnit> getSpecialAbilityTargets(IArmy friendlyArmy, IArmy enemiesArmy, ISpecialAbility unit)
        {
            List <IUnit> friendlyUnits = friendlyArmy.Units;
            int          position      = friendlyUnits.IndexOf(unit);

            int colNum = position / N,
                rowNum = position % N;

            int          i = 0;
            List <IUnit> availableRange = new List <IUnit>();

            foreach (var armyUnit in friendlyUnits)
            {
                int unitColNum      = i / N,
                         unitRowNum = i % N;
                if (!armyUnit.isDead() && i != position &&
                    Math.Abs(unitColNum - colNum) + Math.Abs(unitRowNum - rowNum) <= unit.SpecialAbilityRange)
                {
                    availableRange.Add(armyUnit);
                }
                i++;
            }

            i = 0;
            foreach (var armyUnit in enemiesArmy.Units)
            {
                int unitColNum      = i / N,
                         unitRowNum = i % N;
                if (!armyUnit.isDead() && i != position &&
                    Math.Abs(unitColNum - colNum) + Math.Abs(unitRowNum - rowNum) + colNum + 1 <= unit.SpecialAbilityRange)
                {
                    availableRange.Add(armyUnit);
                }
                i++;
            }

            return(availableRange);
        }