[C++] Devamı Getirilmemiş Bir Fonksiyonu Canlandırma

Kaiser

⋞ 〈 ☪ 〉 ⋟
Site yetkilisi
Admin
Premium Üye
Geliştirici
Yardımsever Üye
Mesaj
3.696
Çözümler
345
Beğeni
3.588
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:
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ç:
Ekran görüntüsü 2023-12-14 153317.jpg



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.
 
Güzel bir düşünce olmuş bende an itibariyle binek üstündeyken objelerin geç yüklenme sorunu üstünde çalışıyordum data ile uğraşmak yerine c+ olarak bir şeyler deneyecektim konudan biraz bağımsız "__FindActorData " başlığını görünce aklıma geldi eğer olur da var olan kodlarla çözemezsem bu başlık üzerinden devam edeceğim :)
 
merhaba __FindActorData nın ne anlama geldiğini açıklayabilirmisiniz bu fonksiyon yeni bir fonksiyon oluşturmak içinmi kullanılıyo yoksa consol üzerinden silah satıcısı gibi logları göstermek içinmi kullanılıyor daha farklı nasıl kullanabilirim.
 
merhaba __FindActorData nın ne anlama geldiğini açıklayabilirmisiniz bu fonksiyon yeni bir fonksiyon oluşturmak içinmi kullanılıyo yoksa consol üzerinden silah satıcısı gibi logları göstermek içinmi kullanılıyor daha farklı nasıl kullanabilirim.
__FindActorData' nın ne amaçla oluşturulduğunu bilemem. Sadece .h dosyasında bomboş ve işlevsiz bir şekilde duruyordu. Devamını getirmemişler. Ben de silmek yerine bu fonksiyonu .cpp içinde aktif bir şekilde kullanmayı gösterdim. Konuda yaptığım kontroller ve LOG yazdırma gibi işlemler sadece basit örneklerdir. Kodun amacını değiştirmek ve farklı şekillerde kullanmak tamamen geliştiricinin fikrine kalmış bir durum.
 
__FindActorData' nın ne amaçla oluşturulduğunu bilemem. Sadece .h dosyasında bomboş ve işlevsiz bir şekilde duruyordu. Devamını getirmemişler. Ben de silmek yerine bu fonksiyonu .cpp içinde aktif bir şekilde kullanmayı gösterdim. Konuda yaptığım kontroller ve LOG yazdırma gibi işlemler sadece basit örneklerdir. Kodun amacını değiştirmek ve farklı şekillerde kullanmak tamamen geliştiricinin fikrine kalmış bir durum.
haa tmm teşekkürler
 
__FindActorData' nın ne amaçla oluşturulduğunu bilemem. Sadece .h dosyasında bomboş ve işlevsiz bir şekilde duruyordu. Devamını getirmemişler. Ben de silmek yerine bu fonksiyonu .cpp içinde aktif bir şekilde kullanmayı gösterdim. Konuda yaptığım kontroller ve LOG yazdırma gibi işlemler sadece basit örneklerdir. Kodun amacını değiştirmek ve farklı şekillerde kullanmak tamamen geliştiricinin fikrine kalmış bir durum.
Log yazdırma içinde detaylı konu anlatımı gelir mi acaba? ayriyeten çok iyi olur gelirse, bu arada güzel konu :) tekrardan teşekkürler.
 
güzel bir paylaşım olmuş bir npcnin yanına yaklaştığınızda müzik yada ekrana efekt tarzı şeyler gönderebilirsiniz :)
 
Güzel bir düşünce olmuş bende an itibariyle binek üstündeyken objelerin geç yüklenme sorunu üstünde çalışıyordum data ile uğraşmak yerine c+ olarak bir şeyler deneyecektim konudan biraz bağımsız "__FindActorData " başlığını görünce aklıma geldi eğer olur da var olan kodlarla çözemezsem bu başlık üzerinden devam edeceğim :)
Belirttiğin uğraştığın şeyi çözmek istiyorsan direct mesh ve direkt math algoritmasını biliyor olman gerekiyor. (Alakasız ama kısa da bilgi vereyim yeri gelmişken bunlarla uğraşırken de Dx9 dan sonrasına yükseltmenin zor olduğunu gördüm zira Direct Mesh öyle klasik algoritmik hesaplamaya benzemiyor.) Render mantığını veya view kısmını tamamiyle okuman bir kısmını değiştirmen gerekiyor. Copy paste ya da bir yerden bakarak çözebileceğin bir sorun detay değil maalesef. Başlangıç olarak skipprenderbuff ı arttırabilir oluşan nesneleri bekleyebilirsin :)
 
Belirttiğin uğraştığın şeyi çözmek istiyorsan direct mesh ve direkt math algoritmasını biliyor olman gerekiyor. (Alakasız ama kısa da bilgi vereyim yeri gelmişken bunlarla uğraşırken de Dx9 dan sonrasına yükseltmenin zor olduğunu gördüm zira Direct Mesh öyle klasik algoritmik hesaplamaya benzemiyor.) Render mantığını veya view kısmını tamamiyle okuman bir kısmını değiştirmen gerekiyor. Copy paste ya da bir yerden bakarak çözebileceğin bir sorun detay değil maalesef. Başlangıç olarak skipprenderbuff ı arttırabilir oluşan nesneleri bekleyebilirsin :)
Sorunu çözümledim ek bir koda ihtiyaç kalmadı varsayılan kodlar üzerinde düzenlemeler sağladım officialdaki hız ile aynı hızda yüklenme sağlıyor artık :)
 
Sorunu çözümledim ek bir koda ihtiyaç kalmadı varsayılan kodlar üzerinde düzenlemeler sağladım officialdaki hız ile aynı hızda yüklenme sağlıyor artık :)
Nerelerde düzenleme sağladın belirtirsen sana zahmet takılan bu engelle karşılaşan arkadaşlar da faydalanabilir bence en azından onlara alternatif olur :)
 
Son düzenleme:
Geri
Üst