public Skeleton ConnectBody(Engine simroot) { if (simroot == null) { return(null); } try { string filebase = Path.GetFileNameWithoutExtension(filename).ToLower() + "."; animSkel = (Skeleton)simroot.Find(filebase + animRig + ".skeleton", Group.FIND_DESCEND | Group.FIND_EXACT); if (usehavok) { Physics physroot = Physics.Get(); Engine skelmapper; BodyPoser = (Skeleton)simroot.Find(filebase + havokRig + ".skeleton", Group.FIND_DESCEND | Group.FIND_EXACT); if ((PhysicsOptions != null)) { if (PhysicsOptions.Contains("ynamic")) { physicsOpts |= RagDoll.DYNAMIC; } if (PhysicsOptions.Contains("ower")) { physicsOpts |= RagDoll.POWERED; } BodyPoser.SetBoneOptions(0, Skeleton.BONE_ANIMATE); } else { if (BodyPoser.GetBoneName(0).StartsWith("Proxy")) { BodyPoser.SetBoneOptions(BodyPoser.GetBoneIndex("Proxy_RightWrist"), Skeleton.BONE_LOCK_ROTATION); BodyPoser.SetBoneOptions(BodyPoser.GetBoneIndex("Proxy_RightAnkle"), Skeleton.BONE_LOCK_ROTATION); BodyPoser.SetBoneOptions(BodyPoser.GetBoneIndex("Proxy_LeftWrist"), Skeleton.BONE_LOCK_ROTATION); BodyPoser.SetBoneOptions(BodyPoser.GetBoneIndex("Proxy_LeftAnkle"), Skeleton.BONE_LOCK_ROTATION); } } BodyPoser.Control |= physicsOpts; BodyPoser.Active = false; skelmapper = (Engine)BodyPoser.Find(".mapper", Group.FIND_END | Group.FIND_CHILD); if (skelmapper != null) { skelmapper.Active = true; } if (physroot != null) { bodySim = (Engine)physroot.Find(filebase + "cloth", Group.FIND_DESCEND | Group.FIND_EXACT); } if (bodySim == null) { bodySim = (Engine)physroot.Find(".skin", Group.FIND_DESCEND | Group.FIND_END); } if (physicsOpts != 0) { physroot.Active = true; } bodySkeleton = (Model)bodyModel.Find(havokRig, Group.FIND_DESCEND | Group.FIND_END); if (bodySkeleton != null) { bodySkeleton.Active = false; RightHand = (Model)bodySkeleton.Find("RightWrist", Group.FIND_DESCEND | Group.FIND_END); LeftHand = (Model)bodySkeleton.Find("LeftWrist", Group.FIND_DESCEND | Group.FIND_END); Head = (Model)bodySkeleton.Find("Head", Group.FIND_DESCEND | Group.FIND_END); } } else { bodySim = (Engine)simroot.Find(".skin", Group.FIND_DESCEND | Group.FIND_END); BodyPoser = animSkel; } Show(); } catch (Exception) { // do nothing, simulation tree does not have SCAPESkin and BodyPoser } return(BodyPoser); }