Dědičnost by to neřešila (resp. ne jen tak sama od sebe), klíčové je to použití proměnné "self" místo konkrétního předmětu. Pokud si funkce na ošetření příkazů napíšeš v Lua, tak to můžeš udělat tak, jak jsem naznačil.Varouch napsal/a:
A tyto funkce už nějak v LUA nevygeneruju, ne?
Řešila by to dědičnost, kdy předek by měl tu potřebnou metodu a dala by se volat u všech potomků, to tady ale neudělám. Nebo ano?
Jak to udělám v URWIGO?
#661
Publikováno 30 September 2013 - 13:25
#662
Publikováno 30 September 2013 - 13:41
to se v Lua řeší tak, že namísto názvu věci se použije slovo "self"
např, místo:
function vzorovaVec: OnpouzijVec() vzorovaVec:MoveTo(Player) endby muselo být:
function vzorovaVec: OnpouzijVec() self:MoveTo(Player) endcož nevím, jestli Urwigo samo umí vyrobit. Pokud ne, byl by to docela šikovný přídavek do funkčnosti. A samozřejmě se to dá řešit tak, že každá instance se přepíše jako Lua příkaz....
A nešlo by to udělat tak, že vzorovaVec: OnpouzijVec bude mít vstupní parametr?
function vzorovaVec: OnpouzijVec(konkretniVec) konkretniVec:MoveTo(Player) end
Pak bych třeba mohl v tom cyklu nastavovat u všech věcí
aVeci[i].OnpouzijVec = vzorovaVec.OnpouzijVec(aVeci[i])
#663
Publikováno 30 September 2013 - 13:54
kromě toho, OnpouzijVec už parametr má - je to parametr předmětu, který by dostala jako CmdWith (příkaz použitý z jedné věci na nějakou jinou)
Nicméně šlo by něco podobného. Pokud ten parametr nepotřebuješ, můžeš si vyrobit příkaz na nějaké skryté věci, který bude s tímhle parametrem pracovat:
function skrytaVec:OnZpracujOstatniVeci(target) target:MoveTo(Player) enda pak si napíšeš jednoduchou Lua funkci, která vyvolá tenhle skrytý příkaz
function predejDal(self) skrytaVec:OnZpracujOstatniVeci(self) end
a pak nastavíš tenhle příkaz těm ostatním věcem: aVec[x].OnpouzijVec = predejDal
pozor:
tohle přiřazení tu funkci nastavuje, ne volá. proto tam nejsou žádné závorky, a proto nefunguje tvůj příklad, kde bys tam závorky s parametrem předal.
pozor2:
v definici funkce predejDal píšu parametr "self" explicitně. to je proto, že je ta funkce definovaná samostatně a ne na nějakém předmětu. parametr self tam patří, zatímco do definice funkce skrytaVec:OnZpracujOstatniVeci nepatří
#664
Publikováno 30 September 2013 - 14:00
#665
Publikováno 30 September 2013 - 14:03
Znáš to: maximální výsledky s minimálním úsilím. Raději o tom budu 2 hodiny přemýšlet než to hodinu klikat v Urwigu.matejcik napsal/a:
ale mezi námi děvčaty -- už je to docela dost Lua kódu spotřebovaného na to, abys nemusel psát další Lua kód ;e) a to nemluvě o tom ohýbání Urwiga
Já tam těch předmětů budu mít asi 150, takže se to podle mě vyplatí.
Navíc se mi to Tvoje řešení líbí.
#666
Publikováno 30 September 2013 - 14:09
Na otázku odpověděl matejcik.Varouch napsal/a:
...
Já bych jen dodal, že tady už se dostáváš do nižších úrovní jazyka LUA a bez znalosti principů událostmi řízeného programování a pojmů jako událost (event), obsluha události (event handler) a způsobu, jak se to implementuje v LUA, to půjde těžko.
Udělat se dá leccos a lecjak, ale otázkou je, jak to bude komfortní v rámci návrhu v Urwigo, a ještě důležitější otázkou je, jak to bude stabilní při běhu na jednotlivých přístrojích.
Možná by bylo vhodnější se na to jít podívat z opačné strany:
Máš velké množství předmětů se stejnými příkazy. CO je to za předměty? Mohou být aktivní současně (tj. budou se vyskytovat v inventáři stejné zóny, případně v inventáři hráče současně)? Anebo vždy bude aktivní pouze jeden z nich?
„Kdo podvádí, ochuzuje jenom sám sebe.“
http://gc.i-mh.net/ | gc@i-mh.net
#667
Publikováno 30 September 2013 - 14:11
Ano, mohou. A i kdyby ne, co se tím mění?mh.mail napsal/a:
Mohou být aktivní současně (tj. budou se vyskytovat v inventáři stejné zóny, případně v inventáři hráče současně)?Varouch napsal/a:
...
#668
Publikováno 30 September 2013 - 14:13
#669
Publikováno 30 September 2013 - 14:16
Dost věcí. V takovém případě bys mohl mít nadesignovaný JEDEN jediný předmět, ve kterém bys při jeho aktivaci pouze měnil obrázek, popisek apod. podle situace. Nemusel bys řešit přiřazování handlerů, self a podobné věci.Varouch napsal/a:
Ano, mohou. A i kdyby ne, co se tím mění?mh.mail napsal/a:
Mohou být aktivní současně (tj. budou se vyskytovat v inventáři stejné zóny, případně v inventáři hráče současně)?Varouch napsal/a:
...
Ono někdy řešení zdánlivě neřešitelného problému leží mimo původní směr zkoumání. Zkušenost mě naučila, že když zabřednu na dlouho do nějakého problému, jehož řešení je komplikované a zamotané, že není na škodu udělat Cimrmanův "úkrok stranou" a zkusit se nad tím zamyslet odjinud. Ne vždycky to samozřejmě pomůže, ale dost často jo.
„Kdo podvádí, ochuzuje jenom sám sebe.“
http://gc.i-mh.net/ | gc@i-mh.net
#670
Publikováno 30 September 2013 - 19:51
... není na škodu udělat Cimrmanův "úkrok stranou" a zkusit se nad tím zamyslet odjinud.
Proto jsem právě psal sem na konferenci :-)
Asi bude lepší, když hodím příklad, proč to chci. Viz moje keš 30 stříbrných. Tam je 65 patníků. Na smartphonech to navigaci na všech 65 zvládá, Garmin padne už při 7. Proto je tam předmět Navigátor, který zobrazí jen 5 nejbližších. Ale ve věcech mám nabouchaných 65 předmětů přiřazených do jedné skryté zóny. Tomu bych se chtěl pro příště vyhnout.
Takže teoreticky by mi stačilo 5 předmětů a podle vzdálenosti od jednotlivých bodů (které bych měl v nějakém poli spolu s názvem, popisem,...), bych měnil vlastnosti těchto 5 předmětů?
Jen nechápu, proč tak moc zavrhujete to řešení přes skrytou věc, které jste sami navrhli. Mě se to líbí a jako ohýbání URWIGA mi to nepřipadá. URWIGO je nástroj který vizualizuje nejběžnější postupy, takže není potřeba znát LUA. A když něco neumí, tak se to prostě napíše ručně....
#671
Publikováno 30 September 2013 - 23:25
Nejspíš ano, ale stoprocentně bych ti to byl schopný říct až poté, co bych věděl, co přesně a k čemu chceš použít.Varouch napsal/a:
Takže teoreticky by mi stačilo 5 předmětů a podle vzdálenosti od jednotlivých bodů (které bych měl v nějakém poli spolu s názvem, popisem,...), bych měnil vlastnosti těchto 5 předmětů?
Já ho nenavrhovalVarouch napsal/a:
Jen nechápu, proč tak moc zavrhujete to řešení přes skrytou věc, které jste sami navrhli.
A zavrhovat je silné slovo, spíš bych řekl, že se ho bojíme. Podívej, každý wherigo objekt (zóna, předmět, úkol, vstup, časovač, médium) při své inicializaci zabere určitou část volné paměti přístroje. U novějších mobilů už s kapacitou paměti nebude takový problém, ale Oregony a nedej bože Colorada té paměti nazbyt nemají. A wherigo objekty nemají jenom název, popis a souřadnice, ale i spoustu dalších atributů, které se sice třeba nepoužívají, ale paměť si užerou stejně. Proto definování velkého počtu wherigo objektů může být potenciální problém především pro Garminy. To je pak to nenáviděné nečekané vypínání přístroje - prostě mu dojde paměť a tak to vyřeší vypnutím.
Takže pokud bys psal program pro normální zařízení s dostatkem paměti, pak je tebou navrhovaný způsob určitě systémovější a správnější. V případě wheriga je však dobré myslet na alternativní způsoby řešení, které jsou paměťově méně náročné.
Malý příklad: Udělal jsem cartridge, která obsahujovala 92 zón, 40 předmětů, 19 úkolů, 10 vstupů, 3 časovače a 188 médií (obrázky + zvuky). Telefon bez problémů, Garmin 300 nejprve nedokázal obnovit po uložení (prostě se vypnul), později už se nedokázal ani nastartovat (pár vteřin po startu se vypnul). Nakonec mi nezbylo nic jiného, než to rozdělit na 3 samostatné cartridge. Prostě Garminy nejsou nafukovací.
Ano, tady s tebou souhlasím. Termín "ohýbání Urwiga" je podle mě nešťastný. Urwigo je opravdu jenom builder, který nakonec vytvoří LUA kód, který se pak zkompiluje a použije. Stejně tak je možné cartridge napsat v textovém editoru přímo v LUA a žádné Urwigo k tomu nepotřebuješ. Jen to tedy není vůbec komfortní.Varouch napsal/a:
... jako ohýbání URWIGA mi to nepřipadá. URWIGO je nástroj který vizualizuje nejběžnější postupy, takže není potřeba znát LUA. A když něco neumí, tak se to prostě napíše ručně....
Tím "ohýbáním Urwiga" kolega asi myslel to, že u všeho, co napíšeš přímo v LUA a nesestavíš si to v Urwigo diagramu, se ochuzuješ o některé komfortní možnosti, které ti Urwigo dává. Prostě si to už pak musíš ošéfovat v LUA sám.
Mně se zatím osvědčila rozumná kombinace obého - základem jsou diagramy v Urwigu doplněné o speciální kódy přímo v LUA pro úlohy, které se v diagramu buď udělat nedají vůbec anebo zbytečně komplikovaně.
Takže z mé strany to odrazování od tebou navrhovaného řešení je spíš z důvodu možných problémů s dostatkem (nedostatkem) paměti především u Garminů.
„Kdo podvádí, ochuzuje jenom sám sebe.“
http://gc.i-mh.net/ | gc@i-mh.net
#672
Publikováno 30 September 2013 - 23:35
Nicméně ohýbání to rozhodně je. Takový trik, kterému teď rozumíš, ale pokud ten samý trik neuděláš v každé další cartridgi, tak budeš za rok zadumaně hledět, jak je možné, že to funguje, když tam nemáš definované žádné příkazy, a k čemu tam sakra slouží ten skrytý předmět.
Ten případ s patníky mi přijde jako docela platná situace, kdy využít 65 předmětů. Ono nakonec nejspíš vyjde dost nastejno, jestli máš 5 předmětů a tabulku 65 souřadnic, nebo rovnou 65 předmětů. 65 předmětů zabere víc paměti (byť ve srovnání s jednou fotkou do zóny je to pořád málo), s tabulkou souřadnic bude zase komplikovanější kód.
Ale tam by už stálo za to jít o krok dál a ty předměty opravdu generovat. Třeba nějak takhle:
souradnice = { ZonePoint(50,14,0), ZonePoint(51,14,0) .... } patniky = {} for i = 1, #souradnice do local patnik = ZItem{Cartridge=cart, Container=skrytaZona} patnik.Name = "Patník č. " .. tostring(i) patnik.Description = "" patnik.Commands = { .... } patnik.ObjectLocation = souradnice[i] -- atd. patniky[i] = patnik endani jeden z těch patníků pak nebude v Urwigo vidět, ale to je vlastně dobře - znamená to, že je nemusíš oklikávat, že každá změna se okamžitě projeví u všech najednou.
z čehož je rovnou jasná i nevýhoda - kdybys pak potřeboval, aby jeden z nich byl nějak speciální, budeš to muset buď napsat ručně, nebo ho z tohohle seznamu vyhodit a udělat ho v Urwigo samostatně.
Každopádně bych se ale přimlouval za to, aby 150 předmětů nebylo vidět najednou. Už těch 65 je na pováženou. Je fajn, že to smartphone zvládne, ale jeho uživatel bude mít problém ;e) Sám máš v popisu cartridge, že se Navigátor může hodit pro přehlednost.
Napadá mě třeba tohle: rozházet předměty do několika zón, a pak ukazovat vždy jen tu skupinu z aktuální zóny a navigaci k dalším "skupinám".
#673
Publikováno 30 September 2013 - 23:42
#674
Publikováno 01 October 2013 - 13:52
Já z nich hrůzu nemám, jen mě vyloženě se*ou. :-) Já všechno ladím právě jen na Germinu a pak mi to někdo testuje na telefonu.matejcik napsal/a:
(jen dodávám, že osobně mám z Garminů nedefinovaný děs a hrůzu a zprovozňovat na nich cartridge jsem nikdy nezkoušel. mluví-li kolega mh.mail o vyžrané paměti, bude lépe věřit jemu)
Tak já to asi zkusím pomocí generování v cyklu a budu zobrazovat naráz jen 5 nejbližších věcí. Uvidíme jak to pofrčí.
Každopádně dík za všechny rady.
#675
Publikováno 07 October 2013 - 11:59
Bookmarky: Zajímavé osudy kešek Kešky výletovky Hinty
Web: geopraha.eu regionální web Prahy
prazskychytrak.cz web o zajímavostech Prahy
#676
Publikováno 07 October 2013 - 12:01
#677
Publikováno 07 October 2013 - 14:10
Bookmarky: Zajímavé osudy kešek Kešky výletovky Hinty
Web: geopraha.eu regionální web Prahy
prazskychytrak.cz web o zajímavostech Prahy
#678
Publikováno 07 October 2013 - 19:34
Bookmarky: Zajímavé osudy kešek Kešky výletovky Hinty
Web: geopraha.eu regionální web Prahy
prazskychytrak.cz web o zajímavostech Prahy
#679
Publikováno 07 October 2013 - 19:47
#680
Publikováno 07 October 2013 - 19:58
Bookmarky: Zajímavé osudy kešek Kešky výletovky Hinty
Web: geopraha.eu regionální web Prahy
prazskychytrak.cz web o zajímavostech Prahy
3 uživatel(ů) prochází toto téma
0 uživatelů, 3 návštěvníků 0 anonymních uživatelů