Tworzę prostą grę logiczną, w której gracz będzie miał różne przedmioty i używając ich musi rozwiązywać różne zagadki logiczne. Mam jednak problem z zaprojektowaniem w miarę elastycznego systemu interakcji przedmiotu, który gracz wybiera z jakimś obiektem na scenie, na przykład: gracz wybiera pochodnię i może: podpalić inną pochodnię rozjaśniając fragment mapy, lub może użyć jej na postaci gracza doprowadzając do przegranej.
Tworzę klasę abstrakcyjną Item dziedziczącą po ScriptableObject:
public abstract class Item : ScriptableObject
{
public GameObject ItemPrefab;
public Sprite ItemIcon;
public string ItemName;
public abstract void UseItem();
}
i stworzyłem drugą klasę UsableItem dziedziczącą po klasie Item
[CreateAssetMenu(fileName = "ScriptableObjects", menuName = "ScriptableObjects/UsableItem", order = 1)]
public class UsableItem : Item
{
public ItemInteractionAction ItemInteractionAction;
public override void UseItem()
{
// Switch for all interaction action?
}
}
i enum ItemInteractionAction:
public enum ItemInteractionAction
{
Fire,
Water
}
i moim początkowym pomysłem było stworzenie switcha w klasie UsableItem w metodzie UseItem() dla każdego elementu enuma, ale uznałem, że to nie jest zbyt dobry pomysł. Dodatkowo musiałbym stworzyć wiele ifów dla różnych obiektów, które zachowywałyby się inaczej po interakcji z wybranym obiektem.