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); }
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)); }
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));
public override void Apply() { if (keepExistingShots) { foreach (ShotPattern shot in newShotPatterns) { UpgradeTarget.Shots = UpgradeTarget.Shots.Add(shot); } } else { UpgradeTarget.Shots = newShotPatterns; } UpgradeTarget.ApplyUpgrade(Type); }
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)); }
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); } } }
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); }
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; } } }
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); }