Ejemplo n.º 1
0
        private static Item NewHellstone(int baseItemID, int newItemId, String name, String desc)
        {
            int totalWeight = CurrencyEffects.ALL[newItemId].Sum(x => x.GetWeight());

            desc += "\n";

            CurrencyEffects.ALL[newItemId].ForEach(x =>
            {
                float chance = (float)x.GetWeight() / (float)totalWeight * 100;

                desc += "\n" + chance + "% to: " + x.Get().GetDescription() + "\n";
            });

            desc += "\n Use when your desired gear is in your pouch (and no other gear there).";

            if (HELLSTONE_OF_ARCANA_ID != newItemId) // this hellstone is used on non magical items, unlike others
            {
                desc += "\n Only works on Magical items.";
            }
            else
            {
                desc += "\n Only works on Non Magical items.";
            }

            var template = new SL_Item()
            {
                Name          = name,
                Description   = desc,
                Target_ItemID = baseItemID,
                New_ItemID    = newItemId,
                Tags          = new string[]

                {
                    TagSourceManager.Valuable.TagName
                },
                IsUsable = true
            };

            var item = CustomItems.CreateCustomItem(template);

            var effects = item.transform.Find("Effects");

            if (effects == null)
            {
                // If the item doesn't have "Effects", just add it.
                effects = new GameObject("Effects").transform;
                effects.transform.parent = item.transform;
                // If you didn't use CreateCustomItem, you'd need to call DontDestroyOnLoad(gaberries.gameObject);
            }
            CurrencyEffectComponent eff = effects.gameObject.AddComponent <CurrencyEffectComponent>();

            UnityEngine.Object.DontDestroyOnLoad(eff);

            var png    = CustomTextures.LoadTexture(@"BepInEx\plugins\Grindward\Icons\" + newItemId + ".png", false, false);
            var sprite = CustomTextures.CreateSprite(png, CustomTextures.SpriteBorderTypes.ItemIcon);

            CustomItemVisuals.SetSpriteLink(item, sprite);

            At.SetValue(sprite, typeof(Item), item, "m_itemIcon");

            return(item);
        }
Ejemplo n.º 2
0
        private void ConstructGenerator(GameObject leftPane)
        {
            m_generateObj = UIFactory.CreateVerticalGroup(leftPane, new Color(0.1f, 0.1f, 0.1f));

            var genLabelObj = UIFactory.CreateLabel(m_generateObj, TextAnchor.MiddleLeft);

            m_generatorTitle          = genLabelObj.GetComponent <Text>();
            m_generatorTitle.text     = "Template Generator";
            m_generatorTitle.fontSize = 16;

            // Generator dropdown type
            // (callback added below)
            var genDropObj    = UIFactory.CreateDropdown(m_generateObj, out m_genDropdown);
            var genDropLayout = genDropObj.AddComponent <LayoutElement>();

            genDropLayout.minHeight = 25;
            var genGroupLayout = m_generateObj.AddComponent <LayoutElement>();

            genGroupLayout.minHeight     = 50;
            genGroupLayout.flexibleWidth = 9999;
            var genGroup = m_generateObj.GetComponent <VerticalLayoutGroup>();

            genGroup.childForceExpandHeight = true;
            genGroup.childForceExpandWidth  = true;
            genGroup.padding = new RectOffset(3, 3, 3, 3);
            genGroup.spacing = 5;

            // Generator input field for target
            var targetInputFieldObj = UIFactory.CreateInputField(m_generateObj, 14, 3, 0, typeof(AutoCompleteInputField));

            targetInputFieldObj.name = "AutoCompleterInput";
            m_generatorTargetInput   = targetInputFieldObj.GetComponent <AutoCompleteInputField>();
            (m_generatorTargetInput.placeholder as Text).text = "Clone target ID";
            var genTargetLayout = m_generatorTargetInput.gameObject.AddComponent <LayoutElement>();

            genTargetLayout.minHeight = 25;

            m_generatorTargetInput.onValueChanged.AddListener((string val) =>
            {
                UpdateAutocompletes();
            });

            // subfolder input field
            var subfolderInputObj = UIFactory.CreateInputField(m_generateObj);
            var subfolderLayout   = subfolderInputObj.AddComponent <LayoutElement>();

            subfolderLayout.minHeight = 25;
            var subfolderInput = subfolderInputObj.GetComponent <InputField>();

            (subfolderInput.placeholder as Text).text = "Subfolder (blank for auto)";

            // add this generator callback now that subfolder has been declared
            m_genDropdown.onValueChanged.AddListener((int val) =>
            {
                m_currentGeneratorType = s_currentTemplateTypes[val];

                targetInputFieldObj.SetActive(CanSelectedTypeCloneFromTarget());
                subfolderInputObj.SetActive(CanSelectedTypeBeInSubfolder());
            });

            // name input
            var nameInputObj = UIFactory.CreateInputField(m_generateObj);
            var nameLayout   = nameInputObj.AddComponent <LayoutElement>();

            nameLayout.minHeight = 25;
            var nameInput = nameInputObj.GetComponent <InputField>();

            (nameInput.placeholder as Text).text = "Filename (blank for auto)";

            bool exportIconsWanted    = true;
            bool exportTexturesWanted = true;

            var toggleIconObj = UIFactory.CreateToggle(m_generateObj, out Toggle toggleIcon, out Text toggleIconTxt);
            var iconLayout    = toggleIconObj.AddComponent <LayoutElement>();

            iconLayout.minHeight = 25;
            toggleIconTxt.text   = "Export Icons if possible?";
            toggleIcon.onValueChanged.AddListener((bool val) =>
            {
                exportIconsWanted = val;
            });

            var toggleTexObj    = UIFactory.CreateToggle(m_generateObj, out Toggle toggleTex, out Text toggleTexText);
            var toggleTexLayout = toggleTexObj.AddComponent <LayoutElement>();

            toggleTexLayout.minHeight = 25;
            toggleTexText.text        = "Export Textures if possible?";
            toggleTex.onValueChanged.AddListener((bool val) =>
            {
                exportTexturesWanted = val;
            });

            // generate button
            var genBtnObj    = UIFactory.CreateButton(m_generateObj, new Color(0.15f, 0.45f, 0.15f));
            var genBtnLayout = genBtnObj.AddComponent <LayoutElement>();

            genBtnLayout.minHeight = 25;
            var genBtn = genBtnObj.GetComponent <Button>();

            genBtn.onClick.AddListener(() =>
            {
                if (m_currentPack == null)
                {
                    SL.LogWarning("Cannot generate a template without an inspected SLPack!");
                    return;
                }

                var newTemplate = (ContentTemplate)Activator.CreateInstance(this.m_currentGeneratorType);
                if (newTemplate.CanParseContent)
                {
                    var content = newTemplate.GetContentFromID(m_generatorTargetInput.text);

                    if (content != null && newTemplate.ParseToTemplate(content) is ContentTemplate parsed)
                    {
                        newTemplate = parsed;
                    }
                    else if (!newTemplate.DoesTargetExist)
                    {
                        SL.LogWarning("Could not find any content from target ID '" + m_generatorTargetInput.text + "'");
                        newTemplate = null;
                    }
                }

                if (newTemplate != null)
                {
                    if (!CheckTemplateName(newTemplate, subfolderInput, nameInput))
                    {
                        SL.LogWarning("A folder/filename already exists with that name, try again");
                        return;
                    }

                    // EXPORT ICONS/TEXTURES IF ITEM/STATUS/IMBUE

                    if (exportIconsWanted || exportTexturesWanted)
                    {
                        if (newTemplate is SL_Item slitem)
                        {
                            if (string.IsNullOrEmpty(slitem.SerializedSubfolderName))
                            {
                                SL.LogWarning("You need to set a subfolder name to export icons/textures!");
                                return;
                            }

                            var item = ResourcesPrefabManager.Instance.GetItemPrefab(slitem.Target_ItemID);
                            var dir  = m_currentPack.GetPathForCategory <ItemCategory>();
                            dir     += $@"\{slitem.SerializedSubfolderName}\Textures";

                            if (exportIconsWanted)
                            {
                                SL_Item.SaveItemIcons(item, dir);
                            }

                            if (exportTexturesWanted)
                            {
                                SL_Item.SaveItemTextures(item, dir, out slitem.m_serializedMaterials);
                            }
                        }
                        else if (exportIconsWanted && newTemplate is SL_StatusBase slstatus)
                        {
                            var template = slstatus as ContentTemplate;

                            if (string.IsNullOrEmpty(template.SerializedSubfolderName))
                            {
                                SL.LogWarning("You need to set a subfolder name to export icons!");
                                return;
                            }

                            var dir = m_currentPack.GetPathForCategory <StatusCategory>();
                            dir    += $@"\{template.SerializedSubfolderName}";

                            Component comp;
                            if (template is SL_StatusEffect sl_Status)
                            {
                                comp = ResourcesPrefabManager.Instance.GetStatusEffectPrefab(sl_Status.TargetStatusIdentifier);
                            }
                            else
                            {
                                comp = ResourcesPrefabManager.Instance.GetEffectPreset((template as SL_ImbueEffect).TargetStatusID) as ImbueEffectPreset;
                            }

                            slstatus.ExportIcons(comp, dir);
                        }
                    }

                    var inspector = InspectorManager.Instance.Inspect(newTemplate, m_currentPack);

                    (inspector as TemplateInspector).Save();
                }
            });

            var genBtnText = genBtnObj.GetComponentInChildren <Text>();

            genBtnText.text = "Create Template";
        }