Ejemplo n.º 1
0
 public Action(Rat rat)
 {
     this.rat             = rat;
     ratController        = rat.GetComponent <RatController>();
     animationsController = rat.GetComponent <AnimationsController>();
 }
Ejemplo n.º 2
0
    public override void RatMove(Rat context)
    {
        if (context.alliesNearby == 0)
        {
            context.currentMoveState = new RatRunAway();
        }
        if (context.LastHeroPosX == -1)
        {
            context.currentMoveState = new RatIdle();
        }
        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++)
                    {
                        if (context.currentMap.enemyPathFindingA.FindPathBreadth(startPoint, endPoint, context.currentMap.GenerateTruePathCosts(context.posX - 5, context.posY - 5, context.posX + 5, context.posY + 5, context), 5, 5) is null)
                        {
                            return;
                        }
                    }

                    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);
                }
                if (path is null)
                {
                    return;
                }
                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
            }
            else
            {
                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);
                }
                if (path is null)
                {
                    return;
                }
            }

            int subtractAmmount;
            if (path.Count > 1)
            {
                subtractAmmount = 2;
            }
            else
            {
                subtractAmmount = 1;
            }
            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);
                }
            }
        }
    }