private int Upgrade(PartyCharacterVM character, UpgradeTarget upgradeTarget)
        {
            //Somehow, for some people, character seems to be null at random times. Haven't been able to reproduce it so far
            //So this simple null check will have to stay.
            if (character == null)
            {
                return(0);
            }

            bool allInsufficient;

            if (upgradeTarget is SpecificUpgradeTarget target)
            {
                // The upgrade target changed possible upgrade paths and therefore errors out, reset the upgrade preference
                if (target.targetIndex >= character.Upgrades.Count)
                {
                    Utilities.DisplayMessage($"Detected outdated upgrade preference, resetting upgrade preference for {character.Name}", Colors.Red);
                    PartyScreenConfig.PathsToUpgrade.Remove(character.Character.StringId);
                    return(0);
                }
                allInsufficient = character.Upgrades[target.targetIndex].IsInsufficient;
            }
            else
            {
                allInsufficient = character.Upgrades.All(uTarget => uTarget.IsInsufficient);
            }

            if (!allInsufficient)
            {
                return(ExecuteUpgrade(upgradeTarget, character));
            }

            return(0);
        }
Пример #2
0
 public MSBuildTargetTFMSelector(UpgradeOptions options, IOptions <TFMSelectorOptions> selectorOptions, ITargetFrameworkMonikerComparer tfmComparer, ILogger <MSBuildTargetTFMSelector> logger)
 {
     _tfmComparer    = tfmComparer ?? throw new ArgumentNullException(nameof(tfmComparer));
     _logger         = logger ?? throw new ArgumentNullException(nameof(logger));
     _currentTFMBase = selectorOptions?.Value.CurrentTFMBase ?? DefaultCurrentTFMBase;
     _ltsTFMBase     = selectorOptions?.Value.LTSTFMBase ?? DefaultLTSTFMBase;
     _upgradeTarget  = options?.UpgradeTarget ?? throw new ArgumentNullException(nameof(options));
 }
Пример #3
0
        public async Task NoDependencies(string[] currentTfms, string current, UpgradeTarget target, ProjectComponents components)
        {
            // Arrange
            var fixture  = new Fixture();
            var tfm      = fixture.Create <TargetFrameworkMoniker>();
            var finalTfm = fixture.Create <TargetFrameworkMoniker>();
            var filter   = new TestFilter(tfm);

            using var mock = AutoMock.GetLoose(b => b.RegisterInstance(filter).As <ITargetFrameworkSelectorFilter>());

            var project = mock.Mock <IProject>();

            project.Setup(p => p.TargetFrameworks).Returns(currentTfms.Select(t => ParseTfm(t)).ToArray());
            project.Setup(p => p.GetComponentsAsync(default)).Returns(new ValueTask <ProjectComponents>(components));
Пример #4
0
 public override void Apply()
 {
     if (keepExistingShots)
     {
         foreach (ShotPattern shot in newShotPatterns)
         {
             UpgradeTarget.Shots = UpgradeTarget.Shots.Add(shot);
         }
     }
     else
     {
         UpgradeTarget.Shots = newShotPatterns;
     }
     UpgradeTarget.ApplyUpgrade(Type);
 }
Пример #5
0
        public TargetFrameworkSelector(
            UpgradeOptions options,
            ITargetFrameworkMonikerComparer comparer,
            IOptions <TFMSelectorOptions> selectorOptions,
            IEnumerable <ITargetFrameworkSelectorFilter> selectors,
            ILogger <TargetFrameworkSelector> logger)
        {
            _comparer  = comparer;
            _selectors = selectors;
            _logger    = logger;

            _currentTFMBase = selectorOptions?.Value.CurrentTFMBase ?? DefaultCurrentTFMBase;
            _ltsTFMBase     = selectorOptions?.Value.LTSTFMBase ?? DefaultLTSTFMBase;
            _upgradeTarget  = options?.UpgradeTarget ?? throw new ArgumentNullException(nameof(options));
        }
Пример #6
0
        public AssemblyLineProperty GetProperty(UpgradeTarget target)
        {
            switch (target)
            {
            case UpgradeTarget.Efficiency:
                return(Efficiency);

            case UpgradeTarget.Speed:
                return(Speed);

            default:
            {
                Log.Error("Error getting property in assemblyline. Invalid target");
                return(null);
            }
            }
        }
Пример #7
0
        public override void Apply()
        {
            ShotPatterns upgraded = new ShotPatterns();

            foreach (ShotPattern shot in UpgradeTarget.Shots)
            {
                if (keepExistingEffects)
                {
                    shot.Effects |= newEffects;
                }
                else
                {
                    shot.Effects = newEffects;
                }
                upgraded = upgraded.Add(shot);
            }
            UpgradeTarget.Shots = upgraded;
            UpgradeTarget.ApplyUpgrade(Type);
        }
Пример #8
0
 public AssemblyLineProperty GetProperty(UpgradeTarget target)
 {
     switch (target)
     {
         case UpgradeTarget.Efficiency:
             return Efficiency;
         case UpgradeTarget.Speed:
             return Speed;
         default:
             {
                 Log.Error("Error getting property in assemblyline. Invalid target");
                 return null;
             }
     }
 }
Пример #9
0
 public override void Apply()
 {
     UpgradeTarget.Strength += strength;
     UpgradeTarget.ApplyUpgrade(Type);
 }
        private int ExecuteUpgrade(UpgradeTarget upgradeTarget,
                                   PartyCharacterVM character)
        {
            character.InitializeUpgrades();

            if (character.Side == PartyScreenLogic.PartyRosterSide.Right &&
                character.Type == PartyScreenLogic.TroopType.Member)
            {
                if (upgradeTarget is EqualDistributionTarget)
                {
                    var upgradeableTroops = character.NumOfReadyToUpgradeTroops;
                    var upgradesCount     = character.Upgrades.Count;

                    var upgradeCounts = character.Upgrades.Select(upgrade =>
                                                                  Math.Min(upgrade.AvailableUpgrades, upgradeableTroops / upgradesCount)).ToList();

                    var remainingUpgrades = upgradeableTroops - upgradeCounts.Sum();

                    if (remainingUpgrades > 0)
                    {
                        // Distribute the remaining upgrades as best as possible (in case of uneven number of upgrades available)
                        for (int i = 0; i < upgradeCounts.Count; i++)
                        {
                            UpgradeTargetVM reprCharacter = character.Upgrades[i];
                            var             toAdd         = reprCharacter.AvailableUpgrades - upgradeCounts[i];

                            if (toAdd >= remainingUpgrades)
                            {
                                upgradeCounts[i] += remainingUpgrades;
                                remainingUpgrades = 0;
                            }
                            else
                            {
                                upgradeCounts[i]  += toAdd;
                                remainingUpgrades -= toAdd;
                            }
                        }
                    }

                    for (int i = 0; i < upgradeCounts.Count; i++)
                    {
                        if (upgradeCounts[i] > 0)
                        {
                            SendCommand(character, upgradeCounts[i], i);
                        }
                    }

                    return(upgradeCounts.Sum());
                }
                else if (upgradeTarget is SpecificUpgradeTarget target)
                {
                    var availableUpgrades = character.Upgrades[target.targetIndex].AvailableUpgrades;

                    if (availableUpgrades > 0)
                    {
                        SendCommand(character, availableUpgrades, target.targetIndex);
                    }

                    return(availableUpgrades);
                }
            }

            return(0);
        }