Přejít na obsah


Fotka

Blocking API - užitečný kód pro ty, kdo píšou cartridge ručně


  • Pokud chcete vložit odpověď, přihlašte se
3 odpovědí na toto téma

#1 matejcik

matejcik

    Advanced Member

  • Members
  • PipPipPip
  • 389 příspěvků(y)

Publikováno 19 duben 2013 - 14:17

S pár dalšími lidmi jsme vyvinuli kus kódu, který vám (možná) umožní psát kód cartridgí popořadě, bez callbacků a bez problémů s překrýváním zpráv.

Příklad:

jmeno = UI.Input {zcharMedved, "Ahoj, jak se jmenuješ?"}
UI.Message {zcharMedved, "Ahoj "..jmeno..", já jsem medvěd."}
odpoved = UI.Choice {zcharMedved, "Nemáš něco k jídlu?", Options={"Jasně", "Bohužel nic"}}
if odpoved == "Jasně" then UI.Message {zcharMedved, "Naval!"}
else UI.Message {zcharMedved, "Hmm, to je škoda. Teď budu muset sníst tebe."}
end

podrobnosti jsem rozepsal na Groundspeak fóru - případně to zkusím přepsat do češtiny, pokud někdo nerozumí

Kód zatím nechci dávat veřejně, v tuhle chvíli sháním lidi na alfa-testování - někoho, kdo s tím zkusí napsat cartridge, případně upravit nějakou svoji existující na tenhle nový způsob, a bude hlásit svoje zkušenosti. Potřebujeme vědět, jak se s tím pracuje v praxi, jestli tam nejsou nějaké netušené problémy apod.
Máte-li zájem, pošlete mi mail nebo zprávu tady na fóru a pošlu vám zdroják a instrukce.

Až se to trochu víc vychytá, všechno zveřejním. Navíc chceme něco takového zabudovat jako součást do nových Playerů, a domluvit přímou podporu v builderech.

pochopitelně pokud to zkoušet nechcete, ale něco si o tom myslíte, směle se vyjádřete ;e)
  • 0

#2 Maxinoha

Maxinoha

    Advanced Member

  • Members
  • PipPipPip
  • 1 146 příspěvků(y)

Publikováno 19 duben 2013 - 14:29

Ahoj, prosím o zaslání podrobností na můj e-mail + na email Yourselfa. Pokud by to bylo možné tak prosím i o přepis do češtiny pro portál www.urwigo.com Díky
  • 0

#3 mh.mail

mh.mail

    Advanced Member

  • Members
  • PipPipPip
  • 844 příspěvků(y)

Publikováno 19 duben 2013 - 16:11

Ahoj, matejciku, to se mi líbí. Pokud tedy toto vlákno má za cíl sehnat ty alfa-testery, tak se, s dovolením, hlásím. Sice dělám cartridge v Urwigo, ale zároveň používám dost čistého LUA kódu, takže bych to dokázal otestovat.
  • 0

„Kdo podvádí, ochuzuje jenom sám sebe.“
http://gc.i-mh.net/ | gc@i-mh.net


#4 matejcik

matejcik

    Advanced Member

  • Members
  • PipPipPip
  • 389 příspěvků(y)

Publikováno 20 duben 2013 - 16:45

ano, tohle vlákno má za cíl sehnat ty alfa-testery :e)

díky za zájem, zdroják jsem vám oběma poslal.

nejsem si úplně jist, jak moc vhodné je to pro portál urwigo.com, s ohledem na to, že je to použitelné jenom v ručně psaném kódu.

zkrácená dokumentace:

1. Základní principy

Všechny UI zprávy (i vstupy!) se řadí do fronty - když zavoláte desetkrát Message, je to stejné jako byste v klasickém Wherigo udělali Dialog o deseti zprávách.

Některé funkce zastaví vykonávání aktuálního skriptu, dokud nedostanou odpověď. Jiné skripty se stále můžou spustit - např. když je OnEnter od zóny zastavený, OnTick od časovače nebo OnEnter jiné zóny bude fungovat.

Ten samý skript nemůže být spuštěn vícekrát: když bude OnEnter zastavený, hráč odejde ze zóny a pak se do ní znovu vrátí, OnEnter se znovu nespustí. Může se spustit teprve potom, když hráč dokončí interakci a skript doběhne.

2. Parametry funkcí

Většina funkcí má ty samé první tři parametry: Sender, Text, Media. Media je nepovinné.
lze volat jedním ze dvou způsobů:
UI.Message { Sender=zcharacterMedved, Text="ahoj hráči", Media=zmediaAhoj }
UI.Message { zcharacterMedved, "ahoj hráči", zmediaAhoj }
Parametr Media je nepovinný. Některé funkce mají další parametry, ty se musí volat jménem. Třeba takhle:
UI.Confirm{zcharacterMedved, "připrav se", Button="Start"}

Všimněte si složených závorek, s normálními to nefunguje (ten seznam parametrů je ve skutečnosti tabulka.)

Parametr Sender vyjadřuje, "kdo to říká". Zatím se používá jen k tomu, aby se vybral obrázek, když vynecháte Media. V nových playerech se bude používat trošku lépe.
Sender může být předmět, postava, zóna, úkol, cartridge, Player (to reprezentuje to, co říká hráč) nebo nil (zpráva "od nikoho")
Když zadáte Media, použije se místo obrázku Sendera (pokud nějaký existuje) ten obrázek z Media. takže když chcete ukazovat spoustu fotek, dáte Sender=nil a obrázky nastavíte jako Media.

3. Funkce

UI.Message
Základní zpráva. Neblokuje běh skriptu, ale zařadí se do fronty.

UI.Confirm
"Potvrzení" další akce - zastaví skript, dokud hráč nestiskne OK. To je dobré třeba k tomu, když chcete na další řádce spustit časovač.
má nepovinný parametr Button="text", který nastaví text odklikávacího tlačítka na "text"

UI.Choice
Výběr z několika možností, ekvivalent ZInputu typu MultipleChoice. Zastaví skript, dokud hráč nevybere.
má povinný parametr Options={"jedna","dva","tři" .... }, který zadává ty možnosti na výběr
vrátí dvě hodnoty: text a pořadí vybrané možnosti. můžete získat jednu nebo obě:
text, poradi = UI.Choice {nil, "vyber si", Options={"jedna","dva","tri"}}
text2 = UI.Choice {nil, "jenom text", Options={"jedna","dva","tri"}}
_, poradi2 = UI.Choice {nil, "jenom pořadí", Options={"jedna","dva","tri"}}
pořadí se počítá od jedničky - pokud kliknu na "tri", tak text bude "tri" a poradi bude 3

UI.Input
Zadání textu. Ekvivalent ZInputu typu Text. Zastaví skript, dokud hráč nevybere.
vrátí text, který hráč zadal

UI.Notify
Zobrazí zprávu mimo frontu, přes cokoliv, co je zrovna na obrazovce. Po odkliknutí se vrátí to, co tam bylo před tím (tedy pokud přijde Notify třeba přes Choice, tak po odkliknutí Notify se vrátíte na tu Choice). Nezablokuje skript. Další Notify zruší předchozí Notify.
Tohle je dobré třeba pro hlášení stavu z časovačů - klasický závodní odpočet by se zobrazoval z OnTick právě pomocí Notify.
Jenom pozor na to, že pokud je pod tím Input (zadávání textu), tak bohužel nejde udělat, aby tam zůstal rozepsaný text.

UI.Wait
nemá žádné parametry
Zastaví skript, dokud není "prázdná obrazovka", jinak nic neudělá.

UI.Cancel
nemá žádné parametry
Zruší všechno, co je na obrazovce a ve frontě. Zablokuje skript, dokud nedoběhnou všechny věci ve frontě.
Zrušení efektivně probíhá podobně jako kdyby hráč velmi rychle všechno odklikal. To znamená, že pokud je nějaký skript zastavený, tak po zrušení doběhne do konce, ale žádný UI prvek z něho už se nezobrazí.
Když se zruší Choice nebo Input, tak návratová hodnota ve skriptu bude nil. (když se zruší cokoliv, tak návratová hodnota bude nil, ale jen u Choice a Inputu to hraje roli)
Protože na existujících Playerech není žádná funkce, která by z obrazovky odstranila momentálně zobrazený dialog, tak se po zavolání Cancel ukáže zpráva "Cancelled." Tahle zpráva ale není ve frontě, takže když se bezprostředně po Cancel zavolá třeba Message, tak bude vidět jenom ta zpráva.
  • 0




0 uživatel(ů) prochází toto téma

0 uživatelů, 0 návštěvníků 0 anonymních uživatelů

Reklama