Tooltipy

Witam w kolejnym artykule o Moim systemie zarządzania ekwipunkiem.

W tym wpisie mam zamiar przedstawić Tooltipy, czyli panele wyświetlane po najechaniu kursorem myszy na przedmiot w oknie ekwipunku.

Tooltips.png

Tooltip.cs

public class Tooltip : MonoBehaviour
{
Inventory _inventory;
ItemDatabase _database;

public Transform HeaderContainter;
public Transform DataContainer;
public Transform ItemContainer;

[SerializeField] private Vector3 startPos;

void Start()
{
if (transform.parent.GetComponent<Inventory>())
{
_inventory = GetComponent<Inventory>();
}
else
{
throw new NotImplementedException("Tooltip must be the child of the GameObject with Inventory component attached");
}

}

public void Call(Item i)
{
this.GetComponent<RectTransform>().anchoredPosition3D = startPos;
HeaderContainter.GetComponent<Text>().text = i.Name;
DataContainer.GetComponent<Text>().text = i.Description;
if (ItemContainer != null)
{
ItemContainer.GetComponent<Image>().sprite = i.Icon;
}
}
}

Najpierw przyjrzyjmy się pierwszym trzem publicznym obiektom klasy Transform

HeaderContainer – przechowuje dziecko które zawiera tytuł Itemu wyświetlanego przez bazę, a sam może być tłem dla wyświetlanego tekstu. Jest wymagany przez skrypt.

DataContainer – obiekt wyposażony w Text component równy opisowi przedmiotu wyświetlanemu przez Tooltip. Jest wymagany przez skrypt.

ItemContainer – teraz gdy o tym piszę to zdaje mi się, że nazwa IconContainer byłaby trafniejsza, ale tak czy owak to przechowuje on sprajt Itemu. Jest opcjonalny, niewymagany.

Metoda Call przyjmuje Item na podstawie którego Tooltip wyświetla dane. Sądzę, że w przyszłości powinienem zastąpić argument Item, na argument ItemData, ponieważ Item jest nieco bardziej ograniczony ze względu na swe pełne uzależnienie od bazy danych.

Oczywiście jasnym jest to że każdy z kontenerów powiązanych z Tooltipem, powinien, lecz nie musi być jego dzieckiem, ponieważ istenieje w klasie Tooltip Vector3 o nazwie StartPos. Za każdym razem gdy wywołana zostanie metoda Call, Tooltip zostanie przeniesiony do tej pozycji, a następnie ujawniony.

Wielkim plusem tego typu układu tego skryptu jest jego otwartość na modyfikację wyglądu.

HeaderContainer, DataContainer,IconContainer mają swoje wymogi, ale marginesy, rozmiar, obrazki, czcionki i inne dodatki są możliwe do dostosowania do indywidualnych potrzeb. Aby wywołać metodę Call, w każdym Itemie musiałem trochę poprawić marginesy licznika przedmiotu, ponieważ był on nieco za duży oraz klasa ItemData musi implementować dwa dodatkowe Interfejsy: IPointerEnterHandler oraz IPointerExitHandler:


public void OnPointerEnter(PointerEventData eventData)
{
inv.Tooltip.gameObject.SetActive(true);
inv.Tooltip.GetComponent<Tooltip>().Call(HoldedItem);
}

public void OnPointerExit(PointerEventData eventData)
{
inv.Tooltip.gameObject.SetActive(false);
}

To by było na tyle. Ze względu na Tooltip nie miałem zbyt wiele czasu na naprawę błędów w Bazie Danych, ale postaram się je rozwiązać w następnym wpisie. Rozmyślałem nad tym trochę i sądzę, że następne w kolejce będą Eventy dla użycia Itemu lub zapis i odczyt zawartości ekwipunku.

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ń )

Zdjęcie na Facebooku

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

Zdjęcie na Google+

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

Connecting to %s