예제 #1
0
        public void GetWalkable(GameTime gameTime)
        {
            int[,] level = ((GameState)StateManager.GetState(Settings.STATES.Game)).DuplicateLevel();

            ((GameState)StateManager.GetState(Settings.STATES.Game)).SetUnwalkable(ref level, Armies.army[selected]);

            // Uncomment to Print the grid

            /*for (int i = 0; i < level.GetLength(0); i++)
             * {
             *  Console.WriteLine();
             *  for (int j = 0; j < level.GetLength(1); j++)
             *      Console.Write(level[i, j]);
             * }*/
            // Uncomment to Print the grid

            // PATHFINDING FOR REACHABLE AREA
            List <List <Node> > field = new List <List <Node> >();

            for (int i = 0; i < level.GetLength(0); i++)
            {
                field.Add(new List <Node>());
                for (int j = 0; j < level.GetLength(1); j++)
                {
                    field[i].Add(new Node(i, j, level[i, j]));
                }
            }

            AStar.SetField(field);
            Point GPos = Armies.army[selected].GridPosition;

            AStar.Area(GPos.X, GPos.Y, Armies.army[selected].move);
            List <Node> nodes = AStar.GetClosed();

            canMoveTo = new List <Point>();

            moveArrows = new List <SpineAnimation>();
            for (int i = 1; i < nodes.Count; i++)
            {
                canMoveTo.Add(new Point(nodes[i].x, nodes[i].y));
                moveArrows.Add(AnimationAssets.ArrowIcon);
                GPos = Grid.ToPixelLocation(new Point(nodes[i].x, nodes[i].y), Globals.GridLocation, Globals.TileDimensions);
                moveArrows[i - 1].Position = new Vector2(GPos.X + Globals.TILE_WIDTH / 2, GPos.Y + Globals.TILE_HEIGHT / 2 - 20);
                moveArrows[i - 1].Update(gameTime);
                moveArrows[i - 1].Update(gameTime);
            }
            // END PATHFINDING FOR REACHABLE AREA
        }