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); } } } }
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(); } }
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); } }
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); }
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(); } }
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)); } }
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); } }
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); }
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)); }
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()); } } }
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)); }
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(); }
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); }
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); } }
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(); }
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); } }
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]); * }*/ } }
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); } }
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); } }