public void UpdateSize()
{
float F_SQRT2 = 1.4142135623730950488016887242097f;
Vector3 pelvis_scale = glavatar.skel.mBones["mPelvis"].scale;
Vector3 skull = glavatar.skel.mBones["mSkull"].pos;
Vector3 skull_scale = glavatar.skel.mBones["mSkull"].scale;
Vector3 neck = glavatar.skel.mBones["mNeck"].pos;
Vector3 neck_scale = glavatar.skel.mBones["mNeck"].scale;
Vector3 chest = glavatar.skel.mBones["mChest"].pos;
Vector3 chest_scale = glavatar.skel.mBones["mChest"].scale;
Vector3 head = glavatar.skel.mBones["mHead"].pos;
Vector3 head_scale = glavatar.skel.mBones["mHead"].scale;
Vector3 torso = glavatar.skel.mBones["mTorso"].pos;
Vector3 torso_scale = glavatar.skel.mBones["mTorso"].scale;
Vector3 hip = glavatar.skel.mBones["mHipLeft"].pos;
Vector3 hip_scale = glavatar.skel.mBones["mHipLeft"].scale;
Vector3 knee = glavatar.skel.mBones["mKneeLeft"].pos;
Vector3 knee_scale = glavatar.skel.mBones["mKneeLeft"].scale;
Vector3 ankle = glavatar.skel.mBones["mAnkleLeft"].pos;
Vector3 ankle_scale = glavatar.skel.mBones["mAnkleLeft"].scale;
Vector3 foot = glavatar.skel.mBones["mFootLeft"].pos;
// mAvatarOffset.Z = getVisualParamWeight(11001);
float mPelvisToFoot = hip.Z * pelvis_scale.Z -
knee.Z * hip_scale.Z -
ankle.Z * knee_scale.Z -
foot.Z * ankle_scale.Z;
Vector3 new_body_size;
new_body_size.Z = mPelvisToFoot +
// the sqrt(2) correction below is an approximate
// correction to get to the top of the head
F_SQRT2 * (skull.Z * head_scale.Z) +
head.Z * neck_scale.Z +
neck.Z * chest_scale.Z +
chest.Z * torso_scale.Z +
torso.Z * pelvis_scale.Z;
Height = new_body_size.Z;
PelvisToFoot = mPelvisToFoot;
}