Exemplo n.º 1
0
    // Düz yolu oluşturmaya yarayan fonksiyon:
    // - Yolda kullanacağımız zeminleri ve puan objelerini çekmek için havuzu kullanıyoruz
    // - baslangicNoktasi yolun hangi koordinattan başlayacağını belirler
    // - ileriYon yolun hangi yönde gideceğini belirler
    // - uzunluk yolun kaç zemin klonundan oluşacağını belirler
    public void YolOlustur(Vector3 baslangicNoktasi, YolYonu yolYonu, int uzunluk)
    {
        // yolYonu'nden yolun ileri yön vektörünü hesapla
        if (yolYonu == YolYonu.Ileri)
        {
            ileriYon = new Vector3(0f, 0f, 1f);
        }
        else if (yolYonu == YolYonu.Sag)
        {
            ileriYon = new Vector3(1f, 0f, 0f);
        }
        else if (yolYonu == YolYonu.Sol)
        {
            ileriYon = new Vector3(-1f, 0f, 0f);
        }
        else
        {
            ileriYon = new Vector3(0f, 0f, -1f);
        }

        // yola dizeceğimiz zemin objelerinin sahip olacağı rotation'ı bulup egim'de depoluyoruz
        Vector3 egim = SonsuzYolScript.YolEgiminiBul(yolYonu);

        for (int i = 0; i < uzunluk; i++)
        {
            // Havuzdan rastgele bir zemin objesi çek
            YolObjesi obje = ObjeHavuzu.Instance.HavuzdanYolObjesiCek();

            // bu zemin klonunun konumunu ve eğimini ayarlıyor, ardından zemini aktif hale getiriyoruz
            obje.transform.localPosition    = baslangicNoktasi;
            obje.transform.localEulerAngles = egim;
            obje.gameObject.SetActive(true);

            // zemini ve zeminin çıktığı prefab'ın index'ini ilgili array'lerimizde depoluyoruz
            yol.Add(obje);

            // bir sonraki zemin klonunu bu zeminin uzunluğu kadar ileride oluşturuyoruz ki
            // sonraki zemin bu zeminin üzerinde oluşmasın
            baslangicNoktasi += ileriYon * obje.ebatlar.z;
        }

        // yolun bitiş noktasını ve yönünü ayarlıyoruz
        bitisNoktasi = baslangicNoktasi;
        yon          = yolYonu;
    }
Exemplo n.º 2
0
 // Bir yol objesini ilgili havuza eklemeye yarayan fonksiyon
 public void HavuzaYolObjesiEkle(YolObjesi obje)
 {
     if (obje.yolTuru == YolTuru.DuzYol)
     {
         ileriYolObjeleriHavuzu.Add(obje);
     }
     else if (obje.yolTuru == YolTuru.SagDonemec)
     {
         sagDonemecHavuzu.Add(obje);
     }
     else if (obje.yolTuru == YolTuru.SolDonemec)
     {
         solDonemecHavuzu.Add(obje);
     }
     else
     {
         solVeSagDonemecHavuzu.Add(obje);
     }
 }
Exemplo n.º 3
0
    // Bu yolu yok ederken (oyuncu artık bu yolda koşmayı bitirip başka yola saptığında)
    // çağrılan ve yoldaki puan objeleri ile zemin objelerini havuza geri eklemeye yarayan
    // fonksiyon (yani Destroy yapmıyoruz)
    public void YoluYokEt()
    {
        // zemin objelerini deaktif et ve havuza ekle (bu esnada hangi zemin objesi klonunun
        // hangi prefab'tan çıktığını dikkate al (yolIndexler vasıtasıyla))
        for (int i = 0; i < yol.Count; i++)
        {
            YolObjesi obje = yol[i];
            obje.gameObject.SetActive(false);
            ObjeHavuzu.Instance.HavuzaYolObjesiEkle(obje);
        }

        // puan objelerini deaktif et ve havuza ekle
        for (int i = 0; i < puanObjeleri.Count; i++)
        {
            Transform obje = puanObjeleri[i];
            obje.gameObject.SetActive(false);
            ObjeHavuzu.Instance.HavuzaPuanObjesiEkle(obje);
        }

        // List'lerin içini boşalt
        yol.Clear();
        puanObjeleri.Clear();
    }
Exemplo n.º 4
0
    // Kavşak ve bu kavşağa bağlı düz yollar oluşturmaya yarayan fonksiyon
    private void DonemecOlustur(Vector3 baslangicNoktasi, YolYonu yolYonu)
    {
        // Kavşak objesinin sahip olacağı rotation değerini bul
        Vector3 egim = YolEgiminiBul(yolYonu);

        // [0-2] aralığında rastgele bir integer döndürülür ve:
        // 0- sol kavşak oluşturulur
        // 1- sağ kavşak oluşturulur
        // 2- iki yönlü kavşak oluşturulur
        switch (Random.Range(0, 3))
        {
        case 0:
            // sadece sola dönemeç oluştur
            // sol kavşak objesini havuzdan çek ve oyun alanına yerleştir
            kavsakObjesi = ObjeHavuzu.Instance.HavuzdanSolDonemecObjesiCek();
            kavsakObjesi.transform.localPosition    = baslangicNoktasi;
            kavsakObjesi.transform.localEulerAngles = egim;
            kavsakObjesi.gameObject.SetActive(true);

            // sola dön
            if (yolYonu == YolYonu.Ileri)
            {
                yolYonu           = YolYonu.Sol;
                baslangicNoktasi += new Vector3(-kavsakObjesi.ebatlar.x / 2, 0, kavsakObjesi.ebatlar.z / 2);
            }
            else if (yolYonu == YolYonu.Sol)
            {
                yolYonu           = YolYonu.Geri;
                baslangicNoktasi += new Vector3(-kavsakObjesi.ebatlar.z / 2, 0, -kavsakObjesi.ebatlar.x / 2);
            }
            else if (yolYonu == YolYonu.Geri)
            {
                yolYonu           = YolYonu.Sag;
                baslangicNoktasi += new Vector3(kavsakObjesi.ebatlar.x / 2, 0, -kavsakObjesi.ebatlar.z / 2);
            }
            else
            {
                yolYonu           = YolYonu.Ileri;
                baslangicNoktasi += new Vector3(kavsakObjesi.ebatlar.z / 2, 0, kavsakObjesi.ebatlar.x / 2);
            }

            // kavşağın ucunda yeni bir düz yol oluştur
            YolOlustur(solYol, baslangicNoktasi, yolYonu);
            break;

        case 1:
            // sadece sağa dönemeç oluştur
            // sağ kavşak objesini havuzdan çek ve oyun alanına yerleştir
            kavsakObjesi = ObjeHavuzu.Instance.HavuzdanSagDonemecObjesiCek();
            kavsakObjesi.transform.localPosition    = baslangicNoktasi;
            kavsakObjesi.transform.localEulerAngles = egim;
            kavsakObjesi.gameObject.SetActive(true);

            // sağa dön
            if (yolYonu == YolYonu.Ileri)
            {
                yolYonu           = YolYonu.Sag;
                baslangicNoktasi += new Vector3(kavsakObjesi.ebatlar.x / 2, 0, kavsakObjesi.ebatlar.z / 2);
            }
            else if (yolYonu == YolYonu.Sol)
            {
                yolYonu           = YolYonu.Ileri;
                baslangicNoktasi += new Vector3(-kavsakObjesi.ebatlar.z / 2, 0, kavsakObjesi.ebatlar.x / 2);
            }
            else if (yolYonu == YolYonu.Geri)
            {
                yolYonu           = YolYonu.Sol;
                baslangicNoktasi += new Vector3(-kavsakObjesi.ebatlar.x / 2, 0, -kavsakObjesi.ebatlar.z / 2);
            }
            else
            {
                yolYonu           = YolYonu.Geri;
                baslangicNoktasi += new Vector3(kavsakObjesi.ebatlar.z / 2, 0, -kavsakObjesi.ebatlar.x / 2);
            }

            // kavşağın ucunda yeni bir düz yol oluştur
            YolOlustur(sagYol, baslangicNoktasi, yolYonu);
            break;

        case 2:
            // hem sola hem sağa dönemeç oluştur
            // iki yönlü kavşak objesini havuzdan çek ve oyun alanına yerleştir
            kavsakObjesi = ObjeHavuzu.Instance.HavuzdanSolVeSagDonemecObjesiCek();
            kavsakObjesi.transform.localPosition    = baslangicNoktasi;
            kavsakObjesi.transform.localEulerAngles = egim;
            kavsakObjesi.gameObject.SetActive(true);

            // hem sol hem de sağ yönü birer değişkende depola
            YolYonu tersYolYonu;
            Vector3 tersYolBaslangicNoktasi = baslangicNoktasi;
            if (yolYonu == YolYonu.Ileri)
            {
                yolYonu                  = YolYonu.Sol;
                tersYolYonu              = YolYonu.Sag;
                baslangicNoktasi        += new Vector3(-kavsakObjesi.ebatlar.x / 2, 0, kavsakObjesi.ebatlar.z / 2);
                tersYolBaslangicNoktasi += new Vector3(kavsakObjesi.ebatlar.x / 2, 0, kavsakObjesi.ebatlar.z / 2);
            }
            else if (yolYonu == YolYonu.Sol)
            {
                yolYonu                  = YolYonu.Geri;
                tersYolYonu              = YolYonu.Ileri;
                baslangicNoktasi        += new Vector3(-kavsakObjesi.ebatlar.z / 2, 0, -kavsakObjesi.ebatlar.x / 2);
                tersYolBaslangicNoktasi += new Vector3(-kavsakObjesi.ebatlar.z / 2, 0, kavsakObjesi.ebatlar.x / 2);
            }
            else if (yolYonu == YolYonu.Geri)
            {
                yolYonu                  = YolYonu.Sag;
                tersYolYonu              = YolYonu.Sol;
                baslangicNoktasi        += new Vector3(kavsakObjesi.ebatlar.x / 2, 0, -kavsakObjesi.ebatlar.z / 2);
                tersYolBaslangicNoktasi += new Vector3(-kavsakObjesi.ebatlar.x / 2, 0, -kavsakObjesi.ebatlar.z / 2);
            }
            else
            {
                yolYonu                  = YolYonu.Ileri;
                tersYolYonu              = YolYonu.Geri;
                baslangicNoktasi        += new Vector3(kavsakObjesi.ebatlar.z / 2, 0, kavsakObjesi.ebatlar.x / 2);
                tersYolBaslangicNoktasi += new Vector3(kavsakObjesi.ebatlar.z / 2, 0, -kavsakObjesi.ebatlar.x / 2);
            }

            // kavşağın iki ucunda da yeni birer düz yol oluştur
            YolOlustur(solYol, baslangicNoktasi, yolYonu);
            YolOlustur(sagYol, tersYolBaslangicNoktasi, tersYolYonu);
            break;
        }
    }