Ejemplo n.º 1
0
    private void PlayNextGesture()
    {
        if (allGestures.Count > 0)
        {
            AvatarGesture gesture = allGestures.Dequeue();
            Debug.Log("Playing gesture: " + gesture.Name);

            // Make pretty display name
            string gestureName = gesture.Name.ToLower();
            gestureName      = gestureName.Substring(gestureName.IndexOf('_') + 1);
            gestureName      = gestureName.Replace('_', ' ');
            gestureName      = new CultureInfo("en-US", false).TextInfo.ToTitleCase(gestureName);
            textDisplay.text = gestureName;

            // Check if Head IK needs to be disabled
            if (gesture.Name.ToLower().Contains("head"))
            {
                lookAtIk.solver.headWeight = 0.7f;
            }
            else
            {
                lookAtIk.solver.headWeight = 1;
            }

            // Perform the gesture
            gestureController.PerformGesture(gesture);
        }
        else
        {
            Debug.Log("Finished playing all gestures!");
        }
    }
    /// <summary>
    /// Makes the avatar perform the specified gesture.
    /// </summary>
    /// <param name="gesture">Name of the gesture to perform</param>
    /// <param name="callback">Function to call when the gesture completes</param>
    public void PerformGesture(string gesture, Action <AvatarGesture> callback = null)
    {
        // Lookup gesture by name
        if (!AvatarGesture.AllGestures.ContainsKey(gesture.ToLower()))
        {
            Debug.LogError("Gesture \"" + gesture + "\" not found!");
            return;
        }

        AvatarGesture ag = AvatarGesture.AllGestures[gesture.ToLower()];

        PerformGesture(ag, callback);
    }
    /// <summary>
    /// Makes the avatar perform the specified gesture.
    /// </summary>
    /// <param name="gesture">A predefined AvatarGesture.</param>
    /// <param name="callback">Function to call when the gesture completes</param>
    public void PerformGesture(AvatarGesture gesture, Action <AvatarGesture> callback = null)
    {
        if (gesture == null)
        {
            Debug.LogError("No gesture specified!");
            return;
        }

        //////////////////////////////////////////////
        // Get trigger names based on handedness

        string anim_gestureid_name;
        string anim_trigger_name;

        if (gesture.BodyPart == AvatarGesture.Body.LeftArm)
        {
            anim_gestureid_name = ANIM_LARM_GESTUREID;
            anim_trigger_name   = ANIM_LARM_TRIGGER;

            currentStateBehavior = larmStateBehavior;
        }
        else if (gesture.BodyPart == AvatarGesture.Body.RightArm)
        {
            anim_gestureid_name = ANIM_RARM_GESTUREID;
            anim_trigger_name   = ANIM_RARM_TRIGGER;

            currentStateBehavior = rarmStateBehavior;
        }
        else
        {
            anim_gestureid_name = ANIM_HEAD_GESTUREID;
            anim_trigger_name   = ANIM_HEAD_TRIGGER;

            currentStateBehavior = headStateBehavior;
        }

        //////////////////////////////////////////////
        // Trigger the gesture

        animator.SetInteger(anim_gestureid_name, gesture.Id);
        animator.SetTrigger(anim_trigger_name);

        CurrentGesture = gesture;

        //////////////////////////////////////////////
        // Callback upon completion

        if (callback != null)
        {
            // Cache currentStateBehavior
            AvatarGestureStateBehavior behavior = currentStateBehavior;

            // Create a one-shot event handler that calls the callback function
            AvatarGestureStateBehavior.StateMachineEventHandler eventHandler = null;
            eventHandler = delegate(object sender) {
                behavior.AnimationEnd -= eventHandler;                 // Unsubscribe; one-shot
                callback(gesture);
            };
            behavior.AnimationEnd += eventHandler;             // Subscribe
        }
    }
Ejemplo n.º 4
0
 private static void AddGestureToList(AvatarGesture gesture)
 {
     AllGestures.Add(gesture.Name.ToLower(), gesture);
 }
Ejemplo n.º 5
0
 private void GestureController_GestureEnd(object sender, AvatarGesture gesture)
 {
     Invoke("PlayNextGesture", 1);
 }
Ejemplo n.º 6
0
 private void GestureController_GestureStart(object sender, AvatarGesture gesture)
 {
 }