public override void RatMove(Rat context) { context.currentMap.GenerateTruePathCosts(context.posX - 5, context.posY - 5, context.posX + 5, context.posY + 5, context); if (context.alliesNearby > 0) { context.currentMoveState = new RatChase(); } if (context.LastHeroPosX == -1) { context.currentMoveState = new RatIdle(); } else { LevelGenerator.Point startPoint = new LevelGenerator.Point(); startPoint.X = context.posX; startPoint.Y = context.posY; LevelGenerator.Point endPoint = new LevelGenerator.Point(); endPoint.X = context.LastHeroPosX; endPoint.Y = context.LastHeroPosY; if (startPoint.X < endPoint.X) { context.MoveDirection(Character.Directions.left); return; } if (startPoint.X > endPoint.X) { context.MoveDirection(Character.Directions.right); return; } if (startPoint.Y < endPoint.Y) { context.MoveDirection(Character.Directions.down); return; } if (startPoint.Y > endPoint.Y) { context.MoveDirection(Character.Directions.up); return; } } }
public override void SkeletonMove(Skeleton context) { if (context.LastHeroPosX == -1) { context.moveState = new SkeletonIdle(); } else { LevelGenerator.Point startPoint = new LevelGenerator.Point(); startPoint.X = 5; startPoint.Y = 5; LevelGenerator.Point endPoint = new LevelGenerator.Point(); endPoint.X = context.LastHeroPosX - context.posX + 5; endPoint.Y = context.LastHeroPosY - context.posY + 5; List <Node> path = null; Stopwatch sw; if (GameManager._instance.GetComponent <GameDataManager>().DebugConsoleEnabled == 1) { if (GameManager._instance.GetComponent <GameDataManager>().UsingBreadthAlgorithm == 1) { sw = Stopwatch.StartNew(); for (int i = 0; i < 100; i++) { context.currentMap.enemyPathFindingA.FindPathBreadth(startPoint, endPoint, context.currentMap.GenerateTruePathCosts(context.posX - 5, context.posY - 5, context.posX + 5, context.posY + 5, context), 5, 5); } sw.Stop(); context.GetComponent <Enemy>().turnManager.AddLog("Enemy " + context.gameObject.GetInstanceID().ToString() + " found path with BFS in: " + sw.Elapsed.Ticks + " ticks", sw.Elapsed.Ticks.ToString() + " "); } sw = Stopwatch.StartNew(); for (int i = 0; i < 100; i++) { path = context.currentMap.enemyPathFindingA.FindPath(startPoint, endPoint, context.currentMap.GenerateTruePathCosts(context.posX - 5, context.posY - 5, context.posX + 5, context.posY + 5, context), 5, 5); } sw.Stop(); context.GetComponent <Enemy>().turnManager.AddLog("Enemy " + context.gameObject.GetInstanceID().ToString() + " found path in: " + sw.Elapsed.Ticks + " ticks", sw.Elapsed.Ticks.ToString() + "\n"); //10000 ticks is 1 ms if (path is null) { return; } } else { for (int i = 0; i < 1; i++) { path = context.currentMap.enemyPathFindingA.FindPath(startPoint, endPoint, context.currentMap.GenerateTruePathCosts(context.posX - 5, context.posY - 5, context.posX + 5, context.posY + 5, context), 5, 5); } if (path is null) { return; } } int subtractAmmount; if (path.Count > 1) { subtractAmmount = 2; } else { subtractAmmount = 1; } if (moveBeforeRest == 0) { moveBeforeRest = 3; } else { if (path.Count > 1) { if (path[path.Count - subtractAmmount].position.X > startPoint.X) { context.MoveDirection(Character.Directions.right); } if (path[path.Count - subtractAmmount].position.X < startPoint.X) { context.MoveDirection(Character.Directions.left); } if (path[path.Count - subtractAmmount].position.Y > startPoint.Y) { context.MoveDirection(Character.Directions.up); } if (path[path.Count - subtractAmmount].position.Y < startPoint.Y) { context.MoveDirection(Character.Directions.down); } moveBeforeRest--; } } } }