Пример #1
0
        protected override IEnumerator MainAttack()
        {
            if (TargetPositions.Count == 0)
            {
                yield break;
            }
            while (TargetPositions.Count > 0)
            {
                var targetPos       = TargetPositions.Dequeue();
                var targetSquadType = Field.GetSquadTypeByIndex(targetPos);
                if (targetSquadType == SquadType.NotMatter)
                {
                    continue;
                }
                if (targetSquadType == SquadType)
                {
                    continue;
                }
                yield return(StartCoroutine(Move.RotateToPosition(targetPos)));

                yield return(StartCoroutine(CharacterAnimator.RandomAttackCor()));

                var enemyHealth = Field.GetGameObjectByIndex <Health>(targetPos);
                enemyHealth.GetDamage(damage);
                yield return(new WaitForSeconds(0.5f));
            }
        }
Пример #2
0
        protected override IEnumerator MainAttack()
        {
            if (targetsCount == 0)
            {
                yield break;
            }
            var targetPos       = TargetPositions.Dequeue();
            var canAttackFirst  = CanAttack(targetPos);
            var canAttackSecond = CanAttack(secondTargetPos);

            if (canAttackFirst || canAttackSecond)
            {
                yield return(StartCoroutine(CharacterAnimator.RandomAttackCor()));
            }
            else
            {
                yield break;
            }

            yield return(StartCoroutine(Move.RotateToPosition(targetPos)));

            var firstEnemy = Field.GetGameObjectByIndex <Health>(targetPos);

            if (firstEnemy)
            {
                firstEnemy.GetDamage(damage);
            }

            var secondEnemy = Field.GetGameObjectByIndex <Health>(secondTargetPos);

            if (secondEnemy)
            {
                secondEnemy.GetDamage(damage - 1);
            }
        }
Пример #3
0
 protected override void HighLightSelectedAttackCells()
 {
     foreach (var target in TargetPositions.ToArray())
     {
         Field.HighlightCell(target);
     }
 }
Пример #4
0
    private void Update()
    {
        /*    Refresh the datas of the robot    */
        datas.RefreshDatas(Controller.GetMotorsDatas(), Lidar.GetMeasures(), Controller.GetSensorValues());

        if (Server.isActive)
        {
            _targetPositions = TargetPositions.ReadValues(Server.targetPositions);
        }

        status = datas.ToJson();
    }
Пример #5
0
        protected override void UpdateBehaviour(float elapsedSeconds, float totalSeconds)
        {
            Vector2 centerOfMass = Vector2.Zero;
            int     count        = TargetPositions.Count();

            if (count > 0)
            {
                // [FOREACH PERFORMANCE] ALLOCATES GARBAGE
                foreach (var t in TargetPositions)
                {
                    centerOfMass += t;
                }

                centerOfMass = centerOfMass / count;

                Vector2 direction = centerOfMass - Entity.Body.Position;
                direction.Normalize();

                movement.Steer(direction, Weight);
            }
        }
Пример #6
0
 private void Start()
 {
     _targetPositions = new TargetPositions();
     datas            = new RobotDatas();
 }
Пример #7
0
 protected override void Reset()
 {
     TargetPositions.Clear();
     CollisionEnemyHealth = null;
 }