Пример #1
0
    public void WriteInput(string s)
    {
        string working = s;

        // Clear Existing Keywords
        clearKeywordsEvent.Raise();

        // Get Region 2
        int region2Index = working.IndexOf(" ++", 0);

        if (region2Index > 1)
        {
            string region2String = working.Substring(region2Index);
            for (int i = 0; i < regionNames.Length; i++)
            {
                if (region2String.Contains(regionNames[i]))
                {
                    working.Remove(region2Index);
                    region2.value = i;
                    break;
                }
            }

            /*
             * region2String = region2String.Replace(" ++", "");
             * int region2Int = -1;
             * int.TryParse(region2String, out region2Int);
             * if (region2Int != -1) region2.value = region2Int;
             * else region2.value = 13;
             * working.Remove(region2Index);
             */
        }
        else
        {
            region2.value = 13;
        }

        // Get Shadow Scale
        int shadowStringIndex = working.IndexOf(" &~", 0);

        if (shadowStringIndex > 1)
        {
            string shadowString = working.Substring(shadowStringIndex);
            shadowString = shadowString.Replace(" &~", "");
            int shadowValue = 0;
            int.TryParse(shadowString, out shadowValue);
            artworkShadowScale.value = shadowValue;
            working = working.Remove(shadowStringIndex);
        }
        else
        {
            artworkShadowScale.value = -400;
        }

        // Get Artist Credit
        int creditIndex = working.IndexOf(" &@");

        if (creditIndex > 0)
        {
            string creditString = working.Substring(creditIndex + 3);
            creditF.text = creditString;

            working = working.Remove(creditIndex);
        }
        else
        {
            creditF.text = "";
        }

        // Get Artwork Data
        float scale = 300f;
        float x_pos = 0;
        float y_pos = 0;

        int asterisk4 = working.LastIndexOf("*", working.Length);

        if (asterisk4 > 0)
        {
            int asterisk3 = working.LastIndexOf("*", asterisk4 - 1);
            int asterisk2 = working.LastIndexOf("*", asterisk3 - 1);
            int asterisk1 = working.LastIndexOf("*", asterisk2 - 1);
            int asterisk0 = working.LastIndexOf("*", asterisk1 - 1);

            if (asterisk0 > 0)
            {
                float.TryParse(working.Substring(asterisk3 + 1, asterisk4 - asterisk3 - 1), out scale);
                float.TryParse(working.Substring(asterisk2 + 1, asterisk3 - asterisk2 - 1), out y_pos);
                float.TryParse(working.Substring(asterisk1 + 1, asterisk2 - asterisk1 - 1), out x_pos);

                // Apply Artwork Data
                artworkScaleSlider.value = scale;
                foreach (RectTransform rt in artworkRectTransforms)
                {
                    rt.localPosition = new Vector3(x_pos, y_pos);
                }

                // Get Artwork Local Path
                if (asterisk1 - asterisk0 > 2)
                {
                    string foundArtwork = working.Substring(asterisk0 + 1, asterisk1 - asterisk0 - 1);
                    {
                        artworkPath.value = foundArtwork;
                        artworkUploader.FileSelected(foundArtwork);
                    }
                }
                // Remove artwork data from working string
                working = working.Remove(asterisk0, asterisk4 - asterisk0 + 1);
            }
        }


        // Get Card Text
        int levelUpInd = working.IndexOf("Level Up:");

        levelUpInd = Mathf.Max(working.Length - 1, 0);
        int cardTextStartIndex = working.IndexOf("\"", 0, levelUpInd);
        int cardTextEndIndex   = working.LastIndexOf("\"", levelUpInd);

        if (cardTextStartIndex > 0 && cardTextEndIndex > 0)
        {
            string cardTextString = s.Substring(cardTextStartIndex, cardTextEndIndex - cardTextStartIndex + 1);

            working = working.Replace(cardTextString, "");

            cardTextString = cardTextString.Substring(1, cardTextString.Length - 2);
            cardText.value = cardTextString;
            cardTextF.SetTextWithoutNotify(cardTextString);
        }
        else
        {
            cardText.value = "";
            cardText.value = "";
            cardTextF.SetTextWithoutNotify("");
        }

        // Get Title
        if (working.Contains(":"))
        {
            int manaIndex  = working.IndexOf("Mana");
            int colonIndex = manaIndex > 0 ? working.Substring(0, manaIndex).LastIndexOf(":") : working.IndexOf(":");
            if (colonIndex < 0)
            {
                colonIndex = working.IndexOf(":");
            }
            string titleSubstring = working.Substring(0, colonIndex);

            working     = working.Remove(0, colonIndex + 1);
            title.value = titleSubstring;
            titleF.SetTextWithoutNotify(titleSubstring);
        }
        else
        {
            title.value = "Untitled";
            titleF.SetTextWithoutNotify("Untitled");
        }


        // Get Card Type
        bool foundCardType = false;

        for (int i = cardTypeNames.Length - 1; i >= 0; i--)
        {
            int levelUpIndex = working.ToLower().IndexOf("level up:");
            if (levelUpIndex == -1)
            {
                levelUpIndex = working.Length;
            }
            if (working.Substring(0, levelUpIndex).ToLower().Contains(cardTypeNames[i].ToLower()))
            {
                foundCardType  = true;
                cardType.value = i;

                int cardTypeIndex = working.IndexOf(cardTypeNames[i]);
                working = working.Remove(cardTypeIndex, cardTypeNames[i].Length);
                break;
            }
        }

        // Default to either follower or slow spell if no Card Type found
        if (!foundCardType)
        {
            if (working.Contains("/"))
            {
                cardType.value = 0;
            }
            else
            {
                cardType.value = 3;
            }
        }

        /* Determine whether Base or Leveled Champion
         * if (cardType.value == 1)
         * {
         *      if (!working.ToLower().Contains("level up:"))
         *      {
         *              cardType.value = 2;
         *      }
         * }
         *
         * if (cardType.value == 0 && working.ToLower().Contains("level up:"))
         * {
         *      cardType.value = 1;
         * }
         */


        // Get Level Up Text
        if (cardType.value == 1 || cardType.value == 2)
        {
            int levelUpIndex = working.ToLower().IndexOf("level up:");
            if (levelUpIndex > 0)
            {
                string levelUpSubstring  = working.Substring(levelUpIndex);
                int    levelUpColonIndex = levelUpSubstring.IndexOf(":");

                working          = working.Replace(levelUpSubstring, "");
                levelUpSubstring = levelUpSubstring.Substring(levelUpColonIndex + 1);
                if (levelUpSubstring.StartsWith(" "))
                {
                    levelUpSubstring = levelUpSubstring.Remove(0, 1);
                }

                levelUp.value = levelUpSubstring;
                levelUpTextF.SetTextWithoutNotify(levelUpSubstring);
            }
        }
        else
        {
            levelUp.value     = "";
            levelUpTextF.text = "";
        }

        // Get Region
        for (int i = 0; i < regionNames.Length; i++)
        {
            if (working.ToLower().Contains(regionNames[i].ToLower()))
            {
                region.value = i;
                working      = working.Replace(regionNames[i].ToLower(), "");
                working      = working.Replace(regionNames[i], "");
                break;
            }
        }

        // Get Rarity
        bool foundRarity = false;

        for (int i = 1; i < rarityNames.Length; i++)
        {
            if (working.ToLower().Contains(rarityNames[i].ToLower()))
            {
                rarity.value = i;
                working      = working.Replace(rarityNames[i].ToLower(), "");
                working      = working.Replace(rarityNames[i], "");
                foundRarity  = true;
                break;
            }
        }
        if (!working.ToLower().Contains("champion") && !foundRarity)
        {
            rarity.value = 0;
        }


        // Get Group
        if (working.Contains("#"))
        {
            int    groupIndex     = working.IndexOf("#");
            string groupSubstring = working.Substring(groupIndex);
            working = working.Replace(groupSubstring, "");

            group.value = groupSubstring.Remove(0, 1);
            groupF.SetTextWithoutNotify(groupSubstring.Remove(0, 1));
        }
        else
        {
            group.value = "";
            groupF.SetTextWithoutNotify("");
        }

        // Remove Spaces
        working = working.ToLower();
        working = working.Replace(" ", "");

        // Get Mana
        if (working.ToLower().Contains("mana"))
        {
            string manaString = "";
            int    manaIndex  = working.ToLower().IndexOf("mana");

            // Find Numbers
            if (manaIndex > 0)
            {
                manaString += working[manaIndex - 1];
            }
            if (manaIndex > 1)
            {
                manaString = working[manaIndex - 2] + manaString;
            }

            // Apply
            if (manaString.Length > 0)
            {
                mana.value = manaString;
                working    = working.Replace(manaString + "mana", "");

                manaF.text = manaString;
            }
            else
            {
                mana.value = 0.ToString();
                working    = working.Replace("mana", "");

                manaF.text = "0";
            }
        }

        // Get Attack/Health
        if (cardType.value < 3 || cardType.value == 8)
        {
            int slashIndex = working.IndexOf("/");
            if (slashIndex > 0)
            {
                string attackString = "";
                string healthString = "";

                // Get Attack
                if (slashIndex > 0)
                {
                    attackString = working[slashIndex - 1].ToString();
                }
                if (slashIndex > 1)
                {
                    attackString = working[slashIndex - 2].ToString() + attackString;
                }

                // Get Health
                int  healthIndex1 = -1;
                int  healthIndex2 = -1;
                bool success1     = false;
                bool success2     = false;

                if (slashIndex + 1 < working.Length)
                {
                    success1 = int.TryParse(working[slashIndex + 1].ToString(), out healthIndex1);
                }
                if (slashIndex + 2 < working.Length)
                {
                    success2 = int.TryParse(working[slashIndex + 2].ToString(), out healthIndex2);
                }

                if (healthIndex1 > -1 && success1)
                {
                    healthString += healthIndex1;
                }
                if (healthIndex2 > -1 && success2)
                {
                    healthString += healthIndex2;
                }

                // Apply
                attack.value = attackString;
                health.value = healthString;

                attackF.text = attackString;
                healthF.text = healthString;

                // Remove
                working = working.Replace(attackString + "/" + healthString, "");
            }
        }

        // Find Keywords
        List <int> keywordIndexes = new List <int>();

        changeCardTypeEvent.Raise();

        int ik = 0;

        foreach (string key in keywordNames)
        {
            if (working.ToLower().Contains(key.ToLower().Replace(" ", "")))
            {
                keywordIndexes.Add(ik);
                working = working.Replace(key.ToLower().Replace(" ", ""), "");
            }
            ik++;
        }



        foreach (int ki in keywordIndexes)
        {
            effectIntAdd.Raise(ki);
        }

        // Apply
        writeEvent.Invoke();
    }