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 EnchantmentSecondaryPicker_OnUseSelectedItem() { // Get enchantment tagged to selected item ListBox.ListItem listItem = enchantmentSecondaryPicker.ListBox.SelectedValue; if (listItem.tag == null) { throw new Exception(string.Format("ListItem '{0}' has no EnchantmentSettings tag", listItem.textLabel.Text)); } // Get enchantment settings EnchantmentSettings enchantmentSettings = (EnchantmentSettings)listItem.tag; IEntityEffect enchantmentEffect = GameManager.Instance.EntityEffectBroker.GetEffectTemplate(enchantmentSettings.EffectKey); EnchantmentParam enchantmentParam = new EnchantmentParam() { ClassicParam = enchantmentSettings.ClassicParam, CustomParam = enchantmentSettings.CustomParam }; // Get forced enchantments for this effect EnchantmentSettings[] forcedPowers = null; EnchantmentSettings[] forcedSideEffects = null; ForcedEnchantmentSet? forcedEnchantmentSet = enchantmentEffect.GetForcedEnchantments(enchantmentParam); if (forcedEnchantmentSet != null) { // Sort forced enchantments into powers and side effects SortForcedEnchantments(enchantmentSettings, forcedEnchantmentSet.Value, out forcedPowers, out forcedSideEffects); // Check for overflow from automatic enchantments and display "no room in item..." // Also adding +1 to account for incoming enchantment if (powersList.EnchantmentCount + sideEffectsList.EnchantmentCount + forcedPowers.Length + forcedSideEffects.Length + 1 > 10) { DaggerfallUI.MessageBox(TextManager.Instance.GetText(textDatabase, "noRoomInItem")); return; } } // Add selected enchantment settings to powers/side-effects AddEnchantmentSettings(enchantmentSettings); AddForcedPowers(forcedPowers); AddForcedSideEffects(forcedSideEffects); // Close effect pickers enchantmentPrimaryPicker.CloseWindow(); enchantmentSecondaryPicker.CloseWindow(); }
private void EnchantmentSecondaryPicker_OnUseSelectedItem() { // TODO: Add any automatic enchantments related to this one (e.g. a soul bound Daedra add a few auto enchantments) // TODO: Check for overflow from automatic enchantments and display "no room in item..." // Get enchantment tagged to selected item ListBox.ListItem listItem = enchantmentSecondaryPicker.ListBox.SelectedValue; if (listItem.tag == null) { throw new Exception(string.Format("ListItem '{0}' has no EnchantmentSettings tag", listItem.textLabel.Text)); } // Add selected enchantment settings to powers/side-effects AddEnchantmentSettings((EnchantmentSettings)listItem.tag); // Close effect pickers enchantmentPrimaryPicker.CloseWindow(); enchantmentSecondaryPicker.CloseWindow(); }
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); }
private void AddPreset(string title, string description, string author, string version, out ListBox.ListItem itemOut) { var preset = new Preset { Title = !string.IsNullOrEmpty(title) ? title : "<Unknown>", Description = !string.IsNullOrEmpty(description) ? description : "<Missing description>", Author = author, //optional Version = version, }; presets.Add(preset); listBox.AddItem(preset.Title, out itemOut); paginator.Total = listBox.Count; }