public BrgMaterial(BrgFile file) : base() { this.ParentFile = file; this.Id = 0; this.Flags = 0; this.unknown01b = 0; this.DiffuseMap = string.Empty; this.BumpMap = string.Empty; this.sfx = new List <BrgMatSFX>(); }
public BrgMesh(BrgFile file) : base() { this.ParentFile = file; this.Header = new BrgMeshHeader(); this.Header.Version = 22; this.Header.ExtendedHeaderSize = 40; this.VertexMaterials = new List <Int16>(); this.ExtendedHeader = new BrgMeshExtendedHeader(); this.ExtendedHeader.MaterialLibraryTimestamp = 191738312; this.ExtendedHeader.ExportedScaleFactor = 1f; this.UserDataEntries = new BrgUserDataEntry[0]; this.particleData = new float[0]; this.Attachpoints = new List <BrgAttachpoint>(); this.NonUniformKeys = new List <float>(); }
public BrgMaterial(BrgBinaryReader reader, BrgFile file) : this(file) { Id = reader.ReadInt32(); Flags = (BrgMatFlag)reader.ReadInt32(); unknown01b = reader.ReadInt32(); int nameLength = reader.ReadInt32(); this.DiffuseColor = reader.ReadColor3D(); this.AmbientColor = reader.ReadColor3D(); this.SpecularColor = reader.ReadColor3D(); this.EmissiveColor = reader.ReadColor3D(); this.DiffuseMap = reader.ReadString(nameLength); if (Flags.HasFlag(BrgMatFlag.SpecularExponent)) { this.SpecularExponent = reader.ReadSingle(); } if (Flags.HasFlag(BrgMatFlag.BumpMap)) { this.BumpMap = reader.ReadString(reader.ReadInt32()); } if (Flags.HasFlag(BrgMatFlag.Alpha)) { this.Opacity = reader.ReadSingle(); } if (Flags.HasFlag(BrgMatFlag.REFLECTIONTEXTURE)) { byte numSFX = reader.ReadByte(); sfx = new List <BrgMatSFX>(numSFX); for (int i = 0; i < numSFX; i++) { sfx.Add(reader.ReadMaterialSFX()); } } else { sfx = new List <BrgMatSFX>(); } }
public BrgMesh(BrgBinaryReader reader, BrgFile file) : this(file) { this.ParentFile = file; this.Header = new BrgMeshHeader(reader); if (!this.Header.Flags.HasFlag(BrgMeshFlag.PARTICLEPOINTS)) { this.Vertices = new List <Vector3>(this.Header.NumVertices); for (int i = 0; i < this.Header.NumVertices; i++) { this.Vertices.Add(reader.ReadVector3D(true, this.Header.Version == 22)); } this.Normals = new List <Vector3>(this.Header.NumVertices); for (int i = 0; i < this.Header.NumVertices; i++) { if (this.Header.Version >= 13 && this.Header.Version <= 17) { reader.ReadInt16(); // TODO figure this out } else // v == 18, 19 or 22 { this.Normals.Add(reader.ReadVector3D(true, this.Header.Version == 22)); } } if ((!this.Header.Flags.HasFlag(BrgMeshFlag.SECONDARYMESH) || this.Header.Flags.HasFlag(BrgMeshFlag.ANIMTEXCOORDS) || this.Header.Flags.HasFlag(BrgMeshFlag.PARTICLESYSTEM)) && this.Header.Flags.HasFlag(BrgMeshFlag.TEXCOORDSA)) { this.TextureCoordinates = new List <Vector3>(this.Header.NumVertices); for (int i = 0; i < this.Header.NumVertices; i++) { this.TextureCoordinates.Add(new Vector3(reader.ReadVector2D(this.Header.Version == 22), 0f)); } } if (!this.Header.Flags.HasFlag(BrgMeshFlag.SECONDARYMESH) || this.Header.Flags.HasFlag(BrgMeshFlag.PARTICLESYSTEM)) { this.Faces = new List <Face>(this.Header.NumFaces); for (int i = 0; i < this.Header.NumFaces; ++i) { this.Faces.Add(new Face()); } if (this.Header.Flags.HasFlag(BrgMeshFlag.MATERIAL)) { for (int i = 0; i < this.Header.NumFaces; i++) { this.Faces[i].MaterialIndex = reader.ReadInt16(); } } for (int i = 0; i < this.Header.NumFaces; i++) { this.Faces[i].Indices.Add(reader.ReadInt16()); this.Faces[i].Indices.Add(reader.ReadInt16()); this.Faces[i].Indices.Add(reader.ReadInt16()); } if (this.Header.Flags.HasFlag(BrgMeshFlag.MATERIAL)) { this.VertexMaterials = new List <Int16>(this.Header.NumVertices); for (int i = 0; i < this.Header.NumVertices; i++) { this.VertexMaterials.Add(reader.ReadInt16()); } } } } this.UserDataEntries = new BrgUserDataEntry[this.Header.UserDataEntryCount]; if (!this.Header.Flags.HasFlag(BrgMeshFlag.PARTICLEPOINTS)) { for (int i = 0; i < this.Header.UserDataEntryCount; i++) { this.UserDataEntries[i] = reader.ReadUserDataEntry(false); } } this.ExtendedHeader = new BrgMeshExtendedHeader(reader, this.Header.ExtendedHeaderSize); if (this.Header.Flags.HasFlag(BrgMeshFlag.PARTICLEPOINTS)) { this.particleData = new float[4 * this.Header.NumVertices]; for (int i = 0; i < this.particleData.Length; i++) { this.particleData[i] = reader.ReadSingle(); } for (int i = 0; i < this.Header.UserDataEntryCount; i++) { this.UserDataEntries[i] = reader.ReadUserDataEntry(true); } } if (this.Header.Version == 13) { reader.ReadBytes(this.ExtendedHeader.NameLength); } if (this.Header.Version >= 13 && this.Header.Version <= 18) { this.Header.Flags |= BrgMeshFlag.ATTACHPOINTS; } if (this.Header.Flags.HasFlag(BrgMeshFlag.ATTACHPOINTS)) { Int16 numMatrix = this.ExtendedHeader.NumDummies; Int16 numIndex = this.ExtendedHeader.NumNameIndexes; if (this.Header.Version == 19 || this.Header.Version == 22) { numMatrix = reader.ReadInt16(); numIndex = reader.ReadInt16(); reader.ReadInt16(); } BrgAttachpoint[] attpts = new BrgAttachpoint[numMatrix]; for (int i = 0; i < numMatrix; i++) { attpts[i] = new BrgAttachpoint(); } for (int i = 0; i < numMatrix; i++) { attpts[i].XVector = reader.ReadVector3D(true, this.Header.Version == 22); } for (int i = 0; i < numMatrix; i++) { attpts[i].YVector = reader.ReadVector3D(true, this.Header.Version == 22); } for (int i = 0; i < numMatrix; i++) { attpts[i].ZVector = reader.ReadVector3D(true, this.Header.Version == 22); } if (this.Header.Version == 19 || this.Header.Version == 22) { for (int i = 0; i < numMatrix; i++) { attpts[i].Position = reader.ReadVector3D(true, this.Header.Version == 22); } } for (int i = 0; i < numMatrix; i++) { attpts[i].BoundingBoxMin = reader.ReadVector3D(true, this.Header.Version == 22); } for (int i = 0; i < numMatrix; i++) { attpts[i].BoundingBoxMax = reader.ReadVector3D(true, this.Header.Version == 22); } List <int> nameId = new List <int>(); for (int i = 0; i < numIndex; i++) { int duplicate = reader.ReadInt32(); // have yet to find a model with duplicates reader.ReadInt32(); // TODO figure out what this means for (int j = 0; j < duplicate; j++) { nameId.Add(i); } } for (int i = 0; i < nameId.Count; i++) { this.Attachpoints.Add(new BrgAttachpoint(attpts[reader.ReadByte()])); this.Attachpoints[i].NameId = nameId[i]; //attpts[reader.ReadByte()].NameId = nameId[i]; } //attachpoints = new List<BrgAttachpoint>(attpts); } if (((this.Header.Flags.HasFlag(BrgMeshFlag.COLORALPHACHANNEL) || this.Header.Flags.HasFlag(BrgMeshFlag.COLORCHANNEL)) && !this.Header.Flags.HasFlag(BrgMeshFlag.SECONDARYMESH)) || this.Header.Flags.HasFlag(BrgMeshFlag.ANIMVERTCOLORALPHA)) { this.Colors = new List <Color4D>(this.Header.NumVertices); for (int i = 0; i < this.Header.NumVertices; i++) { this.Colors.Add(reader.ReadTexel()); } } // Only seen on first mesh if (this.Header.AnimationType.HasFlag(BrgMeshAnimType.NonUniform)) { this.NonUniformKeys = new List <float>(this.ExtendedHeader.NumNonUniformKeys); for (int i = 0; i < this.ExtendedHeader.NumNonUniformKeys; i++) { this.NonUniformKeys[i] = reader.ReadSingle(); } } if (this.Header.Version >= 14 && this.Header.Version <= 19) { // Face Normals?? Vector3[] legacy = new Vector3[this.Header.NumFaces]; for (int i = 0; i < this.Header.NumFaces; i++) { legacy[i] = reader.ReadVector3D(); } } if (!this.Header.Flags.HasFlag(BrgMeshFlag.SECONDARYMESH) && this.Header.Version != 22) { reader.ReadBytes(ExtendedHeader.ShadowNameLength0 + ExtendedHeader.ShadowNameLength1); } }