Crafting System – Integracje wejścia i wyjścia

Witam w kolejnym wpisie poświęconym sekcji wytwarzania przedmiotów w systemie ekwipunku.

W tym wpisie pokażę integrację pomiędzy wprowadzonymi do tabeli przedmiotami a wydaleniem z bazy odpowiadającemu recepturze przedmiotowi do wzięcia w zamian za te wprowadzone.

Wystarczyło mi napisać prostą klasę OutputSlot podaną poniżej i po prostu umieścić slot ją posiadający na scenie:

OutputSlot.cs

public class OutputSlot : MonoBehaviour
{
protected List<InputSlot> InputSlots;
ItemDatabase _database;

void Start()
{
_database = transform.parent.GetComponent<CraftingManager>().database;
}

public void Call(int outputID)
{
GameObject itemInstance = Instantiate(transform.parent.GetComponent<CraftingManager>().itemPrefab.gameObject);
itemInstance.name = "Item";

itemInstance.transform.SetParent(transform);
itemInstance.GetComponent<RectTransform>().anchoredPosition = Vector2.zero;

ItemData id = itemInstance.AddComponent<ItemData>();
id.HoldedItem = _database.ItemByID(outputID);
id.GetComponent<Image>().sprite = id.HoldedItem.Icon;
}
}

 

Teraz pokażę BluePrint, czyli mój testowy przepis na miecz z brązu:

23asd

Nie będę niepotrzebnie wklejał zawartości mojej bazy przedmiotów więc po prostu dodam, że aby stworzyć jeden miecz z brązu muszę poświęcić jedną srebrną rękawice oraz 8 mieczy z brązu (brzmi logicznie, wiem).

Wynik jest następujący:

result.png

Niestety, ale popełniłem katastrofalny błąd, na samym początku gdy pisałem drag and drop oraz ekwipunek nie przyszło mi na początku do głowy, że łatwiej by było gdyby bliźniacze systemy, takie jak handel czy crafting mogłyby korzystać ze wspólnych komponentów, jak jest teraz. Dlatego próba wyciągnięcia, najechania na przedmiot w oknie craftingu wywołuje NullReferenceException z jasnych przyczyn.

By temu zapobiec odpowiednie metody klas Slot, ItemData oraz InputSlot i OutputSlot opatrzyłem blokiem try…catch. Nie jest to dobre rozwiązanie, jest anty-wzorcowe i jeśli to czytacie to nie bierzcie ze mnie przykładu. Gdybym mógł to przewidzieć to postąpiłbym inaczej, ale teraz jest już raczej za późno…niestety.

W następnych wpisach postaram się rozwinąć ten drugi rodzaj wytwarzania przedmiotów, mianowicie na podstawie klasy Recipe.

Do zobaczenia już wkrótce!

Reklamy

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Wyloguj / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Wyloguj / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Wyloguj / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Wyloguj / Zmień )

Connecting to %s