‫Merhaba ve hoş geldiniz.
‫Bu derste, tetikleyicimizi yeniden düzenleyerek daha fazla kod ekleyebilmemiz için hazır hale getireceğiz.
‫Şu anda gerçekten kontrolden çıkmaya başlamıştı, bu yüzden bunu okuması gerçekten
‫çok daha kolay olan bunun gibi küçük bir fonksiyona dönüştüreceğiz.
‫Şimdi bu refactor işleminin nasıl yapılacağını görelim.
‫Tamam.
‫Bu yüzden oyunumuza biraz ses katmak istiyoruz ve bunu yapacağımız yer de ateş ederken silahın
‫içi.
‫Bu ilk uğrayacağımız liman.
‫Bence güzel bir atış sesi ve darbe sesi harika olurdu.
‫Tek sorun, tetik çekme işlevimize geri döndüğümde, tuhaf bir şekilde büyüdüğünü fark ettim.
‫Ekranlarımdan birine sığmıyor.
‫Bu işlevselliği nereye koyacağımızı okumak ve anlamak da biraz zor.
‫Bu nedenle, burada işlevselliğin ne olduğunu gerçekten anlamak için çaba sarf ederken, belki de hızlı
‫bir refactor yapmaya veya bu şeylerin bazılarını başka yöntemlere çekmeye değer, böylece okumak çok zor değil.
‫Şimdi, gidip bu koda bir göz atarsanız ve yaptığı temel şeylerin ne olduğunu anlamaya çalışırsanız,
‫bunun büyük bir kısmının aslında sadece hattımız için ayarlandığını göreceksiniz.
‫Tüm bu parçayı 28. satırdan 43. satıra kadar takip edin.
‫Peki biz ne yapıyoruz?
‫Sahip piyonu alıyoruz, sonra sahibin denetleyicisini almayı kontrol ediyoruz, sonra bundan
‫görünüm alanını alıyoruz, sonra maksimum aralığa göre son konumu alıyoruz.
‫Sonra bazı şeyleri yok saymak için bazı isabet parametreleri geçiyoruz.
‫Tüm bunlar sadece hat takibimiz için ayarlanmıştır, bu yüzden neden bunu burada kendi işlevine çıkarmıyoruz?
‫En altta yeni bir özel fonksiyon oluşturacağım.
‫Değişkenlerimizden sonra bool return olacak çünkü esasen burada başarı döndüren bu çağrıyı bize
‫sadece isabet sonucunu veren bir çağrı ile değiştirmek istiyoruz.
‫Bu yüzden bunu silah izleme fonksiyonu olarak adlandıracağım bir şey olarak yapacağız ve burada bazı dış parametreler
‫olacak.
‫Yani, bunlardan biri isabetli sonuç olacaktır.
‫Bu yüzden sonuca basın, referans yapmak için ampersand.
‫Ve sabit bir referans olmadığı için, bunun bir çıkış parametresi olduğunu biliyoruz.
‫Biz buna vuruş diyoruz.
‫Ve aslında burada ihtiyacımız olan bir tane daha olabilir.
‫Yani, rotasyonun bu kod parçasından çıktığını ve aslında bu rotasyonu olumsuzladığımızı görebiliyorum.
‫Yani bizim asıl ilgilendiğimiz şey çekim yönü.
‫Belki de yapmamız gereken budur.
‫Bu yüzden bir F vektörü çıkış parametresi oluşturacağım, yani F vektörü ve işareti ve bu atış yönü
‫olacak.
‫Bunlar, silah takibimizden elde edilecek iki çıktıdır.
‫Şimdi devam edelim ve burada uygulamayı oluşturalım.
‫Ve yapmak istediğimiz şey aslında tüm bu kodu buraya kopyalamak.
‫Bakalım nasıl olacak.
‫Ayrıca bu atışı da kontrol etmek istiyoruz.
‫Yön.
‫Bunu oraya götürün ve sondan hemen önce sokun.
‫Ya da oyuncu görüntü alanımızı aldıktan sonra, atış yönünün negatif yöne, yani dönüşe eşit olması
‫gerektiğini ayarlayabiliriz.
‫Ancak burada dikkat edilmesi gereken nokta, aslında yerel bir değişken ayarlamak istemediğimizdir.
‫Dolayısıyla, türü buraya koyarsanız, yerel bir çekim yönü belirleyecektir.
‫Bunu silmek istiyoruz, böylece parametrelerdeki atış yönünü ayarlıyor, bu da aslında onu çağıran
‫fonksiyonda geçireceğimiz atış yönünü ayarladığı anlamına geliyor.
‫Aynı şey vuruş için de geçerli.
‫Bu yerel isabeti kaldırmamız gerekir, böylece kanal tarafından tekli satır izine aktarılan isabet, tabanca
‫izine aktarılan isabet olur.
‫Ve son olarak, şu anda ihtiyaç duyulmayan başka bir şey var mı ve bu da başarılı olacak
‫mı?
‫Sadece hat izleme sinyalinin sonucunu kanala göre döndürmemiz gerekiyor.
‫Bu, silah takibimizin başarılı olup olmadığına bağlı olacaktır.
‫Böylece bu girintiyi biraz daha az yapmayı başardık.
‫Artık hepsini tek bir ekrana sığdırabiliyoruz ve evet, tüm bunların silah izi
‫almakla ilgili olduğunu anlamak biraz daha kolay.
‫CP silahımıza gidebiliriz ve şimdi B başarımızı buraya ayarlayabiliriz.
‫Yani bool B başarısı, silah izi olarak ayarlamamız gerekecek ve burada bazı çıkış parametrelerini aktarmamız gerekiyor.
‫Dolayısıyla, sonuç vurulduğunda bunları yine de bir yerde beyan etmemiz gerekir.
‫Onlardan biri olacak.
‫Hit'i arayacağım.
‫Diğeri ise atış yönü olarak adlandırılan bir F vektörü olacaktı.
‫Ve bunlar geçecek.
‫Yani önce vuruşu, sonra atış yönünü alacağız.
‫Ve sonunda noktalı virgül var.
‫Bu da işi biraz daha kolaylaştıracak.
‫Bununla birlikte, sahip denetleyicisine de ihtiyacımız olduğunu fark ediyorum ve silah izinin sahip denetleyicisinden sorumlu
‫olmasını veya sahip denetleyicisini unutmasını istemiyorum.
‫Bunu yapmak bir silah izi sorumluluğuymuş gibi gelmiyor.
‫Bir hit alması kulağa hoş geliyor.
‫Bir atış yönü olması kulağa hoş geliyor.
‫Ama kontrolörün sahibi olma konusunda sınırı çizeceğim.
‫Bunun için, tüm bu kodu her ikisinin de çağırabileceği başka bir fonksiyona koyacağım.
‫Yani bu, bir denetleyici döndüren bir işlev olacak.
‫Yıldız.
‫Buna kontrolörün üstesinden gelme adını vereceğiz ve bunu bir konser haline getirebiliriz.
‫Bildiğimiz gibi, bu silah sınıfımızdaki değişkenlerden herhangi birini değiştirmek anlamına gelmiyor.
‫Bu uygulamayı oluşturalım.
‫Sadece gun trace'ten uygulamayı getirin, gerekirse girintileri düzeltin ve devam edip
‫basitçe sahip kontrolünü döndürelim.
‫Bu yüzden burada null kontrolü yapmaya gerek yoktur.
‫Bu null kontrolünü, onu kullanan işlevde yapmamız gerekir.
‫O yüzden bunu oraya getireceğiz.
‫Ayrıca burada bir değişken ayarlamamıza da gerek yok.
‫Devam edip geri dönebiliriz.
‫Yani oldukça basit olacak.
‫Bir kumandaya biniyorum ama tamamen değil.
‫Ve sonra değişkeni gun trace'e ayarlayacağız.
‫Yani sahip denetleyicisi bu şekilde sahip denetleyicisi olacak.
‫Daha sonra gun trace'te null'dan null'a erken dönüş yapıyoruz, bu arada gun trace bir boolean döndürdüğü
‫için bir boolean döndürmesi gerekiyor.
‫Bu yüzden devam edebilir ve burada false değerini döndürebiliriz çünkü bir sahip denetleyicisi alamazsak, silah takibi yapamayız.
‫Bu nedenle hiçbir şeyi vurmamız mümkün değil.
‫Ayrıca daha yukarıda bulunan sahip kontrolörüne de ihtiyacımız var.
‫Vuruş aktörümüzün olduğu yerde, bu hasarı alıyoruz.
‫Ve temel olarak burada yapmak istediğimiz şey, sahip denetleyicisini hit aktörümüzün içine almaktır.
‫Yani bir aktöre çarptıysak, tekrar sahip kontrolörünü alırız.
‫Şimdi, biraz silah izleyicilerinin aradığını biliyorum.
‫Bir kontrolör alın ve sonra bir aktöre çarptığımızda bunu tekrar yapıyoruz.
‫Ama bu sadece bir aktöre her vurduğumuzda olacak.
‫Bu yüzden bunun iki kez yeniden hesaplanmasını sorun etmiyorum çünkü senkronizasyondan çıkabilecek değişkenleri ve
‫durumu saklamak zorunda kalmadan kodu biraz daha okunabilir hale getirecek.
‫İşte böyle.
‫Artık hasar almak için ihtiyacımız olan sahip kontrolörümüz var ve çekme tetiğimiz çok daha iyi görünüyor.
‫Bu ders için bu kadar.
‫Hızlı bir tane.
‫Bir sonraki derste üzerinde çalışabileceğimiz iyi bir temele sahip olmak için tetiğimizi yeniden düzenliyoruz ve orada görüşmek
‫üzere.
‫Bu arada, görünüşe göre sahip kontrol cihazında küçük bir hata yapmışım.
‫Bunu derlemeye çalışırsanız, bu dönüş değeri aslında bir işaretçi döndürmediği için hiçbir şey yapmayacaktır.
‫Dolayısıyla, bu durumda hemen null işaretçisini döndürmek istiyoruz.
‫Temel olarak bir piyon alamazsak, bir kontrolör de alamayız.
‫Bu yüzden null pointer döndürüyoruz.