Beispiel #1
0
    // The function called when edit button is pressed
    public void handleEditButtonPressed()
    {
        GameObject        instanceEditor = (GameObject)Instantiate(prefabedEditor, transform.parent.parent.parent.parent.parent);
        CreateRulePageSix instanceScript = instanceEditor.GetComponent <CreateRulePageSix>();

        instanceScript.oldBanner = this;

        // populate num of syllable and accent
        instanceScript.syllableNum         = format.numOfSyllable;
        instanceScript.holderOfSylNum.text = format.numOfSyllable.ToString();
        instanceScript.aFormat             = format;


        // populate the accents
        if (format.accentRules != null && format.accentRules.Length > 0)
        {
            instanceScript.accentNum           = format.accentRules.Length;
            instanceScript.holderOfAccNum.text = format.accentRules.Length.ToString();
            instanceScript.accentNum           = format.accentRules.Length;


            foreach (WordFormat.AccentRule ar in format.accentRules)
            {
                GameObject       newAccentRuleItem = (GameObject)Instantiate(instanceScript.prefabedOneAccent, instanceScript.accentPanel.transform);
                AddAccentPageSix accentScript      = newAccentRuleItem.transform.GetComponent <AddAccentPageSix>();

                // if count back
                if (ar.backword)
                {
                    accentScript.coundBack.value = 1;
                }
                else
                {
                    accentScript.coundBack.value = 0;
                }
                Debug.Log(accentScript.coundBack.value);

                // positions
                accentScript.holder.text = ar.position.ToString();

                // accent types
                if (ar.accents.Length > 1)
                {
                    string commonCon = null, commonLvl = null;
                    bool   findUniqueCon = false, findUniqueLvl = false;

                    foreach (AccentPhone ap in ar.accents)
                    {
                        if (commonCon == null)
                        {
                            commonCon = ap.Contour;
                            commonLvl = ap.Level;
                        }
                        else
                        {
                            if (!commonCon.Equals(ap.Contour))
                            {
                                findUniqueCon = true;
                            }
                            if (!commonLvl.Equals(ap.Level))
                            {
                                findUniqueLvl = true;
                            }
                        }
                    }

                    if (findUniqueLvl && findUniqueCon)
                    {
                        accentScript.accentType.value = accentScript.accentType.options.Count;
                    }
                    else
                    {
                        if (findUniqueCon)
                        {
                            accentScript.accentType.value = findValueFromDropDown(accentScript.accentType, commonLvl);
                        }
                        else
                        {
                            accentScript.accentType.value = findValueFromDropDown(accentScript.accentType, commonCon);
                        }
                    }
                }
                else if (ar.accents.Length == 1)
                {
                    accentScript.accentType.value = findValueFromDropDown(accentScript.accentType, ar.accents[0].IPA);
                }
            }
        }

        // populate affix
        if (!format.arabicStyle)
        {
            if (format.specialLeading != null)
            {
                instanceScript.specialAffixToggle.isOn = true;
                instanceScript.specialAffixPanel.SetActive(true);
                instanceScript.specialPrefixToggle.isOn = true;
                instanceScript.prefixPhoneme            = new Phoneme();
                instanceScript.prefixPhoneme.addPhone(format.specialLeading);
                //  specialPrefixIPA, specialSuffixIPA, specialPrefixLetters
                instanceScript.specialPrefixIPA.text     = instanceScript.prefixPhoneme.getIPA();
                instanceScript.specialPrefixLetters.text = instanceScript.prefixPhoneme.letters;
            }

            if (format.specialEnding != null)
            {
                instanceScript.specialAffixToggle.isOn = true;
                instanceScript.specialAffixPanel.SetActive(true);
                instanceScript.specialSuffixToggle.isOn = true;
                instanceScript.suffixPhoneme            = new Phoneme();
                instanceScript.suffixPhoneme.addPhone(format.specialEnding);
                //  specialPrefixIPA, specialSuffixIPA, specialPrefixLetters
                instanceScript.specialSuffixIPA.text     = instanceScript.suffixPhoneme.getIPA();
                instanceScript.specialSuffixLetters.text = instanceScript.suffixPhoneme.letters;
            }
        }


        // populate special phone
        if (!format.arabicStyle)
        {
            if (format.specialVowel != null && format.specialVowel.Length > 0)
            {
                instanceScript.specialPhoneToggle.isOn = true;
                instanceScript.specialPhonePanel.SetActive(true);
                instanceScript.specialVowelToggle.isOn = true;

                string totalIPA = "", totalLet = "";
                instanceScript.specialPickedVowel = new Phoneme[format.specialVowel.Length];
                for (int i = 0; i < format.specialVowel.Length; i++)
                {
                    if (i != 0)
                    {
                        totalIPA += " ,";
                        totalLet += " ,";
                    }
                    instanceScript.specialPickedVowel[i] = new Phoneme();
                    instanceScript.specialPickedVowel[i].addPhone(format.specialVowel[i]);
                    totalIPA += instanceScript.specialPickedVowel[i].getIPA();
                    totalLet += instanceScript.specialPickedVowel[i].letters;
                }

                //specialVowelIPA, specialConsonantIPA, specialVowelLetters, specialConsonantLetters;
                instanceScript.specialVowelIPA.text     = totalIPA;
                instanceScript.specialVowelLetters.text = totalLet;
            }

            if (format.specialConsonant != null && format.specialConsonant.Length > 0)
            {
                instanceScript.specialPhoneToggle.isOn = true;
                instanceScript.specialPhonePanel.SetActive(true);
                instanceScript.specialConsonantToggle.isOn = true;

                string totalIPA = "", totalLet = "";
                instanceScript.specialPickedConsonant = new Phoneme[format.specialConsonant.Length];
                for (int i = 0; i < format.specialConsonant.Length; i++)
                {
                    if (i != 0)
                    {
                        totalIPA += " ,";
                        totalLet += " ,";
                    }
                    instanceScript.specialPickedConsonant[i] = new Phoneme();
                    instanceScript.specialPickedConsonant[i].addPhone(format.specialConsonant[i]);
                    totalIPA += instanceScript.specialPickedConsonant[i].getIPA();
                    totalLet += instanceScript.specialPickedConsonant[i].letters;
                }

                //specialVowelIPA, specialConsonantIPA, specialVowelLetters, specialConsonantLetters;
                instanceScript.specialConsonantIPA.text     = totalIPA;
                instanceScript.specialConsonantLetters.text = totalLet;
            }
        }


        // populate arabic style
        if (format.arabicStyle)
        {
            instanceScript.arabicFormatToggle.isOn = true;
            instanceScript.arabicFormatContent.SetActive(true);
            instanceScript.useSemivoweledConsonant.isOn = format.consonantWithSemivowel;
            instanceScript.useClusteredConsonant.isOn   = format.consonantCluster;

            while (instanceScript.arabicFormatContent.transform.childCount > 0)
            {
                Transform tem = instanceScript.arabicFormatContent.transform.GetChild(0);
                tem.parent = null;
                Destroy(tem.gameObject);
            }

            foreach (Phoneme vp in format.vowelHolders)
            {
                GameObject       newPickedVowelItem = (GameObject)Instantiate(instanceScript.prefabedOneVowel, instanceScript.arabicFormatContent.transform);
                ToBePickedScript pickedScript       = newPickedVowelItem.transform.GetComponent <ToBePickedScript>();

                pickedScript.aVowelPhoneme = new Phoneme();
                pickedScript.aVowelPhoneme.addPhone(vp);

                pickedScript.IPA.text    = vp.getIPA();
                pickedScript.letter.text = vp.letters;
            }
        }
    }
    // Save the newly created rule
    public void onSaveButtonPressed()
    {
        aFormat = new WordFormat();
        aFormat.numOfSyllable = syllableNum;

        if (arabicFormatToggle.isOn)
        {
            aFormat.arabicStyle            = true;
            aFormat.consonantWithSemivowel = useSemivoweledConsonant.isOn;
            aFormat.consonantCluster       = useClusteredConsonant.isOn;

            List <Phoneme> forVowelHolder = new List <Phoneme>();
            for (int i = 0; i < arabicFormatContent.transform.childCount; i++)
            {
                ToBePickedScript script = arabicFormatContent.transform.GetChild(i).GetComponent <ToBePickedScript>();
                if (script.aVowelPhoneme == null)
                {
                    aFormat.arabicStyle            = false;
                    aFormat.consonantWithSemivowel = false;
                    aFormat.consonantCluster       = false;
                    break;
                }
                forVowelHolder.Add(script.aVowelPhoneme);
            }
            aFormat.vowelHolders = forVowelHolder.ToArray();
        }
        else
        {
            aFormat.arabicStyle = false;

            // Get accent rules
            if (accentNum > 0)
            {
                List <WordFormat.AccentRule> aList = new List <WordFormat.AccentRule>();
                for (int i = 0; i < accentPanel.transform.childCount; i++)
                {
                    AddAccentPageSix      script = accentPanel.transform.GetChild(i).GetComponent <AddAccentPageSix>();
                    WordFormat.AccentRule wfar   = new WordFormat.AccentRule();

                    if (script.coundBack.options.ToArray()[script.coundBack.value].text.Equals("Backward"))
                    {
                        wfar.backword = true;
                    }
                    else
                    {
                        wfar.backword = false;
                    }

                    try
                    {
                        if (script.positionField.text.Equals(""))
                        {
                            wfar.position = int.Parse(script.holder.text);
                        }
                        else
                        {
                            wfar.position = int.Parse(script.positionField.text);
                        }
                        if (wfar.position > syllableNum)
                        {
                            continue;
                        }

                        Manager         manager         = UnityEngine.Object.FindObjectOfType <Manager>();
                        LanguageManager languageManager = manager.languageManager;
                        AccentPhone[]   accents         = languageManager.accents;

                        if (script.accentType.value.Equals("all"))
                        {
                            wfar.accents = accents;
                        }
                        else
                        {
                            List <AccentPhone> potentialAccent = new List <AccentPhone>();
                            foreach (AccentPhone actp in accents)
                            {
                                string value   = script.accentType.options.ToArray()[script.accentType.value].text;
                                string IPA     = actp.IPA;
                                string contour = actp.Contour;
                                string level   = actp.Level;
                                if (value.Equals(IPA) || value.Equals(contour) || value.Equals(level))
                                {
                                    potentialAccent.Add(actp);
                                }
                            }
                            wfar.accents = potentialAccent.ToArray();
                        }
                        aList.Add(wfar);
                    }
                    catch (Exception e)
                    {
                        continue;
                    }
                }
                aFormat.accentRules = aList.ToArray();
            }

            // Get special affix
            if (specialAffixToggle.isOn)
            {
                if (specialPrefixToggle.isOn && prefixPhoneme != null && prefixPhoneme.phones.Length > 0)
                {
                    aFormat.specialLeading = prefixPhoneme;
                }
                if (specialSuffixToggle.isOn && suffixPhoneme != null && suffixPhoneme.phones.Length > 0)
                {
                    aFormat.specialEnding = suffixPhoneme;
                }
            }

            // Get special phone
            if (specialPhoneToggle.isOn)
            {
                if (specialVowelToggle.isOn && specialPickedVowel != null && specialPickedVowel.Length > 0)
                {
                    aFormat.specialVowel = specialPickedVowel;
                }

                if (specialConsonantToggle.isOn && specialPickedConsonant != null && specialPickedConsonant.Length > 0)
                {
                    aFormat.specialConsonant = specialPickedConsonant;
                }
            }

            // Create a rule banner
            // prefabedRuleBanner
            // RuleBannerPageSix
        }

        if (oldBanner != null)
        {
            oldBanner.format           = aFormat;
            oldBanner.description.text = aFormat.getDescription();
        }
        if (oldBanner == null && fromThisPanel != null)
        {
            GameObject        instanceBanner = (GameObject)Instantiate(prefabedRuleBanner, fromThisPanel.transform);
            RuleBannerPageSix instanceScript = instanceBanner.GetComponent <RuleBannerPageSix>();
            instanceScript.format           = aFormat;
            instanceScript.description.text = aFormat.getDescription();
        }


        Destroy(this.transform.gameObject);
    }