I'm looking for a solution for a "Right Click Options" behaviour.
Basically any and every item in a game, when right clicked, can display a set of options based on whatever the object is.
Right click examples for different scenarios:
Inventory: Helmet shows options (Equip, Use, Drop, Description)
Bank: Helmet shows options (Take 1, Take X, Take All, Description)
Floor: Helmet shows options (Take, Walk Here, Description)
Obviously each option somehow points to a certain method that does what is says. This is part of the issue I'm trying to figure out. With so many potention options for a single item, how would I have my classes designed in such a way as to not be extremely messy?
- I've thought about inheritance but that could be really long winded and the chain could be huge.
- I've thought about using interfaces, but this would probably restrict me a little as I wouldn't be able to load item data from an Xml file and place it into a generic "Item" class.
I'm basing my desired end result on a game called Runescape. Every object can be right clicked in the game and depending on what it is, and where it is (inventory, floor, bank etc.) displays a different set of options available to the player to interact with.
How would I go about achieving this? What approach should I take to first of all, decide which options SHOULD be displayed and once clicked, how to call the corresponding method.
I am using C# and Unity3D, but any examples provided do not have to be related to either of them as I'm after a pattern as opposed to actual code.
Any help is much appreciated and if I have not been clear in my question or desired results, please post a comment and I'll tend to it ASAP.
For the haters who say "WhatHere is what I have you tried?" so far:
- I've actually managed to implement a generic "Item" class that holds all of the values for different types of items (extra attack, extra defence, cost etc...). These variables get populated by data from an Xml file.
- I have thought about placing every single possible interaction method inside of the Item class but I think this is unbelievably messy and poor form. I've probably taken the wrong approach for implementing this kind of system by only using the one class and not sub-classing to different items, but its the only way I can load the data from an Xml and store it in the class.
- The reason I've chose to load all my items from an Xml file is due to this game having the possibility for 40,000+ items. If my math is correct, a class for each item is a lot of classes.