public bool AreAdjacentTiles(ref Microsoft.Xna.Framework.Vector3 targetPosition, ref Microsoft.Xna.Framework.Vector3 startPosition, bool ignoreCorners) { bool areAdjacent = false; int xTileTarget, yTileTarget, xTileStart, yTileStart, deltaX, deltaY; WorldToIndex(targetPosition.X, targetPosition.Y, out xTileTarget, out yTileTarget); WorldToIndex(startPosition.X, startPosition.Y, out xTileStart, out yTileStart); deltaX = xTileTarget - xTileStart; deltaY = yTileTarget - yTileStart; if (ignoreCorners == false || (ignoreCorners == true && (deltaX == 0 || deltaY == 0))) { PositionedNode targetNode = TiledNodeAt(xTileTarget, yTileTarget); PositionedNode startNode = TiledNodeAt(xTileStart, yTileStart); if (targetNode != null && startNode != null) { for (int i = 0; i < targetNode.Links.Count; i++) { if (targetNode.Links[i].NodeLinkingTo == startNode) { areAdjacent = true; break; } } } } return(areAdjacent); }
public void RemoveAndUnlinkNode(ref Microsoft.Xna.Framework.Vector3 positionToRemoveNodeFrom) { PositionedNode nodeToRemove = GetClosestNodeTo(ref positionToRemoveNodeFrom); Remove(nodeToRemove); }
public bool AreAdjacentTiles(ref Microsoft.Xna.Framework.Vector3 targetPosition, ref Microsoft.Xna.Framework.Vector3 startPosition) { return(AreAdjacentTiles(ref targetPosition, ref startPosition, false)); }
public PositionedNode GetClosestUnoccupiedNodeTo(ref Microsoft.Xna.Framework.Vector3 targetPosition, ref Microsoft.Xna.Framework.Vector3 startPosition, bool ignoreCorners) { PositionedNode nodeToReturn = null; int xTile, yTile; WorldToIndex(targetPosition.X, targetPosition.Y, out xTile, out yTile); if (IsTileOccupied(xTile, yTile) == false) { nodeToReturn = TiledNodeAt(xTile, yTile); } if (nodeToReturn == null) { int startXTile, startYTile, xTileCheck, yTileCheck, deltaX, deltaY; WorldToIndex(startPosition.X, startPosition.Y, out startXTile, out startYTile); float shortestDistanceSquared = 999; int finalTileX = -1, finalTileY = -1; //Get the "target" Node PositionedNode node = TiledNodeAt(xTile, yTile); PositionedNode startNode = TiledNodeAt(startXTile, startYTile); PositionedNode checkNode; if (node != null && startNode != null) { for (int i = 0; i < node.Links.Count; i++) { //skip any tile I am already on... checkNode = node.Links[i].NodeLinkingTo; if (checkNode == startNode) { continue; } WorldToIndex(checkNode.X, checkNode.Y, out xTileCheck, out yTileCheck); if (IsTileOccupied(xTileCheck, yTileCheck) == false) { deltaX = xTileCheck - xTile; deltaY = yTileCheck - yTile; if (ignoreCorners == false || (ignoreCorners == true && (deltaX == 0 || deltaY == 0))) { float distanceFromStartSquared = ((xTileCheck - startXTile) * (xTileCheck - startXTile)) + ((yTileCheck - startYTile) * (yTileCheck - startYTile)); if (distanceFromStartSquared < shortestDistanceSquared) { shortestDistanceSquared = distanceFromStartSquared; finalTileX = xTileCheck; finalTileY = yTileCheck; } } } } if (finalTileX != -1 && finalTileY != -1) { nodeToReturn = TiledNodeAt(finalTileX, finalTileY); } } } return(nodeToReturn); }
public PositionedNode GetClosestUnoccupiedNodeTo(ref Microsoft.Xna.Framework.Vector3 targetPosition, ref Microsoft.Xna.Framework.Vector3 startPosition) { return(GetClosestUnoccupiedNodeTo(ref targetPosition, ref startPosition, false)); }
public override PositionedNode GetClosestNodeTo(ref Microsoft.Xna.Framework.Vector3 position) { return(GetClosestNodeTo(position.X, position.Y)); }
public override void Initialize(bool addToManagers) { // Generated Initialize LoadStaticContent(ContentManagerName); CollectionFile = FlatRedBallServices.Load<ShapeCollection>("content/screens/gamescreen/collectionfile.shcx", ContentManagerName); GoalAreaFile = FlatRedBallServices.Load<ShapeCollection>("content/screens/gamescreen/goalareafile.shcx", ContentManagerName); PlayerBallInstance = new FirstFlatRedBall.Entities.PlayerBall(ContentManagerName, false); PlayerBallInstance.Name = "PlayerBallInstance"; PuckInstance = new FirstFlatRedBall.Entities.Puck(ContentManagerName, false); PuckInstance.Name = "PuckInstance"; LeftGoal = GoalAreaFile.AxisAlignedRectangles.FindByName("Left Goal"); RightGoal = GoalAreaFile.AxisAlignedRectangles.FindByName("Right Goal"); ScoreHudInstance = new FirstFlatRedBall.Entities.ScoreHud(ContentManagerName, false); ScoreHudInstance.Name = "ScoreHudInstance"; PostInitialize(); PlayerBallInstancePositionReset = PlayerBallInstance.Position; base.Initialize(addToManagers); if (addToManagers) { AddToManagers(); } }