Obsah

High skill

Pravidlá pre XML súbory (low skilly)

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é:

Priebeh vykonávania

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á. Ak sa začiatočná fáza ďalšieho low skillu rovná poslednej fáze súčasného lowskillu, tak sa rovno začne vykonávať ďalší low skill bez ukončenia súčasného low skillu. Vykonávanie high skillov sa riadi plánovačom.

Existujúce High Skilly

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, ktoré sa napĺňa pri incializácií high skillu.


GetUp high skill pri inicializácií uloží si validačnú metódu z parametra inicializácie, získa informácie o agentovi a o modeli sveta. V metóde pickLowSkill zisťuje či agent leží na bruchu alebo na chrbte, kde zavolá potrebný low skill na vstatie. Ak agent stojí tak nič neurobí len povie, že stojí. A ak nevie v akej pozícii je agent, tak sa pokúsi vykonať low skill na vstatie z chrbta.


Kick high skill zistí poslednú pozíciu lopty. Ak loptu nevidí viac ako 3s, alebo je príliš ďaleko, alebo agent je na zemi, tak nič agent nerobí iba oznámi stav. Ak je lopta v určitej vzdialenosti pred ním, vľavo alebo vpravo, tak príde k lopte alebo ukročí k lopte. Ak je lopta tesne pred ním viac do ľava kopne ľavou nohou ak je viac doprava kopne pravou nohou. Sila kopu sa vyberá podľa vzdialenosti medzi loptou a požadovanou pozíciou. Požadovaná pozícia je udávaná ako parameter high skillu.


Goto high skill má za úlohu prísť do určeného cieľa (pozície vo formácii). V high skille sú napevno určené možné smery pohybu, a vzdialenosti kedy je blízko cieľa a kedy ďaleko. Tento high skill nemá úplne ošetrený prechod stavmi, pri ktorých volá jednotlivé pohyby.
Z Goto vznikli:

Podrobnejší opis vzniku týchto dvoch prvkov je na Choď na pozíciu a Drž formáciu


Trajectory high skill využíva Java triedu RelaTimeTrajectory, z ktorej postupne získa názvy low skillov na dosiahnutie cieľa.


Localize high skill otáčaním hlavy a tela agenta zistí pozíciu lopty a otočí hráča v danom smere. V prípade, že hráč loptu nevidí, otočí sa doprava o 90°.


Turn high skill otáča agenta podľa zadaného uhlu.


Walk2Ball je primárny high skill na chôdzu hráča k lopte. Stará sa o fázu od lokalizácie lopty(tá nie je zahrnutá) po príchod k lopte do dostatočnej blízkosti na uskutočnenie kopu.


Walk, Walk2 a WalkOld sú high skilly, v ktorých sú napevno určené možné smery pohybu, a vzdialenosti kedy je blízko cieľa a kedy ďaleko. Nemajú úplne ošetrený prechod stavmi, pri ktorých volajú jednotlivé pohyby. Je potrebné ich prepracovať lebo sú už zastarané.


WalkNew a WalkBehindBall sú high skilly, ktoré využívajú skoro všetky low skilly pri prechode stavmi. Čiže sú zatiaľ najlepšie fungujúce high skilly.

Tvorba high skillov

High skilly sa dajú písať v ruby aj v jave. Musia dediť abstraktnú Java triedu HighSkill alebo abstraktnú Java triedu ComplexHighSkill. Implementácia High skillov je riešená ako stavový automat. V triede dediacej od HighSkill sa musia implementovať metódy pickLowSkill() a checkProgress().

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.

V triede HighSkill sú definované stavy high skillov ako enumeračný typ s hodnotami INITIAL_STATE, EXECUTING_STATE, FINALIZING_STATE, END_STATE. Každý high skill prechádza všetkými stavmi. Pri prechode stavmi sa vyberajú low skilly na základe stavu agenta. Stavy agenta sa určujú na základe informácií z modelu sveta hráča a informácií o hráčovi a vyhodnocujú sa implementovanými metódami high skillu.