/// <summary> /// Initializes a new instance. /// </summary> public VehicleSet(Vehicle[] vehicles) { Vehicles = vehicles; _orderedVehicles = new Vehicle[Vehicles.Length]; foreach (var vehicle in Vehicles) { Bind(nameof(vehicle.IsTunnelClosed), nameof(ForwardIsTunnelClosed)); } LeftOHV.AddEffects <Vehicle.DriveLeftEffect>(vehicles.Where(vehicle => vehicle.Kind == VehicleKind.OverheightVehicle)); LeftHV.AddEffects <Vehicle.DriveLeftEffect>(vehicles.Where(vehicle => vehicle.Kind == VehicleKind.HighVehicle)); SlowTraffic.AddEffects <Vehicle.SlowTrafficEffect>(vehicles); if (PreventOverlappingWithStateConstraint) { for (var i = 0; i < Vehicles.Length; ++i) { for (var j = i + 1; j < Vehicles.Length; ++j) { AddSensorConstraint(Vehicles[i], Vehicles[j], Model.PreControlPosition); AddSensorConstraint(Vehicles[i], Vehicles[j], Model.MainControlPosition); AddSensorConstraint(Vehicles[i], Vehicles[j], Model.EndControlPosition); } } } }
/// <summary> /// Initializes a new instance. /// </summary> private Model(Vehicle[] vehicles = null) { vehicles = vehicles ?? new[] { new Vehicle { Kind = VehicleKind.OverheightVehicle }, new Vehicle { Kind = VehicleKind.OverheightVehicle }, new Vehicle { Kind = VehicleKind.HighVehicle } }; LeftOHV.AddEffects <Vehicle.DriveLeftEffect>(vehicles.Where(vehicle => vehicle.Kind == VehicleKind.OverheightVehicle)); LeftHV.AddEffects <Vehicle.DriveLeftEffect>(vehicles.Where(vehicle => vehicle.Kind == VehicleKind.HighVehicle)); SlowTraffic.AddEffects <Vehicle.SlowTrafficEffect>(vehicles); VehicleCollection = new VehicleCollection(vehicles); }