コード例 #1
0
        public static MachineRun RunMachine(MachineRun machine)
        {
            var averageFailureRate        = Setting.GetSetting(machine.SettingsList, Settings.AverageFailureRate);
            var failureRateVariability    = Setting.GetSetting(machine.SettingsList, Settings.FailureRateVariability);
            var averageProductionTime     = Setting.GetSetting(machine.SettingsList, Settings.AverageProductionTime);
            var productionTimeVariability = Setting.GetSetting(machine.SettingsList, Settings.ProductionTimeVariability);
            var machineFailureRate        = Setting.GetSetting(machine.SettingsList, Settings.MachineFailureRate);

            var adjFailureRate = averageFailureRate;

            if (machine.Machine.Broken)
            {
                adjFailureRate = averageFailureRate * 10000;
            }

            //produce widgets
            var baseProduction = ActionCheck.GenerateInt((int)(averageProductionTime * 2), (int)productionTimeVariability);

            var baseFailure = ActionCheck.GenerateFloat(adjFailureRate * 2, failureRateVariability) / 2;

            baseFailure = baseFailure > 1 ? 1 : baseFailure < 0 ? 0 : baseFailure;

            machine.CompletedOutput = (int)Math.Ceiling(baseProduction * (1 - baseFailure));

            machine.FailedOutput = baseProduction - machine.CompletedOutput;

            //check to see if machine broke
            var machineAge = (DateTime.UtcNow - machine.Machine.CreateDate).TotalHours / 100;

            var failureChance1 = ActionCheck.GenerateFloat(machineFailureRate, (float)machineAge);
            var failureChance2 = ActionCheck.GenerateFloat(machineFailureRate, (float)machineAge);
            var failureChance3 = ActionCheck.GenerateFloat(machineFailureRate, (float)machineAge);

            if (!machine.MachineBroken && !ActionCheck.Check(failureChance1) && !ActionCheck.Check(failureChance2) && !ActionCheck.Check(failureChance3))
            {
                machine.MachineBroken = true;
            }

            return(machine);
        }