-
Notifications
You must be signed in to change notification settings - Fork 0
Inventory management Analysis
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ěchto práce s předměty náš plugin nabídne několik tříd.
InventoryRegistry bude typ data assetu, který bude obsahovat záznamy o všech předmětech ve hře (TODO: Jen jeden nebo víc?). Budou zde uloženy všechny informace, které jsou platné pro předmět bez ohledu na to, kde se zrovna nachází. V levé částí editoru bude seznam všech předmětů, které jsou v současné době zaregistrovány, tedy všech předmětů ve hře. A půjde v něm i nové předměty přidávat. Po vybrání předmětu se v pravé části obrazovky zobrazí detaily daného předmětu. Těmto datům říkáme Item Data. Každý předmět bude mít následující vlastnosti:
-
Class – Blueprint třída, která řídí chování tohoto předmětu. Defaultně třída definovaná ve World settings. Půjde snadno vygenerovat podtřídu.
-
Name – Lokalizovatelný string – název tohoto předmětu.
-
DescriptionDialogue – Bude obsahovat dvě podproměnné – DialogueGraph a EntryPoint, které společně definují dialog, který se má spustit při prozkoumání předmětu.
-
DescriptionCursorType – defaultně nil, pokud je nastaven, použije se tento kurzor místo defaultního v okamžik, když by hráč kliknutím spustil zobrazení DescriptionDialogue.
-
IsUsable – Pokud je true, předmět lze použít sám o sobě, onUse akce má něco dělat.
-
UseCursorType – Má smysl pouze v případě, že Usable je true, defaultně nil, funguje stejně jako DescriptionCursorType. Například pokud bych měl v inventáři mluvící meč, můžu chtít, aby kurzor neindikoval použití, ale mluvení.
-
Category – Kategorie předmětu, například zbraň, kniha, mapa etc. Definovány v rámci celého inventory registry, 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 jí ale nebude možné modifikovat, jakákoliv modifikace musí proběhnout na tom předmětu, kde byla kombinace založena. Ke každé kombinaci půjde přiřadit jméno jako lokalizovatelný string. Půjde nastavit i kombinaci s kategorií předmětů – například provázek může jít přeříznout libovolným předmět z kategorie ostrých předmětů. Kombinace lze přidávat pouze v případě, že je pro předmět vygenerována vlastní třída, v takovém případě automaticky do blueprintu přidá event, že daná kombinace byla spuštěna.
-
InventoryIcon – ikona tohoto předmětu v inventáři.
Když není vybrán žádný předmět, půjdou měnit vlastnosti celého Inventory Registry:
-
Categories – seznam všech kategorií, které lze přiřadit předmětům.
-
BaseInventoryItem – Pokud nemá předmět definováno vlastní chování, bude používat toto. Jinak nové třídy pro předměty budou dědit od této třídy. Měly by na ní být definované takové věci jako defaultní hlášky při pokusu o použití nevalidní kombinace etc.
Na této třídě budou definovány všechny metody, které pak předměty mohou overridenout, aby dali předmětům vlastní chování. Bude mít zároveň referenci na Item Data daného předmětu v Inventory Registry. Jedná se o tyto metody:
-
GetName – vrátí název předmětu, defaultně vezme Name z Item Data,
-
DescriptionAction – akce description defaultně spustí DescriptionDialogue z Item Data, ale třídy mohou implementovat i vlastní chování.
-
UseAction – použití předmětu, žádné defaultní chování, třídy musí implementovat vlastní chování.
-
IsUsable – defaultně vráti hodnotu z Item Data. True znamená, že předmět lze použít.
-
OnPickup – zavolá se, když postava předmět přidá do inventáře. Defaultně žádné chování.
-
OnClick – zavolá se, když uživatel klikne na předmět. Default: Pokud nemá předmět isUsable, zavolá se DescriptionAction. Pokud má isUsable, zavolá se UseAction.
-
GetInventoryIcon – vrátí ikonu, která se má zobrazit v inventáři. Defaultně vrací InventoryIcon z Item Data
-
Cursor – vrací typ kurzoru, který se má zobrazit nad tímto předmětem. Defaultní chování vrací UseCursorType pokud je isUsable true a DescriptionCursorType, pokud je false. Klasická implementace neřeší nil hodnoty, předpokládá se, že komponenta, co ovládá kurzor si nil vyřeší. Ale je možné si udělat vlastní implementaci, co bude vracet nějaké defaultní hodnoty.