private void EnchantmentPrimaryPicker_OnUseSelectedItem() { // Clear existing enchantmentSecondaryPicker.ListBox.ClearItems(); // Get the effect template tagged to selected item ListBox.ListItem listItem = enchantmentPrimaryPicker.ListBox.SelectedValue; IEntityEffect effect = listItem.tag as IEntityEffect; if (effect == null) { throw new Exception(string.Format("ListItem '{0}' has no IEntityEffect tag", listItem.textLabel.Text)); } // Filter enchantments based on effect key EnchantmentSettings[] filteredEnchantments = enumeratedEnchantments.Where(e => e.EffectKey == effect.Key).ToArray(); if (filteredEnchantments == null || filteredEnchantments.Length == 0) { throw new Exception(string.Format("Found no enchantments for effect key '{0}'", effect.Key)); } // If this is a singleton effect with no secondary options then add directly to powers/side-effects if (filteredEnchantments.Length == 1) { AddEnchantmentSettings(filteredEnchantments[0]); enchantmentPrimaryPicker.CloseWindow(); return; } // Order filtered list by alpha when requested by effect flags if (effect.HasItemMakerFlags(ItemMakerFlags.AlphaSortSecondaryList)) { filteredEnchantments = filteredEnchantments.OrderBy(o => o.SecondaryDisplayName).ToArray(); } // User must select from available secondary enchantment types foreach (EnchantmentSettings enchantment in filteredEnchantments) { // Filter out enchantment when multiple instances not allowed if (!effect.HasItemMakerFlags(ItemMakerFlags.AllowMultipleSecondaryInstances)) { if (ContainsEnchantmentSettings(enchantment)) { continue; } } enchantmentSecondaryPicker.ListBox.AddItem(enchantment.SecondaryDisplayName, -1, enchantment); } enchantmentSecondaryPicker.ListBox.SelectedIndex = 0; uiManager.PushWindow(enchantmentSecondaryPicker); }
private void EnchantmentPrimaryPicker_OnUseSelectedItem() { // Clear existing enchantmentSecondaryPicker.ListBox.ClearItems(); // Get the effect template tagged to selected item ListBox.ListItem listItem = enchantmentPrimaryPicker.ListBox.SelectedValue; IEntityEffect effect = listItem.tag as IEntityEffect; if (effect == null) { throw new Exception(string.Format("ListItem '{0}' has no IEntityEffect tag", listItem.textLabel.Text)); } // Filter enchantments based on effect key EnchantmentSettings[] filteredEnchantments = GetFilteredEnchantments(effect); // If this is a singleton effect with no secondary options then add directly to powers/side-effects if (filteredEnchantments.Length == 1) { AddEnchantmentSettings(filteredEnchantments[0]); enchantmentPrimaryPicker.CloseWindow(); return; } // Order filtered list by alpha when requested by effect flags if (effect.HasItemMakerFlags(ItemMakerFlags.AlphaSortSecondaryList)) { filteredEnchantments = filteredEnchantments.OrderBy(o => o.SecondaryDisplayName).ToArray(); } // User must select from available secondary enchantment types EnchantmentSettings[] currentPowers = powersList.GetEnchantments(); EnchantmentSettings[] currentSideEffects = sideEffectsList.GetEnchantments(); foreach (EnchantmentSettings enchantment in filteredEnchantments) { // Filter out enchantment when multiple instances not allowed if (!effect.HasItemMakerFlags(ItemMakerFlags.AllowMultipleSecondaryInstances)) { if (ContainsEnchantmentSettings(enchantment)) { continue; } } // Filter if any current secondary enchantments are exclusive to this one EnchantmentParam comparerParam = new EnchantmentParam() { ClassicParam = enchantment.ClassicParam, CustomParam = enchantment.CustomParam }; if (effect.IsEnchantmentExclusiveTo(currentPowers, comparerParam) || effect.IsEnchantmentExclusiveTo(currentSideEffects, comparerParam)) { continue; } enchantmentSecondaryPicker.ListBox.AddItem(enchantment.SecondaryDisplayName, -1, enchantment); } enchantmentSecondaryPicker.ListBox.SelectedIndex = 0; uiManager.PushWindow(enchantmentSecondaryPicker); }