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(); }
public bool InRangeC(BlobScript attacker, BlobScript target) { var attackerLoc = attacker.GetGridLocation(); var targetLoc = target.GetGridLocation(); var xdis = Math.Pow(targetLoc.x - attackerLoc.x, 2); var ydis = Math.Pow(targetLoc.y - attackerLoc.y, 2); var c = (int)Math.Sqrt(xdis + ydis); //for close distances calculating the hypotenuse is a resonable approximation of diagonals counting as 1 square if (attackRange <= 2 && c <= attackRange) { return(true); } return(GridService.Instance.GetDistance(attackerLoc, targetLoc) <= attackRange); }
public bool InRange(BlobScript attacker, BlobScript target) { var attackerLoc = attacker.GetGridLocation(); var targetLoc = target.GetGridLocation(); var xdis = Math.Abs(targetLoc.x - attackerLoc.x); var ydis = Math.Abs(targetLoc.y - attackerLoc.y); if (xdis > ydis) { return(xdis <= attackRange); } if (ydis > xdis) { return(ydis <= attackRange); } return(ydis <= attackRange); }