コード例 #1
0
        public override int loadbody(BinaryReader br)
        {
            var name = br.ReadPackString();
            int meshCount = br.ReadInt32();
            int size = name.Length + 9;

            MeshNames = new List<string>(size);
            for (int i = 0; i < meshCount; i++)
            {
                var meshName = br.ReadPackString();
                MeshNames.Add(meshName);
                size += meshName.Length + 4;
            }

            return size;
        }
コード例 #2
0
        public void LoadBody(byte[] array)
        {
            BinaryReader br = new BinaryReader(new MemoryStream(array));
            // matname = br.ReadPackString();
            int lodcount = br.ReadInt32();
            LODs = new List<Model>();
            for (int i = 0; i < lodcount; i++)
            {
                SubSet[] LodSubset = new SubSet[br.ReadInt32()];
                for (int j = 0; j < LodSubset.Length; j++)
                {
                    string[] names = new string[br.ReadInt32()];
                    for (int n = 0; n < names.Length; n++)
                        names[n] = br.ReadPackString();
                    LodSubset[j] = new SubSet(names);
                }
                LODs.Add(new Model(LodSubset));
            }

            IsShadowCaster = br.ReadBoolean();
            IsShadowReceiver = br.ReadBoolean();
            NeedRotate = br.ReadBoolean();
            isTransparent = br.ReadBoolean();
            isSelfIllumination = br.ReadBoolean();
        }
コード例 #3
0
ファイル: Skeleton.cs プロジェクト: KatekovAnton/Game
        public static Skeleton FromStream(BinaryReader stream)
        {
            var bones = new Bone[stream.ReadInt32()];
            var parentNames = new string[bones.Length];
            Bone root = null;

            for (int i = 0; i < bones.Length; i++)
            {
                bones[i] = new Bone();
                bones[i].index = i;
                bones[i].Name = stream.ReadPackString();
                parentNames[i] = stream.ReadPackString();
                if (parentNames[i] == "-\0")
                    root = bones[i];
            }

            if (root == null)
                throw new Exception("Root bone can not be null");

            var skeleton = new Skeleton();
            skeleton.Init(root, bones);
            for (int i = 0; i < bones.Length; i++)
            {
                bones[i].BaseMatrix = stream.ReadMatrix();
                if (bones[i] != root)
                    bones[i].Parent = bones[skeleton.IndexOf(parentNames[i])];
            }
            foreach (Bone b in bones)
            {
                List<Bone> chl = new List<Bone>();
                for (int i = 0; i < bones.Length; i++)
                    if (bones[i].Parent == b)
                        chl.Add(bones[i]);
                b.Childrens = chl.ToArray();
            }

            return skeleton;
        }
コード例 #4
0
        public override void loadbody(byte[] buffer)
        {
            //  vertexdeclaration = new VertexPositionNormalTexture();
            BinaryReader br = new BinaryReader(new MemoryStream(buffer));
            vertices = new SkinnedVertex[br.ReadInt32()];
            indices = new int[br.ReadInt32()];

            for (int bv = 0; bv < vertices.Length; bv++)
            {
                Vector3 pos = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
                Vector3 nor = new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle());
                Vector2 tcr = new Vector2(br.ReadSingle(), br.ReadSingle());

                Vector3 bindx = new Vector3();
                Vector3 bwigs = new Vector3();

                int relationBoneCount = br.ReadInt32();
                if (relationBoneCount > 3)
                    throw new Exception("Too many bones in skin!!!");
                var boneIndices = new int[] { 0, 0, 0 };
                for (var j = 0; j < relationBoneCount; j++)
                {
                    string name = br.ReadPackString();
                    boneIndices[j] = skeleton.IndexOf(name);
                }
                bindx.X = boneIndices[0];
                bindx.Y = boneIndices[1];
                bindx.Z = boneIndices[2];

                relationBoneCount = br.ReadInt32();
                float[] boneWeight = new float[] { 0.0f, 0.0f, 0.0f };
                for (var j = 0; j < relationBoneCount; j++)
                    boneWeight[j] = br.ReadSingle();
                bwigs.X = boneWeight[0];
                bwigs.Y = boneWeight[1];
                bwigs.Z = boneWeight[2];

                vertices[bv] = new SkinnedVertex(
                    pos,
                    nor,
                    tcr,
                    bindx,
                    bwigs);
            }

            for (int bv = 0; bv < indices.Length; bv++)
                indices[bv] = br.ReadInt32();

            br.Close();
        }
コード例 #5
0
        public void LoadBody(byte[] array)
        {
            BinaryReader br = new BinaryReader(new MemoryStream(array));
            matname = br.ReadPackString();

            RODName = br.ReadPackString();

            IsRCCMEnabled = br.ReadBoolean();
            if (IsRCCMEnabled)
                RCCMName = br.ReadPackString();
            else
            {
                RCShapeType = br.ReadInt32();
                RCShapeSize = br.ReadVector3();
            }
            IsAnimated = br.ReadBoolean();
            if (IsAnimated)
            {
                CharacterName = br.ReadPackString();
                IsRCCMAnimated = br.ReadBoolean();
            }

            BehaviourType = br.ReadInt32();
            switch (BehaviourType)
            {
                case objectmovingbehaviourmodel:
                    { } break;
                case objectphysicbehaviourmodel:
                    {
                        ShapeType = br.ReadInt32();
                        if (ShapeType == 0)
                        {
                            PhysXShapeType = br.ReadInt32();
                            ShapeSize = new Vector3(br.ReadSingle(),
                            br.ReadSingle(),
                            br.ReadSingle());
                            //read shape type, size of shape, rotation axis and angle
                        }
                        if (ShapeType == 1)
                        {
                            PhysicCollisionName = br.ReadPackString();
                        }
                        IsStatic = br.ReadBoolean();
                        if (!IsStatic)
                        {
                            Mass = br.ReadSingle();
                            CenterOfMass.X = br.ReadSingle();
                            CenterOfMass.Y = br.ReadSingle();
                            CenterOfMass.Z = br.ReadSingle();
                        }
                    } break;
                case objectphysiccharcontrollerbehaviourmodel:
                    {
                        ShapeType = br.ReadInt32();
                        if (ShapeType == 0)
                        {
                            PhysXShapeType = br.ReadInt32(); ;
                            ShapeSize = new Vector3(br.ReadSingle(),
                             br.ReadSingle(),
                            br.ReadSingle());
                        }
                        if (ShapeType == 1)
                        {
                            PhysicCollisionName = br.ReadPackString();
                        }
                        Mass = br.ReadSingle();
                        CenterOfMass.X = br.ReadSingle();
                        CenterOfMass.Y = br.ReadSingle();
                        CenterOfMass.Z = br.ReadSingle();

                    } break;
                case objectstaticbehaviourmodel:
                    { } break;
                default: break;
            }

            br.Close();
        }
コード例 #6
0
 public override int loadbody(BinaryReader br)
 {
     long pos = br.BaseStream.Position;
     int count = br.ReadInt32();
     lodMats = new List<Lod>();// Lod[count];
     for (int i = 0; i < count; i++)
     {
         Lod l = new Lod();
         lodMats.Add(l);
         int matc = br.ReadInt32();
         lodMats[i].mats = new List<SubsetMaterial>();// SubsetMaterial[br.ReadInt32()];
         for (int j = 0; j < matc; j++)
         {
             SubsetMaterial sm = new SubsetMaterial();
             sm.DiffuseTextureName = br.ReadPackString();
             lodMats[i].mats.Add(sm);
         }
     }
     return Convert.ToInt32(br.BaseStream.Position - pos);
 }
コード例 #7
0
        public void loadbody(byte[] buffer)
        {
            TerrainVertex[] vertices;
            ushort[] indices;

            BinaryReader br = new BinaryReader(new MemoryStream(buffer));
            vertices = new TerrainVertex[br.ReadInt32()];
            indices = new ushort[br.ReadInt32()];

            for (int bv = 0; bv < vertices.Length; bv++)
            {
                vertices[bv] = new TerrainVertex(
                    new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()),
                    new Vector3(br.ReadSingle(), br.ReadSingle(), br.ReadSingle()),
                    new Vector2(br.ReadSingle(), 1.0f -br.ReadSingle()));

                string sss;
                int t = br.ReadInt32();
                for (int i = 0; i < t; i++)
                    sss = br.ReadPackString();

                int d = br.ReadInt32();

                br.BaseStream.Seek(d * 4, SeekOrigin.Current);
            }

            for (int bv = 0; bv < indices.Length; bv++)
                indices[bv] = Convert.ToUInt16(br.ReadInt32());

            br.Close();

            vertexBuffer = new VertexBuffer(GameEngine.Device, typeof(TerrainVertex), vertices.Length, BufferUsage.None);
            vertexBuffer.SetData<TerrainVertex>(vertices);

            indexBuffer = new IndexBuffer(GameEngine.Device, IndexElementSize.SixteenBits, indices.Length, BufferUsage.None);
            indexBuffer.SetData<ushort>(indices);
        }
コード例 #8
0
ファイル: Character.cs プロジェクト: KatekovAnton/Game
        public override void loadbody(byte[] array)
        {
            data = array;
            var self = new BinaryReader(new MemoryStream(array));
            var bones = new Bone[self.ReadInt32()];
            var parentNames = new string[bones.Length];
            Bone root = null;

            for (int i = 0; i < bones.Length; i++)
            {
                bones[i] = new Bone();
                bones[i].Name = self.ReadPackString();
                parentNames[i] = self.ReadPackString();
                if (parentNames[i] == "-\0")
                {
                    root = bones[i];
                }
            }

            if (root == null)
            {
                throw new Exception("Root bone can not be null");
            }

            Root = root;
            this.bones = bones;

            map = new BoneMap(bones.Length);
            for (int i = 0; i < bones.Length; i++)
                map.Add(bones[i].Name, i);

            for (int i = 0; i < bones.Length; i++)
            {
                bones[i].BaseInverseMatrix = self.ReadMatrix();
                if (bones[i] != root)
                    bones[i].Parent = bones[IndexOf(parentNames[i])];

            }

            HeadIndex = self.ReadInt32();
            WeaponIndex = self.ReadInt32();

            HeadMatrix = self.ReadMatrix();
            WeaponMatrix = self.ReadMatrix();

            RootIndex = self.ReadInt32();
            TopRootIndex = self.ReadInt32();
            BottomRootIndex = self.ReadInt32();
            botomindexes = new int[self.ReadInt32()];
            for (int i = 0; i < botomindexes.Length; i++)
                botomindexes[i] = self.ReadInt32();

            topindexes = new int[self.ReadInt32()];
            for (int i = 0; i < topindexes.Length; i++)
                topindexes[i] = self.ReadInt32();
        }