Exemple #1
0
    public static string GetConfig(TextFxAnimationManager.PRESET_ANIMATION_SECTION section, string animName)
    {
        string[] animFolderNames = new string[] { INTRO_ANIM_FOLDER_NAME, MAIN_ANIM_FOLDER_NAME, OUTRO_ANIM_FOLDER_NAME };

        animName = animName.Trim();

        TextAsset animData = Resources.Load <TextAsset>(animFolderNames[(int)section] + "/" + animName);

        return(animData != null ? animData.text : "");
    }
Exemple #2
0
    void Start()
    {
        List <string[]> configAnimNames = new List <string[]> {
            TextFxQuickSetupAnimConfigs.IntroAnimNames, TextFxQuickSetupAnimConfigs.MainAnimNames, TextFxQuickSetupAnimConfigs.OutroAnimNames
        };

        // Calculate starting animations
        int introAnimIndex = Mathf.Clamp(m_introStartEffect, 1, configAnimNames[0].Length);
        int mainAnimIndex  = Mathf.Clamp(m_mainStartEffect, 1, configAnimNames[1].Length);
        int outroAnimIndex = Mathf.Clamp(m_outroStartEffect, 1, configAnimNames[2].Length);

        if (m_introStartEffect < 1)
        {
            // Pick a random intro anim, which has no audio
            do
            {
                introAnimIndex = Random.Range(1, configAnimNames [0].Length);
            }while(configAnimNames[0][introAnimIndex] == "Epic" || configAnimNames[0][introAnimIndex] == "Mental House" || configAnimNames[0][introAnimIndex] == "Type Writer");
        }
        if (m_mainStartEffect < 1)
        {
            // Pick a random main anim, which has no audio
            do
            {
                mainAnimIndex = Random.Range(1, configAnimNames [1].Length);
            }while(configAnimNames[1][mainAnimIndex] == "Windy");
        }
        if (m_outroStartEffect < 1)
        {
            // Pick a random starting intro anim, which isn't a noisey one
            do
            {
                outroAnimIndex = Random.Range(1, configAnimNames [2].Length);
            }while(configAnimNames[2][outroAnimIndex] == "Shot Drop");
        }

        List <Dropdown.OptionData> dropdownOptions;

        int[] animIndex = new int[] { introAnimIndex, mainAnimIndex, outroAnimIndex };

        for (int idx = 0; idx < 3; idx++)
        {
            // Populate dropdown values
            dropdownOptions = new List <Dropdown.OptionData>();
            foreach (string animName in configAnimNames[idx])
            {
                dropdownOptions.Add(new Dropdown.OptionData(animName));
            }
            m_animSectionDropdowns[idx].options = dropdownOptions;

            TextFxAnimationManager.PRESET_ANIMATION_SECTION animSection = (TextFxAnimationManager.PRESET_ANIMATION_SECTION)idx;

            m_animSectionDropdowns [idx].value = animIndex[idx];

            // Assign dropdown listeners
            m_animSectionDropdowns[idx].onValueChanged.AddListener((int index) => { AnimationSectionSet(animSection, index, true); });

            // Set header images to inactive colours
            m_sectionHeaderImages[idx].color = SECTION_INACTIVE_COLOUR;
        }

        m_animationSections = new TextFxAnimationManager.PresetAnimationSection[] { m_effect.AnimationManager.m_preset_intro, m_effect.AnimationManager.m_preset_main, m_effect.AnimationManager.m_preset_outro };

        m_floatVariableSettingsPool   = new ObjectPool <FloatVariableSetting>(m_floatVariableSettingPrefab.gameObject, 5);
        m_vector3VariableSettingsPool = new ObjectPool <Vector3VariableSetting>(m_vector3VariableSettingPrefab.gameObject, 5);
        m_toggleVariableSettingsPool  = new ObjectPool <ToggleVariableSetting>(m_toggleVariableSettingPrefab.gameObject, 5);
        m_colourVariableSettingsPool  = new ObjectPool <ColourVariableSetting>(m_colourVariableSettingPrefab.gameObject, 5);

        m_floatVariableSettingsInUse   = new List <FloatVariableSetting> [3];
        m_vector3VariableSettingsInUse = new List <Vector3VariableSetting> [3];
        m_toggleVariableSettingsInUse  = new List <ToggleVariableSetting> [3];
        m_colourVariableSettingsInUse  = new List <ColourVariableSetting> [3];


        // Add playback button callbacks
        m_playButton.onClick.AddListener(() => {
            if (!m_effect.AnimationManager.Playing)
            {
                PlayAnimation();
            }
            else
            {
                if (m_effect.AnimationManager.Paused)
                {
                    m_effect.AnimationManager.Paused = false;
                    m_playButtonText.text            = "Pause";
                }
                else
                {
                    m_effect.AnimationManager.Paused = true;
                    m_playButtonText.text            = "Play";
                }
            }
        });

        m_resetButton.onClick.AddListener(() => {
            m_effect.AnimationManager.ResetAnimation();

            m_playButtonText.text = "Play";

            HideContinueButton();
        });

        m_continueButton.onClick.AddListener(() => {
            if (!m_effect.AnimationManager.Paused)
            {
                LetterAnimation letterAnim = m_effect.AnimationManager.GetAnimation(0);

                if (letterAnim != null && (letterAnim.CurrentAnimationState == LETTER_ANIMATION_STATE.WAITING || letterAnim.CurrentAnimationState == LETTER_ANIMATION_STATE.WAITING_INFINITE))
                {
                    m_effect.AnimationManager.ContinuePastBreak();
                }
                else
                {
                    m_effect.AnimationManager.ContinuePastLoop();
                }
            }
        });
        m_continueButton.gameObject.SetActive(false);

        m_sectionsActive = new bool[3];


        m_textInput.text = "Hello World!";


#if UNITY_4 || UNITY_5_0 || UNITY_5_1 || UNITY_5_2
        m_textInput.onValueChange.AddListener((string new_string) => {
#else
        m_textInput.onValueChanged.AddListener((string new_string) => {
#endif

            m_effect.SetText(new_string);
        });


        // Preset the animation sections, so it's not empty on start
        AnimationSectionSet(TextFxAnimationManager.PRESET_ANIMATION_SECTION.INTRO, introAnimIndex);
        AnimationSectionSet(TextFxAnimationManager.PRESET_ANIMATION_SECTION.MAIN, mainAnimIndex);
        AnimationSectionSet(TextFxAnimationManager.PRESET_ANIMATION_SECTION.OUTRO, outroAnimIndex);

        // Select Intro section
        AnimationSectionSelected(0);

        // Play intro sequence
        StartCoroutine(DoIntro(6, m_skipTitleEffectIntro));
    }

    IEnumerator DoIntro(float waitTime, bool skipTitleEffect = false)
    {
        yield return(false);

        m_animEditorContent.gameObject.SetActive(false);

        // play intro title effect
        m_titleEffect.GameObject.SetActive(true);
        m_titleEffect.AnimationManager.PlayAnimation(1f);

        if (!skipTitleEffect)
        {
            yield return(new WaitForSeconds(waitTime));
        }

        m_titleEffect.GameObject.SetActive(false);

        float timer = 0;

        Quaternion rotation    = Quaternion.Euler(0, 90, 0);
        Vector3    rotationVec = new Vector3(0, 90, 0);

        m_animEditorContent.rotation = Quaternion.Euler(0, 90, 0);
        m_animEditorContent.gameObject.SetActive(true);

        while (timer <= 0.5f)
        {
            rotationVec.y = Mathf.Lerp(90, 0, timer / 0.5f);

            rotation.eulerAngles = rotationVec;

            m_animEditorContent.rotation = rotation;

            timer += Time.deltaTime;

            yield return(false);
        }

        rotationVec.y = 0;

        rotation.eulerAngles = rotationVec;

        m_animEditorContent.rotation = rotation;

        PlayAnimation(0.5f);
    }

    void PlayAnimation(float delay = 0)
    {
        m_effect.AnimationManager.PlayAnimation(delay, AnimationFinished);
        m_playButtonText.text = "Pause";

        ShowContinueButton();

        StartCoroutine("HighlightContinueButton");
    }

    void ShowContinueButton()
    {
        m_continueButton.image.color = Color.white;

        m_continueButton.gameObject.SetActive(true);

        m_playButton.image.color = Color.white;
    }

    void HideContinueButton()
    {
        m_continueButton.gameObject.SetActive(false);

        StopCoroutine("HighlightContinueButton");

        m_playButton.image.color = m_playbackButtonHighlightColour;
    }

    IEnumerator HighlightContinueButton()
    {
        yield return(new WaitForSeconds(4f));

        m_continueButton.image.color = m_playbackButtonHighlightColour;
    }

    void AnimationFinished()
    {
        m_playButtonText.text = "Play";

        HideContinueButton();
    }

    void RecycleSectionSettingComponents(int sectionIndex)
    {
        if (m_floatVariableSettingsInUse[sectionIndex] != null)
        {
            foreach (FloatVariableSetting fVar in m_floatVariableSettingsInUse[sectionIndex])
            {
                m_floatVariableSettingsPool.Recycle(fVar);
            }
        }
        if (m_vector3VariableSettingsInUse[sectionIndex] != null)
        {
            foreach (Vector3VariableSetting vVar in m_vector3VariableSettingsInUse[sectionIndex])
            {
                m_vector3VariableSettingsPool.Recycle(vVar);
            }
        }
        if (m_toggleVariableSettingsInUse[sectionIndex] != null)
        {
            foreach (ToggleVariableSetting tVar in m_toggleVariableSettingsInUse[sectionIndex])
            {
                m_toggleVariableSettingsPool.Recycle(tVar);
            }
        }
        if (m_colourVariableSettingsInUse[sectionIndex] != null)
        {
            foreach (ColourVariableSetting cVar in m_colourVariableSettingsInUse[sectionIndex])
            {
                m_colourVariableSettingsPool.Recycle(cVar);
            }
        }
    }
Exemple #3
0
    void AnimationSectionSet(TextFxAnimationManager.PRESET_ANIMATION_SECTION section, int animIndex, bool restartAnimation = false)
    {
        if (m_activeSectionIndex >= 0 && m_activeSectionIndex != (int)section)
        {
            CloseAnimationSection(m_activeSectionIndex);
        }


        // Disable any previous setting section objects for this animaction Section
        RecycleSectionSettingComponents((int)section);

        m_floatVariableSettingsInUse[(int)section]   = new List <FloatVariableSetting>();
        m_vector3VariableSettingsInUse[(int)section] = new List <Vector3VariableSetting>();
        m_toggleVariableSettingsInUse[(int)section]  = new List <ToggleVariableSetting>();
        m_colourVariableSettingsInUse[(int)section]  = new List <ColourVariableSetting>();


        // Setup the animation section on the effect instance
        m_effect.AnimationManager.SetQuickSetupSection(section, m_animSectionDropdowns[(int)section].options[animIndex].text, forceClearOldAudioParticles: false);


        // Set the section as focused/selected
        if (m_activeSectionIndex >= 0)
        {
            m_sectionHeaderImages[m_activeSectionIndex].color = SECTION_ACTIVE_COLOUR;
        }

        if (animIndex > 0)
        {
            m_sectionHeaderImages[(int)section].color = SECTION_SELECTED_COLOUR;

            m_activeSectionIndex = (int)section;
            m_sectionsActive[m_activeSectionIndex] = true;
        }
        else
        {
            m_sectionHeaderImages[(int)section].color = SECTION_INACTIVE_COLOUR;

            m_sectionsActive[(int)section] = false;

            if (m_activeSectionIndex >= 0)
            {
                if (m_activeSectionIndex == (int)section)
                {
                    m_activeSectionIndex = -1;
                }
            }
        }


        TextFxAnimationManager.PresetAnimationSection animation_section = m_animationSections[(int)section];
        int sectionSiblingIndexOffset = m_animSectionTransforms[(int)section].GetSiblingIndex();
        int settingIdx = 0;

        RectTransform settingTransform;

        foreach (PresetEffectSetting effectSetting in animation_section.m_preset_effect_settings)
        {
            settingTransform = null;

            switch (effectSetting.m_data_type)
            {
            case ANIMATION_DATA_TYPE.DELAY:
            case ANIMATION_DATA_TYPE.DURATION:
                // Grab a float variable component
                FloatVariableSetting floatVarSetting = m_floatVariableSettingsPool.GetObject();
                m_floatVariableSettingsInUse[(int)section].Add(floatVarSetting);

                floatVarSetting.transform.SetParent(m_menuSectionsContainer);

                ANIMATION_DATA_TYPE dataType = effectSetting.m_data_type;

                floatVarSetting.Setup(effectSetting, effectSetting.GetSettingData(m_effect.AnimationManager, animation_section.m_start_action, animation_section.m_start_loop), () => {
                    m_effect.AnimationManager.PrepareAnimationData(dataType);

                    if (dataType == ANIMATION_DATA_TYPE.DURATION)
                    {
                        m_effect.AnimationManager.PrepareAnimationData(ANIMATION_DATA_TYPE.DELAY);
                    }
                }, false);

                settingTransform = (floatVarSetting.transform as RectTransform);

                break;

            case ANIMATION_DATA_TYPE.GLOBAL_ROTATION:
            case ANIMATION_DATA_TYPE.LOCAL_ROTATION:
            case ANIMATION_DATA_TYPE.POSITION:
            case ANIMATION_DATA_TYPE.GLOBAL_SCALE:
            case ANIMATION_DATA_TYPE.LOCAL_SCALE:
                // Grab a Vector3 variable component
                Vector3VariableSetting vector3VarSetting = m_vector3VariableSettingsPool.GetObject();
                m_vector3VariableSettingsInUse[(int)section].Add(vector3VarSetting);

                vector3VarSetting.transform.SetParent(m_menuSectionsContainer);

                ANIMATION_DATA_TYPE vecDataType = effectSetting.m_data_type;

                vector3VarSetting.Setup(effectSetting, effectSetting.GetSettingData(m_effect.AnimationManager, animation_section.m_start_action, animation_section.m_start_loop), () => {
                    m_effect.AnimationManager.PrepareAnimationData(vecDataType);
                }, false);

                settingTransform = (vector3VarSetting.transform as RectTransform);

                break;

            case ANIMATION_DATA_TYPE.COLOUR:

                ColourVariableSetting colourVarSetting = m_colourVariableSettingsPool.GetObject();
                m_colourVariableSettingsInUse[(int)section].Add(colourVarSetting);

                colourVarSetting.transform.SetParent(m_menuSectionsContainer);
                settingTransform = (colourVarSetting.transform as RectTransform);

                ANIMATION_DATA_TYPE colDataType = ANIMATION_DATA_TYPE.COLOUR;

                colourVarSetting.Setup(effectSetting, effectSetting.GetSettingData(m_effect.AnimationManager, animation_section.m_start_action, animation_section.m_start_loop), () => {
                    m_effect.AnimationManager.PrepareAnimationData(colDataType);
                }, false);

                break;

            case ANIMATION_DATA_TYPE.DELAY_EASED_RANDOM_SWITCH:
                ToggleVariableSetting toggleVarSetting = m_toggleVariableSettingsPool.GetObject();
                m_toggleVariableSettingsInUse[(int)section].Add(toggleVarSetting);

                toggleVarSetting.transform.SetParent(m_menuSectionsContainer);

                effectSetting.m_setting_name = "Randomised?";
                toggleVarSetting.Setup(effectSetting, effectSetting.GetSettingData(m_effect.AnimationManager, animation_section.m_start_action, animation_section.m_start_loop), null, false);

                settingTransform = (toggleVarSetting.transform as RectTransform);

                break;

            default:
                settingIdx--;
                break;
            }

            if (settingTransform != null)
            {
                settingTransform.SetSiblingIndex(sectionSiblingIndexOffset + 1 + settingIdx);

                settingTransform.localPosition = new Vector3(settingTransform.localPosition.x, settingTransform.localPosition.y, 0);
                settingTransform.localScale    = Vector3.one;
            }

            settingIdx++;
        }


        // Add in the Exit Delay option
        if (animIndex > 0)
        {
            ToggleVariableSetting toggleVarSetting = m_toggleVariableSettingsPool.GetObject();
            m_toggleVariableSettingsInUse[(int)section].Add(toggleVarSetting);

            FloatVariableSetting floatVarSetting = m_floatVariableSettingsPool.GetObject();
            m_floatVariableSettingsInUse[(int)section].Add(floatVarSetting);

            toggleVarSetting.transform.SetParent(m_menuSectionsContainer);

            RectTransform exitDelayTransform = (toggleVarSetting.transform as RectTransform);
            exitDelayTransform.SetSiblingIndex(sectionSiblingIndexOffset + 1 + settingIdx);

            exitDelayTransform.localPosition = new Vector3(exitDelayTransform.localPosition.x, exitDelayTransform.localPosition.y, 0);
            exitDelayTransform.localScale    = Vector3.one;

            List <PresetEffectSetting.VariableStateListener> stateListeners =
                new List <PresetEffectSetting.VariableStateListener>()
            {
                new PresetEffectSetting.VariableStateListener()
                {
                    m_startToggleValue            = animation_section.m_exit_pause,
                    m_onToggleStateChangeCallback = (bool state) => {
                        animation_section.SetExitPauseState(m_effect.AnimationManager, state);

                        floatVarSetting.SubSettingSetActive(state);
                    }
                }
            };

            toggleVarSetting.Setup("Exit Delay", stateListeners, null, false);

            settingIdx++;


            floatVarSetting.transform.SetParent(m_menuSectionsContainer);

            exitDelayTransform = (floatVarSetting.transform as RectTransform);
            exitDelayTransform.SetSiblingIndex(sectionSiblingIndexOffset + 1 + settingIdx);

            exitDelayTransform.localPosition = new Vector3(exitDelayTransform.localPosition.x, exitDelayTransform.localPosition.y, 0);
            exitDelayTransform.localScale    = Vector3.one;

            floatVarSetting.Setup("Duration", new List <PresetEffectSetting.VariableStateListener>()
            {
                new PresetEffectSetting.VariableStateListener()
                {
                    m_startFloatValue            = animation_section.m_exit_pause_duration,
                    m_onFloatStateChangeCallback = (float fVal) => {
                        animation_section.SetExitPauseDuration(m_effect.AnimationManager, fVal);
                    }
                }
            }, null, true);

            floatVarSetting.SubSettingSetActive(animation_section.m_exit_pause);
        }

        // Reset Play button text
        m_playButtonText.text = "Play";

        HideContinueButton();

        if (restartAnimation)
        {
            PlayAnimation();
        }
    }