// Constructor public PatrolGuard(Texture2D textureImage, Vector2 position, Vector2 speed, Point spriteSize, Point sheetSize, Map gameMap, SpriteManager spriteManager , List<Vector2>PatrolOrder) : base(textureImage, position, speed, spriteSize, sheetSize, gameMap) { this.spriteManager = spriteManager; patrolReceive = PatrolOrder; }
public Sprite(Texture2D textureImage, Vector2 position, Vector2 speed, Point spriteSize, Point sheetSize, Map gameMap, int collisionOffset, Point currentFrame, int millisecondsPerFrame) { this.textureImage = textureImage; this.Position = position; this.spriteSize = spriteSize; this.sheetSize = sheetSize; this.collisionOffset = collisionOffset; this.currentFrame = currentFrame; this.Speed = speed; this.millisecondsPerFrame = millisecondsPerFrame; this.GameMap = gameMap; }
// Constructor public GuardSprite(Texture2D textureImage, Vector2 position, Vector2 speed, Point spriteSize, Point sheetSize, Map gameMap, SpriteManager spriteManager, List<String> PatrolPathList, bool initialStateIsPatrol) : base(textureImage, position, speed, spriteSize, sheetSize, gameMap) { this.spriteManager = spriteManager; this.PatrolPathList = PatrolPathList; this.initialStateIsPatrol = initialStateIsPatrol; this.startPosition = position; if (PatrolPathList.Count > 0) { CurrentPatrolDestinationPoint = ParsePatrolInstruction(PatrolPathList[CurrentPatrolPathListIndex++], false); } if (initialStateIsPatrol) CurrentState = GuardState.Patrol; else CurrentState = GuardState.Roam; RenewRoamDestination(); }
public Sprite(Texture2D textureImage, Vector2 position, Vector2 speed, Point spriteSize, Point sheetSize, Map gameMap, int collisionOffset, Point currentFrame) : this(textureImage, position, speed, spriteSize, sheetSize, gameMap, collisionOffset, currentFrame, defaultMillisecondsPerFrame) { }
// public abstract Vector2 direction { get; } public Sprite(Texture2D textureImage, Vector2 position, Vector2 speed, Point spriteSize, Point sheetSize, Map gameMap) : this(textureImage, position, speed, spriteSize, sheetSize, gameMap, 10, new Point(0, 0), defaultMillisecondsPerFrame) { }
public GuardSprite(Texture2D textureImage, Vector2 position, Vector2 speed, Point spriteSize, Point sheetSize, Map gameMap, SpriteManager spriteManager) : base(textureImage, position, speed, spriteSize, sheetSize, gameMap) { this.spriteManager = spriteManager; }
public SpriteManager(Game game, Map gameMap ) : base(game) { this.gameMap = gameMap; }
public PlayerSprite(Texture2D textureImage, Vector2 position, Vector2 speed, Point spriteSize, Point sheetSize, Map gameMap) : base(textureImage, position, speed, spriteSize, sheetSize, gameMap) { }
/// <summary> /// Score = DistanceFromStartPoint (CostFromStart) + DistanceToEndPoint (Heuristic) /// </summary> public static List<Point> FindPath(Map GameMap, Point StartPoint, Point EndPoint) { if (StartPoint == EndPoint) { return new List<Point>(); } List<Point> ExploredPoints = new List<Point>(); List<Node> ClosedList = new List<Node>(); List<Node> OpenList = new List<Node>(); List<Node> ConclusionNodeList = new List<Node>(); // Initialize StartPoint to be first Node int DistanceFromStartPoint = GameMap.DistanceOfPoints(StartPoint, StartPoint); int DistanceToEndPoint = GameMap.DistanceOfPoints(StartPoint, EndPoint); Node CurrentNode = new Node(StartPoint, DistanceFromStartPoint, DistanceToEndPoint); ExploredPoints.Add(CurrentNode.GridPosition); int RunTime = 0; do { List<Point> AdjacentGridPositions = GetAdjacentGridPositions(CurrentNode); List<Node> AdjacentNodes = ConvertPointListToNodeList(AdjacentGridPositions, GameMap, StartPoint, EndPoint); // Add Unexplored and Walkable Nodes into OpenList // Also set non-Walkable Nodes to Explored to prevent re-exploring foreach (Node AdjacentNode in AdjacentNodes) { if (!ExploredPoints.Contains(AdjacentNode.GridPosition)) { ExploredPoints.Add(AdjacentNode.GridPosition); AdjacentNode.SetParent(CurrentNode); if (GameMap.CheckTileWalkable(AdjacentNode.GridPosition)) { OpenList.Add(AdjacentNode); } } } // Sort by Node Score and Heuristic (Lowest first) OpenList = OpenList.OrderBy(Obj => Obj.Score).ThenBy(Obj => Obj.Heuristic).ToList(); OpenList = RandomizeSameScoreNodes(OpenList); // Debug if (false) { Console.WriteLine(); Console.WriteLine("----- " + RunTime); Console.WriteLine("CurrentNode: " + CurrentNode.GridPosition + " S" + CurrentNode.Score + " H" + CurrentNode.Heuristic); Console.Write("ClosedList: "); foreach (Node node in ClosedList) { Console.Write(node.GridPosition + " S" + node.Score + " H" + node.Heuristic + " - "); } Console.Write("\n"); Console.Write("OpenList: "); foreach (Node node in OpenList) { Console.Write(node.GridPosition + " S" + node.Score + " H" + node.Heuristic + " - "); } Console.Write("\n"); Console.Write("Conclusion: "); foreach (Node node in ConclusionNodeList) { Console.Write(node.GridPosition + " S" + node.Score + " H" + node.Heuristic + " - "); } Console.WriteLine(); } // Add element to ClosedList // Take first lowest element from sorted OpenList // Remove element from OpenList ClosedList.Add(CurrentNode); CurrentNode = OpenList[0]; OpenList.RemoveAt(0); } while (CurrentNode.Heuristic > 0); // Get resulting path // Cycle from end node to first node while (CurrentNode.CostFromStart > 0) { ConclusionNodeList.Add(CurrentNode); CurrentNode = CurrentNode.Parent; } // Tile Coloring Debug if (false) { GameMap.Reset(); foreach (Node node in OpenList) { GameMap.UpdateTileType(node.GridPosition, GameSetting.TileType.Brown); } foreach (Node node in ClosedList) { GameMap.UpdateTileType(node.GridPosition, GameSetting.TileType.Purple); } foreach (Node node in ConclusionNodeList) { GameMap.UpdateTileType(node.GridPosition, GameSetting.TileType.Yellow); } } List<Point> ConclusionPointList = new List<Point>(); foreach (Node ConclusionNode in ConclusionNodeList) { ConclusionPointList.Insert(0, ConclusionNode.GridPosition); } return ConclusionPointList; }
private static List<Node> ConvertPointListToNodeList(List<Point> PointList, Map GameMap, Point StartPoint, Point EndPoint) { List<Node> NodeList = new List<Node>(); foreach (Point SinglePoint in PointList) { int DistanceFromStartPoint = GameMap.DistanceOfPoints(StartPoint, SinglePoint); int DistanceToEndPoint = GameMap.DistanceOfPoints(SinglePoint, EndPoint); NodeList.Add(new Node(SinglePoint, DistanceFromStartPoint, DistanceToEndPoint)); } return NodeList; }