I want to create a graphical interface for inputing skill build orders for an RPG game. A skill build is an ordered list of (skill, number) pairs, like this (see footnote):
(A x1) -> (B *) -> (C x2) -> (A *)
I want to create a graphical interface that can add items to this kind of list, preferably in any position of it.
The main idea I am having now is to make some sort of drag-and-drop interface, with icons representing the skills
current build = (A x1) -> (B *) -> ...
-----------------------------------------
amount: [ 1 | 2 | 3 | 4 | * ] (radio buttons or drop-down selector)
skills: +---+ +---+ +---+
| A | | B | | C |
+---+ +---+ +---+
Clicking an icon would add the item-number combination to the end of the list (the most common place to add things to) and dragging it to a spot on the result list would cause it to be inserted there instead.
But I imagine having to do multiple clicks to select the number and the icon would be awkward. An alternative might be having a button for each possible pair:
+----+ +----+ +----+
|A *| |B *| |C *|
+----+ +----+ +----+
+----+ +----+ +----+
|A x1| |B x1| |C x1|
+----+ +----+ +----+
+----+ +----+ +----+
|A x2| |B x2| |C x2|
+----+ +----+ +----+
//and so on
But then I think it would get way too cluttered.
What is the best way to input such a list of pairs?
Are there any places where a similar problem was solved and where I can take inspiration from?
Some design considerations:
I have 4-5 skills and the numbers range from 3-5 (and the * wildcard)
Some numbers (1 and *) will be selected more often then others (2,3,4). All skills are equally likely to be selected.
If we choose an asymmetrical design, skills should be prioritized over numbers.
I am primarily interested in obtaining a fast and clean workflow. It is OK if the final result ends up a little complicated or unintuitive.
- This is not intended to be the default interface. I want this to be faster then the simple but slow interface where each skill is entered manually for each level.
For the curious, a pairing like
(A x1) -> (B *) -> (C x2) -> (A *)
can be interpreted as
As a first priority, level up A once
As a second priority, level up B whenever possible
As a third priority, level up C twice
As a fourth priority, level up the remaining levels of A
The main reason for using this is because describing directly what skill to take at each level is longer and less clear:
A, B, C, B, C, B, A, B ... // this is simple, but less clear