示例#1
0
    public void CreateNewAnimation(bool isAudioBased, int audioFileIndex, string newAnimFileName, float newTime)
    {
        if (newAnimFileName != "")
        {
            string newAudioName = "";
            if (isAudioBased)
            {
                newAudioName = tagarela.audioFiles[audioFileIndex].name;
            }

            TagarelaMorphTarget _MorphTarget = new TagarelaMorphTarget();
            _MorphTarget.Populate(tagarela.smrTotal);

            guiTimeline = new TagarelaTimelineUI(newTime);
            guiTimeline.AddKeyframe(0f, _MorphTarget);

            guiTimelineSegment = new TagarelaTimelineSegmentUI(newTime);

            if (TagarelaFileManager.Save(newAnimFileName, tagarela.smrTotal, guiTimeline.keyframeSet, 0, newAudioName, newTime))
            {
                TextAsset newFile = AssetDatabase.LoadMainAssetAtPath("Assets/Tagarela/System/Animations/" + newAnimFileName + ".xml") as TextAsset;
                AssetDatabase.Refresh();
                tagarela.Clean();
                tagarela.animationFiles.Add(newFile);

                CleanVars();
                dialog = ScreenDialog.InitialScreen;
                Repaint();
                Update();

                LoadAnimationFile(tagarela.animationFiles[tagarela.animationFiles.Count - 1]);
            }
        }
    }
示例#2
0
    public void AddKeyframe(float Value, TagarelaMorphTarget Objeto)
    {
        bool keyframe_exists = false;

        for (int i = 0; i < keyframeSet.Count; i++)
        {
            TLkeyframe temp_keyframe = (TLkeyframe)keyframeSet[i];
            if (Value == temp_keyframe.value)
            {
                keyframe_exists = true;
            }
        }
        if (keyframe_exists)
        {
            EditorUtility.DisplayDialog("Error!", "Already exists a keyframe at position 0", "ok");
        }
        else
        {
            keyframeSet.Add(new TLkeyframe(Value, totalValue, timeLineRect, Objeto));

            TLkeyframe _keyframe = (TLkeyframe)keyframeSet[keyframeSet.Count - 1];
            selectedValue = _keyframe.value;
            morphSliders  = _keyframe.morphSliders;
            keyframeSet.Sort(new ordenador());

            isKeyframeSetChanged = true;
        }
    }
示例#3
0
        public TLkeyframe(float value, float totalValue, Rect timeLineRect, TagarelaMorphTarget morphSliders)
        {
            this.value        = value;
            this.totalValue   = totalValue;
            this.timeLineRect = timeLineRect;
            this.morphSliders = morphSliders;

            seta_img.hideFlags = HideFlags.DontSave;
            iconRect           = new Rect(0, timeLineRect.y, seta_img.width, seta_img.height);
        }
 public void Populate(TagarelaMorphTarget origin_morphTargetList)
 {
     sliderValue = new List <float>();
     id          = new List <string>();
     for (int i = 0; i < origin_morphTargetList.sliderValue.Count; i++)
     {
         sliderValue.Add(origin_morphTargetList.sliderValue[i]);
         id.Add(origin_morphTargetList.id[i]);
     }
 }
 public void Populate(TagarelaMorphTarget origin_morphTargetList)
 {
     sliderValue = new List<float>();
     id = new List<string>();
     for (int i = 0; i < origin_morphTargetList.sliderValue.Count; i++)
     {
         sliderValue.Add(origin_morphTargetList.sliderValue[i]);
         id.Add(origin_morphTargetList.id[i]);
     }
 }
示例#6
0
    /*
     * public void SetTargetToKeyframe(int Index, TagarelaMorphTarget Objeto)
     * {
     *
     *  TLkeyframe temp_keyframe = (TLkeyframe)KeyframeSet[Index];
     *
     *  TagarelaMorphTarget CurrentObjeto = new TagarelaMorphTarget();
     *
     *
     *  CurrentObjeto = temp_keyframe.morphSliders;
     *
     *  //popula com os que não tiver
     *  for (int i = 0; i < Objeto.id.Count; i++)
     *  {
     *      if (!CurrentObjeto.id.Contains((string)Objeto.id[i]))
     *      {
     *          CurrentObjeto.id.Add((string)Objeto.id[i]);
     *          CurrentObjeto.sliderValue.Add((float)Objeto.sliderValue[i]);
     *      };
     *  }
     *
     *  //remove the old ones
     *  for (int i = 0; i < CurrentObjeto.id.Count; i++)
     *  {
     *      if (!Objeto.id.Contains((string)CurrentObjeto.id[i]))
     *      {
     *          CurrentObjeto.id.RemoveAt(i);
     *          CurrentObjeto.sliderValue.RemoveAt(i);
     *      };
     *  }
     *
     *  temp_keyframe.morphSliders = (TagarelaMorphTarget)CurrentObjeto;
     *  KeyframeSet[Index] = (TLkeyframe)temp_keyframe;
     *
     * } */

    public void UpdateSelection()
    {
        if (keyframeSet.Count > 0)
        {
            keyframeSet.Sort(new ordenador());
            TLkeyframe _keyframe = (TLkeyframe)keyframeSet[0];
            selectedIndex   = 0;
            selectedValue   = _keyframe.value;
            morphSliders    = _keyframe.morphSliders;
            _keyframe.state = KeyframeState.selected;
        }
        init = true;
    }
示例#7
0
    public void RemoveKeyframe(int index)
    {
        if (index < keyframeSet.Count)
        {
            keyframeSet.RemoveAt(index);

            if (index > keyframeSet.Count - 1)
            {
                index = keyframeSet.Count - 1;
            }
            if (keyframeSet.Count > 0)
            {
                TLkeyframe _keyframe = (TLkeyframe)keyframeSet[index];
                selectedValue = _keyframe.value;
                selectedIndex = index;
                morphSliders  = _keyframe.morphSliders;
                keyframeSet.Sort(new ordenador());
                isKeyframeSetChanged = true;
            }
        }
    }
示例#8
0
    void OnGUI()
    {
        updateWindow = false;

        GUI.color = Color.white;

        GUI.DrawTexture(new Rect(0, 0, Screen.width, bgEditor.height), bgEditor);
        GUI.DrawTexture(new Rect(13, 14, logoEditor.width, logoEditor.height), logoEditor);

        GUILayout.BeginVertical(styleHeader);
        {
            GUI.color = Color.white;
            switch (dialog)
            {

                case ScreenDialog.InvalidObject:
                    GUILayout.Label(log_msg, EditorStyles.boldLabel);
                    break;

                case ScreenDialog.AddComponent:
                    GUILayout.Label("", EditorStyles.boldLabel);
                    GUILayout.Space(15f);

                    if (GUILayout.Button("Add LipSync Component!"))
                    {
                        //Debug.Log("UnityLipSync -> LipSync Component created on " + LastSelected.name);
                        Selection.activeGameObject.AddComponent(typeof(Tagarela));
                    }
                    break;

                case ScreenDialog.InitialScreen:

                    GUILayout.BeginHorizontal();

                    GUILayout.Label("Select Animation", styleFileTitle, GUILayout.Height(22));

                    if (GUILayout.Button("Create New Animation", styleBigButtons, new GUILayoutOption[] { GUILayout.Width(150), GUILayout.Height(18) }))
                    {
                        TagarelaEditorPopupNewFile popupNewFile = CreateInstance<TagarelaEditorPopupNewFile>();
                        popupNewFile.parent = this;
                        RefreshAudiolist();
                        popupNewFile.audioList = audioList;
                        popupNewFile.tagarela = tagarela;
                        popupNewFile.ShowAuxWindow();
                    }
                    GUILayout.Space(8f);
                    GUILayout.EndHorizontal();

                    scrollViewVector = GUILayout.BeginScrollView(scrollViewVector, styleScrollview);
                    {

                        GUILayout.BeginVertical();
                        {

                            GUILayout.Space(15f);

                            if (tagarela.animationFiles.Count > 0)
                            {

                                GUILayout.BeginVertical(styleGrid);
                                {
                                    for (int i = tagarela.animationFiles.Count - 1; i >= 0 ; i--)
                                    {
                                        GUILayout.BeginHorizontal();
                                        {
                                            //CLICK TO OPEN FILE
                                            if (GUILayout.Button(tagarela.animationFiles[i].name.ToString(), styleButtonGrid, GUILayout.Height(20)))
                                            {
                                                LoadAnimationFile(tagarela.animationFiles[i]);
                                            }
                                        }
                                        GUILayout.EndHorizontal();
                                    }
                                }
                                GUILayout.EndHorizontal();
                            }
                            GUI.color = Color.white;

                            GUILayout.FlexibleSpace();

                        } //end vertical
                        GUILayout.EndVertical();
                    }
                    GUILayout.EndScrollView();
                    break;

                case ScreenDialog.Timeline:

                    GUILayout.BeginHorizontal();
                    {

                        GUILayout.Label(fileName, styleFileTitle, GUILayout.Height(21));

                        if (GUILayout.Button("Save", styleBigButtons, GUILayout.Width(70)))
                        {
                            string audioName = SelectedAudioclip != null ? SelectedAudioclip.name : "";
                            TagarelaFileManager.Save(fileName, tagarela.morphTargets, guiTimeline.keyframeSet, tagarela.neutralMesh.vertexCount, audioName, tagarela.settings.animationTime);
                        }
                        if (GUILayout.Button("Close", styleBigButtons, GUILayout.Width(70)))
                        {
                            switch (EditorUtility.DisplayDialogComplex("Close", "Do you want to save?        ", "Yes", "No", "Cancel"))
                            {
                                case 0:
                                    updateTimeline = true;
                                    string audioName = SelectedAudioclip != null ? SelectedAudioclip.name : "";
                                    TagarelaFileManager.Save(fileName, tagarela.morphTargets, guiTimeline.keyframeSet, tagarela.neutralMesh.vertexCount, audioName, tagarela.settings.animationTime);

                                    if (tagarela != null) tagarela.Clean();
                                    CleanVars();

                                    dialog = ScreenDialog.InitialScreen;
                                    break;
                                case 1:
                                    if (tagarela != null) tagarela.Clean();
                                    CleanVars();
                                    dialog = ScreenDialog.InitialScreen;
                                    break;
                            }
                        }
                    }
                    GUILayout.EndHorizontal();

                    updateMorph = false;

                    //######################################################################################

                    GUILayout.BeginVertical(styleBgTimeline, GUILayout.Height(bgTimeline.height));
                    {

                        GUILayout.BeginHorizontal(GUILayout.ExpandWidth(false));
                        {
                            if (SelectedAudioclip != null)
                            {
                                GUILayout.Label(SelectedAudioclip.name);
                            }

                            GUILayout.FlexibleSpace();

                            GUILayout.Space(20);

                            GUILayout.BeginHorizontal(GUILayout.ExpandWidth(false));
                            {
                                if (settings != null) GUILayout.Label(guiTimeline.selectedValue.ToString("0.000") + " / " + settings.animationTime.ToString("0.000"));
                            }
                            GUILayout.EndHorizontal();

                            GUILayout.Space(5);
                        }
                        GUILayout.EndHorizontal();

                        //scrollViewTimelineVector = GUILayout.BeginScrollView(scrollViewTimelineVector, styleScrollviewTimeline);
                        //{

                        GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
                        //GUILayout.BeginHorizontal(new GUILayoutOption[] { GUILayout.Width(1040f) });
                        {

                            GUILayout.Box("", new GUIStyle(), GUILayout.ExpandWidth(true));

                            Rect lastRect = GUILayoutUtility.GetLastRect();

                            if (lastRect.width > 1)
                            {
                                guiTimeline.Draw(new Rect(lastRect.x, 124, lastRect.width, 57));
                                if (audioPreviewSpectrum != null) GUI.DrawTexture(new Rect(lastRect.x, 125, lastRect.width, 40), audioPreviewSpectrum);
                                guiTimelineSegment.Draw(new Rect(lastRect.x + 2, 125, lastRect.width - 2, 130));
                            }

                            switch (playMode)
                            {
                                case PlayMode.all:
                                    GUI.color = new Color(130f / 255f, 170f / 255f, 30f / 255f, 0.3f);
                                    GUI.DrawTexture(new Rect(guiTimeline.timeLineRect.x + 1, guiTimeline.timeLineRect.y + 44, (guiTimeline.timeLineRect.width) * timeNormalized, 11), EditorGUIUtility.whiteTexture);
                                    break;

                                case PlayMode.segment:
                                    GUI.color = new Color(130f / 255f, 170f / 255f, 30f / 255f, 0.3f);
                                    GUI.DrawTexture(new Rect(guiTimelineSegment.KeyframeSet[0].IconRect.x + 7, guiTimeline.timeLineRect.y + 44, (guiTimeline.timeLineRect.width - 18) * timeNormalized, 11), EditorGUIUtility.whiteTexture);
                                    break;
                            }

                        }
                        GUILayout.EndHorizontal();

                        GUI.color = Color.white;

                        //}
                        //GUILayout.EndScrollView();

                        GUILayout.Space(67);

                        GUILayout.BeginHorizontal(GUILayout.ExpandWidth(false));
                        {

                            GUILayout.BeginHorizontal(GUILayout.ExpandWidth(false));
                            {
                                if (guiTimeline.keyframeSet.Count == 1 || disableGuiControls) GUI.enabled = false;
                                if (GUILayout.Button(icoRemove, styleBtTimeline, new GUILayoutOption[] { GUILayout.Width(22), GUILayout.Height(20) })) //btRemove
                                {
                                    guiTimeline.RemoveKeyframe(guiTimeline.selectedIndex);
                                }
                                GUI.enabled = true;
                                if (disableGuiControls) GUI.enabled = false;
                                if (GUILayout.Button(icoAdd, styleBtTimeline, new GUILayoutOption[] { GUILayout.Width(22), GUILayout.Height(20) })) //btAdd
                                {
                                    TagarelaMorphTarget _morphTargetList = new TagarelaMorphTarget();
                                    _morphTargetList.Populate(tagarela.morphTargets);
                                    guiTimeline.AddKeyframe(0.0f, _morphTargetList);
                                    updateTimeline = true;
                                    updateMorph = true;
                                }
                            }
                            GUILayout.EndHorizontal();

                            GUILayout.FlexibleSpace();

                            if (GUILayout.Button("Sliders to zero", styleBtTimeline, new GUILayoutOption[] { GUILayout.Width(120), GUILayout.Height(20) })) //btAdd
                            {
                                TagarelaMorphTarget _MorphTarget = guiTimeline.morphSliders;
                                if (_MorphTarget != null)
                                {
                                    for (int i = 0; i < _MorphTarget.id.Count; i++)
                                    {
                                        _MorphTarget.sliderValue[i] = 0;
                                    }
                                }
                                updateTimeline = true;
                            }

                            GUILayout.FlexibleSpace();

                            GUILayout.BeginHorizontal(GUILayout.ExpandWidth(false));
                            {
                                GUI.enabled = !disableGuiControls;

                                if (GUILayout.Button(icoPlay, styleBtTimeline, new GUILayoutOption[] { GUILayout.Width(22), GUILayout.Height(20) }))
                                {
                                    //tagarela.setTimer(0);
                                    playMode = PlayMode.all;
                                }

                                GUI.enabled = true;
                                if (!guiTimelineSegment.active || disableGuiControls) GUI.enabled = false;
                                if (GUILayout.Button(icoPlaySegment, styleBtTimeline, new GUILayoutOption[] { GUILayout.Width(22), GUILayout.Height(20) }))
                                {
                                    tagarela.setTimer(guiTimelineSegment.KeyframeSet[0].Value);
                                    playMode = PlayMode.segment;
                                }

                                GUI.enabled = false;
                                if (!playMode.Equals(PlayMode.stopped)) GUI.enabled = true;
                                if (GUILayout.Button(icoStop, styleBtTimeline, new GUILayoutOption[] { GUILayout.Width(22), GUILayout.Height(20) }))
                                {
                                    //tagarela.audio.loop = false;
                                    tagarela.setTimer(0f);
                                    //tagarela.audio.Stop();
                                    playMode = PlayMode.stopped;
                                    if (tagarela.audio.isPlaying) tagarela.audio.Stop();
                                }

                                //if don´t have any audio, is a time based animation
                                if (SelectedAudioclip == null)
                                {
                                    GUI.enabled = !disableGuiControls;
                                    GUILayout.Space(10);
                                    if (GUILayout.Button(icoClock, styleBtTimeline, new GUILayoutOption[] { GUILayout.Width(22), GUILayout.Height(20) }))
                                    {
                                        TagarelaEditorPopupTimeLength popupAnimLength = CreateInstance<TagarelaEditorPopupTimeLength>();
                                        popupAnimLength.parent = this;
                                        popupAnimLength.title = "Time Settings";
                                        popupAnimLength.currentLength = popupAnimLength.newLength = guiTimeline.totalValue;
                                        popupAnimLength.ShowAuxWindow();
                                    };

                                }

                                GUI.enabled = true;

                            }
                            GUILayout.EndHorizontal();

                        }
                        GUILayout.EndHorizontal();

                    }
                    GUILayout.EndVertical();

                    GUI.enabled = !disableGuiControls;
                    scrollViewVector = GUILayout.BeginScrollView(scrollViewVector, styleScrollview);
                    {

                        if (tagarela.morphTargets.Count > 0 && guiTimeline.selectedIndex != -1 && guiTimeline.keyframeSet.Count > 0)
                        {

                            EditorGUILayout.BeginVertical();
                            {
                                //seleciona a lista de acordo com o index selecionado
                                TagarelaMorphTarget _MorphTarget = guiTimeline.morphSliders;
                                GUI.color = GUI.contentColor;
                                if (_MorphTarget != null)
                                {
                                    //GUILayout.Space(13f);
                                    GUILayout.Space(14); //space before slider list
                                    for (int i = 0; i < _MorphTarget.id.Count; i++)
                                    {
                                        EditorGUILayout.BeginHorizontal(styleBgSlider, GUILayout.ExpandWidth(true));
                                        {
                                            float temp_value = _MorphTarget.sliderValue[i];

                                            GUILayout.Label(_MorphTarget.id[i], GUILayout.Width(150));
                                            temp_value = GUILayout.HorizontalSlider(temp_value, 0, 100, GUILayout.ExpandWidth(true));
                                            if (_MorphTarget.sliderValue[i] != temp_value)
                                            {
                                                _MorphTarget.sliderValue[i] = temp_value;

                                                updateTimeline = true;
                                            }

                                        }
                                        EditorGUILayout.EndHorizontal();
                                    }
                                }
                            }
                            EditorGUILayout.EndVertical();
                        }

                        if (guiTimeline.refresh) updateWindow = true;
                        if (guiTimeline.isDragging)
                        {

                            guiTimelineSegment.isDragging = false;
                            guiTimelineSegment.enabled = false;

                            if (updateMorphValue != guiTimeline.selectedValue && SelectedAudioclip != null)
                            {
                                playMode = PlayMode.currentTime;
                                updateMorphValue = guiTimeline.selectedValue;
                            }

                        }

                        if (guiTimeline.enabled && (guiTimeline.selectedIndex == -1 || lastKeyframeSelected != guiTimeline.selectedIndex))
                        {
                            lastKeyframeSelected = guiTimeline.selectedIndex;
                            updateMorphValue = guiTimeline.selectedValue;
                            updateTimeline = true;
                        }

                        //if a new keyframe was create or cloned, call a update om mesh list
                        if (guiTimeline.isKeyframeSetChanged)
                        {
                            lastKeyframeSelected = -1;
                            guiTimeline.isKeyframeSetChanged = false;
                            updateTimeline = true;
                            updateMorph = true;
                        }

                        if (guiTimelineSegment.refresh) updateWindow = true;
                        if (guiTimelineSegment.isDragging)
                        {
                            guiTimeline.isDragging = false;
                            guiTimeline.enabled = false;

                            if (updateMorphValue != guiTimelineSegment.SelectedValue)
                            {
                                playMode = PlayMode.currentTime;
                                updateMorphValue = guiTimelineSegment.SelectedValue;
                                updateMorph = true;
                            }

                        }

                        if (!guiTimelineSegment.isDragging && !guiTimeline.isDragging)
                        {
                            guiTimelineSegment.enabled = true;
                            guiTimeline.enabled = true;
                        }

                        if (playMode.Equals(PlayMode.all) || playMode.Equals(PlayMode.segment))
                        {
                            guiTimeline.enabled = false;
                        }

                    }
                    GUILayout.EndScrollView();
                    GUI.enabled = true;
                    break;
            }

        }
        GUILayout.EndVertical();

        if (updateWindow || tagarela != null && tagarela.isPlaying) Repaint();
    }
示例#9
0
    public void LoadAnimationFile(TextAsset file)
    {
        //RefreshMeshlist();
        RefreshAudiolist();
        tagarela.Clean();
        CleanVars();

        settings = TagarelaFileManager.Load(file);
        lastSelectionGameObjectEditing = Selection.activeGameObject;
        fileName = file.name;
        guiTimeline = new TagarelaTimelineUI(settings.animationTime);
        audioPreviewSpectrum = null;
        SelectedAudioclip = null;
        tagarela.audio.clip = null;
        tagarela.isPlaying = false;
        playMode = PlayMode.stopped;

        if (settings.audioFile != null)
        {

            for (int i = 0; i < tagarela.audioFiles.Count; i++)
            {

                if (settings.audioFile == tagarela.audioFiles[i].name)
                {
                    SelectedAudioclip = tagarela.audioFiles[i];
                    tagarela.audio.clip = tagarela.audioFiles[i];
                    audioPreviewSpectrum = TagarelaAudioSpectrum.CreatePreview(SelectedAudioclip, 1024, 64, new Color(150f / 255f, 200f / 255f, 25f / 255f, 0.8f), TagarelaAudioSpectrum.PreviewType.both);
                    audioPreviewSpectrum.hideFlags = HideFlags.DontSave;
                }
            }
        }

        //  CARREGA O ARQUIVO XML
        //configurações principais

        if (settings.meshList.id != null)
        {
            guiTimeline.keyframeSet = new List<TagarelaTimelineUI.TLkeyframe>();

            for (int i = 0; i < settings.keyframes.values.Length; i++)
            {

                TagarelaMorphTarget _MorphTarget = new TagarelaMorphTarget();
                _MorphTarget.Populate(tagarela.morphTargets);

                for (int j = 0; j < settings.keyframes.sliderSettings[i].Length; j++)
                {
                    float[] sliders = settings.keyframes.sliderSettings[i];
                    if (j < tagarela.morphTargets.Count)
                    {
                        //tagarela.morphTargets[j].hideFlags = HideFlags.DontSave;
                        _MorphTarget.sliderValue[j] = sliders[j];
                    }
                }
                guiTimeline.AddKeyframe(settings.keyframes.values[i], _MorphTarget);

            }
        }
        else
        {
            guiTimeline.keyframeSet = new List<TagarelaTimelineUI.TLkeyframe>();
            TagarelaMorphTarget _MorphTarget = new TagarelaMorphTarget();
            _MorphTarget.Populate(tagarela.morphTargets);
            guiTimeline.AddKeyframe(0f, _MorphTarget);

        }

        //Update the file settings
        settings = TagarelaFileManager.UpdateSettings(tagarela.morphTargets, guiTimeline.keyframeSet, tagarela.neutralMesh.vertexCount, settings.audioFile, guiTimeline.totalValue);
        guiTimelineSegment = new TagarelaTimelineSegmentUI(settings.animationTime);

        tagarela.OpenFile(file);

        timeNormalized = 0f;
        playMode = PlayMode.stopped;
        lastKeyframeSelected = -1;

        lastKeyframeSelected = guiTimeline.selectedIndex;
        updateMorphValue = guiTimeline.selectedValue;

        updateTimeline = true;

        if (settings != null && Selection.objects.Length == 1)
        {
            dialog = ScreenDialog.Timeline;
        }
    }
示例#10
0
    public void CreateNewAnimation(bool isAudioBased, int audioFileIndex, string newAnimFileName, float newTime)
    {
        if (newAnimFileName != "")
        {

            string newAudioName = "";
            if (isAudioBased) newAudioName = tagarela.audioFiles[audioFileIndex].name;

            TagarelaMorphTarget _MorphTarget = new TagarelaMorphTarget();
            _MorphTarget.Populate(tagarela.morphTargets);

            guiTimeline = new TagarelaTimelineUI(newTime);
            guiTimeline.AddKeyframe(0f, _MorphTarget);

            guiTimelineSegment = new TagarelaTimelineSegmentUI(newTime);

            if (TagarelaFileManager.Save(newAnimFileName, tagarela.morphTargets, guiTimeline.keyframeSet, tagarela.neutralMesh.vertexCount, newAudioName, newTime))
            {
                TextAsset newFile = AssetDatabase.LoadMainAssetAtPath("Assets/Tagarela/System/Animations/" + newAnimFileName + ".xml") as TextAsset;
                AssetDatabase.Refresh();
                tagarela.Clean();
                tagarela.animationFiles.Add(newFile);

                CleanVars();
                dialog = ScreenDialog.InitialScreen;
                Repaint();
                Update();

                LoadAnimationFile(tagarela.animationFiles[tagarela.animationFiles.Count - 1]);
            }

        }
    }
示例#11
0
    public void LoadAnimationFile(TextAsset file)
    {
        RefreshAudiolist();
        tagarela.Clean();
        CleanVars();

        settings = TagarelaFileManager.Load(file);
        lastSelectionGameObjectEditing = Selection.activeGameObject;
        fileName             = file.name;
        guiTimeline          = new TagarelaTimelineUI(settings.animationTime);
        audioPreviewSpectrum = null;
        SelectedAudioclip    = null;
        tagarela.audio.clip  = null;
        tagarela.isPlaying   = false;
        playMode             = PlayMode.stopped;


        if (settings.audioFile != null)
        {
            for (int i = 0; i < tagarela.audioFiles.Count; i++)
            {
                if (settings.audioFile == tagarela.audioFiles[i].name)
                {
                    SelectedAudioclip              = tagarela.audioFiles[i];
                    tagarela.audio.clip            = tagarela.audioFiles[i];
                    audioPreviewSpectrum           = TagarelaAudioSpectrum.CreatePreview(SelectedAudioclip, 1024, 64, new Color(150f / 255f, 200f / 255f, 25f / 255f, 0.8f), TagarelaAudioSpectrum.PreviewType.both);
                    audioPreviewSpectrum.hideFlags = HideFlags.DontSave;
                }
            }
        }

        //  CARREGA O ARQUIVO XML
        //configurações principais

        if (settings.meshList.id != null)
        {
            guiTimeline.keyframeSet = new List <TagarelaTimelineUI.TLkeyframe>();

            for (int i = 0; i < settings.keyframes.values.Length; i++)
            {
                TagarelaMorphTarget _MorphTarget = new TagarelaMorphTarget();
                _MorphTarget.Populate(tagarela.smrTotal);

                for (int j = 0; j < settings.keyframes.sliderSettings[i].Length; j++)
                {
                    float[] sliders = settings.keyframes.sliderSettings[i];

                    if (j < tagarela.smrTotalBlendShapesCount)
                    {
                        //tagarela.morphTargets[j].hideFlags = HideFlags.DontSave;
                        _MorphTarget.sliderValue[j] = sliders[j];
                    }
                }
                guiTimeline.AddKeyframe(settings.keyframes.values[i], _MorphTarget);
            }
        }
        else
        {
            guiTimeline.keyframeSet = new List <TagarelaTimelineUI.TLkeyframe>();
            TagarelaMorphTarget _MorphTarget = new TagarelaMorphTarget();
            _MorphTarget.Populate(tagarela.smrTotal);
            guiTimeline.AddKeyframe(0f, _MorphTarget);
        }

        //Update the file settings
        settings           = TagarelaFileManager.UpdateSettings(tagarela.smrTotal, guiTimeline.keyframeSet, 0, settings.audioFile, guiTimeline.totalValue);
        guiTimelineSegment = new TagarelaTimelineSegmentUI(settings.animationTime);

        tagarela.OpenFile(file);

        timeNormalized       = 0f;
        playMode             = PlayMode.stopped;
        lastKeyframeSelected = -1;

        lastKeyframeSelected = guiTimeline.selectedIndex;
        updateMorphValue     = guiTimeline.selectedValue;

        updateTimeline = true;

        if (settings != null && Selection.objects.Length == 1)
        {
            dialog = ScreenDialog.Timeline;
        }
    }
示例#12
0
    void OnGUI()
    {
        updateWindow = false;

        GUI.color = Color.white;

        GUI.DrawTexture(new Rect(0, 0, Screen.width, bgEditor.height), bgEditor);
        GUI.DrawTexture(new Rect(13, 14, logoEditor.width, logoEditor.height), logoEditor);

        GUILayout.BeginVertical(styleHeader);
        {
            GUI.color = Color.white;
            switch (dialog)
            {
            case ScreenDialog.InvalidObject:
                GUILayout.Label(log_msg, EditorStyles.boldLabel);
                break;

            case ScreenDialog.AddComponent:
                GUILayout.Label("", EditorStyles.boldLabel);
                GUILayout.Space(15f);

                if (GUILayout.Button("Add LipSync Component!"))
                {
                    //Debug.Log("UnityLipSync -> LipSync Component created on " + LastSelected.name);
                    Selection.activeGameObject.AddComponent(typeof(Tagarela));
                }
                break;

            case ScreenDialog.InitialScreen:

                GUILayout.BeginHorizontal();

                GUILayout.Label("Select Animation", styleFileTitle, GUILayout.Height(22));

                if (GUILayout.Button("Create New Animation", styleBigButtons, new GUILayoutOption[] { GUILayout.Width(150), GUILayout.Height(18) }))
                {
                    TagarelaEditorPopupNewFile popupNewFile = CreateInstance <TagarelaEditorPopupNewFile>();
                    popupNewFile.parent = this;
                    RefreshAudiolist();
                    popupNewFile.audioList = audioList;
                    popupNewFile.tagarela  = tagarela;
                    popupNewFile.ShowAuxWindow();
                }
                GUILayout.Space(8f);
                GUILayout.EndHorizontal();

                scrollViewVector = GUILayout.BeginScrollView(scrollViewVector, styleScrollview);
                {
                    GUILayout.BeginVertical();
                    {
                        GUILayout.Space(15f);

                        if (tagarela.animationFiles.Count > 0)
                        {
                            GUILayout.BeginVertical(styleGrid);
                            {
                                for (int i = tagarela.animationFiles.Count - 1; i >= 0; i--)
                                {
                                    GUILayout.BeginHorizontal();
                                    {
                                        //CLICK TO OPEN FILE
                                        if (GUILayout.Button(tagarela.animationFiles[i].name.ToString(), styleButtonGrid, GUILayout.Height(20)))
                                        {
                                            LoadAnimationFile(tagarela.animationFiles[i]);
                                        }
                                    }
                                    GUILayout.EndHorizontal();
                                }
                            }
                            GUILayout.EndHorizontal();
                        }
                        GUI.color = Color.white;


                        GUILayout.FlexibleSpace();
                    }     //end vertical
                    GUILayout.EndVertical();
                }
                GUILayout.EndScrollView();
                break;

            case ScreenDialog.Timeline:

                GUILayout.BeginHorizontal();
                {
                    GUILayout.Label(fileName, styleFileTitle, GUILayout.Height(21));

                    if (GUILayout.Button("Save", styleBigButtons, GUILayout.Width(70)))
                    {
                        string audioName = SelectedAudioclip != null ? SelectedAudioclip.name : "";
                        TagarelaFileManager.Save(fileName, tagarela.smrTotal, guiTimeline.keyframeSet, 0, audioName, tagarela.settings.animationTime);
                    }
                    if (GUILayout.Button("Close", styleBigButtons, GUILayout.Width(70)))
                    {
                        switch (EditorUtility.DisplayDialogComplex("Close", "Do you want to save?        ", "Yes", "No", "Cancel"))
                        {
                        case 0:
                            updateTimeline = true;
                            string audioName = SelectedAudioclip != null ? SelectedAudioclip.name : "";
                            TagarelaFileManager.Save(fileName, tagarela.smrTotal, guiTimeline.keyframeSet, 0, audioName, tagarela.settings.animationTime);

                            if (tagarela != null)
                            {
                                tagarela.Clean();
                            }
                            CleanVars();

                            dialog = ScreenDialog.InitialScreen;
                            break;

                        case 1:
                            if (tagarela != null)
                            {
                                tagarela.Clean();
                            }
                            CleanVars();
                            dialog = ScreenDialog.InitialScreen;
                            break;
                        }
                    }
                }
                GUILayout.EndHorizontal();

                updateMorph = false;

                //######################################################################################

                GUILayout.BeginVertical(styleBgTimeline, GUILayout.Height(bgTimeline.height));
                {
                    GUILayout.BeginHorizontal(GUILayout.ExpandWidth(false));
                    {
                        if (SelectedAudioclip != null)
                        {
                            GUILayout.Label(SelectedAudioclip.name);
                        }

                        GUILayout.FlexibleSpace();

                        GUILayout.Space(20);

                        GUILayout.BeginHorizontal(GUILayout.ExpandWidth(false));
                        {
                            if (settings != null)
                            {
                                GUILayout.Label(guiTimeline.selectedValue.ToString("0.000") + " / " + settings.animationTime.ToString("0.000"));
                            }
                        }
                        GUILayout.EndHorizontal();

                        GUILayout.Space(5);
                    }
                    GUILayout.EndHorizontal();


                    //scrollViewTimelineVector = GUILayout.BeginScrollView(scrollViewTimelineVector, styleScrollviewTimeline);
                    //{

                    GUILayout.BeginHorizontal(GUILayout.ExpandWidth(true));
                    //GUILayout.BeginHorizontal(new GUILayoutOption[] { GUILayout.Width(1040f) });
                    {
                        GUILayout.Box("", new GUIStyle(), GUILayout.ExpandWidth(true));

                        Rect lastRect = GUILayoutUtility.GetLastRect();

                        if (lastRect.width > 1)
                        {
                            guiTimeline.Draw(new Rect(lastRect.x, 124, lastRect.width, 57));
                            if (audioPreviewSpectrum != null)
                            {
                                GUI.DrawTexture(new Rect(lastRect.x, 125, lastRect.width, 40), audioPreviewSpectrum);
                            }
                            guiTimelineSegment.Draw(new Rect(lastRect.x + 2, 125, lastRect.width - 2, 130));
                        }

                        switch (playMode)
                        {
                        case PlayMode.all:
                            GUI.color = new Color(130f / 255f, 170f / 255f, 30f / 255f, 0.3f);
                            GUI.DrawTexture(new Rect(guiTimeline.timeLineRect.x + 1, guiTimeline.timeLineRect.y + 44, (guiTimeline.timeLineRect.width) * timeNormalized, 11), EditorGUIUtility.whiteTexture);
                            break;

                        case PlayMode.segment:
                            GUI.color = new Color(130f / 255f, 170f / 255f, 30f / 255f, 0.3f);
                            GUI.DrawTexture(new Rect(guiTimelineSegment.KeyframeSet[0].IconRect.x + 7, guiTimeline.timeLineRect.y + 44, (guiTimeline.timeLineRect.width - 18) * timeNormalized, 11), EditorGUIUtility.whiteTexture);
                            break;
                        }
                    }
                    GUILayout.EndHorizontal();

                    GUI.color = Color.white;

                    //}
                    //GUILayout.EndScrollView();

                    GUILayout.Space(67);

                    GUILayout.BeginHorizontal(GUILayout.ExpandWidth(false));
                    {
                        GUILayout.BeginHorizontal(GUILayout.ExpandWidth(false));
                        {
                            if (guiTimeline.keyframeSet.Count == 1 || disableGuiControls)
                            {
                                GUI.enabled = false;
                            }
                            if (GUILayout.Button(icoRemove, styleBtTimeline, new GUILayoutOption[] { GUILayout.Width(22), GUILayout.Height(20) }))     //btRemove
                            {
                                guiTimeline.RemoveKeyframe(guiTimeline.selectedIndex);
                            }
                            GUI.enabled = true;
                            if (disableGuiControls)
                            {
                                GUI.enabled = false;
                            }
                            if (GUILayout.Button(icoAdd, styleBtTimeline, new GUILayoutOption[] { GUILayout.Width(22), GUILayout.Height(20) }))     //btAdd
                            {
                                TagarelaMorphTarget _morphTargetList = new TagarelaMorphTarget();
                                _morphTargetList.Populate(tagarela.smrTotal);
                                guiTimeline.AddKeyframe(0.0f, _morphTargetList);
                                updateTimeline = true;
                                updateMorph    = true;
                            }
                        }
                        GUILayout.EndHorizontal();


                        GUILayout.FlexibleSpace();

                        if (GUILayout.Button("Sliders to zero", styleBtTimeline, new GUILayoutOption[] { GUILayout.Width(120), GUILayout.Height(20) }))     //btAdd
                        {
                            TagarelaMorphTarget _MorphTarget = guiTimeline.morphSliders;
                            if (_MorphTarget != null)
                            {
                                for (int i = 0; i < _MorphTarget.id.Count; i++)
                                {
                                    _MorphTarget.sliderValue[i] = 0;
                                }
                            }
                            updateTimeline = true;
                        }

                        GUILayout.FlexibleSpace();

                        GUILayout.BeginHorizontal(GUILayout.ExpandWidth(false));
                        {
                            GUI.enabled = !disableGuiControls;

                            if (GUILayout.Button(icoPlay, styleBtTimeline, new GUILayoutOption[] { GUILayout.Width(22), GUILayout.Height(20) }))
                            {
                                //tagarela.setTimer(0);
                                playMode = PlayMode.all;
                            }

                            GUI.enabled = true;
                            if (!guiTimelineSegment.active || disableGuiControls)
                            {
                                GUI.enabled = false;
                            }
                            if (GUILayout.Button(icoPlaySegment, styleBtTimeline, new GUILayoutOption[] { GUILayout.Width(22), GUILayout.Height(20) }))
                            {
                                tagarela.setTimer(guiTimelineSegment.KeyframeSet[0].Value);
                                playMode = PlayMode.segment;
                            }

                            GUI.enabled = false;
                            if (!playMode.Equals(PlayMode.stopped))
                            {
                                GUI.enabled = true;
                            }
                            if (GUILayout.Button(icoStop, styleBtTimeline, new GUILayoutOption[] { GUILayout.Width(22), GUILayout.Height(20) }))
                            {
                                //tagarela.audio.loop = false;
                                tagarela.setTimer(0f);
                                //tagarela.audio.Stop();
                                playMode = PlayMode.stopped;
                                if (tagarela.audio.isPlaying)
                                {
                                    tagarela.audio.Stop();
                                }
                            }

                            //if don´t have any audio, is a time based animation
                            if (SelectedAudioclip == null)
                            {
                                GUI.enabled = !disableGuiControls;
                                GUILayout.Space(10);
                                if (GUILayout.Button(icoClock, styleBtTimeline, new GUILayoutOption[] { GUILayout.Width(22), GUILayout.Height(20) }))
                                {
                                    TagarelaEditorPopupTimeLength popupAnimLength = CreateInstance <TagarelaEditorPopupTimeLength>();
                                    popupAnimLength.parent        = this;
                                    popupAnimLength.title         = "Time Settings";
                                    popupAnimLength.currentLength = popupAnimLength.newLength = guiTimeline.totalValue;
                                    popupAnimLength.ShowAuxWindow();
                                }
                                ;
                            }

                            GUI.enabled = true;
                        }
                        GUILayout.EndHorizontal();
                    }
                    GUILayout.EndHorizontal();
                }
                GUILayout.EndVertical();

                GUI.enabled      = !disableGuiControls;
                scrollViewVector = GUILayout.BeginScrollView(scrollViewVector, styleScrollview);
                {
                    if (tagarela.smrTotal.Count > 0 && guiTimeline.selectedIndex != -1 && guiTimeline.keyframeSet.Count > 0)
                    {
                        EditorGUILayout.BeginVertical();
                        {
                            //seleciona a lista de acordo com o index selecionado
                            TagarelaMorphTarget _MorphTarget = guiTimeline.morphSliders;
                            GUI.color = GUI.contentColor;
                            if (_MorphTarget != null)
                            {
                                //GUILayout.Space(13f);
                                GUILayout.Space(14);     //space before slider list
                                for (int i = 0; i < _MorphTarget.id.Count; i++)
                                {
                                    EditorGUILayout.BeginHorizontal(styleBgSlider, GUILayout.ExpandWidth(true));
                                    {
                                        float temp_value = _MorphTarget.sliderValue[i];

                                        GUILayout.Label(_MorphTarget.id[i], GUILayout.Width(150));
                                        temp_value = GUILayout.HorizontalSlider(temp_value, 0, 100, GUILayout.ExpandWidth(true));
                                        if (_MorphTarget.sliderValue[i] != temp_value)
                                        {
                                            _MorphTarget.sliderValue[i] = temp_value;

                                            updateTimeline = true;
                                        }
                                    }
                                    EditorGUILayout.EndHorizontal();
                                }
                            }
                        }
                        EditorGUILayout.EndVertical();
                    }

                    if (guiTimeline.refresh)
                    {
                        updateWindow = true;
                    }
                    if (guiTimeline.isDragging)
                    {
                        guiTimelineSegment.isDragging = false;
                        guiTimelineSegment.enabled    = false;

                        if (updateMorphValue != guiTimeline.selectedValue && SelectedAudioclip != null)
                        {
                            playMode         = PlayMode.currentTime;
                            updateMorphValue = guiTimeline.selectedValue;
                        }
                    }

                    if (guiTimeline.enabled && (guiTimeline.selectedIndex == -1 || lastKeyframeSelected != guiTimeline.selectedIndex))
                    {
                        lastKeyframeSelected = guiTimeline.selectedIndex;
                        updateMorphValue     = guiTimeline.selectedValue;
                        updateTimeline       = true;
                    }

                    //if a new keyframe was create or cloned, call a update om mesh list
                    if (guiTimeline.isKeyframeSetChanged)
                    {
                        lastKeyframeSelected             = -1;
                        guiTimeline.isKeyframeSetChanged = false;
                        updateTimeline = true;
                        updateMorph    = true;
                    }

                    if (guiTimelineSegment.refresh)
                    {
                        updateWindow = true;
                    }
                    if (guiTimelineSegment.isDragging)
                    {
                        guiTimeline.isDragging = false;
                        guiTimeline.enabled    = false;

                        if (updateMorphValue != guiTimelineSegment.SelectedValue)
                        {
                            playMode         = PlayMode.currentTime;
                            updateMorphValue = guiTimelineSegment.SelectedValue;
                            updateMorph      = true;
                        }
                    }

                    if (!guiTimelineSegment.isDragging && !guiTimeline.isDragging)
                    {
                        guiTimelineSegment.enabled = true;
                        guiTimeline.enabled        = true;
                    }

                    if (playMode.Equals(PlayMode.all) || playMode.Equals(PlayMode.segment))
                    {
                        guiTimeline.enabled = false;
                    }
                }
                GUILayout.EndScrollView();
                GUI.enabled = true;
                break;
            }
        }
        GUILayout.EndVertical();

        if (updateWindow || tagarela != null && tagarela.isPlaying)
        {
            Repaint();
        }
    }
示例#13
0
    public void Draw(Rect rect)
    {
        rect         = new Rect(rect.x, rect.y, Mathf.Max(imgTimeline.width, rect.width), Mathf.Max(imgTimeline.height, rect.height));
        timeLineRect = rect;
        GUI.color    = Color.white;

        GUI.Box(timeLineRect, "", styleTimeline);
        Rect dragLimit = new Rect(0, 0, Screen.width, Screen.height);

        if (!init)
        {
            UpdateSelection();
        }

        refresh = false;

        for (int index = 0; index < keyframeSet.Count; index++)
        {
            TLkeyframe _keyframe = (TLkeyframe)keyframeSet[index];
            _keyframe.timeLineRect = new Rect(timeLineRect.x + styleTimeline.border.left, timeLineRect.y + styleTimeline.border.top, timeLineRect.width - styleTimeline.border.horizontal, timeLineRect.height);
            _keyframe.iconRect.y   = timeLineRect.y + 2; //top position of the icons
            _keyframe.totalValue   = totalValue;
            if (enabled)
            {
                if (selectedValue == _keyframe.value && !isDragging)
                {
                    selectedIndex   = index;
                    morphSliders    = _keyframe.morphSliders;
                    _keyframe.state = KeyframeState.selected;
                }

                //SELECT SLIDER
                if ((Event.current.type == EventType.mouseDown) && (!isDragging) && (selectedIndex != index) && (_keyframe.iconRect.Contains(Event.current.mousePosition)))
                {
                    for (int index2 = 0; index2 < keyframeSet.Count; index2++)
                    {
                        TLkeyframe temp_keyframe = (TLkeyframe)keyframeSet[index2];
                        if (index2 != index)
                        {
                            temp_keyframe.state = KeyframeState.normal;
                        }
                    }
                    _keyframe.state = KeyframeState.selected;
                    selectedValue   = _keyframe.value;
                    selectedIndex   = index;
                    morphSliders    = _keyframe.morphSliders;
                    refresh         = true;
                }

                //START DRAG
                if (!isDragging && Event.current.type == EventType.mouseDrag && selectedIndex == index && _keyframe.iconRect.Contains(Event.current.mousePosition))
                {
                    isDragging = true;

                    //DRAG TO CLONE
                    if (Event.current.shift)
                    {
                        TagarelaMorphTarget morphInstance = new TagarelaMorphTarget();
                        morphInstance.id          = _keyframe.morphSliders.id.GetRange(0, _keyframe.morphSliders.id.ToArray().Length);
                        morphInstance.sliderValue = _keyframe.morphSliders.sliderValue.GetRange(0, _keyframe.morphSliders.sliderValue.ToArray().Length);
                        AddKeyframe(selectedValue + 0.0001f, morphInstance);
                        isKeyframeSetChanged = true;
                    }
                }

                //UPDATE DRAG
                if (isDragging && selectedIndex == index)
                {
                    //if (EventType.mouseDown())
                    selectedIndex   = index;
                    selectedValue   = _keyframe.value;
                    morphSliders    = _keyframe.morphSliders;
                    _keyframe.state = KeyframeState.drag;
                    refresh         = true;
                }

                if (selectedIndex == index)
                {
                    GUI.color = GUI.contentColor;
                    //_keyframe.Value = EditorGUI.Slider(new Rect(TimeLineRect.xMax + 5, TimeLineRect.y, 50, 16), _keyframe.Value, 0f, totalValue);
                    //_keyframe.Value = SelectedValue;
                }

                //ROLLOVER
                if (selectedIndex != index && !isDragging && _keyframe.state != KeyframeState.drag)
                {
                    if (_keyframe.iconRect.Contains(Event.current.mousePosition))
                    {
                        //Refresh = true;
                        _keyframe.state = KeyframeState.over;
                    }
                    else
                    {
                        _keyframe.state = KeyframeState.normal;
                    }
                }

                //STOP DRAG
                if (Event.current.type == EventType.mouseUp || !dragLimit.Contains(Event.current.mousePosition) && isDragging)
                {
                    if (selectedValue == _keyframe.value)
                    {
                        _keyframe.state = KeyframeState.selected;
                        isDragging      = false;
                        keyframeSet.Sort(new ordenador());
                    }
                }
            }
            else
            {
                _keyframe.state = KeyframeState.normal;
                //SelectedIndex = -1;
                //SelectedValue = -1;
            }

            //DRAW SLIDER
            _keyframe.draw();
        }

        //if (Refresh) GetWindow(typeof(TagarelaEditor)).Repaint();
    }