public string FilterAddress(string strFileAddress) { //get attribute FileStructureStringAttribute fsaAttribute = attribute as FileStructureStringAttribute; switch (fsaAttribute._faoFieldAddressOption) { case FileStructureStringAttribute.FileAddressOptions.DEFAULT: return(strFileAddress); break; case FileStructureStringAttribute.FileAddressOptions.EXCLUDE_FILE_EXTENSION: return(RemoveFileType(strFileAddress)); break; case FileStructureStringAttribute.FileAddressOptions.FOLDER_REFFERENCE_ONLY: return(FolderOnlyAddress(strFileAddress)); break; case FileStructureStringAttribute.FileAddressOptions.EDITOR_RESOURCE_ADDRESS: return(EditorResourceAddress(strFileAddress)); break; } return(strFileAddress); }
public bool DoesObjectPassFiltering(Object objObject) { //check for errors if (objObject == null) { return(false); } //get attribute FileStructureStringAttribute fsaAttribute = attribute as FileStructureStringAttribute; if (fsaAttribute._typTypeOfObjectToFilterFor == null) { return(true); } //check for inheritence optins if (fsaAttribute._bAllowInheritance == true) { //check if object is type return(fsaAttribute._typTypeOfObjectToFilterFor.IsAssignableFrom(objObject.GetType())); } else { return(objObject.GetType() == fsaAttribute._typTypeOfObjectToFilterFor); } }
// Draw the property inside the given rect public override void OnGUI(Rect rctPos, SerializedProperty srpSerializedProperty, GUIContent gucLabel) { //error check if (srpSerializedProperty.propertyType != SerializedPropertyType.String) { EditorGUI.LabelField(rctPos, gucLabel.text, "Use File Structure String with string classes only."); return; } //split the draw area in 2 Rect recLeft = new Rect(rctPos.x, rctPos.y, rctPos.width * 0.5f, rctPos.height); Rect recRight = new Rect(recLeft.xMax, rctPos.y, recLeft.width, rctPos.height); //draw the strign srpSerializedProperty.stringValue = EditorGUI.TextField(recLeft, gucLabel.text, srpSerializedProperty.stringValue); //get attribute FileStructureStringAttribute fsaAttribute = attribute as FileStructureStringAttribute; //the target object this string is pointing at Object objTargetObject = null; //try and get object at target address if (fsaAttribute._faoFieldAddressOption != FileStructureStringAttribute.FileAddressOptions.EDITOR_RESOURCE_ADDRESS) { objTargetObject = AssetDatabase.LoadAssetAtPath(srpSerializedProperty.stringValue, typeof(Object)); } else { objTargetObject = EditorGUIUtility.Load(srpSerializedProperty.stringValue); } //Let user select new object objTargetObject = EditorGUI.ObjectField(recRight, objTargetObject, typeof(Object), false); //check if object passes type field if (DoesObjectPassFiltering(objTargetObject) == false) { return; } //filter address string strFinalAddress = FilterAddress(AssetDatabase.GetAssetPath(objTargetObject)); //try and get the address at the target location srpSerializedProperty.stringValue = strFinalAddress; }