public List <Face> ReadFaces(BinaryReader reader, BspHeader header) { List <Face> faces = new List <Face>(); var entry = header.GetLump(Lumps.FACES); int numFaces = entry.Length / 20; reader.BaseStream.Seek(entry.Offset, SeekOrigin.Begin); for (int i = 0; i < numFaces; i++) { var face = new Face(); face.plane = reader.ReadUInt16(); face.planeSide = reader.ReadUInt16(); face.firstEdge = reader.ReadUInt32(); face.edgeCount = reader.ReadUInt16(); face.texInfo = reader.ReadUInt16(); face.lightmapStyles[0] = reader.ReadChar(); face.lightmapStyles[1] = reader.ReadChar(); face.lightmapStyles[2] = reader.ReadChar(); face.lightmapStyles[3] = reader.ReadChar(); face.lightmapOffset = reader.ReadUInt32(); faces.Add(face); } return(faces); }
public string ReadEntities(BinaryReader reader, BspHeader header) { var entry = header.GetLump(Lumps.ENTITIES); reader.BaseStream.Seek(entry.Offset, SeekOrigin.Begin); return(new string(reader.ReadChars(entry.Length))); }
public List <Edge> ReadEdges(BinaryReader reader, BspHeader header) { List <Edge> edges = new List <Edge>(); var entry = header.GetLump(Lumps.EDGES); int numEdges = entry.Length / 4; reader.BaseStream.Seek(entry.Offset, SeekOrigin.Begin); for (int i = 0; i < numEdges; i++) { edges.Add(new Edge(reader.ReadUInt16(), reader.ReadUInt16())); } return(edges); }
public List <int> ReadFaceEdges(BinaryReader reader, BspHeader header) { List <int> faceEdges = new List <int>(); var entry = header.GetLump(Lumps.FACE_EDGE_TABLE); int numEdges = entry.Length / 4; reader.BaseStream.Seek(entry.Offset, SeekOrigin.Begin); for (int i = 0; i < numEdges; i++) { faceEdges.Add(reader.ReadInt32()); } return(faceEdges); }
public List <Vector3> ReadVerts(BinaryReader reader, BspHeader header) { List <Vector3> verts = new List <Vector3>(); var entry = header.GetLump(Lumps.VERTICES); int numVerts = entry.Length / 12; reader.BaseStream.Seek(entry.Offset, SeekOrigin.Begin); for (int i = 0; i < numVerts; i++) { float x = reader.ReadSingle(); float y = reader.ReadSingle(); float z = reader.ReadSingle(); // convert to unity axis Vector3 vec = new Vector3(-x, z, -y); // scale for unity vec.Scale(Vector3.one * QUAKE_TO_UNITY_CONVERSION_SCALE); verts.Add(vec); } return(verts); }
public List <TexInfo> ReadTexInfo(BinaryReader reader, BspHeader header) { List <TexInfo> infos = new List <TexInfo>(); var entry = header.GetLump(Lumps.TEXTURES); int numInfos = entry.Length / 76; Debug.Log(numInfos + " Texture Infos"); reader.BaseStream.Seek(entry.Offset, SeekOrigin.Begin); for (int i = 0; i < numInfos; i++) { var info = new TexInfo(); float ux = reader.ReadSingle(); float uy = reader.ReadSingle(); float uz = reader.ReadSingle(); info.uAxis = new Vector3(-ux, uz, -uy); info.uOffset = reader.ReadSingle(); // * QUAKE_TO_UNITY_CONVERSION_SCALE; // * scale?? float vx = reader.ReadSingle(); float vy = reader.ReadSingle(); float vz = reader.ReadSingle(); info.vAxis = new Vector3(-vx, vz, -vy); info.vOffset = reader.ReadSingle(); // * QUAKE_TO_UNITY_CONVERSION_SCALE; // * scale?? info.flags = reader.ReadUInt32(); info.value = reader.ReadUInt32(); info.name = new string(reader.ReadChars(32)); int pos = info.name.IndexOf('\0'); if (pos >= 0) { info.name = info.name.Substring(0, pos); } info.nextTexInfo = reader.ReadUInt32(); infos.Add(info); } return(infos); }