// Test a map without building it public int TestMap(WadFile wad, string mapname) { map = new DoomMapData(wad, mapname); st = new SectorTriangulation(map); int failedSectors = 0; for (int i = 0; i < map.sectors.Length; i++) { List <SectorPolygon> polygons = null; try { polygons = st.Triangulate(i); } catch { //Debug.Log("Exception found in "+mapname+" sector "+i); } if (polygons == null) { failedSectors += 1; } } return(failedSectors); }
void BuildSector(int index) { SectorTriangulation st = new SectorTriangulation(map); List <SectorPolygon> polygons = st.Triangulate(index); if (polygons == null) { return; } for (int i = 0; i < polygons.Count; i++) { for (int t = 0; t < unclaimedThings.Count; t++) { if (polygons[i].ThingInside(map.things[unclaimedThings[t]])) { thingSectors.Add(unclaimedThings[t], map.sectors[index]); unclaimedThings.RemoveAt(t); } } } int floorHeight = map.sectors[index].floorHeight; int ceilingHeight = map.sectors[index].ceilingHeight; float brightness = map.sectors[index].lightLevel / 256f; for (int i = 0; i < polygons.Count; i++) { Mesh mesh = new Mesh(); Vector3[] vertices = polygons[i].PointsToVector3(floorHeight).ToArray(); int[] tris = polygons[i].triangles.ToArray(); Vector2[] uvs = polygons[i].points.ToArray(); for (int j = 0; j < uvs.Length; j++) { uvs[j] /= 64f; } mesh.vertices = vertices; mesh.triangles = tris; mesh.uv = uvs; GameObject newObj = new GameObject(); Material mat = doomMaterial; MeshRenderer mr = newObj.AddComponent <MeshRenderer>(); newObj.AddComponent <MeshCollider>().sharedMesh = mesh; if (map.sectors[index].floorTexture != "F_SKY1") { mr.material = doomMaterial; mr.material.SetTexture("_MainTex", GetFlat(map.sectors[index].floorTexture)); mr.material.SetFloat("_Brightness", brightness); } else { mr.material = skyMaterial; } newObj.AddComponent <MeshFilter>().mesh = mesh; newObj.transform.parent = levelObject.transform; mesh = new Mesh(); Array.Reverse(tris); for (int j = 0; j < vertices.Length; j++) { vertices[j].y = ceilingHeight; } mesh.vertices = vertices; mesh.triangles = tris; mesh.uv = uvs; newObj = new GameObject(); newObj.AddComponent <MeshCollider>().sharedMesh = mesh; mr = newObj.AddComponent <MeshRenderer>(); if (map.sectors[index].ceilingTexture != "F_SKY1") { mr.material = doomMaterial; mr.material.SetTexture("_MainTex", GetFlat(map.sectors[index].ceilingTexture)); mr.material.SetFloat("_Brightness", brightness); } else { mr.material = skyMaterial; } newObj.AddComponent <MeshFilter>().mesh = mesh; newObj.transform.parent = levelObject.transform; } }