Exemplo n.º 1
0
 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;
 }
Exemplo n.º 2
0
 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;
 }
Exemplo n.º 3
0
        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);
        }