Beispiel #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]);
            }
        }
    }
Beispiel #2
0
 public void OnDestroy()
 {
     if (dialog == ScreenDialog.Timeline)
     {
         if (EditorUtility.DisplayDialog("Close animation", "Do you want to save?        ", "Yes", "No"))
         {
             string audioName = SelectedAudioclip != null ? SelectedAudioclip.name : "";
             TagarelaFileManager.Save(fileName, tagarela.smrTotal, guiTimeline.keyframeSet, 0, audioName, tagarela.settings.animationTime);
         }
     }
     SelectedAudioclip = null;
     if (tagarela != null)
     {
         tagarela.Clean();
     }
     CleanVars();
 }
Beispiel #3
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();
        }
    }