Example #1
0
    IEnumerator Start()
    {
        float Scale = mapReader.Scale;

        map = GetComponent <mapReader> ();
        while (!map.isReady)
        {
            yield return(null);
        }
        //TODO: call roads functions here

        foreach (OsmWay way in map.ways.FindAll((w) => { return(w.isRoad); }))
        {
            GameObject road = new GameObject();
            for (int i = 1; i < way.NodeIDs.Count; i++)
            {
                OsmNode p1 = map.nodes [way.NodeIDs [i - 1]];
                OsmNode p2 = map.nodes [way.NodeIDs [i]];

                Vector3 v1 = (p1 - map.bounds.Center) * Scale;
                Vector3 v2 = (p2 - map.bounds.Center) * Scale;

                float dx    = v1.x - v2.x;
                float dy    = v1.z - v2.z;
                float len   = Mathf.Sqrt(dx * dx + dy * dy);
                float theta = (float)((Mathf.Atan2(dx, dy) / Math.PI) * 180f);

                //compute the angle of road


                GameObject patch = Instantiate(road_prefab, new Vector3((v1.x + v2.x) / 2, 0, (v1.z + v2.z) / 2), Quaternion.Euler(90, theta, 0), road.transform);
                patch.transform.localScale = new Vector3(0.1f * way.lanes, len, 1);

                GameObject circle = Instantiate(roadCirclePrefab, v2, Quaternion.Euler(90, 0, 0), road.transform);
                circle.transform.localScale = new Vector3(0.1f * way.lanes, 0.1f * way.lanes, 1);
            }
        }
        yield return(null);
    }
Example #2
0
    IEnumerator Start()
    {
        map = GetComponent <mapReader> ();
        while (!map.isReady)
        {
            yield return(null);
        }

        foreach (OsmWay way in map.ways.FindAll((w) => { return(w.isBuilding); }))
        {
            GameObject go = new GameObject();
            //go.transform.position = map.bounds.Center;

            MeshFilter   mf = go.AddComponent <MeshFilter> ();
            MeshRenderer mr = go.AddComponent <MeshRenderer> ();

            mr.material = building;


            List <Vector3> vectors  = new List <Vector3> ();
            List <Vector3> normals  = new List <Vector3> ();
            List <int>     indicies = new List <int> ();


            for (int i = 1; i < way.NodeIDs.Count; i++)
            {
                OsmNode p1 = map.nodes[way.NodeIDs[i - 1]];
                OsmNode p2 = map.nodes [way.NodeIDs [i]];

                Vector3 v1 = (p1 - map.bounds.Center) * Scale;
                Vector3 v2 = (p2 - map.bounds.Center) * Scale;
                Vector3 v3 = (v1 + new Vector3(0, way.Height, 0));
                Vector3 v4 = (v2 + new Vector3(0, way.Height, 0));

                vectors.Add(v1);
                vectors.Add(v2);
                vectors.Add(v3);
                vectors.Add(v4);

                normals.Add(-Vector3.forward);
                normals.Add(-Vector3.forward);
                normals.Add(-Vector3.forward);
                normals.Add(-Vector3.forward);

                int idx1, idx2, idx3, idx4;

                idx4 = vectors.Count - 1;
                idx3 = vectors.Count - 2;
                idx2 = vectors.Count - 3;
                idx1 = vectors.Count - 4;

                indicies.Add(idx1);
                indicies.Add(idx3);
                indicies.Add(idx2);

                indicies.Add(idx3);
                indicies.Add(idx4);
                indicies.Add(idx2);

                indicies.Add(idx2);
                indicies.Add(idx3);
                indicies.Add(idx1);

                indicies.Add(idx2);
                indicies.Add(idx4);
                indicies.Add(idx3);
            }

            mf.mesh.vertices  = vectors.ToArray();
            mf.mesh.normals   = normals.ToArray();
            mf.mesh.triangles = indicies.ToArray();
            yield return(null);
        }
    }