Ejemplo n.º 1
0
        public GameObject BuildLine(GOLayer layer, GORenderingOptions renderingOptions, GOMap map, GameObject parent)
        {
            if (feature.convertedGeometry.Count == 2 && feature.convertedGeometry[0].Equals(feature.convertedGeometry[1]))
            {
                return(null);
            }

            GameObject line = GameObject.Instantiate(feature.goTile.featurePrototype, parent.transform);

            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;

            line.transform.position = position;

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

                outline.layer = line.layer;
                outline.tag   = line.tag;
            }
            else if (layer.useColliders)
            {
                line.GetComponent <MeshCollider> ().enabled = true;
            }

            return(line);
        }
Ejemplo n.º 2
0
        public virtual IEnumerator CreateLine(GOTile tile, bool delayedLoad)
        {
            GORenderingOptions renderingOptions = GetRenderingOptions();

            if (renderingOptions.lineWidth == 0)
            {
                yield break;
            }

            GOFeatureMeshBuilder builder = new GOFeatureMeshBuilder(this);

            featureCenter = builder.center;
            GameObject line = null;

            if (preloadedMeshData != null)
            {
                line = builder.BuildLineFromPreloaded(this, tile.map, parent);
            }

            if (line == null)
            {
                yield break;
            }

            line.name = name != null? name:kind.ToString();

            //Layer mask
            if (layer.useLayerMask == true)
            {
                tile.AddObjectToLayerMask(layer, line);
            }

            if (goTile.addGoFeatureComponents)
            {
                GOFeatureBehaviour fb = line.AddComponent <GOFeatureBehaviour> ();
                fb.goFeature = this;
            }

            //Mapzen Streetnames
            if (goTile.mapType == GOMap.GOMapType.Mapzen_Legacy && layer.layerType == GOLayer.GOLayerType.Roads && name != null && name.Length > 0 && goTile.useStreetnames && !isLoop && !goTile.useElevation)
            {
                GOStreetName streetName = GameObject.Instantiate(goTile.streetnamePrototype, line.transform).GetComponent <GOStreetName>();
                streetName.gameObject.name = name + "_streetname";
                yield return(tile.StartCoroutine(streetName.Build(name, this)));
            }

            if (layer.OnFeatureLoad != null)
            {
                layer.OnFeatureLoad.Invoke(this, line);
            }

            if (delayedLoad)
            {
                yield return(null);
            }
        }
Ejemplo n.º 3
0
		public GORenderingOptions GetRenderingOptions () {
			GORenderingOptions renderingOptions = layer.defaultRendering;
			foreach (GORenderingOptions r in layer.renderingOptions) {
				if (r.kind == kind) {
					defaultRendering = false;
					renderingOptions = r;
					break;
				}
			}
			return renderingOptions;
		}
Ejemplo n.º 4
0
		public void setRenderingOptions () {
			
			renderingOptions = layer.defaultRendering;
			foreach (GORenderingOptions r in layer.renderingOptions) {
				if (r.kind == kind) {
					defaultRendering = false;
					renderingOptions = r;
					break;
				}
			}
		}
        public virtual IEnumerator CreateLine(GOTile tile, bool delayedLoad)
        {
            GORenderingOptions renderingOptions = GetRenderingOptions();

            if (renderingOptions.lineWidth == 0)
            {
                yield break;
            }

            GameObject line = new GameObject(name != null? name:kind.ToString());

            line.transform.parent = parent.transform;

            //Layer mask
            if (layer.useLayerMask == true)
            {
                tile.AddObjectToLayerMask(layer, line);
            }

            GOFeatureMeshBuilder builder = new GOFeatureMeshBuilder(this);

            if (preloadedMeshData != null)
            {
                builder.BuildLineFromPreloaded(line, this, tile.map);
            }
            else if (tile.map.mapType == GOMap.GOMapType.MapzenJson)
            {
                builder.BuildLine(line, layer, renderingOptions, tile.map);
            }

            GOFeatureBehaviour fb = line.AddComponent <GOFeatureBehaviour> ();

            fb.goFeature = this;

            if (layer.layerType == GOLayer.GOLayerType.Roads && name != null && name.Length > 0 && renderingOptions.useStreetNames)
            {
                GOStreetName streetName = new GameObject().AddComponent <GOStreetName> ();
                streetName.gameObject.name = "";
                streetName.transform.SetParent(line.transform);
                yield return(tile.StartCoroutine(streetName.Build(name, tile.map.textShader, tile.map.streetnameColor)));
            }

            if (layer.OnFeatureLoad != null)
            {
                layer.OnFeatureLoad.Invoke(builder.mesh, layer, kind, builder.center);
            }

            if (delayedLoad)
            {
                yield return(null);
            }
        }
Ejemplo n.º 6
0
 public Material GetMaterial(GORenderingOptions rendering, Vector3 center)
 {
     if (rendering.materials.Length > 0)
     {
         float         seed     = center.x * center.z * 100;
         System.Random rnd      = new System.Random((int)seed);
         int           pick     = rnd.Next(0, rendering.materials.Length);
         Material      material = rendering.materials[pick];
         return(material);
     }
     else
     {
         return(rendering.material);
     }
 }
        public GOFeature(GOFeature f)
        {
            name          = f.name;
            index         = f.index;
            goFeatureType = f.goFeatureType;
            properties    = f.properties;
            attributes    = f.attributes;
            layer         = f.layer;


            //After editing the feature in tile subclasses.

            //		public string kind;
            kind             = f.kind;
            renderingOptions = f.renderingOptions;
            detail           = f.detail;
            sort             = f.sort;
            y      = f.y;
            height = f.height;
            index  = f.index;
        }
Ejemplo n.º 8
0
        public GameObject BuildLineFromPreloaded(GOFeature feature, GOMap map, GameObject parent)
        {
            if (feature.preloadedMeshData == null)
            {
                return(null);
            }

            GameObject line = GameObject.Instantiate(feature.goTile.featurePrototype, parent.transform);

            GORenderingOptions renderingOptions = feature.renderingOptions;

            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;
            }


            MeshFilter   filter   = line.GetComponent <MeshFilter> ();
            MeshRenderer renderer = line.GetComponent <MeshRenderer> ();

            renderer.shadowCastingMode = feature.layer.castShadows;

            filter.sharedMesh = feature.preloadedMeshData.ToMesh();
            renderer.material = renderingOptions.material;

//			filter.sharedMesh = feature.preloadedMeshData.ToRoadMesh();
//			renderer.materials = new Material[] {renderingOptions.material,renderingOptions.outlineMaterial};

            Vector3 position = line.transform.position;

            position.y  = feature.y;
            position.y += Noise();
            position.y *= feature.goTile.worldScale;

            if (feature.goTile.useElevation)
            {
                position.y -= GOFeature.BuildingElevationOffset;
            }

            line.transform.position = position;

            if (renderingOptions.outlineMaterial != null && feature.preloadedMeshData != null && feature.preloadedMeshData.secondaryMesh != null)
            {
                GameObject outline = RoadOutlineFromPreloaded(line, feature, renderingOptions.outlineMaterial);
                if (feature.layer.useColliders)
                {
                    MeshCollider mc = outline.GetComponent <MeshCollider> ();
                    mc.enabled    = true;
                    mc.sharedMesh = outline.GetComponent <MeshFilter> ().sharedMesh;
                }

                outline.layer = line.layer;
                outline.tag   = line.tag;
            }
            else if (feature.layer.useColliders)
            {
                MeshCollider collider = line.GetComponent <MeshCollider> ();
                collider.enabled    = true;
                collider.sharedMesh = filter.sharedMesh;
            }

            return(line);
        }
        public void BuildLineFromPreloaded(GameObject line, GOFeature feature, GOMap map)
        {
            if (feature.preloadedMeshData == null)
            {
                return;
            }

            GORenderingOptions renderingOptions = feature.renderingOptions;

            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;
            }


            MeshFilter filter = line.GetComponent <MeshFilter> ();

            if (filter == null)
            {
                filter = (MeshFilter)line.AddComponent(typeof(MeshFilter));
            }

            MeshRenderer renderer = line.GetComponent <MeshRenderer> ();

            if (renderer == null)
            {
                renderer = (MeshRenderer)line.AddComponent(typeof(MeshRenderer));
            }

            filter.sharedMesh = feature.preloadedMeshData.ToMesh();
            line.GetComponent <Renderer>().material = renderingOptions.material;

            Vector3 position = line.transform.position;

            position.y = feature.y;

            position.y += Noise();

            if (GOMap.GOLink && renderingOptions.polygonHeight > 0)
            {
                position.y -= GOFeature.BuildingElevationOffset;
            }

            line.transform.position = position;

            if (renderingOptions.outlineMaterial != null && feature.preloadedMeshData != null && feature.preloadedMeshData.secondaryMesh != null)
            {
                GameObject outline = RoadOutlineFromPreloaded(line, feature, renderingOptions.outlineMaterial);
                if (feature.layer.useColliders)
                {
                    outline.AddComponent <MeshCollider> ().sharedMesh = outline.GetComponent <MeshFilter> ().sharedMesh;
                }

                outline.layer = line.layer;
                outline.tag   = line.tag;
            }
            else if (feature.layer.useColliders)
            {
                line.AddComponent <MeshCollider> ();
            }
        }
        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> ();
            }
        }