Skip to content

Inventory management Analysis

MatousK edited this page Jul 30, 2018 · 5 revisions

Item management

V adventurách se většinou vyskytuje mnoho předmětů, které hráč může sbírat, prohlížet, používat a kombinovat s jinými předměty. Pro snadnější implementaci této práce s předměty náš plugin nabídne několik tříd.

AdventureGameItem

Každý předmět bude reprezentován jedním blueprintem, který bude dědit od třídy AdventureGameItem. Na něm budou definovány vlastnosti toho předmětu, ale nebudou na něm informace o tom, kde je na scéně, jak je na scéně reprezentován etc. Konkrétně na něm budou tyto metody vlastnosti:

  • Name – Lokalizovatelný string – název tohoto předmětu.

  • ExamineDialogue – Bude obsahovat dvě podproměnné – DialogueGraph a EntryPoint, které společně definují dialog, který se má spustit při prozkoumání předmětu.

  • IsExaminable – Pokud je true, tento předmět lze prozkoumat a má na něm smysl volat akci Examine.

  • Examine – Defaultní implementace spustí ExamineDialogue, ale bude možné toto chování overridenout.

  • IsUsable – Pokud je true, předmět lze použít sám o sobě, Use akce má něco dělat.

  • UseActionType – Má smysl pouze v případě, že Usable je true, defaultně nil. Pokud je nil, bere se default z World Settings. Definuje akci, která je pro tento předmět ekvivalentem použití. Například normálně použití může být jeden typ akce, ale pro mluvící meč může být použití promluvení si s mečem, tedy jiný typ akce.

  • UseActionName – Lokalizovatelný string, název Use akce, defaultně nil.

  • Use – Use akce tohoto předmětu – Defaultně nedělá nic, pokud je IsUsable true, bude potřeba vytvořit vlastní implementaci.

  • Categories – Kategorie předmětu, například zbraň, kniha, mapa atd. Definovány v rámci World Settings (odkaz), zde se vybírají všechny kategorie, které předmětu lze přiřadit.

  • Combinations – seznam všech předmětů, se kterými lze předmět kombinovat. Pokud zde přidám nějakou kombinaci s nějakým dalším předmětem, zobrazí se tato kombinace i u toho druhého předmětu. Tam ji ale nebude možné modifikovat, jakákoliv modifikace musí proběhnout na tom předmětu, kde byla kombinace založena. Každá kombinace bude mít tyto argumenty

    • CombinationName – Jméno akce, co se vykoná, defaultně nil. Například nůž a lano může mít název „Přeříznout lano“

    • CombinationActionType – Akce, co tato kombinace představuje. Například nůž + lano může být UseAction, zatímco slovník a mluvicí meč může být TalkAction.

    • Combine – akce, co se má provést při této kombinaci. Defaultně nil, je třeba vytvořit vlasntí implementaci.

  • GetCombinationWithItem – Jako argument bere další předmět, vrátí kombinaci, pokud existuje, nebo nil, pokud neexistuje.

  • InventoryIcon – ikona tohoto předmětu v inventáři.

  • OnPickup – Event Dispatcher, který se vykoná v okamžik, kdy je tento předmět přidán do inventáře.

  • OnRemoved – Event Dispatcher, který se vykoná, když je tento předmět z inventáře odebrán.

Inventory management

Inventář je označení pro všechny předměty, co právě herní postava vlastní. Většinou ho lze nějak zobrazit hráči, lze v něm vidět všechny posbírané předměty a lze je používat, prohlížet, manipulovat s nimi atd. Práce s ním během hry bude rozdělena na dvě části – Inventory Manager, který bude umět pracovat s tím, které předměty v inventáři jsou, bude umět další předměty přidávat atd., a Inventory Presenter, který bude inventář zobrazovat hráči a dovolí mu s předměty manipulovat. K oběma těmto třídám bude přístup skrze naši GameInstance (TODO: Link).

Inventory Manager

Tato třída bude spravovat, které předměty má v dané chvíli která postava. Bude podporovat serializaci během ukládání hry. Bude mít tyto metody:

  • GetInventory – Vrátí třídu pro práci s inventářem. Používá se, když existuje jen jedna herní postava.

  • GetInventoryForPlayerCharacter – Vrátí třídu pro práci s inventářem dané postavy. Používá se, když existuje více herních postav.

Samotný inventář bude reprezentován třídou Inventory, která bude mít následující metody:

  • GetItems – vrátí seznam všech předmětů, které jsou v daném inventáři.

  • AddItem – Přidá daný předmět do inventáře.

  • RemoveItem – Odebere daný předmět z inventáře.

  • InventoryChanged – Event Dispatcher, který se zavolá v případě změny tohoto inventáře.

Inventory Presenter

Tato třída dokáže vizuálně zobrazit daný inventář. Bude se jednat o interface s dvěma metodami – ShowInventory (zobrazí daný inventář) a HideInventory (skryje daný inventář). V našem pluginu bude vzorová implementace, která bude mít následující funkce:

  • Zobrazení ikon všech předmětů v daném inventáři.

  • Kombinování předmětů přetáhnutím ikony jednoho předmětu na další předmět.

  • Zavolání UseAction po kliknutí, pokud má předmět IsUse na true, jinak zavolání ExamineAction po kliknutí.

  • Update inventáře po přidání nebo odebrání předmětu.

Další funkcionality, jako například automatické skrývání inventáře za nějakých podmínek, už jsou specifické pro danou hru a vývojář si je bude muset implementovat sám.

Použití předmětu na scéně

Předměty na scéně musí umět s výše definovanými daty o předmětech pracovat. Neboť ovšem tato práce s předměty už je velice specifická pro danou hru, bude k dispozici jednoduchá implementace pro rychlé prototypování, ale očekáváme, že si vývojáři vytvoří vlastní. Implementace totiž jen musí za určitých podmínek volat metody z příslušné AdventureGameItem třídy, ale ty podmínky jsou už příliš specifické – jinak se aktivují předměty ve 2D a 3D, v některé hře může být klik pravým tlačítkem prozkoumání a klik levým tlačítkem použití, v jiné hře může být první klik prozkoumání a druhý klik použití atd. Naše vzorová implementace bude pouze mít následující funkci:

  • Po prvním kliknutí na předmět zavolá akci Examine, po druhém předmět přidá do inventáře a odebere ze scény.

Clone this wiki locally