// Token: 0x0600025A RID: 602 RVA: 0x00014E14 File Offset: 0x00013014
        public bool TransferModel(BinaryReader reader, string header, BinaryWriter writer, SlotMaterials slotMat)
        {
            writer.Write(header);
            int num = reader.ReadInt32();

            writer.Write(num);
            writer.Write(reader.ReadString());
            writer.Write(reader.ReadString());
            int num2 = reader.ReadInt32();

            writer.Write(num2);
            for (int i = 0; i < num2; i++)
            {
                writer.Write(reader.ReadString());
                writer.Write(reader.ReadByte());
            }
            for (int j = 0; j < num2; j++)
            {
                int value = reader.ReadInt32();
                writer.Write(value);
            }
            for (int k = 0; k < num2; k++)
            {
                this.TransferVec(reader, writer, 7);
                if (num >= 2001)
                {
                    bool flag = reader.ReadBoolean();
                    writer.Write(flag);
                    if (flag)
                    {
                        this.TransferVec(reader, writer, 3);
                    }
                }
            }
            int num3 = reader.ReadInt32();
            int num4 = reader.ReadInt32();
            int num5 = reader.ReadInt32();

            writer.Write(num3);
            writer.Write(num4);
            writer.Write(num5);
            for (int l = 0; l < num5; l++)
            {
                writer.Write(reader.ReadString());
            }
            for (int m = 0; m < num5; m++)
            {
                this.TransferVec(reader, writer, 16);
            }
            for (int n = 0; n < num3; n++)
            {
                this.TransferVec(reader, writer, 8);
            }
            int num6 = reader.ReadInt32();

            writer.Write(num6);
            for (int num7 = 0; num7 < num6; num7++)
            {
                this.TransferVec4(reader, writer);
            }
            for (int num8 = 0; num8 < num3; num8++)
            {
                for (int num9 = 0; num9 < 4; num9++)
                {
                    writer.Write(reader.ReadUInt16());
                }
                this.TransferVec4(reader, writer);
            }
            for (int num10 = 0; num10 < num4; num10++)
            {
                int num11 = reader.ReadInt32();
                writer.Write(num11);
                for (int num12 = 0; num12 < num11; num12++)
                {
                    writer.Write(reader.ReadInt16());
                }
            }
            int num13 = reader.ReadInt32();

            writer.Write(num13);
            for (int num14 = 0; num14 < num13; num14++)
            {
                TargetMaterial targetMaterial = slotMat.Get(num14);
                this.TransferMaterial(reader, writer, targetMaterial, targetMaterial.onlyModel);
            }
            while (reader.PeekChar() != -1)
            {
                string text = reader.ReadString();
                writer.Write(text);
                if (text == "end")
                {
                    break;
                }
                if (!(text != "morph"))
                {
                    string value2 = reader.ReadString();
                    writer.Write(value2);
                    int num15 = reader.ReadInt32();
                    writer.Write(num15);
                    for (int num16 = 0; num16 < num15; num16++)
                    {
                        writer.Write(reader.ReadUInt16());
                        this.TransferVec(reader, writer, 6);
                    }
                }
            }
            return(true);
        }
Пример #2
0
        public bool TransferModel(BinaryReader reader, string header, BinaryWriter writer, SlotMaterials slotMat)
        {
            writer.Write(header);
            writer.Write(reader.ReadInt32());  // ver
            writer.Write(reader.ReadString()); // "_SM_" + name
            writer.Write(reader.ReadString()); // base_bone
            int count = reader.ReadInt32();

            writer.Write(count);  // num (bone_count)
            for (int i = 0; i < count; i++)
            {
                writer.Write(reader.ReadString()); // ボーン名
                writer.Write(reader.ReadByte());   // フラグ (_SCL_追加の有無等)
            }

            for (int i = 0; i < count; i++)
            {
                int count2 = reader.ReadInt32();   // parent index
                writer.Write(count2);
            }

            for (int i = 0; i < count; i++)
            {
                // (x, y, z), (x2, y2, z2, w)
                TransferVec(reader, writer, 7);
            }
            int vertexCount    = reader.ReadInt32();
            int facesCount     = reader.ReadInt32();
            int localBoneCount = reader.ReadInt32();

            writer.Write(vertexCount);
            writer.Write(facesCount);
            writer.Write(localBoneCount);

            for (int i = 0; i < localBoneCount; i++)
            {
                writer.Write(reader.ReadString()); // ローカルボーン名
            }
            for (int i = 0; i < localBoneCount; i++)
            {
                TransferVec(reader, writer, 16); // matrix (floatx4, floatx4)
            }
            for (int i = 0; i < vertexCount; i++)
            {
                TransferVec(reader, writer, 8);
            }
            int vertexCount2 = reader.ReadInt32();

            writer.Write(vertexCount2);
            for (int i = 0; i < vertexCount2; i++)
            {
                TransferVec4(reader, writer);
            }
            for (int i = 0; i < vertexCount; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    writer.Write(reader.ReadUInt16());
                }
                TransferVec4(reader, writer);
            }
            for (int i = 0; i < facesCount; i++)
            {
                int cnt = reader.ReadInt32();
                writer.Write(cnt);
                for (int j = 0; j < cnt; j++)
                {
                    writer.Write(reader.ReadInt16());
                }
            }
            // material
            int mateCount = reader.ReadInt32();

            writer.Write(mateCount);
            for (int matNo = 0; matNo < mateCount; matNo++)
            {
                var tm = slotMat.Get(matNo);
                TransferMaterial(reader, writer, tm, tm.onlyModel);
            }

            // morph
            while (reader.PeekChar() != -1)
            {
                string name = reader.ReadString();
                writer.Write(name);
                if (name == "end")
                {
                    break;
                }

                if (name == "morph")
                {
                    string key = reader.ReadString();
                    writer.Write(key);
                    int num = reader.ReadInt32();
                    writer.Write(num);
                    for (int i = 0; i < num; i++)
                    {
                        writer.Write(reader.ReadUInt16());
                        // (x, y, z), (x, y, z)
                        TransferVec(reader, writer, 6);
                    }
                }
            }
            return(true);
        }
        public bool TransferModel(BinaryReader reader, string header, BinaryWriter writer, SlotMaterials slotMat)
        {
            writer.Write(header);
            var ver = reader.ReadInt32();

            writer.Write(ver);                 // ver
            writer.Write(reader.ReadString()); // "_SM_" + name
            writer.Write(reader.ReadString()); // base_bone
            var count = reader.ReadInt32();

            writer.Write(count);  // num (bone_count)
            for (var i = 0; i < count; i++)
            {
                writer.Write(reader.ReadString()); // ボーン名
                writer.Write(reader.ReadByte());   // フラグ (_SCL_追加の有無等)
            }

            for (var i = 0; i < count; i++)
            {
                var count2 = reader.ReadInt32();   // parent index
                writer.Write(count2);
            }

            for (var i = 0; i < count; i++)
            {
                // localPosition, localRotation
                // (x, y, z), (x2, y2, z2, w)
                TransferVec(reader, writer, 7);
                // localScale
                if (ver < 2001)
                {
                    continue;
                }

                var readScale = reader.ReadBoolean();
                writer.Write(readScale);
                if (readScale)
                {
                    TransferVec(reader, writer);
                }
            }
            var vertexCount    = reader.ReadInt32();
            var facesCount     = reader.ReadInt32();
            var localBoneCount = reader.ReadInt32();

            writer.Write(vertexCount);
            writer.Write(facesCount);
            writer.Write(localBoneCount);

            for (var i = 0; i < localBoneCount; i++)
            {
                writer.Write(reader.ReadString()); // ローカルボーン名
            }
            for (var i = 0; i < localBoneCount; i++)
            {
                TransferVec(reader, writer, 16); // matrix (floatx4, floatx4)
            }
            for (var i = 0; i < vertexCount; i++)
            {
                TransferVec(reader, writer, 8);
            }
            var vertexCount2 = reader.ReadInt32();

            writer.Write(vertexCount2);
            for (var i = 0; i < vertexCount2; i++)
            {
                TransferVec4(reader, writer);
            }
            for (var i = 0; i < vertexCount; i++)
            {
                for (var j = 0; j < 4; j++)
                {
                    writer.Write(reader.ReadUInt16());
                }
                TransferVec4(reader, writer);
            }
            for (var i = 0; i < facesCount; i++)
            {
                var cnt = reader.ReadInt32();
                writer.Write(cnt);
                for (var j = 0; j < cnt; j++)
                {
                    writer.Write(reader.ReadInt16());
                }
            }
            // material
            var mateCount = reader.ReadInt32();

            writer.Write(mateCount);
            for (var matNo = 0; matNo < mateCount; matNo++)
            {
                var tm = slotMat.Get(matNo);
                TransferMaterial(reader, writer, tm, tm.onlyModel);
            }

            // morph
            while (reader.PeekChar() != -1)
            {
                var name = reader.ReadString();
                writer.Write(name);
                if (name == "end")
                {
                    break;
                }

                if (name != "morph")
                {
                    continue;
                }
                var key = reader.ReadString();
                writer.Write(key);
                var num = reader.ReadInt32();
                writer.Write(num);
                for (var i = 0; i < num; i++)
                {
                    writer.Write(reader.ReadUInt16());
                    // (x, y, z), (x, y, z)
                    TransferVec(reader, writer, 6);
                }
            }
            return(true);
        }