Merhaba, ben Krips. Son zamanlarda karşıma çıkan ve açıkçası teknik açıdan oldukça dikkatimi çeken projelerden biri de omp-dx oldu. (( https://github.com/yeatdev/omp-dx )) :evet:
Bu konuda sadece native listesini paylaşmayacağım.
Birçok kişinin ilk bakışta "TextDraw'ın gelişmiş hali galiba" diye baktığı bu sistemin aslında ne olduğunu, neden geliştirildiğini, nasıl çalıştığını ve gelecekte open.mp tarafında nasıl bir etki oluşturabileceğini geliştirici perspektifiyle anlatacağım.
Buradaki amacım size hazır sistem kurdurmak değil.
Amaç, bu yapının arkasındaki mimariyi anlamak.
Hazırsanız başlayalım. :pc:
1. Önce Şunu Netleştirelim: omp-dx Nedir?
omp-dx, open.mp sunucuları için geliştirilmiş DirectX tabanlı bir kullanıcı arayüz sistemidir.
Ancak burada yapılan en büyük hata sistemi sadece "çizim kütüphanesi" olarak değerlendirmektir.
Aslında omp-dx küçük çaplı bir UI framework mantığıyla çalışmaktadır.
Yani yalnızca yazı veya kutu çizmez.
Butonlar oluşturabilir.
Input alanları oluşturabilir.
Slider oluşturabilir.
Renk seçiciler oluşturabilir.
Sekmeli paneller oluşturabilir.
Scroll sistemleri oluşturabilir.
Envanter sistemleri oluşturabilir.
Üstelik bunların tamamını oyuncunun bilgisayarında render eder.
Bu detay oldukça önemlidir.
Çünkü yıllardır SA:MP tarafında alıştığımız yaklaşım tamamen farklıydı.
2. SA:MP'ın Eski Problemi Neydi?SA:MP geliştiricileri yıllarca TextDraw sistemiyle çalıştı.
Dönemi için oldukça başarılı bir sistemdi.
Ancak günümüz standartlarına göre bazı sınırları vardı.
Animasyon desteği oldukça sınırlıydı
Modern kullanıcı arayüzleri üretmek zordu
Gerçek zamanlı etkileşimler zahmetliydi
Blur efektleri mümkün değildi
Dinamik font sistemi yoktu
Sürükle bırak sistemleri doğal şekilde yapılamıyordu
Scroll sistemleri workaround gerektiriyordu
Bu yüzden büyük projeler zamanla TextDraw sisteminin sınırlarına çarpmaya başladı.
omp-dx'in çıkış noktası tam olarak budur.
Modern uygulamalarda gördüğümüz kullanıcı deneyimini GTA San Andreas içerisine taşımak.
3. Sistemin Temel Mimarisi
omp-dx iki ana parçadan oluşmaktadır.
omp-dx.dll
omp-dx.asi
İlk parça sunucu tarafında çalışır.
İkinci parça oyuncunun bilgisayarında çalışır.
Sunucu tarafı Pawn API sağlar.
İstemci tarafı ise Direct3D9 render döngüsüne dahil olur.
Aslında olay şu şekildedir:
Sunucu der ki:
"Şuraya bir pencere çiz."
"Buraya bir buton oluştur."
"Bu yazıyı göster."
İstemci ise bu komutları DirectX üzerinden işler ve ekrana çizer.
Yani çizim yükü tamamen oyuncunun ekran kartına aktarılmış olur.
4. Server Authoritative Mantığı
omp-dx'in en önemli noktalarından biri budur.
Sistem server-authoritative mantıkla tasarlanmıştır.
Bu ne demek?
Kararı sunucu verir.
İstemci uygular.
Örneğin bir oyuncu butona bastığında:
İstemci doğrudan para vermez.
İstemci doğrudan item oluşturmaz.
İstemci sadece sunucuya bildirir.
Sunucu kontrol eder.
Yetkiyi doğrular.
Veriyi doğrular.
Sonucu gönderir.
Bu yaklaşım özellikle roleplay projelerinde oldukça önemlidir.
5. Direct3D9 Hook Neden Kullanılıyor?omp-dx'in istemci tarafındaki ASI eklentisi oyunun Direct3D9 render döngüsüne dahil olur.
Bunun sebebi oldukça basittir.
GTA SA'nın kendi çizim sistemine bağlı kalmadan doğrudan ekran üzerine render yapılabilmesini sağlamaktır.
Bu sayede:
Daha akıcı çizimler
Daha yüksek FPS
Daha modern görseller
Shader desteği
Gelişmiş efektler
elde edilir.
Bu yüzden sistem klasik TextDraw mantığından oldukça farklıdır.
6. Parent - Child SistemiDepodaki en ilginç özelliklerden biri Parent-Child yapısıdır.
Bir pencere düşünelim.
Bu pencerenin içerisinde:
3 buton
2 yazı
1 ikon
olsun.
Normal sistemlerde pencere hareket ettiğinde tüm elemanların koordinatlarının tekrar hesaplanması gerekir.
omp-dx tarafında ise elemanlar pencereye bağlanabilir.
DX_SetParent(playerid, childid, parentid);
Bu işlemden sonra pencere hareket ettiğinde tüm alt elemanlar otomatik olarak birlikte hareket eder.
Ek RPC gönderilmez.
Ek işlem yapılmaz.
Bu küçük gibi görünen özellik aslında oldukça büyük performans avantajı sağlar.
7. Drag & Drop SistemiBirçok geliştirici sürükle bırak sistemlerinin ne kadar zahmetli olduğunu bilir.
Özellikle inventory sistemlerinde.
omp-dx tarafında sürükleme işlemleri istemci tarafında hesaplanır.
Yani fare hareket ettikçe sürekli sunucuyla haberleşilmez.
Bu sayede:
Takılma oluşmaz
Gecikme hissedilmez
Sunucu yükü artmaz
Oyuncu gerçek bir uygulama kullanıyormuş hissine daha yakın bir deneyim elde eder.
8. Scroll Container Sistemi
SA:MP tarafında yıllarca düzgün scroll sistemi oluşturmak oldukça zahmetliydi.
omp-dx bu problemi yerleşik olarak çözüyor.
Scroll alanları oluşturulabiliyor.
Fare tekerleği destekleniyor.
Clipping sistemi bulunuyor.
İçerik ekran dışına taştığında otomatik kesiliyor.
Bu detay özellikle telefon sistemleri ve büyük envanterler için oldukça değerlidir.
9. Color Picker SistemiKlasik SA:MP sistemlerinde renk seçici yapmak oldukça zahmetlidir.
omp-dx içerisinde doğrudan Color Picker desteği bulunuyor.
Oyuncu istediği rengi seçebiliyor.
Seçilen renk callback ile sunucuya iletiliyor.
Bu özellik:
- Araç boyama sistemleri
- Karakter özelleştirme
- HUD düzenleme ekranları
- Clan renkleri
gibi sistemlerde oldukça kullanışlıdır.
10. Blur ve Glassmorphism
Bu özellik açıkçası SA:MP tarafında görmeye alışık olduğumuz bir şey değil.
omp-dx arka plan bulanıklaştırma desteği sunuyor.
Yani pencerenin arkasındaki görüntü shader kullanılarak bulanıklaştırılabiliyor.
Bu sayede modern uygulamalardaki cam efekti elde ediliyor.
Bugün Discord, Windows 11 ve birçok modern uygulamada gördüğümüz görünümün benzeri oluşturulabiliyor.
11. Dinamik Font Sistemi
Belki de sistemin en güçlü özelliklerinden biri budur.
Sunucu internet üzerinden TTF dosyası gönderebiliyor.
Oyuncu bu fontu indiriyor.
Sistem belleğe kaydediyor.
Ardından kullanılabilir hale geliyor.
Bu ne sağlıyor?
Artık yalnızca GTA'nın varsayılan fontlarına bağlı değilsiniz.
İstediğiniz tipografiyi kullanabilirsiniz.
12. FontAwesome ve Vektör İkonlar
Roleplay sunucularında ikon kullanımı giderek yaygınlaşıyor.
Ancak PNG ikonlar her zaman ideal değildir.
omp-dx FontAwesome desteği sağlıyor.
Bu sayede:
Araç ikonu
Kalp ikonu
Telefon ikonu
Silah ikonu
GPS ikonu
gibi yüzlerce ikon çözünürlük kaybı olmadan çizilebiliyor.
13. Inventory Sistemleri İçin Önemi
Depoda doğrudan Inventory Slot bileşeni bulunuyor.
Bu oldukça dikkat çekici.
Çünkü birçok roleplay sunucusunun en karmaşık sistemlerinden biri envanterdir.
Sürükle bırak.
İkon gösterme.
Miktar gösterme.
Yer değiştirme.
omp-dx bunların büyük kısmını yerleşik olarak çözebilecek altyapıya sahip görünüyor.
14. RPC Trafiği ve Performans
Sistemin en güçlü taraflarından biri burada ortaya çıkıyor.
Her fare hareketi sunucuya gönderilmiyor.
Her animasyon sunucu tarafından hesaplanmıyor.
İşlemler istemci tarafında yürütülüyor.
Sunucuya yalnızca gerekli bilgiler gönderiliyor.
Bu da ağ kullanımını ciddi ölçüde azaltıyor.
15. Animasyon Sistemi
omp-dx içerisinde yerleşik animasyon sistemi bulunuyor.
DX_Animate(...)
ile elementler hareket ettirilebiliyor.
Boyut değiştirilebiliyor.
Şeffaflık değiştirilebiliyor.
Bunların tamamı istemci tarafında işlendiği için oldukça akıcı çalışıyor.
16. CEF ile Karşılaştırma
Birçok kişinin aklına şu soru geliyor.
"CEF varken buna neden ihtiyaç var?"
CEF çok güçlüdür.
Ancak beraberinde maliyet getirir.
Tarayıcı motoru çalıştırır.
Bellek tüketir.
Bazı sistemlerde FPS düşüşü oluşturabilir.
omp-dx ise doğrudan DirectX üzerinde çalışır.
Bu nedenle daha hafif çözümler üretmek mümkündür.
Elbette iki sistem farklı amaçlara hizmet etmektedir.
17. Roleplay Sunucularında Kullanım AlanlarıBu sistemle rahatlıkla:
- Telefon sistemi
- Envanter sistemi
- Karakter paneli
- Admin paneli
- vb vb.
oluşturulabilir.
Aslında oyuncunun gördüğü neredeyse her arayüz bu sistemle yeniden tasarlanabilir.
18. Benim Genel Görüşüm
Açık konuşmak gerekirse omp-dx son yıllarda open.mp tarafında gördüğüm en ilginç projelerden biri.
Çünkü yalnızca yeni native eklemiyor.
Geliştiricinin kullanıcı arayüzü tasarlama biçimini değiştiriyor.
Bugün birçok sunucu hâlâ TextDraw sınırları içerisinde çalışıyor.
omp-dx ise bu sınırların dışına çıkmaya çalışan bir yaklaşım sunuyor.
Projenin gelecekte nasıl gelişeceğini zaman gösterecek ancak ortaya koyduğu mimari oldukça dikkat çekici.
Sonuç ve Son Söz
Bu konudaki amacım omp-dx'in sadece hangi native'lere sahip olduğunu göstermek değil, sistemin neden geliştirildiğini ve hangi problemleri çözmeye çalıştığını anlatmaktı.
Çünkü bir teknolojiyi kullanmadan önce onun hangi ihtiyaca cevap verdiğini anlamak gerekir.
Eğer open.mp tarafında modern kullanıcı arayüzleri geliştirmek istiyorsanız, omp-dx kesinlikle incelemeye değer projelerden biridir.