コード例 #1
0
        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);
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        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();
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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;
        }