GameObject CreateRoadOutline(GameObject line, Material material, float width)
        {
            GameObject outline = new GameObject(line.name + "outline");

            outline.transform.parent = line.transform;

            material.renderQueue = -((int)feature.sort - 1);
            GOLineMesh lineMesh = new GOLineMesh(feature.convertedGeometry);

            lineMesh.width = width;
            lineMesh.load(outline);
            mesh = lineMesh.mesh;

            mesh = SimpleExtruder.Extrude(mesh, outline, 0.05f);
            Vector2[] uvs2 = new Vector2[mesh.vertices.Length];
            for (int i = 0; i < uvs2.Length; i++)
            {
                uvs2[i] = new Vector2(mesh.vertices[i].x, mesh.vertices[i].z);
            }
            mesh.uv = uvs2;
            mesh.RecalculateBounds();
            outline.GetComponent <MeshFilter>().sharedMesh = mesh;
            Vector3 position = outline.transform.position;

            position.y = -0.01f;
            outline.transform.localPosition = position;

            outline.GetComponent <Renderer>().material = material;

            return(outline);
        }
        public void BuildLine(GameObject line, GOLayer layer, GORenderingOptions renderingOptions, GOMap map)
        {
            if (feature.convertedGeometry.Count == 2 && feature.convertedGeometry[0].Equals(feature.convertedGeometry[1]))
            {
                return;
            }

            if (renderingOptions.tag.Length > 0)
            {
                line.tag = renderingOptions.tag;
            }

            if (renderingOptions.material)
            {
                renderingOptions.material.renderQueue = -(int)feature.sort;
            }
            if (renderingOptions.outlineMaterial)
            {
                renderingOptions.outlineMaterial.renderQueue = -(int)feature.sort;
            }

            GOLineMesh lineMesh = new GOLineMesh(feature.convertedGeometry);

            lineMesh.width = renderingOptions.lineWidth * Global.tilesizeRank;
            lineMesh.load(line);
            mesh = lineMesh.mesh;
            mesh = SimpleExtruder.Extrude(mesh, line, 0.05f);
            line.GetComponent <MeshFilter>().sharedMesh = mesh;
            line.GetComponent <Renderer>().material     = renderingOptions.material;
            Vector3 position = line.transform.position;

            position.y = feature.y * Global.tilesizeRank;


            line.transform.position = position;

            if (renderingOptions.outlineMaterial != null)
            {
                GameObject outline = CreateRoadOutline(line, renderingOptions.outlineMaterial, Global.tilesizeRank * (renderingOptions.lineWidth + layer.defaultRendering.outlineWidth));
                if (layer.useColliders)
                {
                    outline.AddComponent <MeshCollider>().sharedMesh = outline.GetComponent <MeshFilter>().sharedMesh;
                }

                outline.layer = line.layer;
                outline.tag   = line.tag;
            }
            else if (layer.useColliders)
            {
                //				Mesh m = gameObject.GetComponent<MeshFilter> ().sharedMesh;
                line.AddComponent <MeshCollider>();
            }
        }
Пример #3
0
        public GameObject CreateModel(Layer layer, float height)
        {
            GameObject polygon = new GameObject();

            try {
                Poly2Mesh.Polygon poly = new Poly2Mesh.Polygon();
                poly.outside = convertedSubject;
                if (clips != null)
                {
                    foreach (IList clipVerts in clips)
                    {
                        poly.holes.Add(CoordsToVerts(clipVerts));
                    }
                }

                MeshFilter filter = polygon.AddComponent <MeshFilter>();
                polygon.AddComponent(typeof(MeshRenderer));
                Mesh mesh = Poly2Mesh.CreateMesh(poly);


                if (mesh)
                {
                    Vector2[] uvs = new Vector2[mesh.vertices.Length];
                    for (int i = 0; i < uvs.Length; i++)
                    {
                        uvs[i] = new Vector2(mesh.vertices[i].x, mesh.vertices[i].z);
                    }
                    mesh.uv = uvs;

                    mesh2D = Mesh.Instantiate(mesh);

                    if (height > 0)
                    {
                        mesh = SimpleExtruder.Extrude(mesh, polygon, height);
                    }
                }
                filter.sharedMesh = mesh;

                if (layer.useColliders)
                {
                    polygon.AddComponent <MeshCollider>().sharedMesh = mesh;
                }
            }
            catch (Exception ex) {
                Debug.Log("[PolygonHandler] Catched exeption: " + ex);
            }



            return(polygon);
        }
Пример #4
0
    public Mesh loadExtruded(List <Vector3> _verts, float height)
    {
        verts = _verts;

        filter = gameObject.GetComponent <MeshFilter>();
        if (filter == null)
        {
            filter = (MeshFilter)gameObject.AddComponent(typeof(MeshFilter));
        }

        List <Vector3> vertices = verts.ToList();

        Mesh mesh = CreateMesh(vertices);

        filter.sharedMesh = SimpleExtruder.Extrude(mesh, gameObject, height);
        return(mesh);
    }
        public GameObject BuildPolygon(string name, GOLayer layer, float height)
        {
            //GameObject polygon = GameObject.Instantiate((GameObject)Resources.Load("Prefabs/CityBuildings/" + "Building_CornerHouse_A"));
            GameObject polygon = new GameObject();

            Poly2Mesh.Polygon poly = new Poly2Mesh.Polygon();
            poly.outside = feature.convertedGeometry;
            if (feature.clips != null)
            {
                foreach (IList clipVerts in feature.clips)
                {
                    poly.holes.Add(GOFeature.CoordsToVerts(clipVerts));
                }
            }

            MeshFilter filter = polygon.AddComponent <MeshFilter>();

            polygon.AddComponent(typeof(MeshRenderer));

            try {
                mesh = Poly2Mesh.CreateMesh(poly);
            } catch {
            }
            if (height > 1)
            {
                if (mesh)
                {
                    Vector2[] uv2d = new Vector2[mesh.vertices.Length];
                    for (int i = 0; i < uv2d.Length; i++)
                    {
                        uv2d[i] = new Vector2(mesh.vertices[i].x, mesh.vertices[i].z);
                    }
                    var meshlemp = Mesh.Instantiate(mesh);
                    meshlemp.uv = uv2d;
                    mesh2D      = Mesh.Instantiate(meshlemp);

                    mesh.uv = uv2d;
                    if (height > 0)
                    {
                        mesh = SimpleExtruder.Extrude(mesh, polygon, height);
                        Vector2[] uvs3D = new Vector2[mesh.vertices.Length];
                        for (int i = 0; i < uvs3D.Length - 1; i++)
                        {
                            uvs3D[i] = new Vector2(Vector2.Distance(new Vector2(mesh.vertices[i + 1].x, mesh.vertices[i + 1].z), new Vector2(mesh.vertices[i].x, mesh.vertices[i].z)), mesh.vertices[i].y);
                        }
                        // uvs2[uvs2.Length - 1] = new Vector2(Mathf.Sqrt((float)(Math.Pow(mesh.vertices[0].x - mesh.vertices[uvs2.Length - 1].x, 2) + Math.Pow(mesh.vertices[0].z - mesh.vertices[uvs2.Length - 1].z, 2))), mesh.vertices[uvs2.Length - 1].y);
                        uvs3D[uvs3D.Length - 1] = new Vector2(10, mesh.vertices[uvs3D.Length - 1].y);
                        mesh.uv = uvs3D;
                    }
                }
            }
            else
            {
                if (mesh)
                {
                    Vector2[] uvs = new Vector2[mesh.vertices.Length];
                    for (int i = 0; i < uvs.Length; i++)
                    {
                        uvs[i] = new Vector2(mesh.vertices[i].x, mesh.vertices[i].z);
                    }
                    mesh.uv = uvs;
                    if (height > 0)
                    {
                        mesh = SimpleExtruder.Extrude(mesh, polygon, height);
                    }
                }
            }
            filter.sharedMesh = mesh;

            if (layer.useColliders)
            {
                polygon.AddComponent <MeshCollider>().sharedMesh = mesh;
            }
            return(polygon);
        }
        public void BuildLine(GameObject line, GOLayer layer, GORenderingOptions renderingOptions, GOMap map)
        {
            if (feature.convertedGeometry.Count == 2 && feature.convertedGeometry[0].Equals(feature.convertedGeometry[1]))
            {
                return;
            }

                        #if GOLINK
            feature.convertedGeometry = GOFeatureMeshBuilder.BreakLine(feature.convertedGeometry, map.goTerrain);
                        #endif

            if (renderingOptions.tag.Length > 0)
            {
                line.tag = renderingOptions.tag;
            }

            if (renderingOptions.material)
            {
                renderingOptions.material.renderQueue = -(int)feature.sort;
            }
            if (renderingOptions.outlineMaterial)
            {
                renderingOptions.outlineMaterial.renderQueue = -(int)feature.sort;
            }

            GOLineMesh lineMesh = new GOLineMesh(feature.convertedGeometry);
            lineMesh.width = renderingOptions.lineWidth;
            lineMesh.load(line);
            mesh = lineMesh.mesh;
            line.GetComponent <Renderer>().material = renderingOptions.material;

            Vector3 position = line.transform.position;
            position.y = feature.y;

                        #if GOLINK
            if (renderingOptions.polygonHeight > 0)
            {
                int offset = GOFeature.BuildingElevationOffset;
                line.GetComponent <MeshFilter> ().sharedMesh = SimpleExtruder.Extrude(line.GetComponent <MeshFilter> ().sharedMesh, line, renderingOptions.polygonHeight + offset);
                position.y -= offset;
            }
                        #else
                        #endif

            line.transform.position = position;

            if (renderingOptions.outlineMaterial != null)
            {
                GameObject outline = CreateRoadOutline(line, renderingOptions.outlineMaterial, renderingOptions.lineWidth + layer.defaultRendering.outlineWidth);
                if (layer.useColliders)
                {
                    outline.AddComponent <MeshCollider> ().sharedMesh = outline.GetComponent <MeshFilter> ().sharedMesh;
                }

                outline.layer = line.layer;
                outline.tag   = line.tag;
            }
            else if (layer.useColliders)
            {
//				Mesh m = gameObject.GetComponent<MeshFilter> ().sharedMesh;
                line.AddComponent <MeshCollider> ();
            }
        }