Esempio n. 1
0
        public void Step()
        {
            if (VehicleModel.VehicleStatus == VehicleStatus.Repairing)
            {
                if (VehicleModel.RepairTimeLeft > 0)
                {
                    VehicleModel.RepairTimeLeft -= Simulation.dt;
                    return;
                }
                else
                {
                    VehicleModel.VehicleStatus = VehicleStatus.Running;
                }
            }

            if (VehicleModel.DistanceReached + Simulation.dt * VehicleModel.VehicleSubtype.MaxSpeed >= Simulation.RaceDistance)
            {
                // Last step
                VehicleModel.VehicleStatus   = VehicleStatus.Finished;
                VehicleModel.FinishTime      = Simulation.t + (Simulation.RaceDistance - VehicleModel.DistanceReached) / VehicleModel.VehicleSubtype.MaxSpeed;
                VehicleModel.DistanceReached = Simulation.RaceDistance;
            }
            else
            {
                VehicleModel.DistanceReached += Simulation.dt * VehicleModel.VehicleSubtype.MaxSpeed;
                VehicleModel.VehicleStatus    = VehicleStatus.Running;

                double probability;

                lock (lockObject)
                {
                    probability = Simulation.random.NextDouble();
                }

                if (probability < VehicleModel.VehicleSubtype.HeavyMalfunProbab * Simulation.dt)
                {
                    VehicleModel.VehicleStatus = VehicleStatus.Wracked;
                    MalfunctionStatistic       = new MalfunctionStatisticModel
                    {
                        MalfunctionType = MalfunctionType.Heavy,
                        Time            = Simulation.t + Simulation.dt,
                        Vehicle         = VehicleModel
                    };
                }
                else if (probability < (VehicleModel.VehicleSubtype.HeavyMalfunProbab + VehicleModel.VehicleSubtype.LigthMalfunProbab) * Simulation.dt)
                {
                    VehicleModel.VehicleStatus  = VehicleStatus.Repairing;
                    VehicleModel.RepairTimeLeft = VehicleModel.VehicleSubtype.VehicleType.RepairLength;
                    MalfunctionStatistic        = new MalfunctionStatisticModel
                    {
                        MalfunctionType = MalfunctionType.Light,
                        Time            = Simulation.t + Simulation.dt,
                        Vehicle         = VehicleModel
                    };
                }
            }
        }
Esempio n. 2
0
 public void AddMalfunctionStatistic(MalfunctionStatisticModel malfunctionStatistic)
 {
     _dakarDbContext.MalfunctionStatistics.Add(malfunctionStatistic);
 }