public FluidRouteState(IPhysicalBuilding building, double cost, Vector2 position, Searchspace space, Depth depth = Depth.None, BuildingRotation direction = BuildingRotation.North, bool hasJustSurfaced = false, int undergroundLength = 0) { _building = building; _cost = cost; _position = position; _space = space; _depth = depth; _direction = direction; _hasJustSurfaced = hasJustSurfaced; _undergroundLength = undergroundLength; }
public SolidRouteState(IPhysicalBuilding building, double cost, Vector2 position, Searchspace space, RoutingCoordinate.CoordinateType transportState, Depth depth = Depth.None, BuildingRotation direction = BuildingRotation.North, int undergroundLength = 0) { _building = building; _cost = cost; _position = position; _space = space; _depth = depth; _direction = direction; _undergroundLength = undergroundLength; _transportState = transportState; }
public double CostForBuilding(Searchspace state, IPhysicalBuilding building) { if (building == null) { throw new ArgumentNullException("building"); } double cost = building.Size.X * building.Size.Y * LandUseCost; if (building.Position.X <= 0 && building.Rotation != BuildingRotation.West && building.Rotation != BuildingRotation.East) { cost += EdgeUseCost; } if (building.Position.Y <= 0 && building.Rotation != BuildingRotation.North && building.Rotation != BuildingRotation.South) { cost += EdgeUseCost; } if (building.Position.X >= state.Size.X - building.Size.X && building.Rotation != BuildingRotation.East && building.Rotation != BuildingRotation.West) { cost += EdgeUseCost; } if (building.Position.Y >= state.Size.Y - building.Size.Y && building.Rotation != BuildingRotation.South && building.Rotation != BuildingRotation.North) { cost += EdgeUseCost; } var accountable = building as IAccountableBuilding; if (accountable != null) { cost += accountable.CalculateCost(state, this); } if (CostLookup.ContainsKey(building.Building.Name)) { cost += CostLookup[building.Building.Name]; } return(cost); }