예제 #1
0
        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);
            }
        }
예제 #2
0
        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());
        }