IEnumerator ApplyMessageAfterDelay()
    {
        yield return(new WaitForSeconds(_pendingData.delay));

        SetBool(_pendingData.parameter, _pendingData.boolValue);
        _pendingData = null;
    }
 public void ReceiveAnimatorMessage(AnimHelperMessageData message, UIAnimHelper messageSender)
 {
     if (message.delay == 0f)
     {
         SetBool(message.parameter, message.boolValue);
     }
     else
     {
         _pendingData = message;
         StartCoroutine("ApplyMessageAfterDelay");
     }
 }
 public void ReceiveParameterBindMessage(AnimHelperMessageData message, UIAnimHelper messageSender, bool sourceValue)
 {
     SetBool(message.parameter, message.boolValue == false ? sourceValue : !sourceValue);
 }
Exemple #4
0
    public override void OnInspectorGUI()
    {
        UIAnimHelper helper = myUIAnimHelper;

        if (myUIAnimHelper != null)
        {
        }
        else
        {
            return;
        }

        //DrawDefaultInspector();

        EditorGUILayout.BeginVertical();
        GUILayout.Label("STATE BASED ANIMATOR MESSAGES");
        EditorGUILayout.EndVertical();


        EditorGUILayout.BeginHorizontal();
        GUILayout.Label("use instant transitions");
        helper.usesInstantTransitions = EditorGUILayout.Toggle(helper.usesInstantTransitions);
        GUILayout.Label("turn on at start");
        helper.setAnimatorOnAtStart = EditorGUILayout.Toggle(helper.setAnimatorOnAtStart);
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.Space();

        string[] states = animator.GetBehaviours <UIAnimHelper_AnimatorStateBehaviour>().Select(sms => sms.state).ToArray();

        string[] myParameters = animator.gameObject.activeInHierarchy ? animator.parameters.Where(p => p.type == AnimatorControllerParameterType.Bool).Select(p => p.name).ToArray() : new string[0];


        EditorGUILayout.BeginVertical();
        foreach (AnimHelperMessageData message in myUIAnimHelper.AnimatorMessagesToSend)
        {
            EditorGUILayout.BeginVertical();

            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("send to", GUILayout.Width(GetWidthOfRectFromWeight(0)));
            GUILayout.Label("from state", GUILayout.Width(GetWidthOfRectFromWeight(1)));
            GUILayout.Label("parameter", GUILayout.Width(GetWidthOfRectFromWeight(2)));
            GUILayout.Label("value", GUILayout.Width(GetWidthOfRectFromWeight(3)));
            GUILayout.Label("delay", GUILayout.Width(GetWidthOfRectFromWeight(4)));
            //GUILayout.FlexibleSpace();

            EditorGUILayout.EndHorizontal();


            EditorGUILayout.BeginHorizontal();
            message.animator = (Animator)EditorGUILayout.ObjectField((Object)message.animator, typeof(Animator), true, GUILayout.Width(GetWidthOfRectFromWeight(0)));


            if (states.Length == 0)
            {
                EditorGUILayout.LabelField("No animator states found");
            }
            else
            {
                int selectedIndex = System.Array.IndexOf(states, message.stateNameToSendMessage);
                if (selectedIndex == -1)
                {
                    selectedIndex = 0;                     // make sure we select something by default
                }
                selectedIndex = EditorGUILayout.Popup(selectedIndex, states, GUILayout.Width(GetWidthOfRectFromWeight(1)));
                message.stateNameToSendMessage = states[selectedIndex];
                //m_selectedState = states[selectedIndex];
            }

            string[] parameters = message.animator != null?message.animator.parameters.Where(p => p.type == AnimatorControllerParameterType.Bool).Select(p => p.name).ToArray() : new string[0];

            // get the names of all bool parameters
            if (message.animator == null)
            {
                EditorGUILayout.LabelField("Assign an animator first!!", GUILayout.Width(GetWidthOfRectFromWeight(2)));
            }

            else if (parameters.Length == 0)
            {
                EditorGUILayout.LabelField("No bool parameters found", GUILayout.Width(GetWidthOfRectFromWeight(2)));
                EditorUtility.SetDirty(target);
                EditorUtility.SetDirty(message.animator.gameObject);
                //Debug.Log(message.animator);
                //Debug.Log(message.animator.runtimeAnimatorController);
                //string[] test = message.animator.parameters.Where( p => p.type == AnimatorControllerParameterType.Bool).Select( p => p.name).ToArray();
                //Debug.Log(test.Length);
                //string[] test = AnimHelperMessageData.GetParameters(message.animator).Where( p => p.type == AnimatorControllerParameterType.Bool).Select( p => p.name).ToArray();
                //Debug.Log(test.Length);
            }
            else
            {
                int selectedIndex = System.Array.IndexOf(parameters, message.parameter);
                if (selectedIndex == -1)
                {
                    selectedIndex = 0;                     // make sure we select something by default
                }
                selectedIndex     = EditorGUILayout.Popup(selectedIndex, parameters, GUILayout.Width(GetWidthOfRectFromWeight(2)));
                message.parameter = parameters[selectedIndex];
            }


            message.boolValue = EditorGUILayout.Toggle(message.boolValue, GUILayout.Width(GetWidthOfRectFromWeight(3)));
            message.delay     = EditorGUILayout.FloatField(message.delay, GUILayout.Width(GetWidthOfRectFromWeight(4)));

            if (GUILayout.Button("-", GUILayout.Width(GetWidthOfRectFromWeight(5))))
            {
                messageToRemove = message;
                //DestroyImmediate(message);
            }

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

            //EditorGUILayout.Space();
            EditorUtility.SetDirty(target);
        }
        EditorGUILayout.EndVertical();

        if (messageToRemove != null)
        {
            myUIAnimHelper.AnimatorMessagesToSend.Remove(messageToRemove);
            messageToRemove = null;
        }

        if (GUILayout.Button("Add Animator State Message"))
        {
            myUIAnimHelper.AnimatorMessagesToSend.Add(new AnimHelperMessageData());
        }



        //BOOL BINDING SECTION



        EditorGUILayout.BeginVertical();
        EditorGUILayout.Space();
        GUILayout.Label("PARAMETER BINDING MESSAGES");
        EditorGUILayout.EndVertical();


        EditorGUILayout.BeginVertical();
        foreach (AnimHelperMessageData message in myUIAnimHelper.ParameterBindMessagesToSend)
        {
            EditorGUILayout.BeginVertical();

            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("send to", GUILayout.Width(GetWidthOfRectFromWeight(0)));
            GUILayout.Label("source parameter", GUILayout.Width(GetWidthOfRectFromWeight(1)));
            GUILayout.Label("target parameter", GUILayout.Width(GetWidthOfRectFromWeight(2)));
            GUILayout.Label("Invert?", GUILayout.Width(GetWidthOfRectFromWeight(3)));
            //GUILayout.Label("delay", GUILayout.Width(GetWidthOfRectFromWeight(4)));
            //GUILayout.FlexibleSpace();

            EditorGUILayout.EndHorizontal();


            EditorGUILayout.BeginHorizontal();
            message.animator = (Animator)EditorGUILayout.ObjectField((Object)message.animator, typeof(Animator), true, GUILayout.Width(GetWidthOfRectFromWeight(0)));

            if (myParameters.Length == 0)
            {
                EditorGUILayout.LabelField("No parameters found!");
            }
            else
            {
                int selectedIndex = System.Array.IndexOf(myParameters, message.sourceParamterBoundTo);
                if (selectedIndex == -1)
                {
                    selectedIndex = 0;                     // make sure we select something by default
                }
                selectedIndex = EditorGUILayout.Popup(selectedIndex, myParameters, GUILayout.Width(GetWidthOfRectFromWeight(1)));
                message.sourceParamterBoundTo = myParameters[selectedIndex];
                //m_selectedState = states[selectedIndex];
            }

            string[] parameters = message.animator != null?message.animator.parameters.Where(p => p.type == AnimatorControllerParameterType.Bool).Select(p => p.name).ToArray() : new string[0];

            // get the names of all bool parameters
            if (message.animator == null)
            {
                EditorGUILayout.LabelField("Assign an animator first!!", GUILayout.Width(GetWidthOfRectFromWeight(2)));
            }

            else if (parameters.Length == 0)
            {
                EditorGUILayout.LabelField("No bool parameters found", GUILayout.Width(GetWidthOfRectFromWeight(2)));
                EditorUtility.SetDirty(target);
                EditorUtility.SetDirty(message.animator.gameObject);
                //Debug.Log(message.animator);
                //Debug.Log(message.animator.runtimeAnimatorController);
                //string[] test = message.animator.parameters.Where( p => p.type == AnimatorControllerParameterType.Bool).Select( p => p.name).ToArray();
                //Debug.Log(test.Length);
                //string[] test = AnimHelperMessageData.GetParameters(message.animator).Where( p => p.type == AnimatorControllerParameterType.Bool).Select( p => p.name).ToArray();
                //Debug.Log(test.Length);
            }
            else
            {
                int selectedIndex = System.Array.IndexOf(parameters, message.parameter);
                if (selectedIndex == -1)
                {
                    selectedIndex = 0;                     // make sure we select something by default
                }
                selectedIndex     = EditorGUILayout.Popup(selectedIndex, parameters, GUILayout.Width(GetWidthOfRectFromWeight(2)));
                message.parameter = parameters[selectedIndex];
            }


            message.boolValue = EditorGUILayout.Toggle(message.boolValue, GUILayout.Width(GetWidthOfRectFromWeight(3)));
            //message.delay = EditorGUILayout.FloatField(message.delay, GUILayout.Width(GetWidthOfRectFromWeight(4)));

            if (GUILayout.Button("-", GUILayout.Width(GetWidthOfRectFromWeight(5))))
            {
                messageToRemove = message;
                //DestroyImmediate(message);
            }

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

            EditorGUILayout.Space();
            EditorUtility.SetDirty(target);
        }
        EditorGUILayout.EndVertical();

        if (messageToRemove != null)
        {
            myUIAnimHelper.ParameterBindMessagesToSend.Remove(messageToRemove);
            messageToRemove = null;
        }


        if (GUILayout.Button("Add Parameter Binding Message"))
        {
            myUIAnimHelper.ParameterBindMessagesToSend.Add(new AnimHelperMessageData());
        }

        //if (EditorGUI.EndChangeCheck())
        //{
        //    EditorUtility.SetDirty(target);
        //}
    }