Interactive Control - Multi buttons
PoslednÃm krůÄkem k úplnému zvládnutà IC je zápis tzv. multiButtons. Jsou to tlaÄÃtka, která nespouÅ¡tÄ›jà pouze jednu událost, ale celou sadu událostÃ. Události musÃme vytvoÅ™it, sepsat si je (k tomu použijeme i trochu matematiky - ale ne hodnÄ›), a zapsat do multiButtons (dále jen MB).
Kam a jak zapisovat MB
Ta jako vždy, majà Multi Buttons své mÃsto zápisu. Kam a jak zapisovat MB uvidÃte zde na pÅ™Ãkladu:
12<interactiveComponents minDist="7">3 <multiButtons>4 <mbutton ...>5 <control .../>6 <part .../>7 ...8 </mbutton>9 </multiButtons>10</interactiveComponents>11
Jak vidÃte, tak jako vÅ¡echny komponenty je MB zapsáno do oddÃlu interactiveComponents, kde je vytvoÅ™ena samostatná Äást multiButtons. Tato Äást odbasuje jednotlivá tlaÄÃtka, kde každé tlaÄÃtko má svůj index a atributy jako u běžného klikatelného tlaÄÃtka. OvÅ¡em dále obsahuje každé tlaÄÃtko jeden kontrolnà element, a x prvků na ovládánÃ. nynà si popÃÅ¡eme funkce samotného tlaÄÃtka a pozdÄ›ji i zápis prvků na ovládánÃ.
Atributy pro tag mbutton
Atributy onMessage a offMessage
Tyto atributy se použÃvajà k definovánà hlášky, která se má zobrazit po najetà myÅ¡i. V tomto pÅ™ÃpadÄ› se použÃvá pouze onMessage, ovÅ¡em doporuÄuji také zapsat offMessage - jen pro jistotu. Oba tyto atributy musà obsahovat název definovaného textu v l10n v modDesc.xml.
Atribut name
Tento atribut sloužà k zobecnÄ›nà hlášek - pokud máme napÅ™Ãklad 2 MB, tak pro obÄ› můžeme vypisovat stejnou hlášku s tÃm, že mÃsto name které se tam má doplnit, napÃÅ¡eme do hlášky on/offMessage nÄ›jaký text a jako zástupný znak pro name použijeme %s. Ve výsledku tak máme tÅ™eba jednu onMessage a 2 tlaÄÃtka použÃvajÃcà stejné hlášky akorát s jiným name. Atribut name obsahuje název definovaného textu v l10n v modDesc.xml.
Atribut size
Tento atribut obsahuje index tlaÄÃtka v i3d stroje. Objekt na tomto indexu musà mÃt nejaký vnoÅ™ený objekt pro pÅ™Ãpadné pÅ™idánà efektů. DoporuÄuji použÃt tlaÄÃtko z archivu který si stáhnete s IC. Kolem tohoto indexu se tvořà klikatelná oblast definovaná v size.
Atribut mark
Tento atribut obsahuje index tlaÄÃtka v i3d stroje. Objekt na tomto indexu musà mÃt nejaký vnoÅ™rný objekt pro pÅ™Ãpadné pÅ™idánà efektů. DoporuÄuji použÃt tlaÄÃtko z archivu který si stáhnete s IC. Kolem tohoto indexu se tvořà klikatelná oblast definovaná v size. Pokud nenà mark obsažen v tagu, vytvořà se pouze událost. Takto vytvoÅ™enou událost můžete použÃvat v jiném multiButtons.
Atribut synch
Atribut synch se použÃvá pro multiplayer a může obsahovat hodnotu true a nebo false. Tento atribut nenà povinný a jeho základnà hodnota je true. Pokud je hodnota false, pak nenà synchronizováno chovánà na MP - tzn.: jeden hrÃ¡Ä může vidÄ›t nÄ›co spuÅ¡tÄ›né a druhý ne. Vhodné pro nÄ›jaké drobné funkce aby se nezatěžovala komunikace pÅ™i MP.
Atribut isOutside
Tento atribut definuje, zda je tlaÄÃko urÄeno pro použità mimo stroj a nebo pro použità v kabinÄ›. Pokud je false, tlaÄÃtko se zobrazà pouze tehdy, když jsme ve stroji. Pokud je true tak to zanmená, že aby se talÄÃtko dalo spustit, tak musÃme být v dosahu definovaném minDist. Tento atribut je nepovinný a jeho základnà hodnota je false.
Tagy a jejich atributy pro mbutton
Jelikož MB obsahuje pouze dva druhy tagů (viz. pÅ™Ãklad) a oba tagy majà stejné atributy, tak popÃÅ¡u nejprve druhy tagů a poté jejich atributy.
Tag control
Tag control je nepoviný a použÃvá se tam, kde potÅ™ebujeme synchronizovat dÄ›nà dvou událostÃ. Pokud je nastaven správnÄ›, pak se ostatnà události Å™Ãdà podle stavu této akce. Pozor - nastavena musà být akce, která má jednoznaÄné urÄovánà stavu! Tento tag je jen jeden v celém mbutton.
Tagy part
Part tagy jsou tagy, které v sobÄ› uchovávajà informaci o tom, které tlaÄÃtka majà být spouÅ¡tÄ›na tÃmto mbutton. Aby mÄ›lo MB smysl, jsou pÅ™Ãtomny minimálnÄ› dva part tagy. PoÄet tÄ›chto tagů nenà nijak omezen, taktéž typ události nenà nijak omezen.
Atribut type
Jak název vypovÃdá, tento atribut urÄuje typ akce kterou chceme spouÅ¡tÄ›t. Možné typy jsou shodné s typy tlaÄÃtek pro IC. Tedy můžeme využÃt tyto typy: animation, button, monitor, visibility a mbutton. Typ musà být u každého tagu pro jedno MB.
Atribut index
Tento atribut je velice důležitý a ne vždy se povede zapsat napoprvé dobÅ™e. Nejedná se totiž o index v i3d ale o index na tlaÄÃtko. Abych to vysvÄ›tlil: tÃm jak tvoÅ™Ãme do IC různé prvky, vznikajà události. Tyto události pak majà svůj index, podle poÅ™adà v jakém jsou zapsány do xml. Problém je v odpoÄÃtánà daného indexu. Když to hodnÄ› zjednoduÅ¡Ãm, tak do indexu se zapoÄÃtává vÅ¡e, co má mark. Když mám tedy 5 animacÃ, ovládaných pÅ™es IC, pak (protože se indexuje od 0) bude prvnà položka mÃt index 0 a poslednà 4. To samé u tlaÄÃtek, visibility a mbutton. Problém je u monitorů, kde se do indexu zapoÄÃtávajà také tlaÄÃtka na zavÅ™enà a otevÅ™enà vrstev. Dám sem pÅ™Ãklad, snad pochopÃte z nÄ›j
PÅ™Ãklad na závÄ›r
Jak jsem již miňoval, opÄ›t zde bude pÅ™Ãklad abych vám ukázal jak multiButtons fungujÃ. Doufám že z pÅ™Ãkladu pochopÃte logiku multiButtons.
1<interactiveComponents minDist="7" toggleStyle="1">2 <windows>3 <!-- 0 --><window synch="false" name="indikace_hydra_predni" size="0.3" animName="indikace_hydra_predni" onMessage="ic_component_open" offMessage="ic_component_close" />4 <!-- 1 --><window synch="false" name="indikace_hydra_zadni" size="0.3" animName="indikace_hydra_zadni" onMessage="ic_component_open" offMessage="ic_component_close" />5 </windows>6 <buttons>7 <!-- 0 --><button name="toggleFrontImplementUpDown" size="0.015" event="toggleFrontImplementUpDown" onMessage="cp_panel_off" offMessage="cp_panel_on" />8 <!-- 1 --><button name="toggleBackImplementUpDown" size="0.015" event="toggleBackImplementUpDown" onMessage="cp_panel_off" offMessage="cp_panel_on" />9 </buttons>10 <visControls>11 <!-- 0 --> <button name="indikace_hydra_predni_up" onMessage="cp_panel_on" offMessage="cp_panel_off" size="0.015" type="set" controlElem="0>6|0|15|0|5|0|0|3|9|6" defaultVis="true" >12 <index index="0>6|0|15|0|5|0|0|3|9|2"/>13 <index index="0>6|0|15|0|5|0|1|3|9|2"/>14 <index index="0>6|0|15|0|5|0|0|3|9|6"/>15 </button>16 <!-- 1 --> <button name="indikace_hydra_predni_down" onMessage="cp_panel_on" offMessage="cp_panel_off" size="0.015" type="set" controlElem="0>6|0|15|0|5|0|0|3|9|7" defaultVis="false" >17 <index index="0>6|0|15|0|5|0|0|3|9|3"/>18 <index index="0>6|0|15|0|5|0|1|3|9|3"/>19 <index index="0>6|0|15|0|5|0|0|3|9|7"/>20 </button>21 <!-- 2 --> <button name="indikace_hydra_zadni_up" onMessage="cp_panel_on" offMessage="cp_panel_off" size="0.015" type="set" controlElem="0>6|0|15|0|5|0|1|3|9|6" defaultVis="true" >22 <index index="0>6|0|15|0|5|0|0|3|9|1"/>23 <index index="0>6|0|15|0|5|0|1|3|9|1"/>24 <index index="0>6|0|15|0|5|0|1|3|9|6"/>25 </button>26 <!-- 3 --> <button name="indikace_hydra_zadni_down" onMessage="cp_panel_on" offMessage="cp_panel_off" size="0.015" type="set" controlElem="0>6|0|15|0|5|0|1|3|9|7" defaultVis="false" >27 <index index="0>6|0|15|0|5|0|0|3|9|0"/>28 <index index="0>6|0|15|0|5|0|1|3|9|0"/>29 <index index="0>6|0|15|0|5|0|1|3|9|7"/>30 </button>31 </visControls>32 <multiButtons>3334 <!-- monitor - 1 -->35 <mbutton name="toggleFrontImplementUpDown" mark="0>6|0|15|0|5|0|0|3|0" size="0.03" onMessage="toggleFrontImplementUpDown" offMessage="FoldFrontImplement_on" isOutside="false">36 <part type="button" index="0"/>37 <part type="animation" index="0"/>38 <part type="visibility" index="0"/>39 <part type="visibility" index="1"/>40 </mbutton>41 <mbutton name="toggleBackImplementUpDown" mark="0>6|0|15|0|5|0|0|3|1" size="0.03" onMessage="toggleBackImplementUpDown" offMessage="FoldBackImplement_on" isOutside="false">42 <part type="button" index="1"/>43 <part type="animation" index="1"/>44 <part type="visibility" index="2"/>45 <part type="visibility" index="3"/>46 </mbutton>47</interactiveComponents>