예제 #1
0
        public void Finally_unit_result_E_executes_on_failure_returns_K()
        {
            UnitResult <E> result = UnitResult.Failure(E.Value);
            K output = result.Finally(Func_Unit_Result_E);

            AssertCalled(result, output);
        }
예제 #2
0
        public static void Prefix(UnitResult ___UnitData)
        {
            try
            {
                mechEjections    = 0;
                vehicleEjections = 0;
                // get the total and decrement it globally
                var MechsEjected = ___UnitData.pilot.StatCollection.GetStatistic("MechsEjected");
                if (MechsEjected != null)
                {
                    mechEjections = MechsEjected.Value <int>();
                    LogDebug($"{___UnitData.pilot.Callsign} MechsEjected {mechEjections}");
                }

                var VehiclesEjected = ___UnitData.pilot.StatCollection.GetStatistic("VehiclesEjected");
                if (VehiclesEjected != null)
                {
                    vehicleEjections = VehiclesEjected.Value <int>();
                    LogDebug($"{___UnitData.pilot.Callsign} vehicleEjections {vehicleEjections}");
                }
            }
            catch (Exception ex)
            {
                LogDebug(ex);
            }
        }
예제 #3
0
        public UnitResult <CoffeeMachineEntity> Execute(int coffeeGrams, int waterMl)
        {
            if (coffeeMachine.IsClean)
            {
                coffeeMachine.SetCoffee(coffeeGrams);
                coffeeMachine.GetWater(waterMl);
            }

            bool ranSuccessfully = false;

            if (coffeeMachine.IsReadyForEspresso())
            {
                ICoffeeMachineService coffeeMachineService = new CoffeeMachineService();    //external service
                ranSuccessfully = coffeeMachineService.SetCoffee(coffeeMachine.CoffeeQty);
                ranSuccessfully = ranSuccessfully && coffeeMachineService.GetWater(coffeeMachine.WaterQty);
                ranSuccessfully = ranSuccessfully && coffeeMachineService.Run();
            }

            UnitResult <CoffeeMachineEntity> operationResult = new UnitResult <CoffeeMachineEntity>
            {
                IsSuccessful = ranSuccessfully,
                Value        = coffeeMachine
            };

            return(operationResult);
        }
예제 #4
0
        public void Finally_unit_result_E_executes_on_success_returns_K()
        {
            UnitResult <E> result = UnitResult.Success <E>();
            K output = result.Finally(Func_Unit_Result_E);

            AssertCalled(result, output);
        }
예제 #5
0
        public async Task Finally_LeftAsync_unit_result_E_executes_on_success_returns_K()
        {
            UnitResult <E> result = UnitResult.Success <E>();
            K output = await result.AsTask().Finally(Func_Unit_Result_E);

            AssertCalled(result, output);
        }
예제 #6
0
        public async Task Finally_LeftAsync_unit_result_E_executes_on_failure_returns_K()
        {
            UnitResult <E> result = UnitResult.Failure(E.Value);
            K output = await result.AsTask().Finally(Func_Unit_Result_E);

            AssertCalled(result, output);
        }
예제 #7
0
        UnitResult Undo()
        {
            if (globallyRepeatableUnits.Count < 1)
            {
                throw new InvalidOperationException("No unit to undo.");
            }

            IUndoableUnit undoableUnit   = globallyUndoableUnits.Pop();
            IInternalUnit repeatableUnit = globallyRepeatableUnits.Pop();

            var eventArgs = new CancellableUndoServiceEventArgs(undoableUnit);

            OnUndoing(eventArgs);
            if (eventArgs.Cancel)
            {
                globallyUndoableUnits.AddLast(undoableUnit);
                globallyRepeatableUnits.AddLast(repeatableUnit);
                return(UnitResult.Cancelled);
            }

            globallyRedoableUnits.AddLast(undoableUnit);

            UnitResult result = undoableUnit.Undo();

            OnUndone(new UndoServiceEventArgs(undoableUnit));
            return(result);
        }
예제 #8
0
            public static void Postfix(AAR_UnitStatusWidget __instance, SimGameState ___simState)
            {
                if (!Core.Settings.RepairRearm)
                {
                    return;
                }

                var sim = UnityGameInstance.BattleTechGame.Simulation;

                UnitResult unitResult     = Traverse.Create(__instance).Field("UnitData").GetValue <UnitResult>();
                float      currentArmor   = unitResult.mech.MechDefCurrentArmor;
                float      assignedArmor  = unitResult.mech.MechDefAssignedArmor;
                float      armorDamage    = currentArmor / assignedArmor;
                string     armorDamageTag = "XLRPArmor_" + armorDamage.ToString();

                if (!unitResult.mech.MechTags.Contains("XLRP_R&R") && currentArmor < assignedArmor)
                {
                    unitResult.mech.MechTags.Add("XLRP_R&R");
                    unitResult.mech.MechTags.Add(armorDamageTag);
                    Core.CombatMechs.Add(unitResult.mech);
                }
                else if (currentArmor < assignedArmor)
                {
                    unitResult.mech.MechTags.Where(tag => tag.StartsWith("XLRPArmor")).Do(x => unitResult.mech.MechTags.Remove(x));
                    unitResult.mech.MechTags.Add(armorDamageTag);
                    Core.CombatMechs.Add(unitResult.mech);
                }
            }
예제 #9
0
        public static bool VanilaRecovery(UnitResult result, ContractHelper contract)
        {
            var mech = result.mech;

            Control.LogDebug($"-- Recovery {mech.Name} vanila method");
            var   simgame = contract.Contract.BattleTechGame.Simulation;
            float num     = simgame.NetworkRandom.Float(0f, 1f);

            if (mech.IsLocationDestroyed(ChassisLocations.CenterTorso))
            {
                Control.LogDebug($"--- CenterTorso Destroyed - no recovery");
                return(false);
            }
            else
            {
                var chance  = simgame.Constants.Salvage.DestroyedMechRecoveryChance;
                var recover = chance > num;

                Control.LogDebug(recover
                    ? $"--- {num:0.00} vs {chance:0.00} - roll success, recovery"
                    : $"--- {num:0.00} vs {chance:0.00} - roll failed, no recovery");

                return(recover);
            }
        }
        public void Can_create_a_unit_result_using_UnitResult_entry_point()
        {
            UnitResult <MyErrorClass> result = UnitResult.Success <MyErrorClass>();

            result.IsFailure.Should().Be(false);
            result.IsSuccess.Should().Be(true);
        }
예제 #11
0
 internal static int GetVehicleEjectionCount(UnitResult unitResult)
 {
     LogDebug("GetVehicleEjectionCount");
     return(unitResult.pilot.StatCollection.GetStatistic("VehiclesEjected") == null
         ? 0
         : unitResult.pilot.StatCollection.GetStatistic("VehiclesEjected").Value <int>());
 }
        protected UnitResult <E2> GetErrorUnitResult(E _)
        {
            funcExecuted.Should().BeFalse();

            funcExecuted = true;
            return(UnitResult.Failure(E2.Value));
        }
        protected UnitResult <E2> GetSuccessUnitResult(E _)
        {
            funcExecuted.Should().BeFalse();

            funcExecuted = true;
            return(UnitResult.Success <E2>());
        }
예제 #14
0
 public static void SalvageItems(UnitResult unit, ContractHelper contract)
 {
     foreach (var item in unit.mech.Inventory.Where(i => i.DamageLevel != ComponentDamageLevel.Destroyed && !unit.mech.IsLocationDestroyed(i.MountedLocation)))
     {
         contract.AddComponentToPotentialSalvage(item.Def, item.DamageLevel, false);
     }
 }
예제 #15
0
        protected UnitResult <E> FailureErrorAction()
        {
            actionExecuted.Should().BeFalse();

            actionExecuted = true;
            return(UnitResult.Failure(E.Value2));
        }
        public void CleanFeatureShouldReturnFalseWhenInvalidInput(int seconds, int waterMl)
        {
            var cleaningUnit = new SteamBlastUnit(new CoffeeMachineEntity());
            UnitResult <CoffeeMachineEntity> result = cleaningUnit.Execute(seconds, waterMl);

            Assert.IsFalse(result.IsSuccessful);
        }
예제 #17
0
        public static void Postfix(UnitResult ___UnitData, RectTransform ___KillGridParent)
        {
            try
            {
                var statCollection = ___UnitData.pilot.StatCollection;
                if (modSettings.VehiclesCanPanic)
                {
                    for (var x = 0; x < vehicleEjections; x++)
                    {
                        AARIcons.AddEjectedVehicle(___KillGridParent);
                    }

                    statCollection.Set("VehiclesEjected", 0);
                }

                // weird loop
                for (var x = 0; x < mechEjections; x++)
                {
                    AARIcons.AddEjectedMech(___KillGridParent);
                }

                statCollection.Set("MechsEjected", 0);
            }
            catch (Exception ex)
            {
                LogDebug(ex);
            }
        }
예제 #18
0
        protected UnitResult <E> SuccessErrorAction()
        {
            actionExecuted.Should().BeFalse();

            actionExecuted = true;
            return(UnitResult.Success <E>());
        }
예제 #19
0
        public async Task <IActionResult> Edit(int id, [Bind("Id,Assignment1Mark,Assignment2Mark,ExamMark,Grade,StudentId,StudentName,TotalMark")] UnitResult unitResult)
        {
            if (id != unitResult.Id)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                try
                {
                    _context.Update(unitResult);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!UnitResultExists(unitResult.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }
                return(RedirectToAction("Index"));
            }
            return(View(unitResult));
        }
        public void EspressoUnitShouldReturnTrueWhenValidInputAndCleanMachine(int coffeeGrams, int waterMl)
        {
            var espressoUnit = new EspressoUnit(new CoffeeMachineEntity());
            UnitResult <CoffeeMachineEntity> result = espressoUnit.Execute(coffeeGrams, waterMl);

            Assert.IsTrue(result.IsSuccessful);
        }
예제 #21
0
        public void Compensate_E_returns_success_and_does_not_execute_func()
        {
            UnitResult <E> input = UnitResult.Success <E>();

            Result output = input.Compensate(GetErrorResult);

            AssertSuccess(output, executed: false);
        }
        public void UnitResult_can_not_convert_okResult_with_value_to_okResult_with_value()
        {
            var okResultWithValue = UnitResult.Success <E>();

            Action action = () => okResultWithValue.ConvertFailure <K>();

            action.Should().Throw <InvalidOperationException>();
        }
예제 #23
0
        public void Compensate_returns_E_success_and_execute_func()
        {
            Result input = Result.Failure(ErrorMessage);

            UnitResult <E> output = input.Compensate(GetErrorUnitResult);

            AssertFailure(output, executed: true);
        }
예제 #24
0
        public void Compensate_returns_E_success_and_does_not_execute_func()
        {
            Result input = Result.Success();

            UnitResult <E> output = input.Compensate(GetErrorUnitResult);

            AssertSuccess(output, executed: false);
        }
예제 #25
0
        public void Compensate_returns_E_failure_and_does_not_execute_func()
        {
            Result input = Result.Failure(ErrorMessage);

            UnitResult <E> output = input.Compensate(GetSuccessUnitResult);

            AssertSuccess(output);
        }
예제 #26
0
        public void Compensate_T_E_returns_E2_success_and_execute_func()
        {
            Result <T, E> input = Result.Failure <T, E>(E.Value);

            UnitResult <E2> output = input.Compensate(GetErrorUnitResult);

            AssertFailure(output, executed: true);
        }
예제 #27
0
        public void Compensate_T_E_returns_E2_failure_and_does_not_execute_func()
        {
            Result <T, E> input = Result.Failure <T, E>(E.Value);

            UnitResult <E2> output = input.Compensate(GetSuccessUnitResult);

            AssertSuccess(output);
        }
예제 #28
0
        public void Compensate_T_E_returns_E2_success_and_does_not_execute_func()
        {
            Result <T, E> input = Result.Success <T, E>(T.Value);

            UnitResult <E2> output = input.Compensate(GetErrorUnitResult);

            AssertSuccess(output, executed: false);
        }
예제 #29
0
        public void Compensate_E_returns_success_and_execute_func()
        {
            UnitResult <E> input = UnitResult.Failure(E.Value);

            Result output = input.Compensate(GetErrorResult);

            AssertFailure(output, executed: true);
        }
예제 #30
0
        public void Compensate_E_returns_failure_and_does_not_execute_func()
        {
            UnitResult <E> input = UnitResult.Failure(E.Value);

            Result output = input.Compensate(GetSuccessResult);

            AssertSuccess(output);
        }