1 using System.Collections;
2 using System.Collections.Generic;
8 namespace AVR.UI.Link {
10 [RequireComponent(typeof(TMPro.TMP_InputField))]
13 public override List<System.Type> validTypes =>
new List<System.Type> {typeof(
bool), typeof(
float), typeof(
int), typeof(
double), typeof(
string)};
15 private TMPro.TMP_InputField
input;
17 protected virtual UnityEngine.Events.UnityAction<
string> updateValueListener => delegate { this.updateValue(); };
26 UnityEditor.Events.UnityEventTools.RemovePersistentListener(input.onEndEdit, updateValueListener);
27 UnityEditor.Events.UnityEventTools.AddPersistentListener(input.onEndEdit, updateValueListener);
29 UnityEditor.Events.UnityEventTools.RemovePersistentListener(input.onValueChanged, updateValueListener);
30 UnityEditor.Events.UnityEventTools.AddPersistentListener(input.onValueChanged, updateValueListener);
35 public override void init() {
36 if(!input) input = GetComponent<TMPro.TMP_InputField>();
38 if(input) old_value = input.text.ToString();
44 if (input.isFocused)
return;
47 string text = input.text;
53 case MemberType.FIELD:
55 target.GetType().GetField(field).SetValue(target,
56 System.Convert.ChangeType(text, target.GetType().GetField(field).FieldType)
60 case MemberType.PROPERTY:
62 target.GetType().GetProperty(field).SetValue(target,
63 System.Convert.ChangeType(text, target.GetType().GetProperty(field).PropertyType)
69 catch(System.Exception) {
70 AVR_DevConsole.cwarn(
"Could not update the given target value to "+text,
this);
74 private string old_value =
"";
79 if(input.isFocused)
return;
81 object current_value = null;
85 case MemberType.FIELD:
87 current_value = target.GetType().GetField(field).GetValue(target);
90 case MemberType.PROPERTY:
92 current_value = target.GetType().GetProperty(field).GetValue(target);
97 input.text = current_value.ToString();
100 if (old_value != current_value.ToString() && !Application.isPlaying)
102 EditorUtility.SetDirty(input);
103 old_value = current_value.ToString();
Binds a given UI element (such as slider, toggle, dropdown or inputfield) with a given property or fi...