internal RawTransform([NotNull] xform transform) { Translation = transform.t; Rotation = transform.q; Scale = transform.s; }
internal RawTransform([NotNull] xform transform) { LocalPosition = transform.t; LocalRotation = transform.q; LocalScale = transform.s; }
public void AddBone(Transform parent, Transform bone) { string parentPath = BonePath(parent.m_GameObject.instance.m_Name); string bonePath = parentPath + "/" + bone.m_GameObject.instance.m_Name; uint bonePathHash = Animator.StringToHash(bonePath); uint boneHash = Animator.StringToHash(bone.m_GameObject.instance.m_Name); int idx; for (idx = 0; idx < m_TOS.Count; idx++) { var data = m_TOS[idx]; if (data.Key > bonePathHash) { break; } } m_TOS.Insert(idx, new KeyValuePair<uint, string>(bonePathHash, bonePath)); uint parentHash = BoneHash(parent.m_GameObject.instance.m_Name); for (int i = 0; i < m_Avatar.m_AvatarSkeleton.m_ID.Count; i++) { if (m_Avatar.m_AvatarSkeleton.m_ID[i] == parentHash) { int cIdx = i + BoneIndex(parent, bone); m_Avatar.m_AvatarSkeleton.m_Node.Insert(cIdx, new Node(i, -1)); m_Avatar.m_AvatarSkeleton.m_ID.Insert(cIdx, bonePathHash); m_Avatar.m_SkeletonNameIDArray.Insert(cIdx, boneHash); Matrix m = Matrix.Transpose(Matrix.Invert(Transform.WorldTransform(bone))); Vector3 t, s; Quaternion q; m.Decompose(out s, out q, out t); xform boneXform = new xform(new Vector4(t, 0), q, new Vector4(s, 1)); m_Avatar.m_AvatarSkeletonPose.m_X.Insert(cIdx, boneXform); m_Avatar.m_DefaultPose.m_X.Insert(cIdx, boneXform); for (int j = cIdx + 1; j < m_Avatar.m_AvatarSkeleton.m_ID.Count; j++) { if (m_Avatar.m_AvatarSkeleton.m_Node[j].m_ParentId >= cIdx) { m_Avatar.m_AvatarSkeleton.m_Node[j].m_ParentId++; } } break; } } if (m_TOS.Count != m_Avatar.m_AvatarSkeleton.m_Node.Count) { Report.ReportLog("Warning! Parent Transform " + parent.m_GameObject.instance.m_Name + " not found in Avatar member m_ID"); } }
public Human(Stream stream) { BinaryReader reader = new BinaryReader(stream); m_RootX = new xform(stream); m_Skeleton = new Skeleton(stream); m_SkeletonPose = new SkeletonPose(stream); m_LeftHand = new Hand(stream); m_RightHand = new Hand(stream); int numHandles = reader.ReadInt32(); m_Handles = new List<Handle>(numHandles); for (int i = 0; i < numHandles; i++) { m_Handles.Add(new Handle(stream)); } int numColliders = reader.ReadInt32(); m_ColliderArray = new List<Collider>(numColliders); for (int i = 0; i < numColliders; i++) { m_ColliderArray.Add(new Collider(stream)); } int numIndexes = reader.ReadInt32(); m_HumanBoneIndex = new List<int>(numIndexes); for (int i = 0; i < numIndexes; i++) { m_HumanBoneIndex.Add(reader.ReadInt32()); } int numMasses = reader.ReadInt32(); m_HumanBoneMass = new List<float>(numMasses); for (int i = 0; i < numMasses; i++) { m_HumanBoneMass.Add(reader.ReadSingle()); } int numColliderIndexes = reader.ReadInt32(); m_ColliderIndex = new List<int>(numColliderIndexes); for (int i = 0; i < numColliderIndexes; i++) { m_ColliderIndex.Add(reader.ReadInt32()); } m_Scale = reader.ReadSingle(); m_ArmTwist = reader.ReadSingle(); m_ForeArmTwist = reader.ReadSingle(); m_UpperLegTwist = reader.ReadSingle(); m_LegTwist = reader.ReadSingle(); m_ArmStretch = reader.ReadSingle(); m_LegStretch = reader.ReadSingle(); m_FeetSpacing = reader.ReadSingle(); m_HasLeftHand = reader.ReadBoolean(); m_HasRightHand = reader.ReadBoolean(); reader.ReadBytes(2); }
public Handle(Stream stream) { BinaryReader reader = new BinaryReader(stream); m_X = new xform(stream); m_ParentHumanIndex = reader.ReadUInt32(); m_ID = reader.ReadUInt32(); }
public Collider(Stream stream) { BinaryReader reader = new BinaryReader(stream); m_X = new xform(stream); m_Type = reader.ReadUInt32(); m_XMotionType = reader.ReadUInt32(); m_YMotionType = reader.ReadUInt32(); m_ZMotionType = reader.ReadUInt32(); m_MinLimitX = reader.ReadSingle(); m_MaxLimitX = reader.ReadSingle(); m_MaxLimitY = reader.ReadSingle(); m_MaxLimitZ = reader.ReadSingle(); }
public AvatarConstant(Stream stream) { BinaryReader reader = new BinaryReader(stream); m_AvatarSkeleton = new Skeleton(stream); m_AvatarSkeletonPose = new SkeletonPose(stream); m_DefaultPose = new SkeletonPose(stream); int numIDs = reader.ReadInt32(); m_SkeletonNameIDArray = new List<uint>(numIDs); for (int i = 0; i < numIDs; i++) { m_SkeletonNameIDArray.Add(reader.ReadUInt32()); } m_Human = new Human(stream); int numIndexes = reader.ReadInt32(); m_HumanSkeletonIndexArray = new List<int>(numIndexes); for (int i = 0; i < numIndexes; i++) { m_HumanSkeletonIndexArray.Add(reader.ReadInt32()); } int numReverseIndexes = reader.ReadInt32(); m_HumanSkeletonReverseIndexArray = new List<int>(numReverseIndexes); for (int i = 0; i < numReverseIndexes; i++) { m_HumanSkeletonReverseIndexArray.Add(reader.ReadInt32()); } m_RootMotionBoneIndex = reader.ReadInt32(); m_RootMotionBoneX = new xform(stream); m_RootMotionSkeleton = new Skeleton(stream); m_RootMotionSkeletonPose = new SkeletonPose(stream); int numMotionIndexes = reader.ReadInt32(); m_RootMotionSkeletonIndexArray = new List<int>(numMotionIndexes); for (int i = 0; i < numMotionIndexes; i++) { m_RootMotionSkeletonIndexArray.Add(reader.ReadInt32()); } }