- Mesaj
- 4.018
- Çözümler
- 390
- Beğeni
- 4.131
- Puan
- 1.849
- Ticaret Puanı
- 0
Merhabalar, kaynak kodlarında başıboş duran fonksiyonları kontrol edip temizlerken bir fonksiyon dikkatimi çekti. Sadece .h dosyasında tanımlanmış ancak başka hiç bir yerde kullanılmamış.
UserInterface/NetworkActorManager.h içinde bulunan gariban fonksiyonumuzun adı şu:
Client src içinde arattığımda __FindActorData adında hiç bir fonksiyon bulunamıyor. Yani aslında çöp diyebileceğimiz türden bir satır, ancak bunu silmek yerine kullanılabilir hale getirmeyi düşündüm. __FindActor adında farklı bir fonksiyon daha mevcut fakat o aktif olarak çalıştığı için ona dokunmak istemedim. __FindActorData fonksiyonunun çeşitli ve farklı amaçlar uğrunda kullanılabilir kod olduğunu düşünüyorum. Dolayısıyla böyle bir konu açarak sizlerle de paylaşmak istedim.
Aşağıda örnek bir düzenleme ile bu kodu nasıl çalışır hale getirdiğimi göstereceğim, buradan yola çıkarak kendi fikirlerinizle geliştirebilirsiniz.
Öncelikle bu kodu şu şekilde değiştirdim:
Daha sonra UserInterface/NetworkActorManager.cpp içinde uygun bir yere ekleme yaparak yeni fonksiyonumuzu hayata döndürüyoruz:
Son olarak bu fonksiyonu kullanmak istediğim yerde çağırıyorum.
Örneğin aynı .cpp içinde aktif olarak çalışan şöyle bir fonksiyon var:
Buradaki if bloğuna şöyle bir ekleme yapmak istiyorum diyelim; eğer silah satıcısı görüş alanıma girerse DEBUG ekranında bana bilgi versin.
Buna bağlı olarak şöyle bir ekleme yapıyorum:
Sonuç:
Konuda sadece bu fonksiyonu çalışır hale getirmeyi gösterdim. İçerikte yaptığım örnekler basit örneklerdir.
Daha fonksiyonel hale getirip kullanmak geliştiricinin hayal gücüne ve bilgisine kalmıştır.
UserInterface/NetworkActorManager.h içinde bulunan gariban fonksiyonumuzun adı şu:
C++:
SNetworkActorData* __FindActorData(DWORD dwVID);
Client src içinde arattığımda __FindActorData adında hiç bir fonksiyon bulunamıyor. Yani aslında çöp diyebileceğimiz türden bir satır, ancak bunu silmek yerine kullanılabilir hale getirmeyi düşündüm. __FindActor adında farklı bir fonksiyon daha mevcut fakat o aktif olarak çalıştığı için ona dokunmak istemedim. __FindActorData fonksiyonunun çeşitli ve farklı amaçlar uğrunda kullanılabilir kod olduğunu düşünüyorum. Dolayısıyla böyle bir konu açarak sizlerle de paylaşmak istedim.
Aşağıda örnek bir düzenleme ile bu kodu nasıl çalışır hale getirdiğimi göstereceğim, buradan yola çıkarak kendi fikirlerinizle geliştirebilirsiniz.
Öncelikle bu kodu şu şekilde değiştirdim:
C++:
bool __FindActorData(DWORD dwVID);
Daha sonra UserInterface/NetworkActorManager.cpp içinde uygun bir yere ekleme yaparak yeni fonksiyonumuzu hayata döndürüyoruz:
C++:
bool CNetworkActorManager::__FindActorData(DWORD dwVID)
{
std::map<DWORD, SNetworkActorData>::iterator f = m_kNetActorDict.find(dwVID);
if (f != m_kNetActorDict.end())
{
SNetworkActorData& rkNetActorData = f->second;
CInstanceBase* pkInstFind = __FindActor(rkNetActorData);
if (pkInstFind && (pkInstFind->GetRace() == 9001)) // örnek: silah saticisi
return dwVID;
}
return 0;
}
Son olarak bu fonksiyonu kullanmak istediğim yerde çağırıyorum.
Örneğin aynı .cpp içinde aktif olarak çalışan şöyle bir fonksiyon var:
C++:
void CNetworkActorManager::AppendActor(const SNetworkActorData& c_rkNetActorData)
{
{
[...]
}
if (__IsVisibleActor(rkNetActorData))
{
if (!__AppendCharacterManagerActor(rkNetActorData))
m_kNetActorDict.erase(c_rkNetActorData.m_dwVID);
}
}
Buradaki if bloğuna şöyle bir ekleme yapmak istiyorum diyelim; eğer silah satıcısı görüş alanıma girerse DEBUG ekranında bana bilgi versin.
Buna bağlı olarak şöyle bir ekleme yapıyorum:
C++:
if (__IsVisibleActor(rkNetActorData)) // görüş alanına giren actorler.
{
if (!__AppendCharacterManagerActor(rkNetActorData))
m_kNetActorDict.erase(c_rkNetActorData.m_dwVID);
#ifdef _DEBUG
// silahcıyı bul
DWORD SilahciVID = __FindActorData(c_rkNetActorData.m_dwVID); // m_dwVID değerini oluşturduğumuz fonksiyona gönderiyoruz.
if (SilahciVID != 0)
TraceError("Silah Saticisi Goruldu - VID: %d ", &SilahciVID); // fonksiyonumuzdan geri dönen veriyi yazdırıyoruz.
#endif
}
Sonuç:
Konuda sadece bu fonksiyonu çalışır hale getirmeyi gösterdim. İçerikte yaptığım örnekler basit örneklerdir.
Daha fonksiyonel hale getirip kullanmak geliştiricinin hayal gücüne ve bilgisine kalmıştır.