Dann könnte man vielleicht so reagieren (ungetestet):
|
C#-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
public void Update()
{
foreach (KeyData key in _keys)
{
foreach(var keyNameAsString in key.args.Keys)
{
HandleKey(key, keyNameAsString, key.code != KeyCode.None);
}
if (IsInvalidKeyWithTarget(key))
{
Debug.LogError("The key: " + key.name + " with target: " + key.target + " has no callback methods!");
}
}
}
private bool IsInvalidKeyWithTarget(KeyData key)
{
return key.args.ContainsKey("auto") == false && key.args.ContainsKey("down") == false && key.args.ContainsKey("up");
}
private void HandleKey(KeyData key, string keyName, bool hasKeycode)
{
//todo: handle key without keycode.
if (!Input.GetKeyDown(key.code)) return;
if (key.args[keyName] is string)
{
key.target.SendMessage(key.args[keyName] as string, SendMessageOptions.RequireReceiver);
}
else
{
Debug.LogError("The value: " + key.args["down"] + " isn't a string!");
}
}
|
Das liest sich schonmal besser. Prinzipiell brauchst du dann eigene Dictionaries, oder du implementierst eine Generic-Klasse, mit einem generischen Typen für deine InputDaten (ButtonData, KeyData), und im Konstruktor ein Delegat zum Auswerten der Daten. Da muss ich aber wieder ein konkretes Beispiel sehen, was kommt herein, was soll geprüft werden.
Du kannst mit C# und delegaten verdammt gute Konstrukte entwerfen
Ich bin nicht bei der GGJ nicht dabei, WE habe ich meist anderes zu tun
.
EDIT: Meine vermutung ist, je mehr Code du präsentierst, umso mehr wird sich die Lösung ändern. kann man sich das im Zusammenhang als C#-Projekt mal anschauen? Ich würde es auch vertraulich behandeln.