Ejemplo n.º 1
0
    /// <summary>
    /// 发起回调
    /// </summary>
    private void LaunchCallBack(int frameIndex)
    {
        int index = frameIndex + 1;
        LinkageAnimationCallBack lacb = CallBacks.Find((l) => l.Index == index);

        if (lacb != null && lacb.Target)
        {
            lacb.Target.SendMessage(lacb.Method);
        }
    }
Ejemplo n.º 2
0
    public override void  OnInspectorGUI()
    {
        if (Application.isPlaying || !_LA)
        {
            return;
        }

        GUI.backgroundColor = Color.cyan;
        GUI.enabled         = true;
        EditorGUILayout.BeginHorizontal();
        if (GUILayout.Button("Edit Animation"))
        {
            LinkageAnimationEditorWindow laew = EditorWindow.GetWindow <LinkageAnimationEditorWindow>();
            laew.titleContent      = new GUIContent(EditorGUIUtility.IconContent("BuildSettings.Web.Small"));
            laew.titleContent.text = "LAWindow";
            laew.Init(_LA);
            laew.Show();
        }
        EditorGUILayout.EndHorizontal();

        GUI.backgroundColor = Color.white;
        EditorGUILayout.BeginHorizontal();
        GUILayout.Label("Playing", GUILayout.Width(80));
        _LA.Playing = GUILayout.Toggle(_LA.Playing, "");
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal();
        GUILayout.Label("Loop", GUILayout.Width(80));
        _LA.Loop = GUILayout.Toggle(_LA.Loop, "");
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal();
        GUILayout.Label("Speed", GUILayout.Width(80));
        _LA.Speed = EditorGUILayout.FloatField(_LA.Speed);
        EditorGUILayout.EndHorizontal();

        EditorGUILayout.BeginHorizontal();
        _showCallBack = EditorGUILayout.Foldout(_showCallBack, "CallBack List");
        GUILayout.FlexibleSpace();
        if (GUILayout.Button("Add CallBack", "minibutton"))
        {
            _LA.CallBacks.Add(new LinkageAnimationCallBack());
        }
        EditorGUILayout.EndHorizontal();

        if (_showCallBack)
        {
            for (int i = 0; i < _LA.CallBacks.Count; i++)
            {
                LinkageAnimationCallBack lacb = _LA.CallBacks[i];
                GUI.enabled = true;
                EditorGUILayout.BeginVertical("HelpBox");

                if (lacb.Index < 1 || lacb.Index > _LA.FrameLength)
                {
                    EditorGUILayout.BeginHorizontal();
                    EditorGUILayout.HelpBox("Frame index is out of range!", MessageType.Warning);
                    EditorGUILayout.EndHorizontal();
                }

                EditorGUILayout.BeginHorizontal();
                GUILayout.Label("Frame Index:", GUILayout.Width(100));
                lacb.Index = EditorGUILayout.IntField(lacb.Index);
                if (GUILayout.Button("x", "minibutton", GUILayout.Width(20)))
                {
                    _LA.CallBacks.RemoveAt(i);
                    break;
                }
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.BeginHorizontal();
                GUILayout.Label("Call Target:", GUILayout.Width(100));
                lacb.Target = EditorGUILayout.ObjectField(lacb.Target, typeof(GameObject), true) as GameObject;
                EditorGUILayout.EndHorizontal();

                GUI.enabled = lacb.Target;
                EditorGUILayout.BeginHorizontal();
                GUILayout.Label("Call Method:", GUILayout.Width(100));
                if (GUILayout.Button(lacb.Method, "MiniPopup"))
                {
                    GenericMenu gm  = new GenericMenu();
                    Component[] cps = lacb.Target.GetComponents <Component>();
                    for (int m = 0; m < cps.Length; m++)
                    {
                        Type         type = cps[m].GetType();
                        MethodInfo[] mis  = type.GetMethods(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance);
                        for (int n = 0; n < mis.Length; n++)
                        {
                            string name = mis[n].Name;
                            if (!name.StartsWith("set_") && !name.StartsWith("get_"))
                            {
                                gm.AddItem(new GUIContent(type.Name + "/" + name), name == lacb.Method, delegate()
                                {
                                    lacb.Method = name;
                                });
                            }
                        }
                    }
                    gm.ShowAsContext();
                }
                EditorGUILayout.EndHorizontal();

                EditorGUILayout.EndVertical();
            }
        }
    }