Пример #1
0
        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);
        }
Пример #2
0
        public void RemoveAndUnlinkNode(ref Microsoft.Xna.Framework.Vector3 positionToRemoveNodeFrom)
        {
            PositionedNode nodeToRemove = GetClosestNodeTo(ref positionToRemoveNodeFrom);

            Remove(nodeToRemove);
        }
Пример #3
0
 public bool AreAdjacentTiles(ref Microsoft.Xna.Framework.Vector3 targetPosition, ref Microsoft.Xna.Framework.Vector3 startPosition)
 {
     return(AreAdjacentTiles(ref targetPosition, ref startPosition, false));
 }
Пример #4
0
        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);
        }
Пример #5
0
 public PositionedNode GetClosestUnoccupiedNodeTo(ref Microsoft.Xna.Framework.Vector3 targetPosition, ref Microsoft.Xna.Framework.Vector3 startPosition)
 {
     return(GetClosestUnoccupiedNodeTo(ref targetPosition, ref startPosition, false));
 }
Пример #6
0
 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();
            }
        }