public override void ReadData(BinaryReader stream, IDictionary <object, object> userdata, int totalSize) { UnknownFloat1 = stream.ReadSingle(); UnknownVector1 = stream.ReadVec4AsVec3(); UnknownVector2 = stream.ReadVec4AsVec3(); Usage = stream.ReadSizedString(); UnknownString = stream.ReadSizedString(); UnknownGuid = stream.ReadGuid(); int num = stream.ReadInt32(); Bodies.Clear(); Bodies.Capacity = num; for (int i = 0; i < num; i++) { var body = new Body(); body.UnknownString1 = stream.ReadSizedString(); body.UnknownBool = stream.ReadBoolean(); body.UnknownString2 = stream.ReadSizedString(); body.UnknownString3 = stream.ReadSizedString(); body.UnknownFloat1 = stream.ReadSingle(); body.UnknownVector1 = stream.ReadVec4AsVec3(); body.UnknownVector2 = stream.ReadVec4AsVec3(); body.UnknownFloat2 = stream.ReadSingle(); body.UnknownVector3 = stream.ReadVec4AsVec3(); body.UnknownVector4 = stream.ReadVec4AsVec3(); body.UnknownFloat3 = stream.ReadSingle(); body.UnknownFloat4 = stream.ReadSingle(); Bodies.Add(body); } UnknownInt = stream.ReadInt32(); num = stream.ReadInt32(); Constraints.Clear(); Constraints.Capacity = num; for (int i = 0; i < num; i++) { var version = stream.ReadUInt32(); var type = stream.ReadSizedString(); var s1 = stream.ReadSizedString(); var s2 = stream.ReadSizedString(); var s3 = stream.ReadSizedString(); var tf = stream.ReadTransform(); Constraint constraint = null; switch (type) { case HingeJointConstraint.TYPE: var hinge = new HingeJointConstraint(); hinge.UnknownFloat1 = stream.ReadSingle(); hinge.UnknownFloat2 = stream.ReadSingle(); constraint = hinge; break; case D6JointConstraint.TYPE: var d6 = new D6JointConstraint(); d6.Constraint1 = stream.ReadSizedString(); d6.Constraint2 = stream.ReadSizedString(); d6.Constraint3 = stream.ReadSizedString(); d6.Constraint4 = stream.ReadSizedString(); d6.Constraint5 = stream.ReadSizedString(); d6.Constraint6 = stream.ReadSizedString(); d6.UnknownFloat1 = stream.ReadSingle(); d6.UnknownFloat2 = stream.ReadSingle(); d6.UnknownFloat3 = stream.ReadSingle(); d6.UnknownFloat4 = stream.ReadSingle(); d6.UnknownFloat5 = stream.ReadSingle(); constraint = d6; break; case IKConstraint.TYPE: var ik = new IKConstraint(); ik.UnknownUint = stream.ReadUInt32(); ik.UnknownFloat1 = stream.ReadSingle(); ik.UnknownFloat2 = stream.ReadSingle(); ik.UnknownFloat3 = stream.ReadSingle(); ik.UnknownFloat4 = stream.ReadSingle(); constraint = ik; break; default: throw new Exception("Unknown constraint type: " + type); } constraint.UnknownString1 = s1; constraint.UnknownString2 = s2; constraint.UnknownString3 = s3; constraint.UnknownTransform = tf; Constraints.Add(constraint); } }
public override void ReadData(BinaryReader stream, IDictionary <object, object> userdata, int totalSize) { BoundingBoxPadding = stream.ReadSingle(); BoundingBoxMin = stream.ReadVec4AsVec3(); BoundingBoxMax = stream.ReadVec4AsVec3(); Usage = stream.ReadSizedString(); UnknownString = stream.ReadSizedString(); UnknownGuid = stream.ReadGuid(); int num = stream.ReadInt32(); Bodies.Clear(); Bodies.Capacity = num; for (int i = 0; i < num; i++) { var body = new Body(); body.BoneName = stream.ReadSizedString(); body.EnableBlend = stream.ReadBoolean(); body.Type = stream.ReadSizedString(); body.BodyType = stream.ReadSizedString(); body.Mass = stream.ReadSingle(); body.RagdollPosition1 = stream.ReadVec4AsVec3(); body.RagdollPosition2 = stream.ReadVec4AsVec3(); body.RagdollRadius = stream.ReadSingle(); body.CollisionPosition1 = stream.ReadVec4AsVec3(); body.CollisionPosition2 = stream.ReadVec4AsVec3(); body.CollisionRadius = stream.ReadSingle(); body.CollisionMaxRadius = stream.ReadSingle(); Bodies.Add(body); } UnknownInt = stream.ReadInt32(); num = stream.ReadInt32(); Constraints.Clear(); Constraints.Capacity = num; for (int i = 0; i < num; i++) { var version = stream.ReadUInt32(); var type = stream.ReadSizedString(); var s1 = stream.ReadSizedString(); var s2 = stream.ReadSizedString(); var s3 = stream.ReadSizedString(); var rot = stream.ReadQuat(); var pos = stream.ReadVec4AsVec3(); Constraint constraint = null; switch (type) { case HingeJointConstraint.TYPE: var hinge = new HingeJointConstraint(); hinge.UnknownFloat1 = stream.ReadSingle(); hinge.UnknownFloat2 = stream.ReadSingle(); constraint = hinge; break; case D6JointConstraint.TYPE: var d6 = new D6JointConstraint(); d6.AxisLockX = stream.ReadSizedString(); d6.AxisLockY = stream.ReadSizedString(); d6.AxisLockZ = stream.ReadSizedString(); d6.TwistLock = stream.ReadSizedString(); d6.Swing1Lock = stream.ReadSizedString(); d6.Swing2Lock = stream.ReadSizedString(); d6.AxisLimit = stream.ReadSingle(); d6.TwistLowerLimit = stream.ReadSingle(); d6.TwistUpperLimit = stream.ReadSingle(); d6.Swing1Limit = stream.ReadSingle(); d6.Swing2Limit = stream.ReadSingle(); constraint = d6; break; case IKConstraint.TYPE: var ik = new IKConstraint(); ik.UnknownUint = stream.ReadUInt32(); ik.Swing1Limit = stream.ReadSingle(); ik.Swing2Limit = stream.ReadSingle(); ik.TwistLowerLimit = stream.ReadSingle(); ik.TwistUpperLimit = stream.ReadSingle(); constraint = ik; break; default: throw new Exception("Unknown constraint type: " + type); } constraint.Name = s1; constraint.Bone1 = s2; constraint.Bone2 = s3; constraint.EntitySpaceRotation = rot; constraint.Position = pos; Constraints.Add(constraint); } }