A munka ünnepét sikeresen kihasználva ismét haladtam és remélem, hogy előre. Talán a leghangsúlyosabb dolog az, hogy a szerkesztőm nyelvét "openglesítettem" vagyis a szintaktika és a szemantika is nagyjából hasonló. Minden ami a szereplőkkel kapcsolatos opengl objecthez hasonlóan viselkedik azaz skGen-nel lehet létrehozni, skBind-dal aktualizálni és skParameter-rel beállítani a tulajdonságait. A különböző összetevőket skActorXXXX névvel lehet a szereplőhöz kapcsolni.
A függvények a klasszikus target, param, value argumentumokat használják:
- az skGen egy targetet vár és valuet ad vissza
- az skBind egy targetet és egy valuet vár(, amelyet értelemszerűen már korábban létrehoztunk)
- az skParameter pedig egy targetet, egy paramot és egy vagy több valuet
- az skActorXXXX függvények nem várnak argumentot, hanem az éppen aktuálisan bind-olt XXXX-t kapcsolja az éppen aktuálisan bind-olt szereplőhöz.
Jelenleg a target actor, shape és emitter lehet, de ezek még kiegészülnek a későbbiekben. A paramból már most nagyon sok van és jó pár target specifikus.
Valószínűleg a jeleneteket scriptként fogom tárolni és lehet érdemes konzolt írnom a szerkesztőhöz...
Másik jelentős változás, hogy a scenegraph most már majdnem teljeskörűen kezeli a szereplőket:
- a body, shapek és emitterek kezelése majdnem kész (konvex shapek majd a modell betöltéssel együtt)
- jelenleg még nincs modell betöltés
- az aktív és inaktív szereplők+környezet kiválogatása és kölcsönhatás kezelése tökéletesnek tűnik
- és ezzel együtt elkészült a közeli szereplők "ingyen" összegyüjtésének lehetősége is
Azt hiszem most jön a meshkezelés átalakítása.
Végezetül pedig az első "élesben" használt jelenet leíró script:
player0_a=skGen("actor");
player0_s0=skGen("shape");
sparkle0_a=skGen("actor");
sparkle0_s0=skGen("shape");
sparkle0_e0=skGen("emitter");
skBind("actor",player0_a);
skBind("shape",player0_s0);
skParameter("actor","name","PLAYER0");
skParameter("actor","AI_index","player");
skParameter("actor","position",0,0,1);
skParameter("actor","is_rotation_frozen",true,true,true);
skParameter("actor","half_extent",1,1,1);
skParameter("shape","type","sphere");
skParameter("shape","scale",1,1,1);
skParameter("shape","density",5);
skActorShape();
skBind("actor",sparkle0_a);
skBind("shape",sparkle0_s0);
skBind("emitter",sparkle0_e0);
skParameter("actor","name","EMITTER0");
skParameter("actor","AI_index","object");
skParameter("actor","position",2,2,1);
skParameter("actor","is_static",false);
skParameter("actor","half_extent",1,1,1);
skParameter("shape","type","sphere");
skParameter("shape","scale",.5,.5,.5);
skParameter("shape","density",1.5);
skParameter("emitter","scale",.1,.1,1);
skParameter("emitter","type","line");
skParameter("emitter","max_particles",100);
skParameter("emitter","lifetime",.5);
skParameter("emitter","emitting_rate",50);
skParameter("emitter","emitting_velocity",4);
skParameter("emitter","color",1,0,0);
skParameter("emitter","random_angle",3);
skActorShape();
skActorEmitter();
i_a=skGen("actor");
i_s=skGen("shape");
skBind("actor",i_a);
skBind("shape",i_s);
skParameter("actor","name","OBJECT0");
skParameter("actor","AI_index","object");
skParameter("actor","position",-4,-4,2);
skParameter("actor","velocity",1,0,0);
skParameter("actor","half_extent",2,2,2);
skParameter("shape","type","box");
skParameter("shape","scale",1.5,1.5,1.5);
skParameter("shape","density",5);
skActorShape();
--skImport("q3bsp","bsp/test1/test1.bsp");
skImport("q3bsp","bsp/borg/1.bsp");
skCompile();
Lehet érdemes lenne a sztringek nagy részét konstansokkal helyettesítenem.