2010. december 28., kedd

Scriptelés (főként dinamikus dízelfüst) a játékhoz

Ez lua nyelven történik, amit egy kis programozási tudással nem lesz nehéz megszokni. Ezzel vannak programozva a jelzők, de mást is lehet velük, de sajnos a többi része nincs túl jól dokumentálva...

Itt a hivatalos dokumentáció, de van még függvény itt pár nagyon elrejtett, és nem mindig implementált függvény. És itt.
Illetve van még a SetEmitterActive, és a SetEmitterRate függvény, ami elengedhetetlen mondjuk a dinamikus dízeles füsthöz, és még a SetEmitterColour aminek 3 paramétere van, a vörös, zöld, és kék csatorna.
GetSimulationTime ez pedig elég egyértelmű.

Mozdonyhoz az enginescript, és simulation scriptben lehet nyúlni, ezeket meg kell adni a confignál.

Az enginescriptnek van egy fontos része, ami elengedhetetlen, ahhoz hogy irányítani lehessen a járművet:

function OnControlValueChange ( name, index, value)
   if Call( "*:ControlExists",name, index ) then
      Call( "*:SetControlValue", name, index, value );
   end
end

A dolog egyszerű ez az OnControlValueChange akkor aktiválódik, ha a kezelőfelületről a user valami vezérlőhöz hozzáér.

Pl ha a regulátort babrálja, akkor aktiválódik, a name változóba bekerül a Regulator szó, az index nemtudom mire jó, a value-be pedig az adott control állása, pl 50%-os regulátornál 0.5.
Ez után megnézi hogy létezik egyáltalán ilyen control value, majd a setcontrolvalue meghívásával beállítja a játékon belül. Tapasztalatom szerint ez nem aktiválódik olyan control valueknél, amelyek nem közvetlenül a felhasználótól függnek (pl RPM, Ammeter, vagy hasonló belső szimulációs dolgok), viszont előnye az hogy csak akkor fut le az egész, ha a felhasználó változtat.

Van még a function Setup(), amibe ágyazott kódok a jármű használatba vételekor egyszer lefutnak.
És a function Update(interval) ez minden szimulációs frame-nél (elvileg minden egyes megjelenített képkockánál) lefut, és az interval változóba az kerül be, hogy mennyi idő telt el az előző meghívás óta (biztos jó valamire :D).

Utóbbi kettő megtalálható a simulation scriptben is, persze ha szükség van rá, és igazából a simulation scriptben szoktak babrálni a géppel.

Jah azért leírom, hogy azok a Call(*:függvénynév, paraméterek) azok amik végül is a játékhoz hozzáférnek.
A * nem csak * lehet, lehet egy játékban elkülönített objektum neve is, ezt pl a fő fő blueprintben childként hozzáadott dolgoknál lehet használni.
 
 Ez pl a készülő M62-es engine blueprintjéből egy részlet.
Ott látható az M62smoke-néven hozzáadott füstforrás, aminek intenzitását scriptből tehát a Call(M62smoke:SetEmitterRate, ) formulával lehet vezérelni, külön névre szólóan.

Füsforrásokat, a szokásos rendben, az hangokhoz hasonlóan, meghatározott nevű mappában (vagy annak almappáiban hozzuk létre, különben nem működik. Ez pedig a Particles nevezetű mappa, aminek felismerését a blueprint editor egy fehér lap fölötti szőrös mikrofon ikonnal jelzi :) Ez után létre lehet hozni, egy Emitter blueprintet beállítani, majd az engine blueprintben hozzáadni childként a járművünkhöz, aztán az asset editorral previewelve, szépen a helyére húzni a füstforrást.

A füsforrás beállítása lásd itt ebben a szép kis pdf-ben, amit nem én írtam őszintén nem is tudom ki, de szépen le van írva. Igaz ez még xml-t wordpaddel hackelős időkben készült, mostmár könnyebb a helyzet blueprint editorral, de a nevek ugyan azok, így ugyanolyan jó az írás. A végére a piros betűs részre nincs szükség, hiszen a child pozicionálását ugye ma már az asset editorral szép 3d-ben el tudjuk végezni :).

Fontos megjegyeznem, hogy a doksiban olvasható emission rate az egy és ugyanaz mint amit a SetEmitterRate script függvénnyel állítunk, és mint olvasható ez a füstpamacsok kibocsájtása közt eltelt időt jelenti, tehát minél kisebb az szám annál kevesebb idő telik a füstpamacsok között, annál sűrűbb, vigyázzunk mert nagy sűrűség könnyen megfektet egy erős gépet is :).

Még egy említésre méltó függvény van, a SetEmitterActive, aminek egyetlen paramétere egy szám, ami 0 vagy 1. A füstforrás ki, be kapcsolására való.

Na de itt egy konkrét M62 füstscript a lényege az, hogy 700 amperes áramerősségig alapjárat füst, afölött az aktuális áramerősségtől függő erősebb füst, motor beindulásakor legyen egy erős füst, de amíg üzemanyagszivattyúzik (a hangja) addig ne füstöljön, majd kipróbálható lesz hogy néz/hallatszik ki a játékban, ha kész a szergej ;)

Nincsenek megjegyzések:

Megjegyzés küldése