private void ScheduleMovementForNeerRockPosition(ToonScript toon, GameAction action) { var pathFinding = new AstarPathFinding(); int startX = (int)toon.transform.position.x; int startZ = (int)toon.transform.position.z; List <IEnumerable <MovingStep> > allPaths = new List <IEnumerable <MovingStep> >(); for (int xoff = -1; xoff <= 1; xoff++) { if (xoff == 0) { continue; } if (MapService.IsBlockedPosition(action.X + xoff, action.Z)) { continue; } IEnumerable <MovingStep> movingSteps = pathFinding.FromTo(startX, startZ, action.X + xoff, action.Z); if (movingSteps.Any()) { allPaths.Add(movingSteps); } } for (int zoff = -1; zoff <= 1; zoff++) { if (zoff == 0) { continue; } if (MapService.IsBlockedPosition(action.X, action.Z + zoff)) { continue; } IEnumerable <MovingStep> movingSteps = pathFinding.FromTo(startX, startZ, action.X, action.Z + zoff); if (movingSteps.Any()) { allPaths.Add(movingSteps); } } if (allPaths.Any()) { var shortestPath = allPaths.OrderBy(p => p.Count()).First(); toon.ScheduleMovingSteps(shortestPath); toon.SetLifeGoal(ToonLifeGoals.MineRock, action.X, action.Z); } else { toon.SetLifeGoal(ToonLifeGoals.Wait, startX, startZ); } }
private void ScheduleMovementForToon(ToonScript toon, GameAction action) { var pathFinding = new AstarPathFinding(); IEnumerable <MovingStep> movingSteps = pathFinding.FromTo((int)toon.transform.position.x, (int)toon.transform.position.z, action.X, action.Z); toon.ScheduleMovingSteps(movingSteps); }
private void ContinueRoad(ToonScript toon, GameAction action) { var pathFinding = new AstarPathFinding(); int startX = (int)toon.transform.position.x; int startZ = (int)toon.transform.position.z; var path = pathFinding.FromTo(startX, startZ, action.X, action.Z); toon.ScheduleMovingSteps(path); toon.SetLifeGoal(ToonLifeGoals.ContinueRoad, action.X, action.Z); }
private void ScheduleMovementToPullKing(ToonScript toon, GameAction action) { var kingPos = MapService.GetKingPosition(); var kingX = (int)kingPos.x; var kingZ = (int)kingPos.z; bool bestFound = false; int bestX = kingX; int bestZ = kingZ; for (int xoff = -1; xoff <= 1; xoff++) { if (xoff == 0) { continue; } if (!MapService.IsBlockedPosition(kingX + xoff, kingZ)) { bestX = kingX + xoff; bestZ = kingZ; bestFound = true; } } for (int zoff = -1; zoff <= 1; zoff++) { if (zoff == 0) { continue; } if (!MapService.IsBlockedPosition(kingX, kingZ + zoff)) { bestX = kingX; bestZ = kingZ + zoff; bestFound = true; } } if (!bestFound) { return; } var pathFinding = new AstarPathFinding(); int startX = (int)toon.transform.position.x; int startZ = (int)toon.transform.position.z; IEnumerable <MovingStep> movingSteps = pathFinding.FromTo(startX, startZ, bestX, bestZ); toon.ScheduleMovingSteps(movingSteps); toon.SetLifeGoal(ToonLifeGoals.PullKing, action.X, action.Z); }
private void PlanConstruction() { var endPoint = MapService.GetMapEndPoint(); var pathFinding = new AstarPathFinding(); pathFinding.LimitCubeType = CubeTypes.Grass; pathFinding.NoDiagonals = true; var paths = pathFinding.FromTo(LifeGoalTargetX, LifeGoalTargetZ, (int)endPoint.x, (int)endPoint.z); var steps = new Queue <MovingStep>(); foreach (var path in paths) { steps.Enqueue(path); } RoadPath = steps; }