// Use this for initialization
    void Start()
    {
        //        jointDOF = new Vector3[] {        };
        jointNames = new string[] {
            "Neck_Flexion",
            "Neck_LateralFlexion",
            "L_Shoulder_Flexion",
            "L_Shoulder_Abduction",
            "L_Shoulder_HorizontalAbduction",
            "L_Elbow_Flexion",
            "R_Shoulder_Flexion",
            "R_Shoulder_Abduction",
            "R_Shoulder_HorizontalAbduction",
            "R_Elbow_Flexion",
            "L_Hip_Flexion",
            "L_Hip_Abduction",
            "L_Hip_Rotation",
            "R_Hip_Flexion",
            "R_Hip_Abduction",
            "R_Hip_Rotation",
            "R_Knee_Flexion",
            "L_Knee_Flexion",
            "Spine_Flexion",
            "Spine_LateralFlexion",
            "Spine_Rotation"
        };
        int numJoints;

        numJoints   = jointNames.Length;
        jointAng    = new float[numJoints];
        jointAngMin = new float[numJoints];
        jointAngMax = new float[numJoints];

        bodyDict = new Dictionary <string, int>();
        int ii = 0;

        //bodyDict maps jointDOFNames to index of JointAng
        foreach (string t in jointNames)
        {
            //print("bodyDict add:" + jointNames[ii]);
            bodyDict.Add(jointNames[ii], ii);
            ii++;
        }
        AvatarSkeleton.GetAvatarSkeleton(gameObject, ref avatarSkeleton);

        if (animatorComponent == null)
        {
            animatorComponent = gameObject.GetComponent <Animator>();
        }

        numJoints = avatarSkeleton.boneIndexCount();
        // print("nJ=" + numJoints);
        localAngles = new Vector3[numJoints];

        //        jointNames = new string[numJoints];
        boneNames  = new string[numJoints];
        bonePos    = new Vector3[numJoints];
        bonePosMin = new Vector3[numJoints];
        bonePosMax = new Vector3[numJoints];


        for (int i = 0; i < numJoints; i++)
        {
            int    boneIndex = i;
            string jointName = avatarSkeleton.boneIndex2Name(boneIndex);
            //print(" joint mecanim name=" + jointName);
            boneNames[i] = jointName;
        }


        resetMinMax  = true;
        updateMinMax = true;        //false;
        Update();
        moving  = false;
        initted = true;
    }