public void SetHandShape(Global.Side side, Global.HandPose handPose)
 {
     if (side == Global.Side.LEFT)
     {
         HandControl.SetLeftHand((int)handPose);
     }
     else if (side == Global.Side.RIGHT)
     {
         HandControl.SetRightHand((int)handPose);
     }
 }
    // Trigger event based on event name and event attribute+value
    private void TriggerEvent(string eventName)
    {
        if (eventName == "gesture")
        {
            float  speed = 1.0f, blend = 0.15f;
            int    strength = 100;
            string type     = "neutral";

            // Required
            int poseIndex = int.Parse(root.ChildNodes.Item(action).Attributes["pose"].Value);
            // Optional
            if (root.ChildNodes.Item(action).Attributes["speed"] != null)
            {
                speed = float.Parse(root.ChildNodes.Item(action).Attributes["speed"].Value);
            }
            if (root.ChildNodes.Item(action).Attributes["blend"] != null)
            {
                blend = float.Parse(root.ChildNodes.Item(action).Attributes["blend"].Value);
            }
            if (root.ChildNodes.Item(action).Attributes["offset"] != null)
            {
                type = root.ChildNodes.Item(action).Attributes["offset"].Value;
            }
            if (root.ChildNodes.Item(action).Attributes["strength"] != null)
            {
                strength = int.Parse(root.ChildNodes.Item(action).Attributes["strength"].Value);
            }

            //
            Global.BodyOffset offsetType = Global.BodyOffset.NEUTRAL;
            if (type == "forward")
            {
                offsetType = Global.BodyOffset.FORWARD;
            }
            else if (type == "backward")
            {
                offsetType = Global.BodyOffset.BACKWARD;
            }
            else if (type == "inward")
            {
                offsetType = Global.BodyOffset.INWARD;
            }
            else if (type == "outward")
            {
                offsetType = Global.BodyOffset.OUTWARD;
            }

            currentEvent.ChangePose(poseIndex, speed, blend);
            currentEvent.CharacterOffset(offsetType, strength);
        }

        if (eventName == "facial")
        {
            int strength = 100;

            // Required
            string emotion = root.ChildNodes.Item(action).Attributes["emotion"].Value;
            // Optional
            if (root.ChildNodes.Item(action).Attributes["strength"] != null)
            {
                strength = int.Parse(root.ChildNodes.Item(action).Attributes["strength"].Value);
            }

            //
            Global.Emotion emotionType = Global.Emotion.CONTENT;
            if (emotion == "angry")
            {
                emotionType = Global.Emotion.ANGRY;
            }
            else if (emotion == "bored")
            {
                emotionType = Global.Emotion.BORED;
            }
            else if (emotion == "content")
            {
                emotionType = Global.Emotion.CONTENT;
            }
            else if (emotion == "happy")
            {
                emotionType = Global.Emotion.HAPPY;
            }

            currentEvent.SetExpression(emotionType, strength);
        }

        if (eventName == "hand")
        {
            // Required
            string side  = root.ChildNodes.Item(action).Attributes["side"].Value;
            string shape = root.ChildNodes.Item(action).Attributes["shape"].Value;

            //
            Global.Side sideType = Global.Side.BOTH;
            if (side == "L")
            {
                sideType = Global.Side.LEFT;
            }
            else if (side == "R")
            {
                sideType = Global.Side.RIGHT;
            }

            Global.HandPose handType = Global.HandPose.RELAX;
            if (shape == "relax")
            {
                handType = Global.HandPose.RELAX;
            }
            else if (shape == "palm")
            {
                handType = Global.HandPose.PALM;
            }
            else if (shape == "fist")
            {
                handType = Global.HandPose.FIST;
            }

            currentEvent.SetHandShape(sideType, handType);
        }

        if (eventName == "foot")
        {
            // Required
            string status = root.ChildNodes.Item(action).Attributes["status"].Value;
            //
            if (status == "lock")
            {
                currentEvent.LockFoot(true);
            }
            else
            {
                currentEvent.LockFoot(false);
            }
        }

        if (eventName == "request")
        {
            string message = "";
            // Optional
            if (root.ChildNodes.Item(action).Attributes["message"] != null)
            {
                message = root.ChildNodes.Item(action).Attributes["message"].Value;
            }

            currentEvent.CheckSignal();
        }

        if (eventName == "slide")
        {
            int step = 1;
            // Required
            string direction = root.ChildNodes.Item(action).Attributes["direction"].Value;
            // Optional
            if (root.ChildNodes.Item(action).Attributes["step"] != null)
            {
                step = int.Parse(root.ChildNodes.Item(action).Attributes["step"].Value);
            }

            //
            Global.Direction directionType = Global.Direction.NEXT;
            if (direction == "back")
            {
                directionType = Global.Direction.BACK;
            }

            currentEvent.ChangeSlide(directionType, step);
            currentEvent.ChangeAudio(directionType, step);
        }
    }