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); }
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)); } } } } } }
private bool EndOrDirectionBlockOrStop(Point newPoint, TileLogistic newLogistic, int directionBlock) { return(newLogistic.IsDirectionBlock(directionBlock) || newPoint == endPoint || newPoint.X == endPoint.X || newPoint.Y == endPoint.Y); }