Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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);
            }
        }