Dinamik DxBrowser Sınıfı

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

Çevrimdışı foreigner26

  • Yeni Üye
  • *
    • İleti: 34
: 20 Mayıs 2020, 12:58:06
Herkese iyi forumlar arkadaşlar.
Yazdığım kod parçacıklarından mantık açısından yararlanabilmeniz için (Lua öğrenmek isteyenler adına) bu tarz kod örnekleri paylaşacağım, bu konu genel bir konu olucaktır yeni sınıflar yazdıkca yorum olarak ekleme gelicek.

MTA:SA discordunda uyarı aldığım için (Türkçe açıklama kullanımından) kaynak kodunun açıklamaları ingilizcedir. Kopyala yapıştır şeklinde çalıştıramazsınız, altta fonksiyonları ve anlamlarını sırayla açıkladım. Konu öneki "Satırsayısı:anlam" şeklinde olucaktır.

Kelamım döndüğü kadarıyla sizlere anlatmaya çalıştım bir kusurum olduysa şimdiden kusura bakmayın.




Kaynak kodu (Açıklama yazıları mevcut):
Spoiler for Hiden:
Kod
local browsers = setmetatable({}, {
    __newindex = function(t, k, v)
        --> Unpack resources
        local browserSize = Vector2(unpack(v.size))
        local browserPos  = Vector2(unpack(v.pos))

        v.browserElement = Browser(browserSize, v.isLocal, true)

        function v:onCreate()
            source:loadURL(v.path)
        end

        function v:ready()
            dxRender(k, function()
                dxDrawImage(browserPos, browserSize, v.browserElement, 0, 0, 0, tocolor(255,255,255,255), false)
            end)
        end

        function v:getElement()
            return self.browserElement or false
        end

        addEventHandler('onClientBrowserCreated', v.browserElement, v.onCreate)
        addEventHandler('onClientBrowserDocumentReady', v.browserElement, v.ready)

        --> TO DO
        --* Dynamic 3D Class (tex3d.fx)
        rawset(t, k, v)
    end,
})

function dxBrowser(namespace, w, h, x, y, islocal, url, is3D)
    if browsers[namespace] then
        return
    end
    w = w or 1
    h = h or 1
    x = x or 0
    y = y or 0
    islocal = islocal or true
    is3D = is3D or false

    --> Required variable
    url = url or error('URL parameter doesnt exists')

    browsers[namespace] = {
        pos = {x, y},
        size = {w, h},
        isLocal = islocal,
        path = 'http://mta/local/' .. url,
        is3D = is3D
    }

return browsers[namespace]:getElement()
end

-- * Fonksiyon açılımı
-- 32: dxBrowser isimli bir fonksiyon tanımlayıp değer girdilerini sırasıyla;
--     namespace
--     w (Genişlik)
--     h (Yükseklik)
--     x (Yatay vektörel pozisyon)
--     y (Düşey vektörel pozisyon)
--     isLocal (https://wiki.multitheftauto.com/wiki/CreateBrowser)
--     url (https://wiki.multitheftauto.com/wiki/CreateBrowser)
--     is3D (Şuanlık devredışı, opsiyonel bir değişken diyebiliriz)
--
-- 33 - 44: Bu satırlar arasında fonksiyon girdilerini kontrol ediyoruz ve yanlış bir girdi varsa yeniden tanımlama yapıyoruz.
-- 46: girdilerimizi "browsers" tablosuna yönlendiriyoruz bu sayede __newindex metodunu devreye soktuk. (bkz: 2.satır)
-- 54: fonksiyon içerisinde tanımladığımız ":getElement" metodunu çağırdık, (bkz: 19.satır)

-- * __newindex metodu
-- 4 - 5: browserSize ve browserPos isimli iki adet local değişkeni iki düzlemli vektör olarak tanımladık.
-- 7: Browser elementimizi oluşturduk ve bir dinamik değişkene tanımladık (v.browserElement buradaki değişken)
--    (bkz: https://wiki.multitheftauto.com/wiki/CreateBrowser)
--
-- 9 - 17: onCreate ve ready isimli iki adet metod oluşturduk, sırasıyla içlerinde yaptırdığımız işlemler;
--    loadURL girdi elementi olan browser'a (tarayıcı) bir dosya yolu ekledik.
--    ready metodu tanımlanan dosya yolu browser elementimize (v.browserElement) yüklendiğinde çalışıp ekrana yazma işlemini başlatıyor.
--
-- 19: getElement isimli bir metod tanımladık ve "self" değerinde taşınan "browserElement" değişkenini döndürdük;
--    nedir bu self?
--    self = v değeridir. 
--
-- 23 - 24: iki adet eylem oluşturduk, ready ve onCreate metodlarını çalıştırması için daha ayrıntılı bilgi için alttaki adreslere bakın.
--    (bkz: https://wiki.multitheftauto.com/wiki/OnClientBrowserCreated)
--    (bkz: https://wiki.multitheftauto.com/wiki/OnClientBrowserDocumentReady)
--
-- 28: rawset fonksiyonunu kullanarak tüm işlemleri bitirdik ve memcache'e aldık bu tabirleri bilmiyorsanız kaynakçalarını alta yazıcağım.
--    (bkz: https://stackoverflow.com/questions/23012040/rawset-function-in-lua)
--    memcache: ddr3, ddr4 gibi tabir ettiğimiz RAM üzerinde verilerimizin saklanması burası bizim en hızlı ulaşabiliceğimiz lokasyon
--    olduğundan ötürü performans için burayı tercih ettik istersek setData ile de kalıcı dosya düzenine alabilirdik.

dxBrowser('deneme-browser', 500, 500, 100, 100, true, 'index.html', false)
« Son Düzenleme: 25 Mayıs 2020, 23:45:13 Gönderen: Narkoz »
"It doesnt even matter"
 


MTASATURK

Dinamik DxBrowser Sınıfı
« : 20 Mayıs 2020, 12:58:06 »

Çevrimdışı kedibakgit

  • Yeni Üye
  • *
    • İleti: 47
  • .
Yanıtla #1 : 20 Mayıs 2020, 13:29:48
Eline sağlık
 


Çevrimdışı foreigner26

  • Yeni Üye
  • *
    • İleti: 34
Yanıtla #2 : 20 Mayıs 2020, 14:46:28
Linki görebilmek için Kayıt olun yada Giriş yapın.
Eline sağlık

Sağ ol dostum ^^


Güncelleme: bu sınıf kullanılarak yazılmış bir SA:MP UI
« Son Düzenleme: 20 Mayıs 2020, 14:49:52 Gönderen: foreigner26 »
"It doesnt even matter"
 


Çevrimdışı Ghostemane

  • real muthaphuckkin' g
  • Acemi Üye
  • *
    • İleti: 179
Yanıtla #3 : 20 Mayıs 2020, 16:49:36
yandı buralar.
 


Çevrimdışı KG Night

  • Acemi Üye
  • *
    • İleti: 157
  • Mikripter
Yanıtla #4 : 20 Mayıs 2020, 17:57:35
Linki görebilmek için Kayıt olun yada Giriş yapın.
yandı buralar.

yumurta getir pişirek sönmeden
EsEr Agaoğlu
 


Çevrimdışı ertrldtcu

  • Uzman Üye
  • *
    • İleti: 589
Yanıtla #5 : 20 Mayıs 2020, 23:59:37
Fark ne ? :D
system
 


MTASATURK

Ynt: [ÖRNEK] Dinamik dxBrowser sınıfı
« Yanıtla #5 : 20 Mayıs 2020, 23:59:37 »

Çevrimdışı foreigner26

  • Yeni Üye
  • *
    • İleti: 34
Yanıtla #6 : 21 Mayıs 2020, 01:39:35
Linki görebilmek için Kayıt olun yada Giriş yapın.
Fark ne ? :D

Benchmark üzerinde düz createBrowser ve normal guiCreateBrowser'a %51 fark atmak. Element bazlı metod yazımını kolaylaştırmak, depolamayı dosya üzerine değil de ram üzerine sağlamak.
"It doesnt even matter"