示例#1
0
        // TODO improve & remove
        public void Housekeeping(bool mayDelete, bool calculateAutoPedLight)
        {
#if DEBUGHK
            bool debug = GlobalConfig.Instance.Debug.Switches[7] && GlobalConfig.Instance.Debug.NodeId == NodeId;
#endif

            // we intentionally never delete vehicle types (because we may want to retain traffic light states if a segment is upgraded or replaced)

            ICustomSegmentLight mainLight = MainSegmentLight;
            ushort nodeId = NodeId;
            HashSet <ExtVehicleType>           setupLights     = new HashSet <ExtVehicleType>();
            IDictionary <byte, ExtVehicleType> allAllowedTypes = Constants.ManagerFactory.VehicleRestrictionsManager.GetAllowedVehicleTypesAsDict(SegmentId, nodeId, VehicleRestrictionsMode.Restricted);            // TODO improve
            ExtVehicleType allAllowedMask = Constants.ManagerFactory.VehicleRestrictionsManager.GetAllowedVehicleTypes(SegmentId, nodeId, VehicleRestrictionsMode.Restricted);
            SeparateVehicleTypes = ExtVehicleType.None;
#if DEBUGHK
            if (debug)
            {
                Log._Debug($"CustomSegmentLights.Housekeeping({mayDelete}, {calculateAutoPedLight}): housekeeping started @ seg. {SegmentId}, node {nodeId}, allAllowedTypes={allAllowedTypes.DictionaryToString()}, allAllowedMask={allAllowedMask}");
            }
#endif
            //bool addPedestrianLight = false;
            uint    separateLanes = 0;
            int     defaultLanes  = 0;
            NetInfo segmentInfo   = null;
            Constants.ServiceFactory.NetService.ProcessSegment(SegmentId, delegate(ushort segId, ref NetSegment segment) {
                VehicleTypeByLaneIndex = new ExtVehicleType?[segment.Info.m_lanes.Length];
                segmentInfo            = segment.Info;
                return(true);
            });
            HashSet <byte> laneIndicesWithoutSeparateLights = new HashSet <byte>(allAllowedTypes.Keys);           // TODO improve

            // check if separate traffic lights are required
            bool separateLightsRequired = false;
            foreach (KeyValuePair <byte, ExtVehicleType> e in allAllowedTypes)
            {
                if (e.Value != allAllowedMask)
                {
                    separateLightsRequired = true;
                    break;
                }
            }

            // set up vehicle-separated traffic lights
            if (separateLightsRequired)
            {
                foreach (KeyValuePair <byte, ExtVehicleType> e in allAllowedTypes)
                {
                    byte           laneIndex    = e.Key;
                    NetInfo.Lane   laneInfo     = segmentInfo.m_lanes[laneIndex];
                    ExtVehicleType allowedTypes = e.Value;
                    ExtVehicleType defaultMask  = Constants.ManagerFactory.VehicleRestrictionsManager.GetDefaultAllowedVehicleTypes(SegmentId, segmentInfo, laneIndex, laneInfo, VehicleRestrictionsMode.Unrestricted);

#if DEBUGHK
                    if (debug)
                    {
                        Log._Debug($"CustomSegmentLights.Housekeeping({mayDelete}, {calculateAutoPedLight}): housekeeping @ seg. {SegmentId}, node {nodeId}: Processing lane {laneIndex} with allowedTypes={allowedTypes}, defaultMask={defaultMask}");
                    }
#endif

                    if (laneInfo.m_vehicleType == VehicleInfo.VehicleType.Car && allowedTypes == defaultMask)
                    {
#if DEBUGHK
                        if (debug)
                        {
                            Log._Debug($"CustomSegmentLights.Housekeeping({mayDelete}, {calculateAutoPedLight}): housekeeping @ seg. {SegmentId}, node {nodeId}, lane {laneIndex}: Allowed types equal default mask. Ignoring lane.");
                        }
#endif
                        // no vehicle restrictions applied, generic lights are handled further below
                        ++defaultLanes;
                        continue;
                    }

                    ExtVehicleType mask = allowedTypes & ~ExtVehicleType.Emergency;

#if DEBUGHK
                    if (debug)
                    {
                        Log._Debug($"CustomSegmentLights.Housekeeping({mayDelete}, {calculateAutoPedLight}): housekeeping @ seg. {SegmentId}, node {nodeId}, lane {laneIndex}: Trying to add {mask} light");
                    }
#endif

                    ICustomSegmentLight segmentLight;
                    if (!CustomLights.TryGetValue(mask, out segmentLight))
                    {
                        // add a new light
                        segmentLight = new CustomSegmentLight(this, RoadBaseAI.TrafficLightState.Red);
                        if (mainLight != null)
                        {
                            segmentLight.CurrentMode = mainLight.CurrentMode;
                            segmentLight.SetStates(mainLight.LightMain, mainLight.LightLeft, mainLight.LightRight, false);
                        }

#if DEBUGHK
                        if (debug)
                        {
                            Log._Debug($"CustomSegmentLights.Housekeeping({mayDelete}, {calculateAutoPedLight}): housekeeping @ seg. {SegmentId}, node {nodeId}, lane {laneIndex}: Light for mask {mask} does not exist. Created new light: {segmentLight} (mainLight: {mainLight})");
                        }
#endif

                        CustomLights.Add(mask, segmentLight);
                        VehicleTypes.AddFirst(mask);
                    }

                    mainVehicleType = mask;
                    VehicleTypeByLaneIndex[laneIndex] = mask;
                    laneIndicesWithoutSeparateLights.Remove(laneIndex);
                    ++separateLanes;
                    //addPedestrianLight = true;
                    setupLights.Add(mask);
                    SeparateVehicleTypes |= mask;

#if DEBUGHK
                    if (debug)
                    {
                        Log._Debug($"CustomSegmentLights.Housekeeping({mayDelete}, {calculateAutoPedLight}): housekeeping @ seg. {SegmentId}, node {nodeId}: Finished processing lane {laneIndex}: mainVehicleType={mainVehicleType}, VehicleTypeByLaneIndex={VehicleTypeByLaneIndex.ArrayToString()}, laneIndicesWithoutSeparateLights={laneIndicesWithoutSeparateLights.CollectionToString()}, numLights={separateLanes}, SeparateVehicleTypes={SeparateVehicleTypes}");
                    }
#endif
                }
            }

            if (separateLanes == 0 || defaultLanes > 0)
            {
#if DEBUGHK
                if (debug)
                {
                    Log._Debug($"CustomSegmentLights.Housekeeping({mayDelete}, {calculateAutoPedLight}): housekeeping @ seg. {SegmentId}, node {nodeId}: Adding default main vehicle light: {DEFAULT_MAIN_VEHICLETYPE}");
                }
#endif

                // generic traffic lights
                ICustomSegmentLight defaultSegmentLight;
                if (!CustomLights.TryGetValue(DEFAULT_MAIN_VEHICLETYPE, out defaultSegmentLight))
                {
                    defaultSegmentLight = new CustomSegmentLight(this, RoadBaseAI.TrafficLightState.Red);
                    if (mainLight != null)
                    {
                        defaultSegmentLight.CurrentMode = mainLight.CurrentMode;
                        defaultSegmentLight.SetStates(mainLight.LightMain, mainLight.LightLeft, mainLight.LightRight, false);
                    }
                    CustomLights.Add(DEFAULT_MAIN_VEHICLETYPE, defaultSegmentLight);
                    VehicleTypes.AddFirst(DEFAULT_MAIN_VEHICLETYPE);
                }
                mainVehicleType = DEFAULT_MAIN_VEHICLETYPE;
                setupLights.Add(DEFAULT_MAIN_VEHICLETYPE);

                foreach (byte laneIndex in laneIndicesWithoutSeparateLights)
                {
                    VehicleTypeByLaneIndex[laneIndex] = ExtVehicleType.None;
                }

#if DEBUGHK
                if (debug)
                {
                    Log._Debug($"CustomSegmentLights.Housekeeping({mayDelete}, {calculateAutoPedLight}): housekeeping @ seg. {SegmentId}, node {nodeId}: Added default main vehicle light: {defaultSegmentLight}");
                }
#endif
                //addPedestrianLight = true;
            }
            else
            {
                //addPedestrianLight = allAllowedMask == ExtVehicleType.None || (allAllowedMask & ~ExtVehicleType.RailVehicle) != ExtVehicleType.None;
            }

#if DEBUGHK
            if (debug)
            {
                Log._Debug($"CustomSegmentLights.Housekeeping({mayDelete}, {calculateAutoPedLight}): housekeeping @ seg. {SegmentId}, node {nodeId}: Created all necessary lights. VehicleTypeByLaneIndex={VehicleTypeByLaneIndex.ArrayToString()}, CustomLights={CustomLights.DictionaryToString()}");
            }
#endif

            if (mayDelete)
            {
                // delete traffic lights for non-existing vehicle-separated configurations
                HashSet <ExtVehicleType> vehicleTypesToDelete = new HashSet <ExtVehicleType>();
                foreach (KeyValuePair <ExtVehicleType, ICustomSegmentLight> e in CustomLights)
                {
                    /*if (e.Key == DEFAULT_MAIN_VEHICLETYPE) {
                     *      continue;
                     * }*/
                    if (!setupLights.Contains(e.Key))
                    {
                        vehicleTypesToDelete.Add(e.Key);
                    }
                }

#if DEBUGHK
                if (debug)
                {
                    Log._Debug($"CustomSegmentLights.Housekeeping({mayDelete}, {calculateAutoPedLight}): housekeeping @ seg. {SegmentId}, node {nodeId}: Going to delete unnecessary lights now: vehicleTypesToDelete={vehicleTypesToDelete.CollectionToString()}");
                }
#endif

                foreach (ExtVehicleType vehicleType in vehicleTypesToDelete)
                {
                    CustomLights.Remove(vehicleType);
                    VehicleTypes.Remove(vehicleType);
                }
            }

            if (CustomLights.ContainsKey(DEFAULT_MAIN_VEHICLETYPE) && VehicleTypes.First.Value != DEFAULT_MAIN_VEHICLETYPE)
            {
                VehicleTypes.Remove(DEFAULT_MAIN_VEHICLETYPE);
                VehicleTypes.AddFirst(DEFAULT_MAIN_VEHICLETYPE);
            }

            //if (addPedestrianLight) {
#if DEBUGHK
            if (debug)
            {
                Log._Debug($"CustomSegmentLights.Housekeeping({mayDelete}, {calculateAutoPedLight}): housekeeping @ seg. {SegmentId}, node {nodeId}: adding pedestrian light");
            }
#endif
            if (InternalPedestrianLightState == null)
            {
                InternalPedestrianLightState = RoadBaseAI.TrafficLightState.Red;
            }

            /*} else {
             *      InternalPedestrianLightState = null;
             * }*/

            OnChange(calculateAutoPedLight);
#if DEBUGHK
            if (debug)
            {
                Log._Debug($"CustomSegmentLights.Housekeeping({mayDelete}, {calculateAutoPedLight}): housekeeping @ seg. {SegmentId}, node {nodeId}: Housekeeping complete. VehicleTypeByLaneIndex={VehicleTypeByLaneIndex.ArrayToString()} CustomLights={CustomLights.DictionaryToString()}");
            }
#endif
        }
 public VehicleType GetVehicleType(int id)
 {
     return(VehicleTypes.SingleOrDefault(q => q.Id == id));
 }
示例#3
0
 /// <summary>
 /// Default Constructor
 /// </summary>
 public BigTruck()
 {
     // http://wiki.openstreetmap.org/wiki/Key:hgv#Land-based_transportation
     VehicleTypes.Add("hgv");
 }
示例#4
0
        internal void housekeeping(bool mayDelete, RoadBaseAI.TrafficLightState mainState = RoadBaseAI.TrafficLightState.Red, RoadBaseAI.TrafficLightState leftState = RoadBaseAI.TrafficLightState.Red, RoadBaseAI.TrafficLightState rightState = RoadBaseAI.TrafficLightState.Red, RoadBaseAI.TrafficLightState pedState = RoadBaseAI.TrafficLightState.Red)
        {
            // we intentionally never delete vehicle types (because we may want to retain traffic light states if a segment is upgraded or replaced)

            HashSet <ExtVehicleType> setupLights     = new HashSet <ExtVehicleType>();
            HashSet <ExtVehicleType> allAllowedTypes = VehicleRestrictionsManager.GetAllowedVehicleTypesAsSet(segmentId, nodeId);
            ExtVehicleType           allAllowedMask  = VehicleRestrictionsManager.GetAllowedVehicleTypes(segmentId, nodeId);

            SeparateVehicleTypes = ExtVehicleType.None;
#if DEBUGHK
            Log._Debug($"CustomSegmentLights: housekeeping @ seg. {segmentId}, node {nodeId}, allAllowedTypes={string.Join(", ", allAllowedTypes.Select(x => x.ToString()).ToArray())}");
#endif
            bool addPedestrianLight = false;
            uint numLights          = 0;
            foreach (ExtVehicleType allowedTypes in allAllowedTypes)
            {
                foreach (ExtVehicleType mask in singleLaneVehicleTypes)
                {
                    if (setupLights.Contains(mask))
                    {
                        continue;
                    }

                    if ((allowedTypes & mask) != ExtVehicleType.None && (allowedTypes & ~(mask | ExtVehicleType.Emergency)) == ExtVehicleType.None)
                    {
#if DEBUGHK
                        Log._Debug($"CustomSegmentLights: housekeeping @ seg. {segmentId}, node {nodeId}: adding {mask} light");
#endif

                        if (!CustomLights.ContainsKey(mask))
                        {
                            CustomLights.Add(mask, new TrafficLight.CustomSegmentLight(this, nodeId, segmentId, mainState, leftState, rightState));
                            VehicleTypes.AddFirst(mask);
                        }
                        ++numLights;
                        addPedestrianLight        = true;
                        autoPedestrianVehicleType = mask;
                        mainSegmentLight          = CustomLights[mask];
                        setupLights.Add(mask);
                        SeparateVehicleTypes |= mask;
                        break;
                    }
                }
            }

            if (allAllowedTypes.Count > numLights)
            {
#if DEBUGHK
                Log._Debug($"CustomSegmentLights: housekeeping @ seg. {segmentId}, node {nodeId}: adding main vehicle light: {mainVehicleType}");
#endif

                // traffic lights for cars
                if (!CustomLights.ContainsKey(mainVehicleType))
                {
                    CustomLights.Add(mainVehicleType, new TrafficLight.CustomSegmentLight(this, nodeId, segmentId, mainState, leftState, rightState));
                    VehicleTypes.AddFirst(mainVehicleType);
                }
                autoPedestrianVehicleType = mainVehicleType;
                mainSegmentLight          = CustomLights[mainVehicleType];
                addPedestrianLight        = allAllowedMask == ExtVehicleType.None || (allAllowedMask & ~ExtVehicleType.RailVehicle) != ExtVehicleType.None;
            }
            else
            {
                addPedestrianLight = true;
            }

#if DEBUGHK
            if (addPedestrianLight)
            {
                Log._Debug($"CustomSegmentLights: housekeeping @ seg. {segmentId}, node {nodeId}: adding ped. light");
            }
#endif

            if (mayDelete)
            {
                // delete traffic lights for non-existing configurations
                HashSet <ExtVehicleType> vehicleTypesToDelete = new HashSet <ExtVehicleType>();
                foreach (KeyValuePair <ExtVehicleType, CustomSegmentLight> e in CustomLights)
                {
                    if (e.Key == mainVehicleType)
                    {
                        continue;
                    }
                    if (!setupLights.Contains(e.Key))
                    {
                        vehicleTypesToDelete.Add(e.Key);
                    }
                }

                foreach (ExtVehicleType vehicleType in vehicleTypesToDelete)
                {
#if DEBUGHK
                    Log._Debug($"Deleting traffic light for {vehicleType} at segment {segmentId}, node {nodeId}");
#endif
                    CustomLights.Remove(vehicleType);
                    VehicleTypes.Remove(vehicleType);
                }
            }

            if (CustomLights.ContainsKey(mainVehicleType) && VehicleTypes.First.Value != mainVehicleType)
            {
                VehicleTypes.Remove(mainVehicleType);
                VehicleTypes.AddFirst(mainVehicleType);
            }

            if (addPedestrianLight)
            {
#if DEBUGHK
                Log._Debug($"CustomSegmentLights: housekeeping @ seg. {segmentId}, node {nodeId}: adding pedestrian light");
#endif
                if (pedestrianLightState == null)
                {
                    pedestrianLightState = pedState;
                }
            }
            else
            {
                pedestrianLightState = null;
            }
        }
        // TODO improve & remove
        public void Housekeeping(bool mayDelete, bool calculateAutoPedLight)
        {
            // we intentionally never delete vehicle types (because we may want to retain traffic light states if a segment is upgraded or replaced)

            ICustomSegmentLight mainLight = MainSegmentLight;
            ushort nodeId = NodeId;
            HashSet <ExtVehicleType>           setupLights     = new HashSet <ExtVehicleType>();                                                                                                          // TODO improve
            IDictionary <byte, ExtVehicleType> allAllowedTypes = Constants.ManagerFactory.VehicleRestrictionsManager.GetAllowedVehicleTypesAsDict(SegmentId, nodeId, VehicleRestrictionsMode.Restricted); // TODO improve
            ExtVehicleType allAllowedMask = Constants.ManagerFactory.VehicleRestrictionsManager.GetAllowedVehicleTypes(SegmentId, nodeId, VehicleRestrictionsMode.Restricted);

            SeparateVehicleTypes = ExtVehicleType.None;
#if DEBUGHK
            Log._Debug($"CustomSegmentLights: housekeeping @ seg. {SegmentId}, node {nodeId}, allAllowedTypes={string.Join(", ", allAllowedTypes.Select(x => x.ToString()).ToArray())}, allAllowedMask={allAllowedMask}");
#endif
            bool addPedestrianLight = false;
            uint numLights          = 0;
            Constants.ServiceFactory.NetService.ProcessSegment(SegmentId, delegate(ushort segId, ref NetSegment segment) {
                VehicleTypeByLaneIndex = new ExtVehicleType?[segment.Info.m_lanes.Length];
                return(true);
            });
            HashSet <byte> laneIndicesWithoutSeparateLights = new HashSet <byte>(allAllowedTypes.Keys);           // TODO improve
            foreach (KeyValuePair <byte, ExtVehicleType> e in allAllowedTypes)
            {
                byte           laneIndex    = e.Key;
                ExtVehicleType allowedTypes = e.Value;

                foreach (ExtVehicleType mask in SINGLE_LANE_VEHICLETYPES)
                {
                    if (setupLights.Contains(mask))
                    {
                        ++numLights;
                        break;
                    }

                    if ((allowedTypes & mask) != ExtVehicleType.None && (allowedTypes & ~(mask | ExtVehicleType.Emergency)) == ExtVehicleType.None)
                    {
#if DEBUGHK
                        Log._Debug($"CustomSegmentLights: housekeeping @ seg. {SegmentId}, node {nodeId}: adding {mask} light");
#endif

                        ICustomSegmentLight segmentLight;
                        if (!CustomLights.TryGetValue(mask, out segmentLight))
                        {
                            segmentLight = new CustomSegmentLight(this, RoadBaseAI.TrafficLightState.Red);
                            if (mainLight != null)
                            {
                                segmentLight.CurrentMode = mainLight.CurrentMode;
                                segmentLight.SetStates(mainLight.LightMain, mainLight.LightLeft, mainLight.LightRight, false);
                            }
                            CustomLights.Add(mask, segmentLight);
                            VehicleTypes.AddFirst(mask);
                        }
                        mainVehicleType = mask;
                        VehicleTypeByLaneIndex[laneIndex] = mask;
                        laneIndicesWithoutSeparateLights.Remove(laneIndex);
                        ++numLights;
                        addPedestrianLight = true;
                        setupLights.Add(mask);
                        SeparateVehicleTypes |= mask;
                        break;
                    }
                }
            }

            if (allAllowedTypes.Count > numLights)
            {
#if DEBUGHK
                Log._Debug($"CustomSegmentLights: housekeeping @ seg. {SegmentId}, node {nodeId}: adding default main vehicle light: {DEFAULT_MAIN_VEHICLETYPE}");
#endif

                // traffic lights for cars
                ICustomSegmentLight defaultSegmentLight;
                if (!CustomLights.TryGetValue(DEFAULT_MAIN_VEHICLETYPE, out defaultSegmentLight))
                {
                    defaultSegmentLight = new CustomSegmentLight(this, RoadBaseAI.TrafficLightState.Red);
                    if (mainLight != null)
                    {
                        defaultSegmentLight.CurrentMode = mainLight.CurrentMode;
                        defaultSegmentLight.SetStates(mainLight.LightMain, mainLight.LightLeft, mainLight.LightRight, false);
                    }
                    CustomLights.Add(DEFAULT_MAIN_VEHICLETYPE, defaultSegmentLight);
                    VehicleTypes.AddFirst(DEFAULT_MAIN_VEHICLETYPE);
                }
                mainVehicleType = DEFAULT_MAIN_VEHICLETYPE;

                foreach (byte laneIndex in laneIndicesWithoutSeparateLights)
                {
                    VehicleTypeByLaneIndex[laneIndex] = ExtVehicleType.None;
                }
                addPedestrianLight = true;
            }
            else
            {
                addPedestrianLight = allAllowedMask == ExtVehicleType.None || (allAllowedMask & ~ExtVehicleType.RailVehicle) != ExtVehicleType.None;
            }

            if (mayDelete)
            {
                // delete traffic lights for non-existing configurations
                HashSet <ExtVehicleType> vehicleTypesToDelete = new HashSet <ExtVehicleType>();
                foreach (KeyValuePair <ExtVehicleType, ICustomSegmentLight> e in CustomLights)
                {
                    if (e.Key == DEFAULT_MAIN_VEHICLETYPE)
                    {
                        continue;
                    }
                    if (!setupLights.Contains(e.Key))
                    {
                        vehicleTypesToDelete.Add(e.Key);
                    }
                }

                foreach (ExtVehicleType vehicleType in vehicleTypesToDelete)
                {
#if DEBUGHK
                    Log._Debug($"Deleting traffic light for {vehicleType} at segment {SegmentId}, node {nodeId}");
#endif
                    CustomLights.Remove(vehicleType);
                    VehicleTypes.Remove(vehicleType);
                }
            }

            if (CustomLights.ContainsKey(DEFAULT_MAIN_VEHICLETYPE) && VehicleTypes.First.Value != DEFAULT_MAIN_VEHICLETYPE)
            {
                VehicleTypes.Remove(DEFAULT_MAIN_VEHICLETYPE);
                VehicleTypes.AddFirst(DEFAULT_MAIN_VEHICLETYPE);
            }

            if (addPedestrianLight)
            {
#if DEBUGHK
                Log._Debug($"CustomSegmentLights: housekeeping @ seg. {SegmentId}, node {nodeId}: adding pedestrian light");
#endif
                if (InternalPedestrianLightState == null)
                {
                    InternalPedestrianLightState = RoadBaseAI.TrafficLightState.Red;
                }
            }
            else
            {
                InternalPedestrianLightState = null;
            }

            OnChange(calculateAutoPedLight);
#if DEBUGHK
            Log._Debug($"CustomSegmentLights: housekeeping @ seg. {SegmentId}, node {nodeId}: Housekeeping complete. VehicleTypeByLaneIndex={string.Join("; ", VehicleTypeByLaneIndex.Select(x => x == null ? "null" : x.ToString()).ToArray())} CustomLights={string.Join("; ", CustomLights.Select(x => x.Key.ToString()).ToArray())}");
#endif
        }
示例#6
0
 /// <summary>
 /// Default Constructor
 /// </summary>
 public MotorCycle()
 {
     VehicleTypes.Add("motorcycle");
 }
        public void AddVehicle(string make, string registrationNumber, double odometer, double costkm, VehicleStatuses status, VehicleTypes type)
        {
            IVehicle vehicle = new Car(_db.NextVehicleId, make, registrationNumber, odometer, costkm, status, type);

            _db.AddVehicle(vehicle);

            try
            {
                if (registrationNumber.Equals(string.Empty) || make == default)
                {
                    throw new ArgumentException("The Registration Number cannot be empty.");
                }
                else if (make.Equals(string.Empty) || make == default)
                {
                    throw new ArgumentException("The make name cannot be empty.");
                }
                else if (odometer < 1)
                {
                    throw new ArgumentException("The odometer must be greater than 0.");
                }
                else if (costkm < 0)
                {
                    throw new ArgumentException("he costKm must be greater than 0.");
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
示例#8
0
        private async void AddNewVehicle()
        {
            if (BaseView != null && BaseView.CheckInternetConnection())
            {
                var isChecked = VehicleTypes.FirstOrDefault(x => x.IsChecked == true);
                if (isChecked != null && !string.IsNullOrEmpty(PlateNumber))
                {
                    Mvx.Resolve <IMvxMessenger>().Publish(new ProgressMessage(this, true));

                    if (IsEditMode)
                    {
                        var result = await mApiService.PutVehicle(mCacheService.CurrentUser.UserId, VehicleId, isChecked.Type, PlateNumber);

                        if (result != null)
                        {
                            //Mvx.Resolve<IMvxMessenger>().Publish(new ToastMessage(this, result.Result));
                            //Mvx.Resolve<IMvxMessenger>().Publish(new ToastMessage(this, result.Response.Result.Equals("success") ? result.Response.Result : string.Format("{0}: {1}", result.Response.Result, result.Response.ErrorCode)));
                            if (result.Response.Status.Equals("success"))
                            {
                                Mvx.Resolve <IMvxMessenger>().Publish(new ToastMessage(this, result.Response.Status));
                            }
                            else
                            {
                                Mvx.Resolve <IMvxMessenger>().Publish(new AlertMessage(this, string.Empty, string.Format("{0}: {1}", result.Response.Status, result.Response.ErrorCode), "Ok", null));
                            }

                            //update user vehicles that has been cached
                            if (result.Response.Status.Equals("success"))
                            {
                                var vehicle = mCacheService.UserVehicles.FirstOrDefault(x => x.VehicleId.Equals(VehicleId));
                                if (vehicle != null)
                                {
                                    vehicle.Type        = isChecked.Type;
                                    vehicle.PlateNumber = PlateNumber;
                                }
                                Mvx.Resolve <IMvxMessenger>().Publish(new UpdateSuccessMessage(this));
                                //save to local database
                                BlobCache.UserAccount.InsertObject <List <Vehicle> >(mCacheService.CurrentUser.UserId, mCacheService.UserVehicles);
                            }

                            Close(this);
                        }
                    }
                    else
                    {
                        var result = await mApiService.CreateVehicle(mCacheService.CurrentUser.UserId, isChecked.Type, PlateNumber);

                        if (result != null)
                        {
                            //Mvx.Resolve<IMvxMessenger>().Publish(new ToastMessage(this, result.Result + "\n" + result.VehicleId));
                            //Mvx.Resolve<IMvxMessenger>().Publish(new ToastMessage(this, result.Response.Result.Equals("success") ? result.Response.Result : string.Format("{0}: {1}", result.Response.Result, result.Response.ErrorCode)));
                            if (result.Response.Status.Equals("success"))
                            {
                                Mvx.Resolve <IMvxMessenger>().Publish(new ToastMessage(this, result.Response.Status));
                            }
                            else
                            {
                                Mvx.Resolve <IMvxMessenger>().Publish(new AlertMessage(this, string.Empty, string.Format("{0}: {1}", result.Response.Status, result.Response.ErrorCode), "Ok", null));
                            }
                            if (result.Response.Status.Equals("success"))
                            {
                                var vehicle = new Vehicle()
                                {
                                    VehicleId   = result.Response.VehicleId,
                                    Type        = isChecked.Type,
                                    PlateNumber = PlateNumber
                                };
                                if (!mCacheService.UserVehicles.Contains(vehicle))
                                {
                                    mCacheService.UserVehicles.Add(vehicle);
                                }
                                Mvx.Resolve <IMvxMessenger>().Publish(new UpdateSuccessMessage(this));
                                //save to local database
                                BlobCache.UserAccount.InsertObject <List <Vehicle> >(mCacheService.CurrentUser.UserId, mCacheService.UserVehicles);
                            }

                            Close(this);
                        }
                    }


                    Mvx.Resolve <IMvxMessenger>().Publish(new ProgressMessage(this, false));
                }
                else
                {
                    Mvx.Resolve <IMvxMessenger>().Publish(new ToastMessage(this, isChecked != null ? mCacheService.TextSource.GetText("PleaseEnterPlateNumberText") : mCacheService.TextSource.GetText("PleaseChooseVehicleTypeText")));
                }
            }
            else
            {
                Mvx.Resolve <IMvxMessenger>().Publish(new ToastMessage(this, SharedTextSource.GetText("TurnOnInternetText")));
            }
        }
示例#9
0
 public AddRecordResponse AddVehicleTypes([FromBody] VehicleTypes vehicleTypes)
 {
     return(repo.AddVehicleType(vehicleTypes.VehicleType));
 }
示例#10
0
 public Response UpdateVehicleTypes([FromBody] VehicleTypes vehicleTypes)
 {
     return(repo.UpdateVehicleType(vehicleTypes));
 }
    private void ActivateVehicle(Transform vehicle, Transform marker, Transform mouse, VehicleTypes type)
    {
        DeActivateAllVehicles();

        //Move to the start pos
        vehicle.position = startPos;
        vehicle.rotation = startRot;

        //Make the models visible
        vehicle.gameObject.SetActive(true);
        mouse.gameObject.SetActive(true);
        //But hide the marker where we want to go
        marker.gameObject.SetActive(false);

        DisplayController.current.ResetGUI();

        StopCar();

        //Stop the car because we move it from the current position so it may still move
        Rigidbody rb = vehicle.GetComponent <Rigidbody>();

        rb.angularVelocity = Vector3.zero;
        rb.velocity        = Vector3.zero;

        activeVehicle = type;
    }
示例#12
0
 public abstract object GetVehicleTitleMarker(VehicleTypes type, string title);
示例#13
0
        public void SeedTestData()
        {
            if (VehicleTypes.Count() == 0)
            {
                VehicleTypes.AddOrUpdate(t => t.Id,
                                         new[] {
                    new VehicleType {
                        Id = 1, Name = "Car"
                    },
                    new VehicleType {
                        Id = 2, Name = "Motorcycle"
                    },
                    new VehicleType {
                        Id = 3, Name = "Truck"
                    },
                    new VehicleType {
                        Id = 4, Name = "Bus"
                    }
                });
            }

            if (ParkingSlots.Count() == 0)
            {
                for (int i = 0; i < 100; ++i)
                {
                    ParkingSlots.AddOrUpdate(new ParkingSlot {
                        ParkingId = null
                    });
                }
            }

            Owners.AddOrUpdate(o => o.Id,
                               new[] {
                new Owner {
                    Id = 1, Name = "Bob"
                },
                new Owner {
                    Id = 2, Name = "John"
                },
                new Owner {
                    Id = 3, Name = "Eve"
                }
            });

            SaveChanges();

            Vehicles.AddOrUpdate(v => v.Id,
                                 new[] {
                new Vehicle {
                    Id = 1, OwnerId = 1, RegNr = "AAA111", VehicleTypeId = 1
                },
                new Vehicle {
                    Id = 2, OwnerId = 1, RegNr = "AAA222", VehicleTypeId = 1
                },
                new Vehicle {
                    Id = 3, OwnerId = 1, RegNr = "AAA333", VehicleTypeId = 1
                },
                new Vehicle {
                    Id = 4, OwnerId = 1, RegNr = "BBB222", VehicleTypeId = 2
                },
                new Vehicle {
                    Id = 5, OwnerId = 2, RegNr = "BBB333", VehicleTypeId = 2
                },
                new Vehicle {
                    Id = 6, OwnerId = 2, RegNr = "CCC333", VehicleTypeId = 3
                },
                new Vehicle {
                    Id = 7, OwnerId = 2, RegNr = "CCC444", VehicleTypeId = 3
                },
                new Vehicle {
                    Id = 8, OwnerId = 3, RegNr = "DDD444", VehicleTypeId = 4
                },
                new Vehicle {
                    Id = 9, OwnerId = 3, RegNr = "DDD555", VehicleTypeId = 4
                }
            });

            SaveChanges();

            if (Parkings.Count() == 0)
            {
                Parkings.AddOrUpdate(p => p.Id,
                                     new[] {
                    new Parking {
                        Id = 1, ParkingSlotId = 1, VehicleId = 1, DateIn = DateTime.Now, DateOut = null
                    },
                    new Parking {
                        Id = 2, ParkingSlotId = 2, VehicleId = 2, DateIn = DateTime.Now.AddDays(-1), DateOut = null
                    },
                    new Parking {
                        Id = 3, ParkingSlotId = 3, VehicleId = 3, DateIn = DateTime.Now.AddDays(-2), DateOut = DateTime.Now
                    },
                    new Parking {
                        Id = 4, ParkingSlotId = 4, VehicleId = 4, DateIn = DateTime.Now.AddDays(-4), DateOut = DateTime.Now.AddDays(-2)
                    },
                    new Parking {
                        Id = 5, ParkingSlotId = 4, VehicleId = 5, DateIn = DateTime.Now, DateOut = null
                    },
                });
                ParkingSlots.Find(1).ParkingId = 1;
                ParkingSlots.Find(2).ParkingId = 2;
                ParkingSlots.Find(4).ParkingId = 5;
                SaveChanges();
            }
        }
 public void PUT(VehicleTypes VehicleTypes)
 {
     _vehicleTypeService.Update(VehicleTypes);
 }
示例#15
0
 public void Add(VehicleTypes vehicle)
 {
     _vehicleTypes.Add(vehicle);
 }
 public async Task <IEnumerable <VehicleTypes> > GetVehicleTypes()
 {
     return(VehicleTypes.List());
 }
示例#17
0
 public void Delete(VehicleTypes vehicle)
 {
     _vehicleTypes.Delete(vehicle);
 }
示例#18
0
        public void Start()
        {
            // setup the status to be initializing
            _Status          = null;
            _Progress        = () => 0f;
            CurrentIteration = 0;
            if (!VehicleTypes.Contains(AutoType))
            {
                VehicleTypes.Add(AutoType);
            }
            ZoneSystem.LoadData();
            if (PreRun != null)
            {
                foreach (var module in PreRun)
                {
                    module.Start();
                }
            }
            IterationPercentage = 1f / TotalIterations;
            if (PostScheduler != null)
            {
                foreach (var module in PostScheduler)
                {
                    module.Load(TotalIterations);
                }
            }
            if (PostHousehold != null)
            {
                foreach (var module in PostHousehold)
                {
                    module.Load(TotalIterations);
                }
            }

            if (OverrideModeParameters)
            {
                InitializeParameters();
            }
            LoadNetworkData(0);
            if (Scheduler != null)
            {
                Scheduler.LoadOneTimeLocalData();
            }

            if (ModeChoice != null)
            {
                ModeChoice.LoadOneTimeLocalData();
            }

            for (int i = 0; i < TotalIterations; i++)
            {
                if (!_ExitRequested)
                {
                    CurrentHousehold             = 0;
                    CurrentIteration             = i;
                    CompletedIterationPercentage = i * IterationPercentage;
                    if (LoadAllHouseholds)
                    {
                        if (!SkipLoadingHouseholds)
                        {
                            HouseholdLoader.LoadData();
                        }
                    }
                    RunIteration(i);
                }
            }
            if (PostRun != null)
            {
                foreach (var module in PostRun)
                {
                    module.Start();
                }
            }
            ZoneSystem.UnloadData();
        }
示例#19
0
 public void Update(VehicleTypes vehicle)
 {
     _vehicleTypes.Update(vehicle);
 }
示例#20
0
 //constructor
 public Car(int ID, string make, string registrationNum, double odometer, double costkm, VehicleStatuses status, VehicleTypes type)
     : base(ID, make, registrationNum, odometer, costkm, status, type)
 {
 }
 public void AddVehicle(string make, string registationNumber, double odometer, double costKm, VehicleStatuses status, VehicleTypes type)
 {
     _db.AddVehicle(new Car(_db.NextVehicle, registationNumber, make, odometer, costKm, type, status));
 }
示例#22
0
 /// <summary>
 /// Default Constructor
 /// </summary>
 public SmallTruck()
 {
     // http://wiki.openstreetmap.org/wiki/Key:goods
     VehicleTypes.Add("goods");
 }
示例#23
0
        private VehicleForecastItem ParseVehicleForecast(Bus13VehicleForecastItem item, VehicleTypes vehicleType)
        {
            var routeStop = this.ParseRouteStop(item.StId, item.StName, item.StDescr, vehicleType, GeoPoint.Empty);

            return(new VehicleForecastItem(routeStop, item.Arrt));
        }
示例#24
0
 /// <summary>
 /// Default constructor.
 /// </summary>
 public Bus()
 {
     // http://wiki.openstreetmap.org/wiki/Key:tourist_bus
     VehicleTypes.Add("tourist_bus");
 }
示例#25
0
        /// <summary>
        /// Constructor.
        /// </summary>
        /// <param name="go"></param>
        public AIVehicle(GameObject go, ObjectSyncComponent osc)
        {
            gameObject       = go;
            syncComponent    = osc;
            parentGameObject = go.transform.parent.gameObject;

            // Set vehicle type, used to apply vehicle-specific event hooks.
            string goName = gameObject.transform.parent.gameObject.name;

            if (goName == "AMIS2" || goName == "KYLAJANI")
            {
                type = VehicleTypes.Amis;
            }
            else if (goName == "BUS")
            {
                type = VehicleTypes.Bus;
            }
            else if (goName == "FITTAN" &&
                     parentGameObject.transform.FindChild("Navigation") != null)
            {
                type = VehicleTypes.Fitan;
            }
            else if (parentGameObject.transform.FindChild("NavigationCW") != null ||
                     parentGameObject.transform.FindChild("NavigationCCW") != null)
            {
                type = VehicleTypes.TrafficDirectional;
            }
            else
            {
                type = VehicleTypes.Traffic;
            }

            rigidbody = parentGameObject.GetComponent <Rigidbody>();

            dynamics = parentGameObject.GetComponent <CarDynamics>();

            throttleFsm = Utils.GetPlaymakerScriptByName(parentGameObject, "Throttle");

            if (type == VehicleTypes.TrafficDirectional)
            {
                if (parentGameObject.transform.FindChild("NavigationCW") != null)
                {
                    navigationFsm = Utils.GetPlaymakerScriptByName(
                        parentGameObject.transform.FindChild("NavigationCW").gameObject,
                        "Navigation");
                    isClockwise = 1;
                }
                else
                {
                    navigationFsm = Utils.GetPlaymakerScriptByName(
                        parentGameObject.transform.FindChild("NavigationCCW").gameObject,
                        "Navigation");
                    isClockwise = 0;
                }
                directionFsm = Utils.GetPlaymakerScriptByName(parentGameObject, "Direction");
            }
            else
            {
                navigationFsm = Utils.GetPlaymakerScriptByName(
                    parentGameObject.transform.FindChild("Navigation").gameObject,
                    "Navigation");
            }

            EventHooks();
        }
示例#26
0
 public void UpdateVehicle(VehicleTypes vht)
 {
     throw new NotImplementedException();
 }
        //constructor
        public Vehicle(int ID, string make, string registrationNum, double odometer, double costkm, VehicleStatuses status, VehicleTypes type)

        {
            Id   = ID;
            Make = make;
            RegistrationNumber = registrationNum;
            Odometer           = odometer;
            CostKm             = costkm;
            Status             = status;
            Type = type;
        }
示例#28
0
 /// <summary>
 /// Default Constructor
 /// </summary>
 public Car()
 {
     VehicleTypes.Add("motorcar");
 }
示例#29
0
        public Vehicle AddVehicleMenu(VehicleTypes vehicleType)
        {
            string regNr = "";

            while (regNr == "")
            {
                Console.Write("Ange Registreringsnummer: ");
                regNr = Console.ReadLine();
            }

            Console.Write("Ange Färg: ");
            string color = Console.ReadLine();

            int weight = 0;

            Console.Write("Ange vikt: ");
            int.TryParse(Console.ReadLine(), out weight);

            switch (vehicleType)
            {
            case VehicleTypes.Car:
                Console.WriteLine("Ange bilmärke: ");
                string carBrand = Console.ReadLine();
                Car    car      = new Car(regNr, color, weight, carBrand);
                return(car);

            case VehicleTypes.AirPlane:
                Console.Write("Ange antal hjul: ");
                int wheel = 0;
                int.TryParse(Console.ReadLine(), out wheel);
                Console.Write("Ange max antal passagerare: ");
                int numberOfSeats = 0;
                int.TryParse(Console.ReadLine(), out numberOfSeats);
                Airplane airplane = new Airplane(regNr, color, wheel, weight, numberOfSeats);
                return(airplane);

            case VehicleTypes.Bus:
                Console.Write("Ange antal hjul: ");
                wheel = 0;
                int.TryParse(Console.ReadLine(), out wheel);
                Console.Write("Ange bussens längd i meter: ");
                int length = 0;
                int.TryParse(Console.ReadLine(), out length);
                Bus bus = new Bus(regNr, color, wheel, weight, length);
                return(bus);

            case VehicleTypes.Motorcycle:
                Console.Write("Ange antal hjul: ");
                wheel = 0;
                int.TryParse(Console.ReadLine(), out wheel);
                Console.Write("Ange max hastigheten på motorcykeln: ");
                int MaxSpeed = 0;
                int.TryParse(Console.ReadLine(), out MaxSpeed);
                Motorcycle motorcycle = new Motorcycle(regNr, color, wheel, weight, MaxSpeed);
                return(motorcycle);

            case VehicleTypes.Boat:
                Console.Write("Ange båtens bränsletyp: ");
                string fuelType = Console.ReadLine();
                Boat   boat     = new Boat(regNr, color, weight, fuelType);
                return(boat);
            }
            return(null);
        }
        public static ObservableCollection <ParkingSpots> FilterList(this ObservableCollection <ParkingSpots> list, VehicleTypes selectedVehicle)
        {
            var filtered = list.Where(x => x.ParkCapacity >= selectedVehicle.ParkSize);

            return(new ObservableCollection <ParkingSpots>(filtered));
        }
 public RentalService(VehicleTypes.Contract.IFactory vehicleTypesFactory, IRentalsRepository rentalsRepository)
 {
     _vehicleTypesFactory = vehicleTypesFactory;
     _rentalsRepository = rentalsRepository;
 }