U tech stavu scen mi jde o to, aby se scena trochu zmenila, kdyz do ni postava znova prijde. Napriklad neco zmizi nebo se objevi, nebo je ji neco dovoleno, objevi se nova nabidka rozhovoru apod. - a to jeste s nejakou podminkou. Jak mam presne napsat ten kod? Porad mi to haze chyby.
Vsechno se da velice jednoduse vyresit pomoci globalnich promennych a podminek.
Globalni promennou zadefinujes treba nekde na zacatku skriptu, jako
global JmenoPromenne;
Tohle musis napsat vsude, kde tu promennou budes pouzivat. Promenna pak drzi nejakou hodnotu po celou dobu, kdy hra bezi.
Kdyz nastane nejaka akce, ktera ma ovlivnovat stav sceny, tak promenne nastavis nejakou hodnotu (vetsinou staci logicka hodnota, cili true nebo false).
JmenoPromenne = true;
Tohle udelas napriklad kdyz hrac promluvi s nejakou postavou atd. ( HracMluvilSPepou = true; )
No a pak uz staci jen pozmenit scenu na zaklade techto stavovych promennych. Kazda scena ma prirazen skript s nazvem scene_init.script, ktery se spusti ve chvili, kdy se scena nahrava. To je ta vhodna chvile. Cili rekneme, ze chceme dosahnout toho, aby kdyz je ta nase promenna nastavena na true, tak aby se objevila ve scene nejaka entita, treba stul. Stul je normalne soucast sceny, pridana ve SceneEditu, ale budeme ho schovavat/rozsvecet v zavislosti na promenne.
Ve scene_init.script nejake sceny by pak stalo:
var Stul = Scene.GetNode("stul"); // rekneme si scene o objekt "stul"
if(JmenoPromenne==true) Stul.Active = true;
else Stul.Active = false;
Cili "pokud JmenoPromenne se rovna true, udelej stul aktivnim, jinak ho udelej neaktivnim".
A tot vse, s timhle jednoduchym mechanismem se vystaci tak v 80% pripadu
Snazim se vsecko delat presne podle dema, co tam je, vesmes to, co mi radite, mam nastaveno, i hotspot i interactive=true, ale porad to nejde. Musi se tato entita definovat i v samotne scene? (pak by to bylo jasne, dala bych ji nize nez floor, ale v demu ten OldGuy ve scene definovany neni.)
Entita muze byt budto primo ve scene, nebo se da nahrat ze souboru. OldGuy v demu se nahrava ze souboru (ve scene_init_script najdes neco jako Scene.LoadEntity("cesta\oldguy.entity");
Pro spravne razeni objektu ve scene je hlavne dulezite poradi prvku sceny, jak je poskladas ve SceneEditu. Je to hodne podrobne popsano ve Scene Tutorialu v dokumentaci. Kdyz to strucne shrnu, ve scene jsou jednak "pevne" casti, takove jakoby kulisy (to je to, co se definuje ve SceneEditu) a v tech kulisach se pak prohaneji "zive" objekty, cili actori a volne entity (jako jsou Molly a OldGuy v demu). U techhle "zivych" objektu je potreba, aby mely hotspot v miste, kde stoji na zemi (viz vyse), protoze podle toho se pak ridi, jak se vzajemne prekryvaji.
Takhle kdyz to po sobe ctu, vzdycky mi to pripada ukrutne slozite, ale neni tomu tak, opravdu
Tohle jsou ty zaklady, ktere jakmile clovek pochopi, vsechno ostatni uz je brnkacka.