Exemple #1
0
        public Vector2 GetLocationVector()
        {
            int x = GetLocationX();
            int y = GetLocationY();

            TileLogistic tileLogistic = WorldController.world.tileGrid[x, y].tileLogistic;

            if (turnOverRideDirection == 255)
            {
                return(new Vector2(x * 128, y * 128) + tileLogistic.center);
            }

            else if (turnOverRideDirection == 5)
            {
                return(new Vector2((x * 128) + tileLogistic.center.X - tileLogistic.turnOverrideAmount.X, (y * 128) + tileLogistic.center.Y + tileLogistic.turnOverrideAmount.Y));
            }
            else if (turnOverRideDirection == 7)
            {
                return(new Vector2((x * 128) + tileLogistic.center.X - tileLogistic.turnOverrideAmount.X, (y * 128) + tileLogistic.center.Y - tileLogistic.turnOverrideAmount.Y));
            }
            else if (turnOverRideDirection == 1)
            {
                return(new Vector2((x * 128) + tileLogistic.center.X + tileLogistic.turnOverrideAmount.X, (y * 128) + tileLogistic.center.Y - tileLogistic.turnOverrideAmount.Y));
            }
            else if (turnOverRideDirection == 3)
            {
                return(new Vector2((x * 128) + tileLogistic.center.X + tileLogistic.turnOverrideAmount.X, (y * 128) + tileLogistic.center.Y + tileLogistic.turnOverrideAmount.Y));
            }
            return(Vector2.Zero);
        }
Exemple #2
0
        private void AddNewPoints(Reusables reusables, Point workingPoint, AStarNode workingNode)
        {
            for (byte i = 0; i < 8; i += 2)
            {
                Point newPoint = workingPoint + AngleStuff.directionPoint[i];

                if (workingPoint == Point.Zero)
                {
                    string BUG = "";
                    Debug.WriteLine("BUGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG We hit an empty point on an astar");
                }
                else
                {
                    if (WorldController.world.tileGrid[newPoint.X, newPoint.Y].IsRoad() && !WorldController.world.tileGrid[newPoint.X, newPoint.Y].tileLogistic.IsDirectionBlock(i))
                    {
                        if (!IsInLists(newPoint, reusables))
                        {
                            int count     = 1;
                            int tileScore = WorldController.world.tileGrid[newPoint.X, newPoint.Y].tileLogistic.pathFindingScore;
                            int roadId    = WorldController.world.tileGrid[newPoint.X, newPoint.Y].tileLogistic.roadId;

                            TileLogistic workingLogistic = WorldController.world.tileGrid[workingPoint.X, workingPoint.Y].tileLogistic;
                            TileLogistic newLogistic     = WorldController.world.tileGrid[newPoint.X, newPoint.Y].tileLogistic;


                            while (newLogistic.roadId == workingLogistic.roadId && newLogistic.roadId < 12 && !EndOrDirectionBlockOrStop(newPoint, newLogistic, i))
                            {
                                if (!IsInLists(newPoint, reusables))
                                {
                                    count++;
                                    newPoint    = newPoint + AngleStuff.directionPoint[i];
                                    newLogistic = WorldController.world.tileGrid[newPoint.X, newPoint.Y].tileLogistic;
                                }
                                else
                                {
                                    break;
                                }
                            }

                            while (count > -1 && reusables.toCheckList.ContainsKey(GetOneD(newPoint)))
                            {
                                newPoint = newPoint + AngleStuff.directionPoint[AngleStuff.RotateDirection(i, 4)];
                                count--;
                            }

                            if (count > 0 && !reusables.toCheckList.ContainsKey(GetOneD(newPoint)))
                            {
                                int id = GetOneD(newPoint);
                                reusables.toCheckList.Add(id, new AStarNode(id, GetOneD(workingPoint), CalcNScore(tileScore * count, workingNode), CalcHScore(newPoint), i, true));
                            }
                        }
                    }
                }
            }
        }
Exemple #3
0
 private bool EndOrDirectionBlockOrStop(Point newPoint, TileLogistic newLogistic, int directionBlock)
 {
     return(newLogistic.IsDirectionBlock(directionBlock) || newPoint == endPoint || newPoint.X == endPoint.X || newPoint.Y == endPoint.Y);
 }