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); }
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); } }
public GORenderingOptions GetRenderingOptions () { GORenderingOptions renderingOptions = layer.defaultRendering; foreach (GORenderingOptions r in layer.renderingOptions) { if (r.kind == kind) { defaultRendering = false; renderingOptions = r; break; } } return renderingOptions; }
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); } }
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; }
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> (); } }