Esempio n. 1
0
 public override uint GetSize(NiHeader header)
 {
     if (header.GetUserVersion2() == 100 || header.GetUserVersion2() == 130)
     {
         return(base.GetSize(header) + 28U);
     }
     else
     {
         if (header.GetVersion() > 335544325U)
         {
             if (header.GetUserVersion() == 12)
             {
                 return(base.GetSize(header) + 25U + this.numMaterials * (uint)this.materialNames.Count + this.numMaterials * (uint)this.materialExtraData.Count);
             }
             else
             {
                 return(base.GetSize(header) + 17U + this.numMaterials * (uint)this.materialNames.Count + this.numMaterials * (uint)this.materialExtraData.Count);
             }
         }
         else
         {
             if (this.hasShader)
             {
                 return(base.GetSize(header) + 13U + (uint)this.shaderName.Length);
             }
             else
             {
                 return(base.GetSize(header) + 9U);
             }
         }
     }
 }
Esempio n. 2
0
        public override void Write(NiHeader header, BinaryWriter writer)
        {
            List <int> blockReferences = header.GetBlockReferences();

            base.Write(header, writer);
            writer.Write(this.numChildren);
            for (int index = 0; (long)index < (long)this.numChildren; ++index)
            {
                if (blockReferences.Count > 0)
                {
                    if (this.children[index] != -1)
                    {
                        this.children[index] = blockReferences[this.children[index]];
                    }
                }
                writer.Write(this.children[index]);
            }
            if (header.GetUserVersion2() < 130)
            {
                writer.Write(this.numEffects);
                for (int index = 0; (long)index < (long)this.numEffects; ++index)
                {
                    if (blockReferences.Count > 0)
                    {
                        if (this.effects[index] != -1)
                        {
                            this.effects[index] = blockReferences[this.effects[index]];
                        }
                    }
                    writer.Write(this.effects[index]);
                }
            }
        }
 public override void Read(NiHeader header, BinaryReader reader)
 {
     base.Read(header, reader);
     this.shaderFlags1        = reader.ReadUInt32();
     this.shaderFlags2        = reader.ReadUInt32();
     this.uvOffset            = Utils.ReadUVCoord(reader);
     this.uvScale             = Utils.ReadUVCoord(reader);
     this.sourceTexture       = Utils.ReadSizedString(reader);
     this.textureClampMode    = reader.ReadUInt32();
     this.falloffStartAngle   = reader.ReadSingle();
     this.falloffStopAngle    = reader.ReadSingle();
     this.falloffStartOpacity = reader.ReadSingle();
     this.falloffStopOpacity  = reader.ReadSingle();
     this.emissiveColor       = Utils.ReadColor4(reader);
     this.emissiveMultiple    = reader.ReadSingle();
     this.softFalloffDepth    = reader.ReadSingle();
     this.greyscaleTexture    = Utils.ReadSizedString(reader);
     if (header.GetVersion() == 335675399U && header.GetUserVersion2() == 130)
     {
         this.envMapTexture      = Utils.ReadSizedString(reader);
         this.normalTexture      = Utils.ReadSizedString(reader);
         this.envMaskTexture     = Utils.ReadSizedString(reader);
         this.enviromentMapScale = reader.ReadSingle();
     }
 }
Esempio n. 4
0
 public override void Write(NiHeader header, BinaryWriter writer)
 {
     base.Write(header, writer);
     if (header.GetUserVersion2() == 100)
     {
         writer.Write(this.numSegments);
         for (int index = 0; index < this.numSegments; ++index)
         {
             writer.Write(this.BSSegments[index].unknownByte1);
             writer.Write(this.BSSegments[index].startTriangle);
             writer.Write(this.BSSegments[index].numTriangles);
         }
     }
     else
     {
         writer.Write(this.numTriangles2);
         writer.Write(this.numA);
         writer.Write(this.numB);
         for (int index = 0; index < this.numA; ++index)
         {
             writer.Write(this.BSSITSSsegments[index].triangleOffset);
             writer.Write(this.BSSITSSsegments[index].triangleCount);
             writer.Write(this.BSSITSSsegments[index].unknownHash);
             writer.Write(this.BSSITSSsegments[index].numSegments);
         }
         //writer.Write(this.segments[index].subSegment);
     }
 }
Esempio n. 5
0
        public override void Write(NiHeader header, BinaryWriter writer)
        {
            List <int> blockReferences = header.GetBlockReferences();

            if (blockReferences.Count > 0)
            {
                if (this.collisionObject != -1)
                {
                    this.collisionObject = blockReferences[this.collisionObject];
                }
            }
            base.Write(header, writer);
            writer.Write(this.flags);
            if ((header.GetUserVersion() >= 11U) && (header.GetUserVersion2() >= 26U))
            {
                writer.Write(this.flags2);
            }
            Utils.WriteVector3(writer, this.translation);
            Utils.WriteMatrix33(writer, this.rotation);
            writer.Write(this.scale);
            if ((header.GetVersion() <= 335544325U) || (header.GetUserVersion() <= 11U))
            {
                writer.Write((uint)this.properties.Count);
                for (int index = 0; (long)index < this.properties.Count; ++index)
                {
                    if (blockReferences.Count > 0)
                    {
                        this.properties[index] = blockReferences[this.properties[index]];
                    }
                    writer.Write(this.properties[index]);
                }
            }
            writer.Write(this.collisionObject);
        }
Esempio n. 6
0
 public override void Read(NiHeader header, BinaryReader reader)
 {
     base.Read(header, reader);
     if (header.GetUserVersion2() == 100)
     {
         this.numSegments = reader.ReadUInt32();
         for (int index = 0; index < this.numSegments; ++index)
         {
             this.BSSegments.Add(new BSSegment(0, 0)
             {
                 unknownByte1  = reader.ReadByte(),
                 startTriangle = reader.ReadUInt32(),
                 numTriangles  = reader.ReadUInt32()
             });
         }
     }
     else
     {
         this.numTriangles2 = reader.ReadUInt32();
         this.numA          = reader.ReadUInt32();
         this.numB          = reader.ReadUInt32();
         for (int index = 0; index < this.numA; ++index)
         {
             this.BSSITSSsegments.Add(new BSSITSSegment(0, 0)
             {
                 triangleOffset = reader.ReadUInt32(),
                 triangleCount  = reader.ReadUInt32(),
                 unknownHash    = reader.ReadUInt32(),
                 numSegments    = reader.ReadUInt32(),
             });
             //subSegment = reader.ReadInt32(),
         }
     }
 }
 public override void Read(NiHeader header, BinaryReader reader)
 {
     base.Read(header, reader);
     if (!((header.GetVersion() == 335675399U) && (header.GetUserVersion() >= 11) && (header.GetUserVersion2() > 21)))
     {
         this.ambientColor = Utils.ReadColor3(reader);
         this.diffuseColor = Utils.ReadColor3(reader);
     }
     this.specularColor = Utils.ReadColor3(reader);
     this.emissiveColor = Utils.ReadColor3(reader);
     this.glossiness = reader.ReadSingle();
     this.alpha = reader.ReadSingle();
     if ((header.GetVersion() == 335675399U) && (header.GetUserVersion() >= 11) && (header.GetUserVersion2() > 21))
     {
         this.emitMulti = reader.ReadSingle();
     }
 }
Esempio n. 8
0
 public override uint GetSize(NiHeader header)
 {
     if (header.GetUserVersion2() < 130)
     {
         return((uint)((int)base.GetSize(header) + 4 + 4 * (int)this.numChildren + 4 + 4 * (int)this.numEffects));
     }
     else
     {
         return((uint)((int)base.GetSize(header) + 4 + 4 * (int)this.numChildren));
     }
 }
Esempio n. 9
0
 public override uint GetSize(NiHeader header)
 {
     if (header.GetUserVersion2() == 100)
     {
         return(base.GetSize(header) + 4 + this.numSegments * 9);
     }
     else
     {
         return(base.GetSize(header) + 12 + this.numA * 16);
     }
 }
Esempio n. 10
0
        public override uint GetSize(NiHeader header)
        {
            uint size = base.GetSize(header) + 58U;

            if ((header.GetUserVersion() >= 11U) && (header.GetUserVersion2() >= 26U))
            {
                size += 2;
            }
            if ((header.GetVersion() <= 335544325U) || (header.GetUserVersion() <= 11U))
            {
                size += 4 + 4 * (uint)this.properties.Count;
            }
            return(size);
        }
Esempio n. 11
0
        public override uint GetSize(NiHeader header)
        {
            uint numH = base.GetSize(header) + 28;

            if (header.GetUserVersion2() == 100)
            {
                numH += 20;
            }
            else
            {
                numH += 18;
            }
            return((uint)numH + GetDataSize(header));
        }
Esempio n. 12
0
 public override void Read(NiHeader header, BinaryReader reader)
 {
     base.Read(header, reader);
     this.numChildren = reader.ReadUInt32();
     for (int index = 0; (long)index < (long)this.numChildren; ++index)
     {
         this.children.Add(reader.ReadInt32());
     }
     if (header.GetUserVersion2() < 130)
     {
         this.numEffects = reader.ReadUInt32();
         for (int index = 0; (long)index < (long)this.numEffects; ++index)
         {
             this.effects.Add(reader.ReadInt32());
         }
     }
 }
Esempio n. 13
0
        private uint GetDataSize(NiHeader header)
        {
            uint numV = 0;

            if (this.vertices.Count > 0)
            {
                if (header.GetUserVersion2() == 100 || (this.vertexFlags & 16384) == 16384)
                {
                    numV += 16;
                }
                else
                {
                    numV += 8;
                }
            }
            if (this.uvCoords.Count >= 0)
            {
                numV += 4;
            }
            if (this.normals.Count > 0)
            {
                numV += 4;
            }
            if (this.tangents.Count > 0)
            {
                numV += 4;
            }
            if (this.vertexColors.Count > 0)
            {
                numV += 4;
            }
            if ((this.vertexFlags & 1024) == 1024)
            {
                numV += 12;
            }
            if ((this.vertexFlags & 4096) == 4096)
            {
                numV += 4;
            }
            return((uint)(this.numVertices * numV) + (this.numTriangles * 6));
        }
Esempio n. 14
0
 public override void Read(NiHeader header, BinaryReader reader)
 {
     base.Read(header, reader);
     this.flags = reader.ReadUInt16();
     if ((header.GetUserVersion() >= 11U) && (header.GetUserVersion2() >= 26U))
     {
         this.flags2 = reader.ReadUInt16();
     }
     this.translation = Utils.ReadVector3(reader);
     this.rotation    = Utils.ReadMatrix33(reader);
     this.scale       = reader.ReadSingle();
     if ((header.GetVersion() <= 335544325U) || (header.GetUserVersion() <= 11U))
     {
         this.numProperties = reader.ReadUInt32();
         for (int index = 0; (long)index < (long)this.numProperties; ++index)
         {
             this.properties.Add(reader.ReadInt32());
         }
     }
     this.collisionObject = reader.ReadInt32();
 }
Esempio n. 15
0
        public override uint GetSize(NiHeader header)
        {
            uint num = base.GetSize(header) + 88U;

            if (header.GetVersion() == 335675399U && header.GetUserVersion2() == 130)
            {
                num += 40U;
            }
            if ((int)this.shaderType == 1)
            {
                num += 4U;
            }
            else if ((int)this.shaderType == 5)
            {
                num += 12U;
            }
            else if ((int)this.shaderType == 6)
            {
                num += 12U;
            }
            else if ((int)this.shaderType == 7)
            {
                num += 8U;
            }
            else if ((int)this.shaderType == 11)
            {
                num += 20U;
            }
            else if ((int)this.shaderType == 14)
            {
                num += 16U;
            }
            else if ((int)this.shaderType == 16)
            {
                num += 28U;
            }
            return(num);
        }
Esempio n. 16
0
 public override void Write(NiHeader header, BinaryWriter writer)
 {
     base.Write(header, writer);
     if (!((header.GetVersion() == 335675399U) && (header.GetUserVersion() >= 11) && (header.GetUserVersion2() > 21)))
     {
         Utils.WriteColor3(writer, this.ambientColor);
         Utils.WriteColor3(writer, this.diffuseColor);
     }
     Utils.WriteColor3(writer, this.specularColor);
     Utils.WriteColor3(writer, this.emissiveColor);
     writer.Write(this.glossiness);
     writer.Write(this.alpha);
     if ((header.GetVersion() == 335675399U) && (header.GetUserVersion() >= 11) && (header.GetUserVersion2() > 21))
     {
         writer.Write(this.emitMulti);
     }
 }
Esempio n. 17
0
 public override void Read(NiHeader header, BinaryReader reader)
 {
     this.shaderType = reader.ReadUInt32();
     base.Read(header, reader);
     this.shaderFlags1     = reader.ReadUInt32();
     this.shaderFlags2     = reader.ReadUInt32();
     this.uvOffset         = Utils.ReadUVCoord(reader);
     this.uvScale          = Utils.ReadUVCoord(reader);
     this.textureSet       = reader.ReadInt32();
     this.emissiveColor    = Utils.ReadColor3(reader);
     this.emissiveMultiple = reader.ReadSingle();
     if (header.GetVersion() == 335675399U && header.GetUserVersion2() == 130)
     {
         this.wetMaterialIdx = reader.ReadInt32();
         if (this.wetMaterialIdx != -1)
         {
             this.wetMaterialName = header.GetString((uint)this.wetMaterialIdx);
         }
     }
     this.textureClampMode   = reader.ReadUInt32();
     this.alpha              = reader.ReadSingle();
     this.refractionStrength = reader.ReadSingle();
     this.glossiness         = reader.ReadSingle();
     this.specularColor      = Utils.ReadColor3(reader);
     this.specularStrength   = reader.ReadSingle();
     if (header.GetVersion() == 335675399U && header.GetUserVersion2() == 130)
     {
         this.subsurfaceRolloff       = reader.ReadSingle();
         this.unkownFloat1            = reader.ReadSingle();
         this.backlightPower          = reader.ReadSingle();
         this.grayscaleToPaletteScale = reader.ReadSingle();
         this.fresnelPower            = reader.ReadSingle();
         this.wetnessSpecScale        = reader.ReadSingle();
         this.wetnessSpecPower        = reader.ReadSingle();
         this.wetnessMinVar           = reader.ReadSingle();
         this.wetnessEnvMapScale      = reader.ReadSingle();
         this.wetnessFresnelPower     = reader.ReadSingle();
         this.wetnessMetalness        = reader.ReadSingle();
     }
     else
     {
         this.lightingEffect1 = reader.ReadSingle();
         this.lightingEffect2 = reader.ReadSingle();
     }
     if ((int)this.shaderType == 1)
     {
         this.environmentMapScale = reader.ReadSingle();
         if (header.GetVersion() == 335675399U && header.GetUserVersion2() == 130)
         {
             this.unkownEnvMapInt = reader.ReadUInt16();
         }
     }
     else if ((int)this.shaderType == 5)
     {
         this.skinTintColor = Utils.ReadColor3(reader);
         if (header.GetVersion() == 335675399U && header.GetUserVersion2() == 130)
         {
             this.unkownSkinTintInt = reader.ReadUInt32();
         }
     }
     else if ((int)this.shaderType == 6)
     {
         this.hairTintColor = Utils.ReadColor3(reader);
     }
     else if ((int)this.shaderType == 7)
     {
         this.maxPasses = reader.ReadSingle();
         this.scale     = reader.ReadSingle();
     }
     else if ((int)this.shaderType == 11)
     {
         this.parallaxInnerLayerThickness    = reader.ReadSingle();
         this.parallaxRefractionScale        = reader.ReadSingle();
         this.parallaxInnerLayerTextureScale = Utils.ReadUVCoord(reader);
         this.parallaxEnvmapStrength         = reader.ReadSingle();
     }
     else if ((int)this.shaderType == 14)
     {
         this.sparkleParameters = Utils.ReadVector4(reader);
     }
     else
     {
         if ((int)this.shaderType != 16)
         {
             return;
         }
         this.eyeCubemapScale          = reader.ReadSingle();
         this.leftEyeReflectionCenter  = Utils.ReadVector3(reader);
         this.rightEyeReflectionCenter = Utils.ReadVector3(reader);
     }
 }
 public override void Read(NiHeader header, BinaryReader reader)
 {
     base.Read(header, reader);
     this.flags = reader.ReadUInt16();
     if ((header.GetUserVersion() >= 11U) && (header.GetUserVersion2() >= 26U))
         this.flags2 = reader.ReadUInt16();
     this.translation = Utils.ReadVector3(reader);
     this.rotation = Utils.ReadMatrix33(reader);
     this.scale = reader.ReadSingle();
     if ((header.GetVersion() <= 335544325U) || (header.GetUserVersion() <= 11U))
     {
         this.numProperties = reader.ReadUInt32();
         for (int index = 0; (long)index < (long)this.numProperties; ++index)
             this.properties.Add(reader.ReadInt32());
     }
     else
     {
     }
     this.collisionObject = reader.ReadInt32();
 }
Esempio n. 19
0
        public override void Write(NiHeader header, BinaryWriter writer)
        {
            List <int> blockReferences = header.GetBlockReferences();

            if (blockReferences.Count > 0)
            {
                if (this.textureSet != -1)
                {
                    this.textureSet = blockReferences[this.textureSet];
                }
            }
            writer.Write(this.shaderType);
            base.Write(header, writer);
            writer.Write(this.shaderFlags1);
            writer.Write(this.shaderFlags2);
            Utils.WriteUVCoord(writer, this.uvOffset);
            Utils.WriteUVCoord(writer, this.uvScale);
            writer.Write(this.textureSet);
            Utils.WriteColor3(writer, this.emissiveColor);
            writer.Write(this.emissiveMultiple);
            if (header.GetVersion() == 335675399U && header.GetUserVersion2() == 130)
            {
                writer.Write(this.wetMaterialIdx);
            }
            writer.Write(this.textureClampMode);
            writer.Write(this.alpha);
            writer.Write(this.refractionStrength);
            writer.Write(this.glossiness);
            Utils.WriteColor3(writer, this.specularColor);
            writer.Write(this.specularStrength);
            if (header.GetVersion() == 335675399U && header.GetUserVersion2() == 130)
            {
                writer.Write(this.subsurfaceRolloff);
                writer.Write(this.unkownFloat1);
                writer.Write(this.backlightPower);
                writer.Write(this.grayscaleToPaletteScale);
                writer.Write(this.fresnelPower);
                writer.Write(this.wetnessSpecScale);
                writer.Write(this.wetnessSpecPower);
                writer.Write(this.wetnessMinVar);
                writer.Write(this.wetnessEnvMapScale);
                writer.Write(this.wetnessFresnelPower);
                writer.Write(this.wetnessMetalness);
            }
            else
            {
                writer.Write(this.lightingEffect1);
                writer.Write(this.lightingEffect2);
            }
            if ((int)this.shaderType == 1)
            {
                writer.Write(this.environmentMapScale);
            }
            else if ((int)this.shaderType == 5)
            {
                Utils.WriteColor3(writer, this.skinTintColor);
            }
            else if ((int)this.shaderType == 6)
            {
                Utils.WriteColor3(writer, this.hairTintColor);
            }
            else if ((int)this.shaderType == 7)
            {
                writer.Write(this.maxPasses);
                writer.Write(this.scale);
            }
            else if ((int)this.shaderType == 11)
            {
                writer.Write(this.parallaxInnerLayerThickness);
                writer.Write(this.parallaxRefractionScale);
                Utils.WriteUVCoord(writer, this.parallaxInnerLayerTextureScale);
                writer.Write(this.parallaxEnvmapStrength);
            }
            else if ((int)this.shaderType == 14)
            {
                Utils.WriteVector4(writer, this.sparkleParameters);
            }
            else
            {
                if ((int)this.shaderType != 16)
                {
                    return;
                }
                writer.Write(this.eyeCubemapScale);
                Utils.WriteVector3(writer, this.leftEyeReflectionCenter);
                Utils.WriteVector3(writer, this.rightEyeReflectionCenter);
            }
        }
Esempio n. 20
0
        public override void Read(NiHeader header, BinaryReader reader)
        {
            base.Read(header, reader);
            this.center          = Utils.ReadVector3(reader);
            this.radius          = reader.ReadSingle();
            this.skinInstance    = reader.ReadInt32();
            this.bsProperties[0] = reader.ReadInt32();
            this.bsProperties[1] = reader.ReadInt32();
            this.vertexSize      = reader.ReadByte();
            this.floatSize       = reader.ReadByte();
            this.vertexFlag3     = reader.ReadByte();
            this.vertexFlag4     = reader.ReadByte();
            this.vertexFlag5     = reader.ReadByte();
            this.vertexFlags     = reader.ReadUInt16();
            // 16 = vertex
            // 32 = uv
            // 128 = normals
            // 256 = tangents
            // 512 = vertex colors
            // 1024 = skinned
            // 4096 = male eyes
            // 16384 = full precision

            this.vertexFlag8 = reader.ReadByte();
            if (header.GetUserVersion2() == 100)
            {
                this.numTriangles = reader.ReadUInt16();
            }
            else
            {
                this.numTriangles = reader.ReadUInt32();
            }
            this.numVertices = reader.ReadUInt16();
            this.dataSize    = reader.ReadUInt32();

            if (this.dataSize > 0)
            {
                for (int index = 0; index < numVertices; index++)
                {
                    BSVertexData vd = new BSVertexData();
                    if ((this.vertexFlags & 16) == 16)
                    {
                        if (header.GetUserVersion2() == 100 || (this.vertexFlags & 16384) == 16384)
                        {
                            vd.vertex     = Utils.ReadVector3(reader);
                            vd.bitangentX = reader.ReadSingle();
                        }
                        else
                        {
                            vd.vertex     = new Vector3(Utils.ShortToFloat(reader.ReadInt16()), Utils.ShortToFloat(reader.ReadInt16()), Utils.ShortToFloat(reader.ReadInt16()));
                            vd.bitangentX = Utils.ShortToFloat(reader.ReadInt16());
                        }
                    }
                    if ((this.vertexFlags & 32) == 32)
                    {
                        vd.uvcoords = new UVCoord(Utils.ShortToFloat(reader.ReadInt16()), Utils.ShortToFloat(reader.ReadInt16()));
                    }
                    if ((this.vertexFlags & 128) == 128)
                    {
                        vd.normal     = new Vector3(Utils.ByteToFloat(reader.ReadByte()), Utils.ByteToFloat(reader.ReadByte()), Utils.ByteToFloat(reader.ReadByte()));
                        vd.bitangentY = Utils.ByteToFloat(reader.ReadByte());
                    }
                    if ((this.vertexFlags & 256) == 256)
                    {
                        vd.tangent    = new Vector3(Utils.ByteToFloat(reader.ReadByte()), Utils.ByteToFloat(reader.ReadByte()), Utils.ByteToFloat(reader.ReadByte()));
                        vd.bitangentZ = Utils.ByteToFloat(reader.ReadByte());
                    }
                    if ((this.vertexFlags & 512) == 512)
                    {
                        vd.vertexColors = new Color4((float)reader.ReadByte() / 255, (float)reader.ReadByte() / 255, (float)reader.ReadByte() / 255, (float)reader.ReadByte() / 255);
                    }
                    if ((this.vertexFlags & 1024) == 1024)
                    {
                        vd.boneWeights[0] = Utils.ShortToFloat(reader.ReadInt16());
                        vd.boneWeights[1] = Utils.ShortToFloat(reader.ReadInt16());
                        vd.boneWeights[2] = Utils.ShortToFloat(reader.ReadInt16());
                        vd.boneWeights[3] = Utils.ShortToFloat(reader.ReadInt16());
                        vd.boneIndices[0] = reader.ReadByte();
                        vd.boneIndices[1] = reader.ReadByte();
                        vd.boneIndices[2] = reader.ReadByte();
                        vd.boneIndices[3] = reader.ReadByte();
                    }
                    if ((this.vertexFlags & 4096) == 4096)
                    {
                        reader.ReadInt32();
                    }

                    this.vertexData.Add(vd);
                    this.vertices.Add(vd.vertex);
                    this.normals.Add(vd.normal);
                    this.tangents.Add(vd.tangent);
                    this.bitangents.Add(new Vector3(vd.bitangentX, vd.bitangentY, vd.bitangentZ));
                    this.vertexColors.Add(vd.vertexColors);
                    this.uvCoords.Add(vd.uvcoords);
                }
                for (int index = 0; index < numTriangles; index++)
                {
                    this.triangles.Add(Utils.ReadTriangle(reader));
                }

                if (header.GetUserVersion2() == 100)
                {
                    particleDataSize = reader.ReadUInt32();
                }

                /*for (int index = 0; index < numVertices; index++)
                 * {
                 *  Console.WriteLine("Vertex ["+ index + "] = " + vertices[index]);
                 * }*/
                /*for (int index = 0; index < normals.Count; index++)
                 * {
                 *  Console.WriteLine("Normal ["+ index + "] = " + normals[index]);
                 * }
                 * for (int index = 0; index < bitangents.Count; index++)
                 * {
                 *  Console.WriteLine("Bitang [" + index + "] = " + bitangents[index]);
                 * }
                 * for (int index = 0; index < vertexColors.Count; index++)
                 * {
                 *  Console.WriteLine("vertexColors [" + index + "] = " + vertexColors[index]);
                 * }
                 * for (int index = 0; index < numTriangles; index++)
                 * {
                 *  Console.WriteLine("Triangle [" + index + "] = " + triangles[index]);
                 * }*/
            }
        }
Esempio n. 21
0
 public override uint GetSize(NiHeader header)
 {
     if (!((header.GetVersion() == 335675399U) && (header.GetUserVersion() >= 11) && (header.GetUserVersion2() > 21)))
     {
         return(base.GetSize(header) + 56U);
     }
     else if ((header.GetVersion() == 335675399U) && (header.GetUserVersion() >= 11) && (header.GetUserVersion2() > 21))
     {
         return(base.GetSize(header) + 36U);
     }
     else
     {
         return(base.GetSize(header) + 32U);
     }
 }
Esempio n. 22
0
 public override void Read(NiHeader header, BinaryReader reader)
 {
     base.Read(header, reader);
     if (!((header.GetVersion() == 335675399U) && (header.GetUserVersion() >= 11) && (header.GetUserVersion2() > 21)))
     {
         this.ambientColor = Utils.ReadColor3(reader);
         this.diffuseColor = Utils.ReadColor3(reader);
     }
     this.specularColor = Utils.ReadColor3(reader);
     this.emissiveColor = Utils.ReadColor3(reader);
     this.glossiness    = reader.ReadSingle();
     this.alpha         = reader.ReadSingle();
     if ((header.GetVersion() == 335675399U) && (header.GetUserVersion() >= 11) && (header.GetUserVersion2() > 21))
     {
         this.emitMulti = reader.ReadSingle();
     }
 }
Esempio n. 23
0
        public override void Write(NiHeader header, BinaryWriter writer)
        {
            List <int> blockReferences = header.GetBlockReferences();

            if (blockReferences.Count > 0)
            {
                if (this.skinInstance != -1)
                {
                    this.skinInstance = blockReferences[this.skinInstance];
                }
                if (this.bsProperties[0] != -1)
                {
                    this.bsProperties[0] = blockReferences[this.bsProperties[0]];
                }
                if (this.bsProperties[1] != -1)
                {
                    this.bsProperties[1] = blockReferences[this.bsProperties[1]];
                }
            }
            base.Write(header, writer);
            Utils.WriteVector3(writer, this.center);
            writer.Write(this.radius);
            writer.Write(this.skinInstance);
            writer.Write(this.bsProperties[0]);
            writer.Write(this.bsProperties[1]);
            this.vertexSize  = 0;
            this.vertexFlags = 0;
            // 16 = vertex
            // 32 = uv
            // 128 = normals
            // 256 = tangents
            // 512 = vertex colors
            // 1024 = skinned
            // 4096 = male eyes
            // 16384 = full precision
            if (this.vertices.Count > 0)
            {
                this.vertexFlags |= 16;
                this.vertexSize  += 2;
            }
            if (this.uvCoords.Count >= 0)
            {
                this.vertexFlags |= 32;
                this.vertexSize++;
            }
            if (this.normals.Count > 0)
            {
                this.vertexFlags |= 128;
                this.vertexSize  += 2;
            }
            if (this.tangents.Count > 0)
            {
                this.vertexFlags |= 256;
                this.vertexSize  += 2;
            }
            if (this.vertexColors.Count > 0)
            {
                this.vertexFlags |= 512;
                this.vertexSize++;
                this.vertexFlag4 = 7;
            }
            writer.Write(this.vertexSize);
            if (((this.vertexFlags & 16384) == 16384) || (header.GetUserVersion2() == 100))
            {
                this.floatSize = 4;
            }
            writer.Write(this.floatSize);
            writer.Write(this.vertexFlag3);
            writer.Write(this.vertexFlag4);
            writer.Write(this.vertexFlag5);
            writer.Write(this.vertexFlags);
            writer.Write(this.vertexFlag8);
            if (header.GetUserVersion2() == 100)
            {
                writer.Write((ushort)this.numTriangles);
            }
            else
            {
                writer.Write(this.numTriangles);
            }
            writer.Write(this.numVertices);
            writer.Write(GetDataSize(header));

            if (this.dataSize > 0)
            {
                for (int index = 0; index < this.numVertices; index++)
                {
                    if ((this.vertexFlags & 16) == 16)
                    {
                        if (header.GetUserVersion2() == 100 || (this.vertexFlags & 16384) == 16384)
                        {
                            writer.Write(this.vertices[index][0]);
                            writer.Write(this.vertices[index][1]);
                            writer.Write(this.vertices[index][2]);
                            if (this.bitangents.Count > 0)
                            {
                                writer.Write(this.bitangents[index][0]);
                            }
                            else
                            {
                                writer.Write((uint)0);
                            }
                        }
                        else
                        {
                            writer.Write(Utils.FloatToShort(this.vertices[index][0]));
                            writer.Write(Utils.FloatToShort(this.vertices[index][1]));
                            writer.Write(Utils.FloatToShort(this.vertices[index][2]));
                            if (this.bitangents.Count > 0)
                            {
                                writer.Write(Utils.FloatToShort(this.bitangents[index][0]));
                            }
                            else
                            {
                                writer.Write((ushort)0);
                            }
                        }
                    }
                    if ((this.vertexFlags & 32) == 32)
                    {
                        writer.Write(Utils.FloatToShort(this.uvCoords[index][0]));
                        writer.Write(Utils.FloatToShort(this.uvCoords[index][1]));
                    }
                    if ((this.vertexFlags & 128) == 128)
                    {
                        writer.Write(Utils.FloatToByte(this.normals[index][0]));
                        writer.Write(Utils.FloatToByte(this.normals[index][1]));
                        writer.Write(Utils.FloatToByte(this.normals[index][2]));
                        if (this.bitangents.Count > 0)
                        {
                            writer.Write(Utils.FloatToByte(this.bitangents[index][1]));
                        }
                        else
                        {
                            writer.Write((byte)0);
                        }
                    }
                    if ((this.vertexFlags & 256) == 256)
                    {
                        writer.Write(Utils.FloatToByte(this.tangents[index][0]));
                        writer.Write(Utils.FloatToByte(this.tangents[index][1]));
                        writer.Write(Utils.FloatToByte(this.tangents[index][2]));
                        if (this.bitangents.Count > 0)
                        {
                            writer.Write(Utils.FloatToByte(this.bitangents[index][2]));
                        }
                        else
                        {
                            writer.Write((byte)0);
                        }
                    }
                    if ((this.vertexFlags & 512) == 512)
                    {
                        writer.Write((byte)(this.vertexColors[index][0] * 255));
                        writer.Write((byte)(this.vertexColors[index][1] * 255));
                        writer.Write((byte)(this.vertexColors[index][2] * 255));
                        writer.Write((byte)(this.vertexColors[index][3] * 255));
                    }
                    if ((this.vertexFlags & 1024) == 1024)
                    {
                        Console.WriteLine("boneweight not supported yet");
                        System.Environment.Exit(667);
                    }
                    if ((this.vertexFlags & 4096) == 4096)
                    {
                        writer.Write((uint)0);
                    }
                }
            }
            for (int index = 0; index < this.triangles.Count; ++index)
            {
                Utils.WriteTriangle(writer, this.triangles[index]);
            }
            if (header.GetUserVersion2() == 100)
            {
                writer.Write(particleDataSize);
            }
        }