Cieľom tejto stránky je opísať proces spracovania high skillov a low skillov (spravidla býva jeden low skill na jeden XML súbor, čiže to čo my voláme „pohyb“ je low skill) od načítania až po vykonanie plánovačom. Kód ktorý sa na tom podieľa je dosť roztrúsený a veľmi zle alebo vôbec okomentovaný. Tento dokument by mal tvoriť základ pre návrh procesu plánovania a tvorby zložitejších pohybov - high skillov.
Určité veci sa od napísania tohto dokumentu zmenili a nestihol byť ešte updatnutý. Konkrétne sa jedná o:
Niektoré z tried existujú aj v Jave a rovnaké alebo podobné triedy sú aj v Ruby skriptoch. Preto u každej z tried pri prvom spomenutí uvediem, v akom jazyku je napísaná. Pri triedach LowSkill a HighSkill to budem uvádzať vždy. V nasledovnom zozname vidno čo budem písať a čo tým myslím:
Diagram týchto a niektorých ďalších tried vidno na nasledovnom obrázku
Nevidno tu kompletné diagramy tried, sú vybrané len časti (metódy atď.) relevantné pre tento dokument.
Z XML sú načítané Java-LowSkill a Phase, pričom sa k nim dá dostať pomocou ich jedinečného mena.
Tieto podmienky sa kontrolujú pri načítavaní z XML
Hlavný cyklus, bežiaci po inicializácii a načítaní všetkých potrebných vecí, prebieha zjednodušene nejak takto
XML súbory s low skillmi a fázami musia pre použitie v high skilloch okrem vyššie uvedených požiadaviek spĺňať nasledovné
Pri skončení každej isFinal fázy sa volá pickLowSkill. V prípade, že sa vráti null (čo značí koniec celého high skillu), alebo iný než súčasný low skill, finalizuje sa súčasný low skill a následne sa vyberie nový. V prípade že pickLowSkill vráti súčasný low skill, pokračuje sa next fázou a finalizácia sa nevykoná.
LowSkill vždy pri druhom a ďalšom volaní pickLowSkill vracia null, takže vždy finalizuje pohyb pri prvej príležitosti. Toto dokonca viedlo k odtráneniu isFinal vlastností z mnohých XML súborov - tie tam treba vrátiť.
Na testovanie cyklických pohybov ako je chôdza bol vytvorený nový HighSkill s názvom CyclicHighSkill, ktorého metóda pickLowSkill vždy vracia ten istý lowSkill. Tiež som vytvoril testovací high skill s názvom LinkedHighSkill, ktorý používa pole pohybov.
walk.rb bol upravený aby využíval nové pohyby
High skilly sa dajú písať v ruby aj v jave. Musia dediť triedu Java-HighSkill
Hlavou úlohou je implementácia metódy pickLowSkill. Tá sa bude volať na začiatku vykonávania pohybu a zakaždým, keď skončí fáza s isFinal=true.
Vrátiť musí objekt triedy Java-LowSkill.
Metóda checkProgress sa volá aj počas priebehu fázy, ak fáza ešte neskončila. Vyhodením výnimky by mala môcť ukončiť high skill bez čakania na finalizáciu fázy low skillu. To je použíteľné napríklad ak agent spadol.
Nasledovný diagram znázorňuje zjednodušený hlavný cyklus agenta so zameraním na vykonávanie naplánovaných high skillov. Prerušovaná čiara znamená, že high skill prejde do nového stavu. Kód v tomto novom stave sa však nevykoná ihneď, ale až v nasledovnom cykle. Metódy pickLowSkill a checkProgress, ktoré treba pre high skilly implementovať, sú zvýraznené. Notácia je viacmenej vymyslená, ale snáď je jasné, čo ktorá časť znamená.