public override void TakeTurn(BlobScript source, List <BlobScript> allyBlobs, List <BlobScript> enemyBlobs)
        {
            _me         = source;
            _allyBlobs  = allyBlobs;
            _enemyBlobs = enemyBlobs;

            //if there are no allies to protect behave like a warrior
            if (!PriorityTargetsToDefend())
            {
                var a       = new PunchAttack();
                var targets = a.GetPossibleTargets(source, enemyBlobs.ToList());
                if (targets.Count > 0)
                {
                    a.FireAttack(source, targets.First());
                    return;
                }

                var target = DetermineTarget();

                source.transform.position = MoveTo(source.transform.position, target.transform.position, 5f);
            }

            var moveTo = DetermineAverageOfPos();

            source.transform.position = MoveTo(source.transform.position, moveTo, 5f);


            UnityEngine.Object.FindObjectOfType <God>().EndTurn();
        }
示例#2
0
        public override void TakeTurn(BlobScript source, List <BlobScript> allyBlobs, List <BlobScript> enemyBlobs)
        {
            _me         = source;
            _allyBlobs  = allyBlobs;
            _enemyBlobs = enemyBlobs;

            BaseAttack a       = new PunchAttack();
            var        targets = a.GetPossibleTargets(source, enemyBlobs.ToList());

            /*
             * if (source.GetUltCharge() >= 100)
             * {
             *  a = new WhirlwindStrikeUlt();
             *  a.FireAttack(_me, targets);
             *  _me.ResetUltCharge();
             *  return;
             * }*/

            if (targets.Count > 0)
            {
                a.FireAttack(source, targets.First());
                return;
            }


            var close  = 1000;
            var x      = 0;
            var y      = 0;
            var target = DetermineTarget();
            var loc    = target.GetGridLocation();
            var myLoc  = _me.GetGridLocation();

            for (int i = -1; i < 2; i++)
            {
                for (int j = -1; j < 2; j++)
                {
                    if (GridService.Instance.SpaceOccupied((int)loc.x + i, (int)loc.y + j) || !GridService.Instance.IsInGrid((int)loc.x + i, (int)loc.y + j))
                    {
                        continue;
                    }
                    var dis = GridService.Instance.GetDistance(myLoc, new Vector2(loc.x + i, loc.y + j));
                    if (dis < close && dis != 0)
                    {
                        close = dis;
                        x     = (int)loc.x + i;
                        y     = (int)loc.y + j;
                    }
                }
            }

            var newGridLoc = MoveTo(myLoc, new Vector2(x, y), 5f);

            source.SetGridLocation((int)newGridLoc.x, (int)newGridLoc.y);
            source.transform.position = GridService.Instance.ConvertToPoint(newGridLoc);
            //source.GetComponent<Rigidbody2D>().MovePosition(MoveTo(source.transform.position, target.transform.position, 5f));

            God.Instance.EndTurn();
        }