private IEnumerable <PowerUpWrapper> GetPowerUpsOfItemOptions(Item item, AttributeSystem attributeHolder) { var options = item.ItemOptions; if (options == null) { yield break; } foreach (var optionLink in options) { var option = optionLink.ItemOption; var powerUp = option.PowerUpDefinition; var level = option.LevelType == LevelType.ItemLevel ? item.Level : optionLink.Level; if (level > 1) { var optionOfLevel = option.LevelDependentOptions.FirstOrDefault(l => l.Level == level); if (optionOfLevel == null) { // TODO: Log, this should never happen. continue; } powerUp = optionOfLevel.PowerUpDefinition; } foreach (var wrapper in PowerUpWrapper.CreateByPowerUpDefintion(powerUp, attributeHolder)) { yield return(wrapper); } } }
/// <inheritdoc/> public IEnumerable <PowerUpWrapper> GetSetPowerUps(IEnumerable <Item> equippedItems, AttributeSystem attributeHolder) { var itemGroups = equippedItems .Where(i => i.Durability > 0) .Where(i => i.ItemSetGroups != null) .SelectMany(i => i.ItemSetGroups) .Distinct(); var result = Enumerable.Empty <PowerUpDefinition>(); foreach (var group in itemGroups) { if (group.AlwaysApplies) { result = result.Concat(group.Options.Select(o => o.PowerUpDefinition)); continue; } var itemsOfGroup = equippedItems.Where(i => group.SetLevel == 0 || i.Level == group.SetLevel).Select(i => i.Definition); var itemCount = group.CountDistinct ? itemsOfGroup.Distinct().Count() : itemsOfGroup.Count(); if (itemCount >= group.MinimumItemCount) { result = result.Concat(group.Options.Take(itemCount - 1).Select(o => o.PowerUpDefinition)); } } return(result.SelectMany(p => PowerUpWrapper.CreateByPowerUpDefintion(p, attributeHolder))); }
private IEnumerable <PowerUpWrapper> GetPowerUpsOfItemOptions(IEnumerable <ItemOptionLink> options, AttributeSystem attributeHolder) { if (options == null) { yield break; } foreach (var optionLink in options) { var option = optionLink.ItemOption; var powerUp = option.PowerUpDefinition; if (optionLink.Level > 1) { var levelRelated = option as IncreasableItemOption; var optionOfLevel = levelRelated?.LevelDependentOptions.FirstOrDefault(l => l.Level == optionLink.Level); if (optionOfLevel == null) { // TODO: Log, this should never happen. continue; } powerUp = optionOfLevel.PowerUpDefinition; } foreach (var wrapper in PowerUpWrapper.CreateByPowerUpDefintion(powerUp, attributeHolder)) { yield return(wrapper); } } }
private void CreatePowerUpWrappers(SkillEntry skillEntry) { if (skillEntry.Skill.PassivePowerUps.TryGetValue(skillEntry.Level, out PowerUpDefinition powerUp)) { this.passiveSkillPowerUps.Add(skillEntry, PowerUpWrapper.CreateByPowerUpDefintion(powerUp, this.player.Attributes).ToList()); } }
private IEnumerable <PowerUpWrapper> GetPowerUpsOfItemOptions(Item item, AttributeSystem attributeHolder) { var options = item.ItemOptions; if (options == null) { yield break; } foreach (var optionLink in options) { var option = optionLink.ItemOption; var powerUp = option.PowerUpDefinition; var level = option.LevelType == LevelType.ItemLevel ? item.Level : optionLink.Level; if (level > 1) { var optionOfLevel = option.LevelDependentOptions.FirstOrDefault(l => l.Level == level); if (optionOfLevel == null) { Log.Warn($"Item has {nameof(IncreasableItemOption)} with level > 0, but no definition in {nameof(IncreasableItemOption.LevelDependentOptions)}"); continue; } powerUp = optionOfLevel.PowerUpDefinition; } if (powerUp?.Boost == null) { // Some options are level dependent. If they are at level 0, they might not have any boost yet. continue; } foreach (var wrapper in PowerUpWrapper.CreateByPowerUpDefintion(powerUp, attributeHolder)) { yield return(wrapper); } } }