void OnGUI() { if (activeMember != null && Event.current.keyCode == KeyCode.Return) { object @object = activeMember.GetValue(); if (@object is string || @object is bool) { activeMember.SetValue(activeMemberNewValue); } else if (@object is int) { int i; if (activeMemberNewValue != null && int.TryParse(activeMemberNewValue.ToString(), out i)) { activeMember.SetValue(i); } } else if (@object is Vector3) { var vector3 = (Vector3)activeMember.GetValue(); float v; if (activeMemberNewValue != null && float.TryParse(activeMemberNewValue.ToString(), out v)) { switch (activeMemberFieldType) { case FieldType.VectorX: vector3.x = v; break; case FieldType.VectorY: vector3.y = v; break; case FieldType.VectorZ: vector3.z = v; break; } } activeMember.SetValue(vector3); } else if (@object is Color) { var color = (Color)activeMember.GetValue(); float v; if (activeMemberNewValue != null && float.TryParse(activeMemberNewValue.ToString(), out v)) { switch (activeMemberFieldType) { case FieldType.ColorR: color.r = v; break; case FieldType.ColorG: color.g = v; break; case FieldType.ColorB: color.b = v; break; case FieldType.ColorA: color.a = v; break; } } activeMember.SetValue(color); } else if (@object is Quaternion) { var quat = (Quaternion)activeMember.GetValue(); float v; if (activeMemberNewValue != null && float.TryParse(activeMemberNewValue.ToString(), out v)) { switch (activeMemberFieldType) { case FieldType.ColorR: quat.x = v; break; case FieldType.ColorG: quat.y = v; break; case FieldType.ColorB: quat.z = v; break; case FieldType.ColorA: quat.w = v; break; } } activeMember.SetValue(quat); } else if (@object is float) { float f; if (activeMemberNewValue != null && float.TryParse(activeMemberNewValue.ToString(), out f)) { activeMember.SetValue(f); } } // Reset variables activeMember = null; activeMemberFieldType = FieldType.Normal; activeMemberNewValue = null; } if (layerTextInputActive && Event.current.keyCode == KeyCode.Return) { int i; if (int.TryParse(layerTextInputNewValue, out i)) { SelectedGameObject.layer = i; layerTextInputActive = false; } } }
private void DoInputField(MemberValue member, object value, FieldType type, float width = 0) { GUILayoutOption widthOption = width > 0 ? GUILayout.Width(width) : GUILayout.ExpandWidth(true); // If this one is selected if (activeMember == member && activeMemberFieldType == type) { GUI.SetNextControlName(FIELD_EDIT_INPUT_NAME + member.ID); activeMemberNewValue = GUILayout.TextField((string)activeMemberNewValue, Elements.InputFields.ComponentField, widthOption); } else { string oldValue = value.ToString(); GUI.SetNextControlName(FIELD_EDIT_INPUT_NAME + member.ID); string newValue = GUILayout.TextField(oldValue.ToString(), Elements.InputFields.ComponentField, widthOption); // Input was changed if (oldValue != newValue) { // Set current member to the active one activeMember = member; activeMemberFieldType = type; activeMemberNewValue = newValue; } } }