Ejemplo n.º 1
0
        void Start()
        {
            QuestController.Instance.RegisterQuest(gameObject.ToString(), this);
            changeShadows       = GameObject.Find("Shadows").GetComponent <ChangeShadows>();
            m_clearSign         = GameObject.Find("Clear Sign").GetComponent <ParticleSystem>();
            m_clearSignCollider = GameObject.Find("Clear Sign").GetComponent <CircleCollider2D>();
            m_selfRotate        = GetComponent <SelfRotate>();
            m_block             = GameObject.Find("Block");

            this.enabled = false;
        }
Ejemplo n.º 2
0
    // Use this for initialization
    void Start()
    {
        audiCar = GameObject.Find("/Car/Car_Audi");

        selfRotate = audiCar.GetComponent <SelfRotate>();

        carComponents = GameObject.FindGameObjectsWithTag("car");

        componentIcons = GameObject.FindGameObjectsWithTag("component");
        foreach (GameObject obj in componentIcons)
        {
            obj.SetActive(isAssembling);
        }

        rawRotation = audiCar.transform.rotation;
    }
Ejemplo n.º 3
0
    void Gen()
    {
        scale             = 1;//Random.Range (0, spherePrefabs.Length - 2);
        spherePrefabToUse = spherePrefabs [scale];
        spherePlacement   = spherePrefabs [scale + 2];

        SetNoiseParameters();
        if (g != null)
        {
            Destroy(g);
        }
        g = new GameObject("Planet");

        g_urban     = new GameObject("Urban");
        g_trees     = new GameObject("Trees");
        g_water     = new GameObject("Water");
        g_land      = Instantiate(spherePrefabToUse) as GameObject;
        g_land.name = "Land";

        g_urban.transform.parent = g_land.transform;
        g_trees.transform.parent = g_land.transform;
        g_water.transform.parent = g.transform;
        g_land.transform.parent  = g.transform;

        Mesh m = g_land.GetComponent <MeshFilter> ().mesh;

        m.subMeshCount = matList.Length;

        // get vertices in list
        int points = m.vertexCount;
        int tris   = m.triangles.Length / 3;

        // adding vertices to list
        List <Vector3> vs = new List <Vector3>();

        foreach (Vector3 v in m.vertices)
        {
            vs.Add(v);
        }

        // noise offset
        for (int i = 0; i < points; i++)
        {
            vs[i] += Perlin3D(vs[i]) * 0.0015f;
        }

        // duplicating points for hard edges
        for (int i = 0; i < points; i++)
        {
            vs.Add(vs[i]);
        }
        for (int i = 0; i < points; i++)
        {
            vs.Add(vs[i]);
        }

        // add centerpoint enough tomes for each face

        /*	for (int i = 0; i < tris*3; i ++) {
         *              vs.Add (Vector3.zero);
         *      }
         */
        // get triangles in lists
        List <int> ts = new List <int> ();

        foreach (int t in m.triangles)
        {
            ts.Add(t);
        }

        // add triangles to centerpoint
        // done in a second list for submeshes

/*		List<int> ts1 = new List<int> ();
 *              for(int i = 0; i < tris; i ++) {
 *                      ts1.Add (ts[3 * i + 1]  + points);
 *                      ts1.Add (ts[3 * i + 0] + points);
 *                      ts1.Add (points*3 + (i*3));
 *
 *                      ts1.Add (ts[3 * i + 0] + points*2);
 *                      ts1.Add (ts[3 * i + 2] + points);
 *                      ts1.Add (points*3 + (i*3)+1);
 *
 *                      ts1.Add (ts[3 * i + 2] + points * 2);
 *                      ts1.Add (ts[3 * i + 1] + points * 2);
 *                      ts1.Add (points*3 + (i*3)+2);
 *              }*/
        // a cleaner way of proceeding might be to ahve a single centerpoint,
        // or even single points for everything, and to duplicate them when using them for triangles.


        // adding water
        int index = vs.Count;

        for (int i = 0; i < points; i++)
        {
            vs.Add(vs[i].normalized * 0.01f * 100);
        }
        List <int> ts2 = new List <int>();

        for (int i = 0; i < tris * 3; i++)
        {
            ts2.Add(ts[i] + index);
        }

        // adding clouds
        index = vs.Count;
        float cloudSize = 0.014f - 0.001f * scale;

        for (int i = 0; i < points; i++)
        {
            vs.Add(vs[i].normalized * cloudSize * 100);
        }
        for (int i = 0; i < points; i++)
        {
            vs.Add(vs[i].normalized * cloudSize * 100);
        }
        List <int> ts3 = new List <int>();

        float cloudsRatio = Random.Range(0.2f, 0.3f);

        //SetNoiseParameters ();
        for (int i = 0; i < tris; i++)
        {
            Vector3 vN  = (Perlin3D(vs [ts[i * 3] + index], 2) + Vector3.one) * 0.5f;
            float   moy = vN.y;
            if (moy < cloudsRatio)
            {
                ts3.Add(ts[i * 3] + index);
                ts3.Add(ts[i * 3 + 1] + index);
                ts3.Add(ts[i * 3 + 2] + index);
                ts3.Add(ts[i * 3] + index + points);
                ts3.Add(ts[i * 3 + 2] + index + points);
                ts3.Add(ts[i * 3 + 1] + index + points);
            }
        }

        m.SetVertices(vs);
        m.SetTriangles(ts, 0);
        m.SetTriangles(new int[3] {
            0, 0, 0
        }, 1);
        m.SetTriangles(new int[3] {
            0, 0, 0
        }, 2);
        m.SetTriangles(new int[3] {
            0, 0, 0
        }, 3);
        // 0 here is for submesh, assign different lists of each submesh.
        // you'll need different submeshes for different materials
        //m.SetTriangles (ts1, 1);

        m.RecalculateNormals();

        // water GO
        GameObject g2 = new GameObject("Sea");

        g2.transform.parent           = g_water.transform;
        g2.transform.localEulerAngles = Vector3.zero;
        MeshFilter mf2 = g2.AddComponent <MeshFilter> ();
        Mesh       m2  = new Mesh();

        m2.SetVertices(vs);
        m2.subMeshCount = matList.Length;
        m2.SetTriangles(ts2, 2);
        m2.SetTriangles(new int[3] {
            0, 0, 0
        }, 0);
        m2.SetTriangles(new int[3] {
            0, 0, 0
        }, 1);
        m2.SetTriangles(new int[3] {
            0, 0, 0
        }, 3);
        m2.RecalculateNormals();
        mf2.mesh = m2;
        MeshRenderer mr2 = g2.AddComponent <MeshRenderer> ();

        mr2.materials = matList;
        SelfRotate sr2 = g2.AddComponent <SelfRotate> ();

        sr2.r = Vector3.up * 2f + Vector3.right * 1f;

        // clouds GO
        GameObject g3 = new GameObject("Clouds");

        g3.transform.parent = g.transform;
        MeshFilter mf3 = g3.AddComponent <MeshFilter> ();
        Mesh       m3  = new Mesh();

        m3.SetVertices(vs);
        m3.subMeshCount = matList.Length;
        m3.SetTriangles(ts3, 3);
        m3.SetTriangles(new int[3] {
            0, 0, 0
        }, 0);
        m3.SetTriangles(new int[3] {
            0, 0, 0
        }, 1);
        m3.SetTriangles(new int[3] {
            0, 0, 0
        }, 2);
        m3.RecalculateNormals();
        mf3.mesh = m3;
        MeshRenderer mr3 = g3.AddComponent <MeshRenderer> ();

        mr3.materials = matList;
        SelfRotate sr3 = g3.AddComponent <SelfRotate> ();

        sr3.r = Vector3.up * -7.5f + Vector3.up * 1f;


        SelfRotate sr = g_land.AddComponent <SelfRotate> ();

        sr.r = Vector3.forward * 2f;


        g_land.GetComponent <Renderer> ().materials = matList;



        // placing stuff
        MeshCollider mc  = g_land.AddComponent <MeshCollider> ();
        MeshCollider mc2 = g2.AddComponent <MeshCollider> ();

        g_land.layer = 8;
        g2.layer     = 9;


        // trees
        float      treesRatio = 0.3f;   //Random.Range (0.35f, 0.4f);
        float      urbanRatio = 0.4f;   //Random.Range (0.35f, 0.4f);
        GameObject temp       = Instantiate(spherePlacement) as GameObject;

        Vector3[]      vt  = temp.GetComponent <MeshFilter> ().mesh.vertices;
        List <Vector3> vtl = new List <Vector3> ();

        foreach (Vector3 vvv in vt)
        {
            bool hasIt = false;
            if (vtl.Count != 0)
            {
                foreach (Vector3 vvvv in vtl)
                {
                    if (vvv == vvvv)
                    {
                        hasIt = true;
                        break;
                    }
                }
            }
            if (!hasIt)
            {
                vtl.Add(vvv);
            }
        }
        Destroy(temp);

        float invScale = 1 / Mathf.Pow(2, scale);

        foreach (Vector3 v in vtl)
        {
            Vector3 vv = (Perlin3D(v, -1.5f) + Vector3.one) * 0.5f;
            if (vv.y * vv.x < Mathf.Pow(treesRatio, 2) || vv.y * vv.x > Mathf.Pow((1 - urbanRatio), 2))
            {
                RaycastHit hit;
                if (Physics.Raycast(v * 300, -v, out hit, 100f, 256))
                {
                    if (hit.point.magnitude > 1.01f)
                    {
                        GameObject ins = null;

                        if (hit.point.magnitude > 1.10)
                        {
                            if (hit.point.magnitude < 1.12f)
                            {
                                /*	ins = Instantiate (MountainProps[Random.Range(0, MountainProps.Length)]) as GameObject;
                                 *      ins.transform.parent = g_mountains.transform;
                                 *      ins.transform.position = hit.point.normalized;
                                 */}
                        }

                        else if (vv.y * vv.x < Mathf.Pow(treesRatio, 2))
                        {
                            ins = Instantiate(NatureProps[Random.Range(0, NatureProps.Length)]) as GameObject;
                            ins.transform.parent   = g_trees.transform;
                            ins.transform.position = hit.point;
                        }
                        else if (vv.y * vv.x > Mathf.Pow((1 - urbanRatio), 2))
                        {
                            ins = Instantiate(UrbanProps[Random.Range(0, UrbanProps.Length)]) as GameObject;
                            ins.transform.parent   = g_urban.transform;
                            ins.transform.position = hit.point;
                        }

                        if (ins != null)
                        {
                            ins.transform.LookAt(v * 20000);
                            ins.transform.Rotate(new Vector3(0, 0, Random.value * 360));

                            ins.transform.localScale = Vector3.one * 2f * (invScale) /* * 0.01f*/ * (1 + Random.Range(-0.15f, 0.15f));
                        }
                    }
                }
            }
        }
    }