public static void InspectProperty(PropertyInfo info, object value) { var type = info.PropertyType; if (IntegerTypes.Contains(type)) { var v = Convert.ToInt32(info.GetValue(value)); var n = EditorGUILayout.IntField(v); if (type == typeof(uint)) { info.SetValue(value, (uint)n); } if (type == typeof(ushort)) { info.SetValue(value, (ushort)n); } if (type == typeof(short)) { info.SetValue(value, (short)n); } if (type == typeof(byte)) { info.SetValue(value, (byte)n); } if (type == typeof(int)) { info.SetValue(value, n); } return; } if (LongTypes.Contains(type)) { info.SetValue(value, EditorGUILayout.LongField((long)info.GetValue(value))); return; } if (FloatTypes.Contains(type)) { info.SetValue(value, EditorGUILayout.FloatField((float)info.GetValue(value))); return; } if (DoubleTypes.Contains(type)) { info.SetValue(value, EditorGUILayout.DoubleField((double)info.GetValue(value))); return; } if (type == typeof(bool)) { info.SetValue(value, EditorGUILayout.Toggle((bool)info.GetValue(value))); return; } if (type == typeof(NiString)) { var niString = (NiString)info.GetValue(value); var index = niString.Index; EditorGUILayout.LabelField($"Index: {(index == uint.MaxValue ? "Null" : index.ToString())}"); return; } if (type.Name.StartsWith("Ptr")) { var ptr = info.GetValue(value); var indexInfo = ptr.GetType().GetField("Index"); if (indexInfo == null) { EditorGUILayout.LabelField($"Failed to load ptr"); return; } var index = (int)indexInfo.GetValue(ptr); EditorGUILayout.LabelField($"Index: {(index == -1 ? "Null" : index.ToString())}"); return; } if (type == typeof(Vector3)) { var v = (Vector3)info.GetValue(value); v.x = EditorGUILayout.FloatField(v.x); v.y = EditorGUILayout.FloatField(v.y); v.z = EditorGUILayout.FloatField(v.z); info.SetValue(value, v); return; } if (type == typeof(Color3)) { var v = (Color3)info.GetValue(value); v.r = EditorGUILayout.FloatField(v.r); v.g = EditorGUILayout.FloatField(v.g); v.b = EditorGUILayout.FloatField(v.b); info.SetValue(value, v); return; } if (type == typeof(Vector4)) { var v = (Vector4)info.GetValue(value); v.x = EditorGUILayout.FloatField(v.x); v.y = EditorGUILayout.FloatField(v.y); v.z = EditorGUILayout.FloatField(v.z); v.w = EditorGUILayout.FloatField(v.w); info.SetValue(value, v); return; } EditorGUILayout.LabelField("Unsupported type!"); }