public Pathfinder(Level level) { //Level = level; Width = level.Width; Height = level.Height; InitializeSearchNodes(level); }
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(); }
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; } } } }