Esempio n. 1
0
        public Pathfinder(Level level)
        {
            //Level = level;

            Width = level.Width;
            Height = level.Height;

            InitializeSearchNodes(level);
        }
Esempio n. 2
0
        public void NewLevel(int width, int height, int enemies)
        {
            level = new Level(width, height, levelNumber + 2);
            level.AddEntity(player);
            level.Player = player;

            player.Position = new Vector2(3 * Tile.Size + (player.Width / 2) - 16, 3 * Tile.Size - (player.Height / 2) + Tile.Size / 2);
            player.Bullets.Clear();
            camera = new Camera(this);
            camera.Focus = player;
            camera.Bounds = new Rectangle(0, 0, level.Width * Tile.Size, level.Height * Tile.Size);

            level.Camera = camera;
            level.Initialize();
        }
Esempio n. 3
0
        private void InitializeSearchNodes(Level level)
        {
            searchNodes = new SearchNode[Width * Height];

            for (int y = 0; y < Height; y++)
            {
                for (int x = 0; x < Width; x++)
                {
                    SearchNode node = new SearchNode();
                    node.Position = new Point(x, y);
                    node.Walkable = !level.GetTile(x, y).IsSolid();
                    if (node.Walkable)
                    {
                        node.Neighbors = new SearchNode[4];
                        searchNodes[x + y * Width] = node;
                    }
                }
            }

            for (int y = 0; y < Height; y++)
            {
                for (int x = 0; x < Width; x++)
                {
                    SearchNode node = searchNodes[x + y * Width];

                    if (node == null || node.Walkable == false)
                    {
                        continue;
                    }

                    Point[] neighbors = new Point[]
                    {
                        new Point(x, y - 1),
                        new Point(x, y + 1),
                        new Point(x - 1, y),
                        new Point(x + 1, y)
                    };

                    for (int i = 0; i < neighbors.Length; i++)
                    {
                        Point position = neighbors[i];

                        if (position.X < 0 || position.X >= Width || position.Y < 0 || position.Y >= Height)
                        {
                            continue;
                        }

                        SearchNode neighbor = searchNodes[position.X + position.Y * Width];

                        if (neighbor == null || neighbor.Walkable == false)
                        {
                            continue;
                        }

                        node.Neighbors[i] = neighbor;
                    }
                }
            }
        }