private static void Flat(IBuilding building, IVolume volume, BuildRMesh mesh, BuildRCollider collider, Vector2[] points, float roofBaseHeight, Roof design, int submesh, Surface surface, Rect clampUV) { BuildRVolumeUtil.VolumeShape[] roofPoints = BuildRVolumeUtil.GetTopShape(building, volume, points); int roofShapeCount = roofPoints.Length; for (int r = 0; r < roofShapeCount; r++) { Poly2TriWrapper.BMesh(mesh, roofBaseHeight, surface, submesh, roofPoints[r].outer, clampUV, true, roofPoints[r].holes, collider); } }
public void Add(WallSection section) { if (section == null) { return; } if (WALLSECTION_SUBMESH_MAPPING.ContainsKey(section)) { return; } List <int> submeshMapping = new List <int>(); submeshMapping.Add(Add(section.wallSurface)); if (section.sillSurface != null) { submeshMapping.Add(Add(section.sillSurface)); } if (section.ceilingSurface != null) { submeshMapping.Add(Add(section.ceilingSurface)); } if (section.openingSurface != null) { submeshMapping.Add(Add(section.openingSurface)); } List <bool> submeshTiling = new List <bool>(); submeshTiling.Add(section.wallSurface != null && section.wallSurface.tiled); if (section.sillSurface != null) { submeshTiling.Add(section.sillSurface != null && section.sillSurface.tiled); } if (section.ceilingSurface != null) { submeshTiling.Add(section.ceilingSurface != null && section.ceilingSurface.tiled); } if (section.openingSurface != null) { submeshTiling.Add(section.openingSurface != null && section.openingSurface.tiled); } int[] balconySubmeshes = Add(section.balconyModel); submeshMapping.AddRange(balconySubmeshes); for (int b = 0; b < balconySubmeshes.Length; b++) { submeshTiling.Add(false);//no tiling } int[] shutterSubmeshes = Add(section.shutterModel); submeshMapping.AddRange(shutterSubmeshes); for (int b = 0; b < shutterSubmeshes.Length; b++) { submeshTiling.Add(false);//no tiling } int[] openingSubmeshes = Add(section.openingModel); submeshMapping.AddRange(openingSubmeshes); for (int b = 0; b < openingSubmeshes.Length; b++) { submeshTiling.Add(false); //no tiling } int[] portalSubmeshes = Add(section.portal); int portalSubmeshCount = portalSubmeshes.Length; for (int s = 0; s < portalSubmeshCount; s++) { if (!submeshMapping.Contains(portalSubmeshes[s])) { submeshMapping.Add(portalSubmeshes[s]); Surface surf = SUBMESH[portalSubmeshes[s]] as Surface; if (surf != null) { submeshTiling.Add(surf.tiled); } else { submeshTiling.Add(false); } } } WALLSECTION_SUBMESH_MAPPING.Add(section, submeshMapping.ToArray()); WALLSECTION_SUBMESH_TILING.Add(section, submeshTiling.ToArray()); }