Yeni ders geldiii
Presentations
Öncelikle tanımını yapalım, presentation, esneklikleri yüzünden karmaşık bir konudur. Aslında presentationlar bir ekran kontrol aracından fazla bir şey değil, yani overlay dediğimiz şeylerden ve triggerlardan öte değildir.
Overlay'lerin bir sürü tipleri vardır, her bir overlayın kendi davranış ve görünümü vardır. Presentation aktif olduğu sürece, gereken operasyonlarla onların pozisyonunu, durumunu ve görünümünü değiştirebilirsiniz.
Triggerlara değinecek olursak, presentationlar için sadece 5 trigger ayrılmıştır header_triggers'ta. Ancak şunu söyleyeyim, bunları ustaca kullanan biri, aklına gelen her şeyi yapabilir.
Şimdi bu triggerların adlarını ve kullanım şekillerini göreceğiz.
ti_on_presentation_load, presentation başladığı andan itibaren sadece 1 kez ateşlenir. Yani "presentation yüklendiği an" sadece 1 kez gerçekleşecek olaylar dizesi. Bu yer aslında overlaylerinizi yerleştireceğiniz yerdir. Pozisyonlarını ve durumlarını belirleyeceğiniz yer.
ti_on_presentation_event_state_change ise, muhtemelen en önemli ve en basit yerlerdendir. Bu trigger, herhangi bir overlayı bu triggerın içine koyduğunuzda, overlayın durumu her değiştiğinde ateşlenecek olaylar dizesidir. Yani bir buton yaptınız diyelim, ona tıkladığınız an neler olmasını istiyorsanız bu bölümde onu yazmalısınız.
ti_on_presentation_mouse_press, kullanıcı bir overlayın üzerine tıkladığı her an da ateşlenir. sağ tık ve farenin orta tuşu da buna dahildir.
ti_on_presentation_mouse_enter_leave, farenin bir overlay üzerinde olup olmadığını sorarak ona göre işlemler yapmanızı sağlar. Mesela bir buton yaptınız, onun üzerine fareyi getirdiğinizde sağda yazı çıkmasını istiyorsunuz, fareyi onun üzerinden çektiğinizde de yazının gitmesini istiyorsanız, bununla yapabilirsiniz.
ti_on_presentation_run, bu trigger ise, presentation aktif olduğu sürece her milisaniyede bir ateşlenir, sürekli olarak. Presentation içinde sürekli yaşanacak bir olay yapacaksanız bu trigger'ı kullanabilirsiniz.
Unutmayın. Bir presentation varken oyununuz genellikle durdurulur, presentation bitene kadar. Elbette, oyunu durdurmayacak bir presentation yazma gibi bir mümkünatınız da var. Örnek isterseniz, oyunda savaştayken backspace'e bastığınız an çıkan o strateji ekranıdır. Orada savaştaki askerlerinizin ve düşmanın yerini gösteren küçük bir harita ve ordunuza emir verebileceğiniz bir yazı sürüsü görürsünüz. Bunların hepsi tabii ki presentation ile yapılmıştır, ayrıca söyleyeyim, o savaş ekranının module_presentations'daki adı "battle" dır. Ayrıca, eğer multiplayerı oynadıysanız, bütün o ekipman seçme, esc ye bastığınızda çıkan menü, bütün o şeyler presentation ürünüdür.
Şimdi operasyonlarına bir göz atalım:
Koşul operasyonu;
Code:
(is_presentation_active, <presentation_id),
"Presentation aktifse" diye soru sorar. yanına neg operasyonunu koyup "aktif değilse" diye de işlem yapabilirsiniz.
Genel presentation operasyonları
Code:
(start_presentation, <presentation_id>),
Bir presentation başlatır, module_game_menus, module_scripts veya module_mission_templates gibi işlem yapılan yerlerden çağrılır genelde.
Code:
(start_background_presentation, <presentation_id>),
Arkaplanda çalışacak şekilde bir presentation başlatır, oyunun işleyişine bir etki etmez.
Code:
(presentation_set_duration, <duration-in-1/100-seconds>),
Presentationun ömrünü belirler. Mutlaka presentation aktifken çağırılmalıdır. Eğer birkaç presentation daha aktifse, onlar için de aktif olma zamanı aynen geçerli olur.
Overlay yaratma;
Code:
(create_text_overlay, <destination>, <string_id>),
Vereceğiniz değişken adıyla ve belirteceğiniz string ile, bir yazı overlayı yaratmanızı sağlar.
Code:
(create_mesh_overlay, <destination>, <mesh_id>),
Vereceğiniz değişken adıyla ve belirteceğiniz mesh ile, bir resim overlayı yaratmanızı sağlar.
Code:
(create_mesh_overlay_with_item_id, <destination>, <item_id>),
Vereceğiniz değişken adıyla ve belirteceğiniz item ile, belirttiğiniz itemi gösteren bir overlay yapmanızı sağlar.
Code:
(create_mesh_overlay_with_tableau_material, <destination>, <mesh_id>, <tableau_material_id>, <value>),
Vereceğiniz değişken adıyla ve belirteceğiniz mesh ve tableau_materyal ile, belirttiğiniz mesh ve tableau ile heraldik bir overlay yapmanızı sağlar.
Code:
(create_button_overlay, <destination>, <string_id>),
Vereceğiniz değişken adıyla ve belirteceğiniz string ile tıklayabileceğiniz bir yazı overlayı yapmanızı sağlar.
Code:
(create_game_button_overlay, <destination>, <string_id>),
Vereceğiniz değişken adıyla ve belirteceğiniz string ile, oyun butonu içerisinde tıklanabilir bir yazı yapmanızı sağlar.
Code:
(create_in_game_button_overlay, <destination>, <string_id>),
Vereceğiniz değişken adıyla ve belirteceğiniz string ile, oyun-içi buton içerisinde tıklanabilir bir yazı yapmanızı sağlar. (yukarıdakiyle ne farkı var bilemiyorum, denemenizde fayda var.)
Code:
(create_image_button_overlay, <destination>, <mesh_id>, <mesh_id>),
vereceğiniz değişken adıyla ve sırayla, tıklanmamış ve tıklanmış hallerini belirterek ekleyeceğiniz meshlerle bir resim-butonu overlayı yapmanızı sağlar.
Code:
(create_image_button_overlay_with_tableau_material, <destination>, <mesh_id>, <tableau_material_id>, <value>),
Bir önceki operasyonun, heraldikliğin de denkleme katılmış hali.
Code:
(create_slider_overlay, <destination>, <min_value>, <max_value>),
Vereceğiniz değişken ile, minimum ve maksimum değerler arasında yatay olarak sıralanmak üzere bir kaydırıcı overlayı yapmanızı sağlar. overlay_set_val operasyonu ile değerini değiştirebilirsiniz.
Code:
(create_progress_overlay, <destination>, <min_value>, <max_value>),
vereceğiniz değişken ile bir ilerleme barı yapmanızı sağlar. Yine, overlay_set_val operasyonu ile değerini değiştirebilirsiniz.
Code:
(create_number_box_overlay, <destination>, <min_value>, <max_value>),
Vereceğiniz değişken ve değerler ile içi numerik sayılarla dolu küçük bir overlay yapmanızı sağlar.
Code:
(create_text_box_overlay, <destination>),
Muhtemelen inaktif edilmiş, Native de hiç bir yerde kullanılmıyor.
Code:
(create_simple_text_box_overlay, <destination>),
Nasıl çalıştığını bilmiyorum.
Code:
(create_check_box_overlay, <destination>, <checkbox_off_mesh>, <checkbox_on_mesh>),
Nasıl çalıştığını bilmiyorum.
Code:
(create_list_box_overlay, <destination>, <string>, <value>),
Nasıl çalıştığını bilmiyorum.
Code:
(create_combo_label_overlay, <destination>),
Nasıl çalıştığını bilmiyorum.
Code:
(create_combo_button_overlay, <destination>),
Nasıl çalıştığını bilmiyorum.
Code:
(overlay_add_item, <overlay_id>, <string_id>),
belirlediğiniz overlay'a +1 string veriyor. Böylece kombo kutusu veya liste kutusu yapabiliyorsunuz sanırım.
Overlay hiyerarşisi
Code:
(set_container_overlay, <overlay_id>),
Bir konteynır overlayı yapmanızı sağlıyor, sonradan oluşturulacak overlayler de bu konteynır overlayının içine konuyor.
Code:
(overlay_set_container_overlay, <overlay_id>, <container_overlay_id>),
Bu ise, üsttekine benzer olarak, sadece belirlediğiniz bir overlayı konteynır olan bir overlayın içine koyabilirsiniz.
Overlay manipülasyonu
Code:
(overlay_get_position, <position>, <overlay_id>)
overlayın pozisyonunu vereceğiniz pos registerına atıyor.
Code:
(overlay_set_val, <overlay_id>, <value>),
Numerik sayısı olacak olan bir overlaya gereken numerik sayıyı vermenizi sağlıyor.
Code:
(overlay_set_text, <overlay_id>, <string_id>),
Var olan bir overlaya bir string veriyor.
Code:
(overlay_set_boundaries, <overlay_id>, <min_value>, <max_value>),
Nasıl çalıştığını bilmiyorum.
Code:
(overlay_set_position, <overlay_id>, <position>),
Overlayın pozisyonunu vereceğiniz pozisyona götürüyor.
Code:
(overlay_set_size, <overlay_id>, <position>),
Overlayın büyüklüğünü x ve y açılarıyla ayarlıyor, ayrıca belirteyim, wb nin ekran büyüklük değeri 1.00 veya 0.75 şeklinde ayarlanıyor, dolayısıyla set_fixed_point_multiplier'i kullanmanız gerekiyor bu operasyonu kullanmadan önce.
Code:
(overlay_set_area_size, <overlay_id>, <position>),
Nasıl çalıştığını bilmiyorum.
Code:
(overlay_set_additional_render_height, <overlay_id>, <height_adder>),
Nasıl çalıştığını bilmiyorum.
Code:
(overlay_animate_to_position, <overlay_id>, <duration-in-1/1000-seconds>, <position>),
Overlayı belirli bir zaman içerisinde vereceğiniz pozisyona götürür.
Code:
(overlay_animate_to_size, <overlay_id>, <duration-in-1/1000-seconds>, <position>),
Overlayı belirli bir zaman içerisinde vereceğiniz pozisyona doğru büyütür.
Code:
(overlay_set_mesh_rotation, <overlay_id>, <position>),
Pozisyonu ayarlanmış herhangi bir overlayı döndürmenize yarıyor. Z açısını ayarlayıp bir registera verirseniz yapabilirsiniz. Oyuncuya göre saat yönünde veya onun tersine göre dönecektir.
Code:
(overlay_set_material, <overlay_id>, <string_no>),
bir overlayı renderlamak için @ ile belirteceğiniz materyal adını veriyorsunuz, 1.161 ile gelmiş sanırım.
Code:
(overlay_set_color, <overlay_id>, <color>),
Overlayın rengini belirtiyorsunuz, hex kodlarıyla. Bazı overlayler ile düzgün çalışmayabilir.
Code:
(overlay_set_alpha, <overlay_id>, <alpha>),
Overlayın alphasını değiştiriyorsunuz, 0x00 ile 0xFF arasında bir değer atayın.
Code:
(overlay_set_hilight_color, <overlay_id>, <color>),
Nasıl kullanıldığını bilmiyorum.
Code:
(overlay_set_hilight_alpha, <overlay_id>, <alpha>),
Nasıl kullanıldığını bilmiyorum.
Code:
(overlay_animate_to_color, <overlay_id>, <duration-in-1/1000-seconds>, <color>)
Overlayı belirlediğiniz zaman içerisinde belirlediğiniz renge kaydırıyor.
Code:
(overlay_animate_to_alpha, <overlay_id>, <duration-in-1/1000-seconds>, <color>),
overlayı belirlediğiniz zaman içinde 0x00 ile 0xFF arasında bir değer vererek alphasını kaydırıyor.
Code:
(overlay_animate_to_highlight_color, <overlay_id>, <duration-in-1/1000-seconds>, <color>),
Nasıl kullanıldığını bilmiyorum.
Code:
(overlay_animate_to_highlight_alpha, <overlay_id>, <duration-in-1/1000-seconds>, <color>),
Nasıl kullanıldığını bilmiyorum.
Code:
(overlay_set_display, <overlay_id>, <value>),
Vereceğiniz değer ile overlayı gizleyebilir veya görünür yapabilirsiniz.
Code:
(overlay_obtain_focus, <overlay_id>),
Nasıl kullanıldığını bilmiyorum.
Code:
(overlay_set_tooltip, <overlay_id>, <string_id>),
Nasıl kullanıldığını bilmiyorum.
Açılır pencereler ile ilgili ve bazı özel operasyonlar
Code:
(show_item_details, <item_id>, <position>, <price_multiplier_percentile>),
Bir kutu yaratarak verdiğiniz item adını, pozisyonu ve opsiyonel olarak, itemin istediği değeri belirtebilirsiniz. Kısaca, itemin üzerine geldiğinizde çıkan kutudan yaratıyor.
Code:
(show_item_details_with_modifier, <item_id>, <item_modifier>, <position>, <price_multiplier_percentile>),
Yukarıdakinin item modifierini belirterek kutuyu yaratma hali.
O oluşturduğunuz kutuyu kapatıyor.
Code:
(show_troop_details, <troop_id>, <position>, <troop_price>)
Vereceğiniz asker adının, askerin pozisyonu ile beraber bir kutu yapabiliyorsunuz, Açık kaynak olan troop tree koduna bakarsanız anlarsınız.
Şimdi, bir presentation nasıl yazılır onu göstereceğim;
Code:
("ornek_presentation",prsntf_manual_end_only,mesh_load_window,[ # burdaki prsntf_ uzantili flagler, header_presentations'da var, oraya bakin. mesh_load_window ise yukleme ekrani, mesh_ on ekiyle istediginiz meshi buraya yazabilirsiniz, presentation aktif oldugu surece bu koydugumuz goruntu bizim ekrani kaplayacak.
(ti_on_presentation_load,
[
(presentation_set_duration, 999999), # presentationun suresini belirtiyoruz, genelde boyle yapilir.
(set_fixed_point_multiplier, 1000), # bunu yaptiginiz her presentationa mutlaka koyun, pozisyonlarinizda hata olmasin.
(create_button_overlay, "$g_presentation_obj_1", # ornek buton yazili, tiklanabilir bir yazi overlayi yarat.
"@ornek buton",tf_center_justify),
(position_set_x, pos1, 850),
(position_set_y, pos1, 640),
(overlay_set_position, "$g_presentation_obj_1", pos1), # overlayin pozisyonunu x ve y sini belirttigim sekilde ayarla.
]),
(ti_on_presentation_event_state_change,
[
(store_trigger_param_1, ":object"),
(eq, ":object", "$g_presentation_obj_1"), # eger secilen obje presentation_obj_1 ise
(jump_to_menu, "mnu_town"), # sehir menusune git
(presentation_set_duration, 0), # ve presentationu durdur.
]),
]),
Buradan sonra iş pratiğe düşüyor, sürekli pratik yaparsanız alışırsınız.
Buradan örnek alarak kendi presentationunuzu yapabilirsiniz, lakin ben pozisyonu attım kafadan, yazımız sağ yukarıda bir yerde çıkabilir
Ayrıca, ben sahne-menü sistemimi buna benzer bir şey ile yazmıştım, bir görüntü
;
Son olarak, pozisyonları nasıl anlayacağız diye sorarsanız, şu linkten yararlanabilirsiniz;
http://forums.taleworlds.com/index.php/topic,131907.0.html
Veyahut CWE'nin modül sistemi paylaşıldı, onun içinde de var burdakinin benzeri.
Okuduğunuz içün teşekkürler, bir sonraki derste görüşmek üzere...