///////////////////////////////////////////////////////// /// DO NOT TOUCH THE REST /// If you make changes, it is at your own risk. /// Made by JWolf 13 / 6 - 2012 ///////////////////////////////////////////////////////// /// <summary> /// Use this function to set when witch fields should be visible. /// </summary> /// <param name='enumFieldName'> /// The name of the Enum field. (in your case that is "type") /// </param> /// <param name='enumValue'> /// When the Enum value is this in the editor, the field is visible. /// </param> /// <param name='fieldName'> /// The Field name that should only be visible when the chosen enum value is set. /// </param> private void ShowOnEnum(string enumFieldName, string enumValue, string fieldName) { p_FieldCondition newFieldCondition = new p_FieldCondition() { p_enumFieldName = enumFieldName, p_enumValue = enumValue, p_fieldName = fieldName, p_isValid = true }; //Valildating the "enumFieldName" newFieldCondition.p_errorMsg = ""; FieldInfo enumField = target.GetType().GetField(newFieldCondition.p_enumFieldName); if (enumField == null) { newFieldCondition.p_isValid = false; newFieldCondition.p_errorMsg = "Could not find a enum-field named: '" + enumFieldName + "' in '" + target + "'. Make sure you have spelled the field name for the enum correct in the script '" + this.ToString() + "'"; } //Valildating the "enumValue" if (newFieldCondition.p_isValid) { var currentEnumValue = enumField.GetValue(target); var enumNames = currentEnumValue.GetType().GetFields(); //var enumNames =currentEnumValue.GetType().GetEnumNames(); bool found = false; foreach (FieldInfo enumName in enumNames) { if (enumName.Name == enumValue) { found = true; break; } } if (!found) { newFieldCondition.p_isValid = false; newFieldCondition.p_errorMsg = "Could not find the enum value: '" + enumValue + "' in the enum '" + currentEnumValue.GetType().ToString() + "'. Make sure you have spelled the value name correct in the script '" + this.ToString() + "'"; } } //Valildating the "fieldName" if (newFieldCondition.p_isValid) { FieldInfo fieldWithCondition = target.GetType().GetField(fieldName); if (fieldWithCondition == null) { newFieldCondition.p_isValid = false; newFieldCondition.p_errorMsg = "Could not find the field: '" + fieldName + "' in '" + target + "'. Make sure you have spelled the field name correct in the script '" + this.ToString() + "'"; } } if (!newFieldCondition.p_isValid) { newFieldCondition.p_errorMsg += "\nYour error is within the Custom Editor Script to show/hide fields in the inspector depending on the an Enum." + "\n\n" + this.ToString() + ": " + newFieldCondition.ToStringFunction() + "\n"; } fieldConditions.Add(newFieldCondition); }