diff --git a/.gitignore b/.gitignore index d93bfaf..5d2a4aa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,32 +1,36 @@ -/[Ll]ibrary/ -/[Tt]emp/ -/[Oo]bj/ -/[Bb]uild/ -/[Bb]uilds/ -/[Ll]ogs/ -/[Uu]ser[Ss]ettings/ +*/[Ll]ibrary/ +*/[Tt]emp/ +*/[Oo]bj/ +*/[Bb]uild/ +*/[Bb]uilds/ +*/[Ll]ogs/ +*/[Uu]ser[Ss]ettings/ + +# FieldSearchConfigs +**/[Ff]ield[Ss]earch[Cc]onfigs/ +[Ff]ield[Ss]earch[Cc]onfigs.meta # MemoryCaptures can get excessive in size. # They also could contain extremely sensitive data -/[Mm]emoryCaptures/ +*/[Mm]emoryCaptures/ # Recordings can get excessive in size -/[Rr]ecordings/ +*/[Rr]ecordings/ # Uncomment this line if you wish to ignore the asset store tools plugin # /[Aa]ssets/AssetStoreTools* # Autogenerated Jetbrains Rider plugin -/[Aa]ssets/Plugins/Editor/JetBrains* +*/[Aa]ssets/Plugins/Editor/JetBrains* # Visual Studio cache directory -.vs/ +*/.vs/ # Gradle cache directory .gradle/ # Autogenerated VS/MD/Consulo solution and project files -ExportedObj/ +*/ExportedObj/ .consulo/ *.csproj *.unityproj @@ -61,8 +65,8 @@ sysinfo.txt crashlytics-build.properties # Packed Addressables -/[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin* +*/[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin* # Temporary auto-generated Android Assets -/[Aa]ssets/[Ss]treamingAssets/aa.meta -/[Aa]ssets/[Ss]treamingAssets/aa/* +*/[Aa]ssets/[Ss]treamingAssets/aa.meta +*/[Aa]ssets/[Ss]treamingAssets/aa/* diff --git a/.vsconfig b/FieldSearch/.vsconfig similarity index 100% rename from .vsconfig rename to FieldSearch/.vsconfig diff --git a/Assets/Scenes/SampleScene.unity.meta b/FieldSearch/Assembly-CSharp-Editor.csproj.meta similarity index 74% rename from Assets/Scenes/SampleScene.unity.meta rename to FieldSearch/Assembly-CSharp-Editor.csproj.meta index 952bd1e..b310c0a 100644 --- a/Assets/Scenes/SampleScene.unity.meta +++ b/FieldSearch/Assembly-CSharp-Editor.csproj.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9fc0d4010bbf28b4594072e72b8655ab +guid: df81f64228e728b4591d166693a332fe DefaultImporter: externalObjects: {} userData: diff --git a/FieldSearch/Assembly-CSharp.csproj.meta b/FieldSearch/Assembly-CSharp.csproj.meta new file mode 100644 index 0000000..3d940a1 --- /dev/null +++ b/FieldSearch/Assembly-CSharp.csproj.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b497a7d581725ab418986f65a9ff4359 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes.meta b/FieldSearch/Assets.meta similarity index 77% rename from Assets/Scenes.meta rename to FieldSearch/Assets.meta index 3857cc0..400b388 100644 --- a/Assets/Scenes.meta +++ b/FieldSearch/Assets.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: 9c038b0cd688df34ea3a8ff8c005064b +guid: 28b673a302768244cab28881f7564792 folderAsset: yes DefaultImporter: externalObjects: {} diff --git a/FieldSearch/Assets/FieldSearch.meta b/FieldSearch/Assets/FieldSearch.meta new file mode 100644 index 0000000..bf5603e --- /dev/null +++ b/FieldSearch/Assets/FieldSearch.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2d71eac1bf9fb7040b03a2d4d377cc11 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Attributes.meta b/FieldSearch/Assets/FieldSearch/Attributes.meta new file mode 100644 index 0000000..e3462ac --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Attributes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 831f3712ba7401645ae6331c5a5292ca +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Attributes/Drawers.meta b/FieldSearch/Assets/FieldSearch/Attributes/Drawers.meta new file mode 100644 index 0000000..08ea529 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Attributes/Drawers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 87540d1e2bbd07b4ebc94aa881573f3e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Attributes/Drawers/TypeRefDropdownAttributeDrawer.cs b/FieldSearch/Assets/FieldSearch/Attributes/Drawers/TypeRefDropdownAttributeDrawer.cs new file mode 100644 index 0000000..83ba6d8 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Attributes/Drawers/TypeRefDropdownAttributeDrawer.cs @@ -0,0 +1,62 @@ +using System; +using System.Linq; +using UnityEditor; +using UnityEngine; + +namespace FieldSearch.Attributes.Drawers +{ + /// + /// Drawer for + /// + [CustomPropertyDrawer(typeof(TypeRefDropdownAttribute))] + public class TypeRefDropdownAttributeDrawer : PropertyDrawer + { + TypeRefDropdownAttribute target; + + int currentTypeIndex; + GUIContent[] displayedOptions; + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + if (target == null) + { + Init(property); + return; + } + + EditorGUI.BeginProperty(position, label, property); + ShowDropDownTypeList(position, property, label); + EditorGUI.EndProperty(); + } + + private void ShowDropDownTypeList(Rect position, SerializedProperty property, GUIContent label) + { + EditorGUI.BeginChangeCheck(); + currentTypeIndex = EditorGUI.Popup(position, label, currentTypeIndex, displayedOptions); + if (EditorGUI.EndChangeCheck()) + { + property.stringValue = target.InheritedTypeNameArray[currentTypeIndex]; + property.serializedObject.ApplyModifiedProperties(); + property.serializedObject.Update(); + } + } + + /// + /// First Init call + /// + /// + private void Init(SerializedProperty property) + { + target = attribute as TypeRefDropdownAttribute; + currentTypeIndex = Array.IndexOf(target.InheritedTypeNameArray, property.stringValue); + + if (currentTypeIndex < 0) + { + Debug.LogWarning($"Type Index can't found for {property.displayName}"); + currentTypeIndex = 0; + } + + displayedOptions = target.ShortInheritedTypeNameArray.Select(x => new GUIContent(x)).ToArray(); + } + } +} diff --git a/FieldSearch/Assets/FieldSearch/Attributes/Drawers/TypeRefDropdownAttributeDrawer.cs.meta b/FieldSearch/Assets/FieldSearch/Attributes/Drawers/TypeRefDropdownAttributeDrawer.cs.meta new file mode 100644 index 0000000..5d199dc --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Attributes/Drawers/TypeRefDropdownAttributeDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: db7a6219cd8c9314590516432001e9f7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Attributes/FieldSearch.Attributes.asmdef b/FieldSearch/Assets/FieldSearch/Attributes/FieldSearch.Attributes.asmdef new file mode 100644 index 0000000..50d4b1e --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Attributes/FieldSearch.Attributes.asmdef @@ -0,0 +1,14 @@ +{ + "name": "FieldSearch.Attributes", + "references": [], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/FieldSearch/Assets/FieldSearch/Attributes/FieldSearch.Attributes.asmdef.meta b/FieldSearch/Assets/FieldSearch/Attributes/FieldSearch.Attributes.asmdef.meta new file mode 100644 index 0000000..7b835b3 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Attributes/FieldSearch.Attributes.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 00729d9f1fa97cf48b2359e703ae52b7 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Attributes/TypeComparer.cs b/FieldSearch/Assets/FieldSearch/Attributes/TypeComparer.cs new file mode 100644 index 0000000..dc7a3d3 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Attributes/TypeComparer.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; + +namespace FieldSearch.Attributes +{ + /// + /// Type comparer. + /// Used in + /// + public class TypeComparer : IComparer + { + public int Compare(Type x, Type y) + { + return x.Name.CompareTo(y.Name); + } + } +} diff --git a/FieldSearch/Assets/FieldSearch/Attributes/TypeComparer.cs.meta b/FieldSearch/Assets/FieldSearch/Attributes/TypeComparer.cs.meta new file mode 100644 index 0000000..dad446b --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Attributes/TypeComparer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ef62c18eef9b06948a8d50a59e3785f1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Attributes/TypeRefDropdownAttribute.cs b/FieldSearch/Assets/FieldSearch/Attributes/TypeRefDropdownAttribute.cs new file mode 100644 index 0000000..addf415 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Attributes/TypeRefDropdownAttribute.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEngine; + +namespace FieldSearch.Attributes +{ + /// + /// Dropdown list attribute for type, inherited from BaseType + /// + [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field)] + public class TypeRefDropdownAttribute : PropertyAttribute + { + public TypeRefDropdownAttribute(Type baseType, params string[] ignoredNamespaces) + { + BaseType = baseType; + Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies(); + var types = GetInheritedTypes(BaseType, assemblies) + .Where(x => !x.IsAbstract + && !ignoredNamespaces.Contains(x.Namespace)); + + InheritedTypeNameArray = types.Select(x => x.AssemblyQualifiedName).ToArray(); + ShortInheritedTypeNameArray = types.Select(x => x.Name).ToArray(); + } + + /// + /// Base type + /// + public Type BaseType { get; private set; } + + /// + /// Array with Type.AssemblyQualifiedName + /// + public string[] InheritedTypeNameArray { get; private set; } + + /// + /// Array with Type.Name + /// + public string[] ShortInheritedTypeNameArray { get; private set; } + + /// + /// Get all Inherited from Types + /// + /// + /// + /// + public static List GetInheritedTypes(Type baseType, params Assembly[] assemblies) + { + List types = new List(); + foreach (Type type in + assemblies.SelectMany(x => x.GetTypes()) + .Where(x => x.IsSubclassOf(baseType) + && x.IsClass)) + { + types.Add(type); + } + types.Sort(new TypeComparer()); + + return types; + } + } +} diff --git a/FieldSearch/Assets/FieldSearch/Attributes/TypeRefDropdownAttribute.cs.meta b/FieldSearch/Assets/FieldSearch/Attributes/TypeRefDropdownAttribute.cs.meta new file mode 100644 index 0000000..cfd581d --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Attributes/TypeRefDropdownAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0fee3066f382e624987ad2fa844c8e1e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/CodeGeneration.meta b/FieldSearch/Assets/FieldSearch/CodeGeneration.meta new file mode 100644 index 0000000..d5d83e0 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/CodeGeneration.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 58fe3382b57df0144a464342436ae017 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/CodeGeneration/Base.meta b/FieldSearch/Assets/FieldSearch/CodeGeneration/Base.meta new file mode 100644 index 0000000..da5b14f --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/CodeGeneration/Base.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 442157033b3a65342910a05e4afb93f3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/CodeGeneration/Base/BaseCodeGenerator.cs b/FieldSearch/Assets/FieldSearch/CodeGeneration/Base/BaseCodeGenerator.cs new file mode 100644 index 0000000..4a6bc1e --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/CodeGeneration/Base/BaseCodeGenerator.cs @@ -0,0 +1,28 @@ +using System; +using UnityEngine; + +namespace CodeGeneration.Base +{ + /// + /// Base class for custom CodeGenerator + /// + /// + public abstract class BaseCodeGenerator where T : BaseScriptTemplate + { + protected BaseCodeGenerator(BaseCodeGeneratorSettings settings) + { + _settings = settings; + } + + [SerializeField] + protected BaseCodeGeneratorSettings _settings; + + /// + /// Create scripts using + /// + /// + /// + /// + public abstract void CreateScripts(T scriptTemplate, bool refresh = true, params Type[] inputTypes); + } +} diff --git a/FieldSearch/Assets/FieldSearch/CodeGeneration/Base/BaseCodeGenerator.cs.meta b/FieldSearch/Assets/FieldSearch/CodeGeneration/Base/BaseCodeGenerator.cs.meta new file mode 100644 index 0000000..172f494 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/CodeGeneration/Base/BaseCodeGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 24eaf8cdb2cc4c14c8fcc38e962c7e61 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/CodeGeneration/Base/BaseCodeGeneratorSettings.cs b/FieldSearch/Assets/FieldSearch/CodeGeneration/Base/BaseCodeGeneratorSettings.cs new file mode 100644 index 0000000..d635b8a --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/CodeGeneration/Base/BaseCodeGeneratorSettings.cs @@ -0,0 +1,58 @@ +using System; +using System.IO; +using UnityEngine; + +namespace CodeGeneration.Base +{ + /// + /// Base settings object for + /// + public abstract class BaseCodeGeneratorSettings : ScriptableObject where T : BaseScriptTemplate + { + /// + /// Default script template, used in + /// + public T DefaultScriptTemplate => _defaultScriptTemplate; + + /// + /// Folder for generated files + /// + public string DefaultFileFolder => + Path.Combine(Environment.CurrentDirectory, _defaultFileFolder); + + /// + /// CodeGenerator type name + /// + protected abstract string CodeGeneratorTypeName { get; } + + /// + /// Get CodeGeneratorType using + /// + protected Type CodeGeneratorType => Type.GetType(CodeGeneratorTypeName); + + [Tooltip("Default relative folder path")] + [SerializeField] + protected string _defaultFileFolder; + [SerializeField] + protected T _defaultScriptTemplate; + + /// + /// Full folder path with + /// + /// + /// + public string FullFileFolder(string relativePath) => + Path.Combine(Environment.CurrentDirectory, relativePath); + + /// + /// Create new instance + /// using + /// + /// + public BaseCodeGenerator CreateGeneratorInstance() + { + return (BaseCodeGenerator)Activator + .CreateInstance(CodeGeneratorType, args: this); + } + } +} diff --git a/FieldSearch/Assets/FieldSearch/CodeGeneration/Base/BaseCodeGeneratorSettings.cs.meta b/FieldSearch/Assets/FieldSearch/CodeGeneration/Base/BaseCodeGeneratorSettings.cs.meta new file mode 100644 index 0000000..80fbefa --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/CodeGeneration/Base/BaseCodeGeneratorSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2180cefbe0decc840b745c64ad940079 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/CodeGeneration/Base/BaseScriptTemplate.cs b/FieldSearch/Assets/FieldSearch/CodeGeneration/Base/BaseScriptTemplate.cs new file mode 100644 index 0000000..cc2a254 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/CodeGeneration/Base/BaseScriptTemplate.cs @@ -0,0 +1,33 @@ +using CodeGeneration.Data; +using System; +using UnityEngine; + +namespace CodeGeneration.Base +{ + /// + /// Base script template object + /// + public abstract class BaseScriptTemplate : ScriptableObject + { + /// + /// File name format string + /// + [SerializeField] + protected string _scriptNameFormatString; + + /// + /// Script format string + /// + [TextArea(10, 70)] + [SerializeField] + protected string _scriptFormatString; + + /// + /// Create script with args using + /// + /// + /// + /// + public abstract GeneratedScript CreateScript(Type type, params object[] args); + } +} diff --git a/FieldSearch/Assets/FieldSearch/CodeGeneration/Base/BaseScriptTemplate.cs.meta b/FieldSearch/Assets/FieldSearch/CodeGeneration/Base/BaseScriptTemplate.cs.meta new file mode 100644 index 0000000..ad9fbf0 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/CodeGeneration/Base/BaseScriptTemplate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0137375e51f9ac749bf32cb9a26c5d7b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/CodeGeneration/CodeGeneration.asmdef b/FieldSearch/Assets/FieldSearch/CodeGeneration/CodeGeneration.asmdef new file mode 100644 index 0000000..ccc617c --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/CodeGeneration/CodeGeneration.asmdef @@ -0,0 +1,16 @@ +{ + "name": "CodeGenerator", + "references": [ + "FieldSearch.Attributes" + ], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/FieldSearch/Assets/FieldSearch/CodeGeneration/CodeGeneration.asmdef.meta b/FieldSearch/Assets/FieldSearch/CodeGeneration/CodeGeneration.asmdef.meta new file mode 100644 index 0000000..b5da954 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/CodeGeneration/CodeGeneration.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a547b51c9dad9054b97bdcd5f5eaea9d +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/CodeGeneration/CodeGenerationUtils.cs b/FieldSearch/Assets/FieldSearch/CodeGeneration/CodeGenerationUtils.cs new file mode 100644 index 0000000..7f0fbed --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/CodeGeneration/CodeGenerationUtils.cs @@ -0,0 +1,156 @@ +using CodeGeneration.Data; +using System; +using System.IO; +using System.Linq; +using System.Reflection; +using UnityEngine; + +namespace CodeGeneration +{ + /// + /// Utils for CodeGeneration + /// + public class CodeGenerationUtils + { + /// + /// Get all types. + /// Excluding default or sample types. + /// + /// + public static Type[] GetAllAvailableEditorTypes() + { + var types = GetAllInheritedTypes(typeof(UnityEditor.Editor), + ValidateNamespaceFunc: (name) => + { + if (name == null) + { + return false; + } + + // Dev debug lines + if (new DirectoryInfo(Environment.CurrentDirectory).Name == nameof(FieldSearch) + && name.StartsWith("FieldSearch.Samples")) + { + return true; + } + + // Default exclude namespaces + if (name.Contains(nameof(UnityEditor)) + || name.Contains(nameof(UnityEngine)) + || name.Contains(nameof(FieldSearch)) + || name.Contains("TMP")) + { + return false; + } + + return true; + }); + return types; + } + + /// + /// Get all inherited types for + /// + /// + /// + /// + /// + public static Type[] GetAllInheritedTypes(Type baseType, Assembly[] assemblies = default, + Func ValidateNamespaceFunc = default) + { + if(assemblies == default) + { + assemblies = AppDomain.CurrentDomain.GetAssemblies(); + } + + if(ValidateNamespaceFunc == default) + { + ValidateNamespaceFunc = (name) => true; + } + + var types = + assemblies + .SelectMany(x => x + .GetTypes() + .Where(type => + type.IsPublic + && type.IsClass + && !type.IsAbstract + && type.IsSubclassOf(baseType) + && ValidateNamespaceFunc(type.Namespace))); + return types.ToArray(); + } + + /// + /// Get first FieldInfo for by + /// + /// + /// + /// + public static FieldInfo GetAttributeFieldByName(Attribute attribute, string fieldName) + { + var field = attribute.GetType() + .GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + ?.FirstOrDefault(x => x.Name == fieldName); + return field; + } + + /// + /// Get first FieldInfo for by type of + /// + /// + /// + /// + public static FieldInfo GetFirstAttributeFieldByType(Attribute attribute) where T : Type + { + var field = attribute.GetType() + .GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) + ?.FirstOrDefault(x => x.GetValue(attribute) is T); + return field; + } + + /// + /// Get first class attribute + /// + /// + /// + /// + public static T GetFirstClassAttribute(Type type) where T : Attribute + { + var attribute = type.GetCustomAttributes(typeof(T), true) + ?.FirstOrDefault() as T; + return attribute; + } + + /// + /// Save to folder with + /// + /// + /// + /// + public static bool SaveToFile(string folderPath, GeneratedScript generatedScript) + { + try + { + if(generatedScript?.fileName == null) + { + return false; + } + + if (!Directory.Exists(folderPath)) + { + Directory.CreateDirectory(folderPath); + } + + var path = Path.Combine(folderPath, generatedScript.fileName); + File.WriteAllText(path, generatedScript.scriptStr); + return true; + } + catch (Exception e) + { + Debug.LogError(e); + return false; + } + } + } +} diff --git a/FieldSearch/Assets/FieldSearch/CodeGeneration/CodeGenerationUtils.cs.meta b/FieldSearch/Assets/FieldSearch/CodeGeneration/CodeGenerationUtils.cs.meta new file mode 100644 index 0000000..812cd51 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/CodeGeneration/CodeGenerationUtils.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aeefdaeaa85e98f4a8f25fec9afa5342 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/CodeGeneration/GeneratedScript.cs b/FieldSearch/Assets/FieldSearch/CodeGeneration/GeneratedScript.cs new file mode 100644 index 0000000..0757772 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/CodeGeneration/GeneratedScript.cs @@ -0,0 +1,17 @@ +namespace CodeGeneration.Data +{ + /// + /// Data class for Generated Script + /// + public class GeneratedScript + { + public GeneratedScript(string fileName, string scriptStr) + { + this.fileName = fileName; + this.scriptStr = scriptStr; + } + + public string fileName; + public string scriptStr; + } +} diff --git a/FieldSearch/Assets/FieldSearch/CodeGeneration/GeneratedScript.cs.meta b/FieldSearch/Assets/FieldSearch/CodeGeneration/GeneratedScript.cs.meta new file mode 100644 index 0000000..0a91fe2 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/CodeGeneration/GeneratedScript.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c0006f583f57d5b4480ac99676acb32c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core.meta b/FieldSearch/Assets/FieldSearch/Core.meta new file mode 100644 index 0000000..351e806 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3c78cfd4cb95460489a1436eb4691e63 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/BaseSearch.cs b/FieldSearch/Assets/FieldSearch/Core/BaseSearch.cs new file mode 100644 index 0000000..31ebc91 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/BaseSearch.cs @@ -0,0 +1,54 @@ +using FieldSearch.Core.Data.Criteria.Base; +using System.Collections.Generic; +using System.Linq; + +namespace FieldSearch.Core.Base +{ + /// + /// Base search class with filter implementation + /// + public abstract class BaseSearch + { + [System.Flags] + public enum SearchFilter + { + None = 0, + StartWith = 1, + IgnoreCase = 2, + ByFieldName = 4, + ByObjName = 8 + } + + public BaseSearch(SearchFilter currentFlags) + { + baseSearchCriteria = new List(); + CreateCriteria(currentFlags); + } + + private List baseSearchCriteria; + + public void UpdateCriteria(SearchFilter currentFlags) + { + ClearCriteria(); + CreateCriteria(currentFlags); + } + + protected abstract bool CreateCriteria(SearchFilter currentFlags); + + public bool GetResult(SearchFilter currentFlags, bool any = false, params object[] input) + { + return any ? baseSearchCriteria.Any(x => x.HasResult(currentFlags, input)) + : baseSearchCriteria.All(x => x.HasResult(currentFlags, input)); + } + + protected void AddCriterion(BaseSearchCriterion baseSearchCriterion) + { + baseSearchCriteria.Add(baseSearchCriterion); + } + + public void ClearCriteria() + { + baseSearchCriteria.Clear(); + } + } +} diff --git a/FieldSearch/Assets/FieldSearch/Core/BaseSearch.cs.meta b/FieldSearch/Assets/FieldSearch/Core/BaseSearch.cs.meta new file mode 100644 index 0000000..f116c48 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/BaseSearch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1aaa67165ec09fa408989e9e81dabe6c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/Data.meta b/FieldSearch/Assets/FieldSearch/Core/Data.meta new file mode 100644 index 0000000..f21d2d0 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Data.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 72f1590abc64bc54eba2d56f6cdb0d3a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/Data/Criteria.meta b/FieldSearch/Assets/FieldSearch/Core/Data/Criteria.meta new file mode 100644 index 0000000..85c415c --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Data/Criteria.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9e213de3ac6c10249a011a3f332f3e87 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/Data/Criteria/BaseSearchCriterion.cs b/FieldSearch/Assets/FieldSearch/Core/Data/Criteria/BaseSearchCriterion.cs new file mode 100644 index 0000000..7347201 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Data/Criteria/BaseSearchCriterion.cs @@ -0,0 +1,72 @@ +using FieldSearch.Helpers.StringFormatter; +using static FieldSearch.Core.Base.BaseSearch; + +namespace FieldSearch.Core.Data.Criteria.Base +{ + /// + /// Base search criterion for + /// + public abstract class BaseSearchCriterion + { + public BaseSearchCriterion() + { + Init(); + } + + /// + /// Criterion flag + /// + protected SearchFilter criterionFilter; + + /// + /// Check results + /// + /// + /// + /// + /// + public abstract bool HasResult(SearchFilter currentFlags, params T[] input); + + /// + /// Get Criterion flag + /// + /// + protected abstract SearchFilter GetCriterionSearchFilter(); + + /// + /// Compare result with search text + /// + /// + /// + /// + /// + protected bool Compare(string name, string rawSearchText, SearchFilter currentSearchFilter) + { + var finalString = SearchStringFormatter.GetFinalString(name, currentSearchFilter); + var finalSearchText = SearchStringFormatter.GetFinalString(rawSearchText, currentSearchFilter); + + var startWith = criterionFilter.HasFlag(SearchFilter.StartWith); + return startWith ? + finalString.StartsWith(finalSearchText) + : finalString.Contains(finalSearchText); + } + + /// + /// If criterion is active for current search flag + /// + /// + /// + protected virtual bool IsActive(SearchFilter currentFlags) + { + return currentFlags.HasFlag(criterionFilter); + } + + /// + /// Init method with base logic + /// + protected virtual void Init() + { + this.criterionFilter = GetCriterionSearchFilter(); + } + } +} diff --git a/FieldSearch/Assets/FieldSearch/Core/Data/Criteria/BaseSearchCriterion.cs.meta b/FieldSearch/Assets/FieldSearch/Core/Data/Criteria/BaseSearchCriterion.cs.meta new file mode 100644 index 0000000..cabd584 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Data/Criteria/BaseSearchCriterion.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: adf5a4e997f920a4e9aa7dabdac0c57e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/Data/Criteria/ByFieldNameSearchCriterion.cs b/FieldSearch/Assets/FieldSearch/Core/Data/Criteria/ByFieldNameSearchCriterion.cs new file mode 100644 index 0000000..0c8ed76 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Data/Criteria/ByFieldNameSearchCriterion.cs @@ -0,0 +1,42 @@ +using FieldSearch.Core.Data.Criteria.Base; +using UnityEditor; +using static FieldSearch.Core.Base.BaseSearch; + +namespace FieldSearch.Core.Data.Criteria +{ + /// + /// ByFieldName search criterion + /// for + /// + public class ByFieldNameSearchCriterion : BaseSearchCriterion + { + public const SearchFilter CRITERION_SEARCH_FILTER = SearchFilter.ByFieldName; + + public ByFieldNameSearchCriterion() : base() { } + + protected override SearchFilter GetCriterionSearchFilter() => CRITERION_SEARCH_FILTER; + + public override bool HasResult(SearchFilter currentFlags, params T[] input) + { + if (!IsActive(currentFlags)) + { + return false; + } + + var rawSearchText = input[0] as string; + if(rawSearchText is null) + { + return false; + } + + var serializedProperty = input[1] as SerializedProperty; + + if (serializedProperty == null) + { + return false; + } + + return Compare(serializedProperty.displayName, rawSearchText, currentFlags); + } + } +} diff --git a/FieldSearch/Assets/FieldSearch/Core/Data/Criteria/ByFieldNameSearchCriterion.cs.meta b/FieldSearch/Assets/FieldSearch/Core/Data/Criteria/ByFieldNameSearchCriterion.cs.meta new file mode 100644 index 0000000..fb555f2 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Data/Criteria/ByFieldNameSearchCriterion.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7fe17efc89925144081efbd3877ee320 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/Data/Criteria/ByObjNameSearchCriterion.cs b/FieldSearch/Assets/FieldSearch/Core/Data/Criteria/ByObjNameSearchCriterion.cs new file mode 100644 index 0000000..6bff8e0 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Data/Criteria/ByObjNameSearchCriterion.cs @@ -0,0 +1,62 @@ +using FieldSearch.Core.Data.Criteria.Base; +using UnityEditor; +using static FieldSearch.Core.Base.BaseSearch; + +namespace FieldSearch.Core.Data.Criteria +{ + /// + /// ByObjName search criterion + /// for + /// + public class ByObjNameSearchCriterion : BaseSearchCriterion + { + public const SearchFilter CRITERION_SEARCH_FILTER = SearchFilter.ByObjName; + + public ByObjNameSearchCriterion() : base() { } + + protected override SearchFilter GetCriterionSearchFilter() => CRITERION_SEARCH_FILTER; + + public override bool HasResult(SearchFilter currentFlags, params T[] input) + { + if (!IsActive(currentFlags)) + { + return false; + } + + if (input.Length < 2) + { + return false; + } + + var rawSearchText = input[0] as string; + if (rawSearchText is null) + { + return false; + } + + try + { + if (input[1] is SerializedProperty == false) + { + return false; + } + + var serializedProperty = input[1] as SerializedProperty; + + if(serializedProperty == null + || serializedProperty.propertyType != SerializedPropertyType.ObjectReference) + { + return false; + } + + return Compare(serializedProperty.objectReferenceValue.name, rawSearchText, currentFlags); + } + catch + { + // TODO: check SerializedProperty pptr error && update logic + } + + return false; + } + } +} diff --git a/FieldSearch/Assets/FieldSearch/Core/Data/Criteria/ByObjNameSearchCriterion.cs.meta b/FieldSearch/Assets/FieldSearch/Core/Data/Criteria/ByObjNameSearchCriterion.cs.meta new file mode 100644 index 0000000..4bd6e39 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Data/Criteria/ByObjNameSearchCriterion.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 77f0b3b4d459a4b488633f24d4ff6350 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/FieldSearch.Core.asmdef b/FieldSearch/Assets/FieldSearch/Core/FieldSearch.Core.asmdef new file mode 100644 index 0000000..fa57ace --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/FieldSearch.Core.asmdef @@ -0,0 +1,16 @@ +{ + "name": "FieldSearch.Core", + "references": [ + "FieldSearch.Attributes" + ], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/FieldSearch/Assets/FieldSearch/Core/FieldSearch.Core.asmdef.meta b/FieldSearch/Assets/FieldSearch/Core/FieldSearch.Core.asmdef.meta new file mode 100644 index 0000000..2a6730f --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/FieldSearch.Core.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 95622f21ee9c7944dba4c2dd0aa941ae +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/GlobalEditor.meta b/FieldSearch/Assets/FieldSearch/Core/GlobalEditor.meta new file mode 100644 index 0000000..b8b148e --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/GlobalEditor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 59ef36d1f2d22a7459579d9425fb7efb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/GlobalEditor/Editor.meta b/FieldSearch/Assets/FieldSearch/Core/GlobalEditor/Editor.meta new file mode 100644 index 0000000..bb068a3 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/GlobalEditor/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2680ab051550ab645ae963a2fae37cb8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/GlobalEditor/Editor/BaseFieldSearchGlobalEditor.cs b/FieldSearch/Assets/FieldSearch/Core/GlobalEditor/Editor/BaseFieldSearchGlobalEditor.cs new file mode 100644 index 0000000..d4de457 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/GlobalEditor/Editor/BaseFieldSearchGlobalEditor.cs @@ -0,0 +1,12 @@ +using UnityEditor; + +namespace FieldSearch.Core.GlobalEditor +{ + /// + /// Base FieldSearchGlobalEditor class + /// + public abstract class BaseFieldSearchGlobalEditor : Editor + { + + } +} diff --git a/FieldSearch/Assets/FieldSearch/Core/GlobalEditor/Editor/BaseFieldSearchGlobalEditor.cs.meta b/FieldSearch/Assets/FieldSearch/Core/GlobalEditor/Editor/BaseFieldSearchGlobalEditor.cs.meta new file mode 100644 index 0000000..6d86e91 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/GlobalEditor/Editor/BaseFieldSearchGlobalEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e1b2042a83304094d9f2a386bb4576c2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/GlobalEditor/Editor/DefaultFieldSearchGlobalEditor.cs b/FieldSearch/Assets/FieldSearch/Core/GlobalEditor/Editor/DefaultFieldSearchGlobalEditor.cs new file mode 100644 index 0000000..8548080 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/GlobalEditor/Editor/DefaultFieldSearchGlobalEditor.cs @@ -0,0 +1,82 @@ +using FieldSearch.Settings.Base; +using System; +using System.Reflection; +using UnityEditor; +using UnityEngine; + +namespace FieldSearch.Core.GlobalEditor +{ + /// + /// Default implementation + /// + [CustomEditor(typeof(MonoBehaviour), true, isFallback = true)] + public class DefaultFieldSearchGlobalEditor : BaseFieldSearchGlobalEditor + { + protected virtual BaseFieldSearchSettings Settings => BaseFieldSearchSettings.Instance; + protected virtual Type SearchLayerInspectorType => Settings.SearchLayerInspectorType; + protected virtual bool IsActive => Settings?.ApplyToAll ?? false; + + protected Editor searchLayerInspector; + + private void OnEnable() + { + if (IsActive) + { + searchLayerInspector = CreateEditor(target, SearchLayerInspectorType); + } + } + + private void OnDisable() + { + if (IsActive) + { + DestroyImmediate(searchLayerInspector); + } + } + + public override void OnInspectorGUI() + { + if (IsActive) + { + searchLayerInspector?.OnInspectorGUI(); + } + else + { + base.OnInspectorGUI(); + } + } + } + + /// + /// Abstract to save default Inspector + /// + /// Default inspector + public abstract class DefaultFieldSearchGlobalEditor : BaseFieldSearchGlobalEditor where T : Editor + { + protected Editor searchableGlobalEditor; + protected Editor defaultEditor; + + private void OnEnable() + { + //Try invoke baase OnEnable method + typeof(T) + .GetMethod(nameof(OnEnable), + BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance) + ?.Invoke(this, null); + + InitSearchableInspector(); + } + + protected virtual void InitSearchableInspector() + { + searchableGlobalEditor = CreateEditor(target, typeof(DefaultFieldSearchGlobalEditor)); + defaultEditor = CreateEditor(target, typeof(T)); + } + + public override void OnInspectorGUI() + { + searchableGlobalEditor?.OnInspectorGUI(); + defaultEditor?.OnInspectorGUI(); + } + } +} diff --git a/FieldSearch/Assets/FieldSearch/Core/GlobalEditor/Editor/DefaultFieldSearchGlobalEditor.cs.meta b/FieldSearch/Assets/FieldSearch/Core/GlobalEditor/Editor/DefaultFieldSearchGlobalEditor.cs.meta new file mode 100644 index 0000000..6c0ffa0 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/GlobalEditor/Editor/DefaultFieldSearchGlobalEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0e6cd06e24f19e4488b388c9ced5a85f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/GlobalEditor/FieldSearch.Core.GlobalEditor.asmdef b/FieldSearch/Assets/FieldSearch/Core/GlobalEditor/FieldSearch.Core.GlobalEditor.asmdef new file mode 100644 index 0000000..1d91b39 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/GlobalEditor/FieldSearch.Core.GlobalEditor.asmdef @@ -0,0 +1,16 @@ +{ + "name": "FieldSearch.Core.GlobalEditor", + "references": [ + "FieldSearch.Core" + ], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/FieldSearch/Assets/FieldSearch/Core/GlobalEditor/FieldSearch.Core.GlobalEditor.asmdef.meta b/FieldSearch/Assets/FieldSearch/Core/GlobalEditor/FieldSearch.Core.GlobalEditor.asmdef.meta new file mode 100644 index 0000000..16bd522 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/GlobalEditor/FieldSearch.Core.GlobalEditor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 367cfe07efa90014a9815765b08a7da9 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/Helpers.meta b/FieldSearch/Assets/FieldSearch/Core/Helpers.meta new file mode 100644 index 0000000..9a7d9e7 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Helpers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c148cba6d19b18c4aa2241d094f7244f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/Helpers/Cache.meta b/FieldSearch/Assets/FieldSearch/Core/Helpers/Cache.meta new file mode 100644 index 0000000..b070de6 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Helpers/Cache.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 953da1ed0347977489c28ee94a07ea7b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/Helpers/Cache/Data.meta b/FieldSearch/Assets/FieldSearch/Core/Helpers/Cache/Data.meta new file mode 100644 index 0000000..5f2c175 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Helpers/Cache/Data.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3609556c73a95d14ba9a2c8cc938e316 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/Helpers/Cache/Data/SearchCacheJson.cs b/FieldSearch/Assets/FieldSearch/Core/Helpers/Cache/Data/SearchCacheJson.cs new file mode 100644 index 0000000..de472c3 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Helpers/Cache/Data/SearchCacheJson.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Concurrent; +using System.Collections.Generic; +using System.Linq; + +namespace FieldSearch.Helpers.Cache.Data +{ + /// + /// Container for + /// + [Serializable] + public struct SearchCacheJson + { + public SearchCacheJson(ConcurrentDictionary dict) + { + objects = dict.Select(x => x.Value).ToList(); + } + + public SearchCacheJson(Dictionary dict) + { + objects = dict.Select(x => x.Value).ToList(); + } + + public List objects; + + public Dictionary ToDictionary() + { + return objects.ToDictionary(x => x.id); + } + + public ConcurrentDictionary ToConcurrentDictionary() + { + return new ConcurrentDictionary(ToDictionary()); + } + } +} \ No newline at end of file diff --git a/FieldSearch/Assets/FieldSearch/Core/Helpers/Cache/Data/SearchCacheJson.cs.meta b/FieldSearch/Assets/FieldSearch/Core/Helpers/Cache/Data/SearchCacheJson.cs.meta new file mode 100644 index 0000000..92c6947 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Helpers/Cache/Data/SearchCacheJson.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8e02ff6fbb1a87644b1a326166966b5f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/Helpers/Cache/Data/SearchCacheObj.cs b/FieldSearch/Assets/FieldSearch/Core/Helpers/Cache/Data/SearchCacheObj.cs new file mode 100644 index 0000000..2bc8e8d --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Helpers/Cache/Data/SearchCacheObj.cs @@ -0,0 +1,22 @@ +using System; + +namespace FieldSearch.Helpers.Cache.Data +{ + /// + /// Stored SearchCache struct + /// + [Serializable] + public struct SearchCacheObj + { + public SearchCacheObj(int id, string searchText, int flags) + { + this.id = id; + this.searchText = searchText; + this.flags = flags; + } + + public int id; + public string searchText; + public int flags; + } +} diff --git a/FieldSearch/Assets/FieldSearch/Core/Helpers/Cache/Data/SearchCacheObj.cs.meta b/FieldSearch/Assets/FieldSearch/Core/Helpers/Cache/Data/SearchCacheObj.cs.meta new file mode 100644 index 0000000..4179092 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Helpers/Cache/Data/SearchCacheObj.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d5a6ed6de1c2df244a89c1f535d22599 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/Helpers/Cache/SearchInspectorCache.cs b/FieldSearch/Assets/FieldSearch/Core/Helpers/Cache/SearchInspectorCache.cs new file mode 100644 index 0000000..aedee1e --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Helpers/Cache/SearchInspectorCache.cs @@ -0,0 +1,154 @@ +using FieldSearch.Helpers.Cache.Data; +using FieldSearch.Settings.Base; +using System.Collections.Concurrent; +using System.IO; +using System.Linq; +using System.Runtime.InteropServices; +using UnityEditor; +using UnityEngine; + +namespace FieldSearch.Helpers.Cache +{ + /// + /// SearchCache inspector controller. + /// With InitializeOnLoad logic + /// + [InitializeOnLoad] + public class SearchInspectorCache + { + static SearchInspectorCache() + { + ReadCacheFromDisk(); + AssemblyReloadEvents.beforeAssemblyReload += AssemblyReloadEvents_beforeAssemblyReload; + EditorApplication.quitting += EditorApplication_quitting; + } + + private static void EditorApplication_quitting() + { + EditorApplication.quitting -= EditorApplication_quitting; + SaveCacheToDisk(); + } + + private static void AssemblyReloadEvents_beforeAssemblyReload() + { + AssemblyReloadEvents.beforeAssemblyReload -= AssemblyReloadEvents_beforeAssemblyReload; + SaveCacheToDisk(); + } + + public const string FILE_NAME = "SearchInspectorCache.txt"; + + public static string FilePath => $"{Application.temporaryCachePath}/{FILE_NAME}"; + + public static float GetCurrentSize() => inspectorsDict.Sum(x => Marshal.SizeOf(x.Value)); + + protected static ConcurrentDictionary inspectorsDict + = new ConcurrentDictionary(); + + protected static BaseFieldSearchSettings Settings => BaseFieldSearchSettings.Instance; + + public static bool TryAddValue(SearchCacheObj val) + { + if (!HasFreeMemorySlots()) + { + TryRemoveFirstValue(); + } + + var id = val.id; + + if (inspectorsDict.ContainsKey(id)) + { + inspectorsDict[id] = val; + return true; + } + else + { + return inspectorsDict.TryAdd(id, val); + } + } + + public static bool TryRemoveValue(int id) + { + if (inspectorsDict.ContainsKey(id)) + { + SearchCacheObj obj; + return inspectorsDict.TryRemove(id, out obj); + } + return false; + } + + public static bool TryGetValue(int id, out SearchCacheObj obj) + { + return inspectorsDict.TryGetValue(id, out obj); + } + + private static bool TryRemoveFirstValue() + { + return TryRemoveValue(inspectorsDict.Keys.First()); + } + + private static bool HasFreeMemorySlots() + { + if(Settings == null) + { + return true; + } + + var currentSizeInMb = ConvertByteToMb(GetCurrentSize()); + return currentSizeInMb < Settings.MemoryLimitInMb; + } + + private static double ConvertByteToMb(float byteCount) + { + return (byteCount / (double)Mathf.Pow(1024, 2)); + } + + private static void SaveCacheToDisk() + { + using (StreamWriter sw = File.CreateText(FilePath)) + { + var obj = new SearchCacheJson(inspectorsDict); + var json = JsonUtility.ToJson(obj); + sw.Write(json); + } + } + + private static void ReadCacheFromDisk() + { + if (!File.Exists(FilePath)) + { + return; + } + + using (StreamReader sw = File.OpenText(FilePath)) + { + var str = sw.ReadToEnd(); + if(string.IsNullOrEmpty(str) + || string.IsNullOrWhiteSpace(str)) + { + return; + } + + var obj = JsonUtility.FromJson(str); + inspectorsDict = obj.ToConcurrentDictionary(); + } + } + + public static void ClearCache(bool fromDisk = true, bool fromMemory = true) + { + if (fromDisk) + { + using (StreamWriter sw = File.CreateText(FilePath)) + { + var obj = new SearchCacheJson(inspectorsDict); + var json = JsonUtility.ToJson(obj); + sw.Write(""); + } + } + + if (fromMemory) + { + inspectorsDict.Clear(); + } + } + } +} diff --git a/FieldSearch/Assets/FieldSearch/Core/Helpers/Cache/SearchInspectorCache.cs.meta b/FieldSearch/Assets/FieldSearch/Core/Helpers/Cache/SearchInspectorCache.cs.meta new file mode 100644 index 0000000..7ff88c1 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Helpers/Cache/SearchInspectorCache.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e6f3993b2047d75428927b96a117475d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/Helpers/StringFormatter.meta b/FieldSearch/Assets/FieldSearch/Core/Helpers/StringFormatter.meta new file mode 100644 index 0000000..f643f6c --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Helpers/StringFormatter.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 62d6dcaee4b4a2e42bc12b8f4ecfae61 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/Helpers/StringFormatter/SearchStringFormatter.cs b/FieldSearch/Assets/FieldSearch/Core/Helpers/StringFormatter/SearchStringFormatter.cs new file mode 100644 index 0000000..75611d4 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Helpers/StringFormatter/SearchStringFormatter.cs @@ -0,0 +1,27 @@ +using static FieldSearch.Core.Base.BaseSearch; + +namespace FieldSearch.Helpers.StringFormatter +{ + /// + /// Helper formatter class for strings. + /// Used in + /// + public class SearchStringFormatter + { + public static string GetFinalString(string str, bool ignoreCase = false) + { + return ignoreCase ? str.ToLower() : str; + } + + public static string GetFinalString(string str, SearchFilter searchFilter = default) + { + var ignoreCase = false; + if (searchFilter != default) + { + ignoreCase = searchFilter.HasFlag(SearchFilter.IgnoreCase); ; + } + + return ignoreCase ? str.ToLower() : str; + } + } +} diff --git a/FieldSearch/Assets/FieldSearch/Core/Helpers/StringFormatter/SearchStringFormatter.cs.meta b/FieldSearch/Assets/FieldSearch/Core/Helpers/StringFormatter/SearchStringFormatter.cs.meta new file mode 100644 index 0000000..541ab3d --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Helpers/StringFormatter/SearchStringFormatter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4ca60406e350f604eb30b354c59c94a2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/Inspectors.meta b/FieldSearch/Assets/FieldSearch/Core/Inspectors.meta new file mode 100644 index 0000000..aba9e1a --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Inspectors.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 53a418dff2d6e284b9deef9a6ac040b7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/Inspectors/BaseSearchLayerInspector.cs b/FieldSearch/Assets/FieldSearch/Core/Inspectors/BaseSearchLayerInspector.cs new file mode 100644 index 0000000..bf40d3f --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Inspectors/BaseSearchLayerInspector.cs @@ -0,0 +1,10 @@ +namespace FieldSearch.Core.Inspectors.Base +{ + /// + /// Base SearchLayerInspector class + /// + public abstract class BaseSearchLayerInspector : UnityEditor.Editor + { + + } +} diff --git a/FieldSearch/Assets/FieldSearch/Core/Inspectors/BaseSearchLayerInspector.cs.meta b/FieldSearch/Assets/FieldSearch/Core/Inspectors/BaseSearchLayerInspector.cs.meta new file mode 100644 index 0000000..d47d9ca --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Inspectors/BaseSearchLayerInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 410c04ddccd304241b7a808f164d6301 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/Inspectors/Controllers.meta b/FieldSearch/Assets/FieldSearch/Core/Inspectors/Controllers.meta new file mode 100644 index 0000000..642dd0c --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Inspectors/Controllers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 651d2e8fc22499e418a9735da264db05 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/Inspectors/Controllers/SearchInspectorService.cs b/FieldSearch/Assets/FieldSearch/Core/Inspectors/Controllers/SearchInspectorService.cs new file mode 100644 index 0000000..f1803c2 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Inspectors/Controllers/SearchInspectorService.cs @@ -0,0 +1,298 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEditor; +using UnityEngine; +using static FieldSearch.Core.Base.BaseSearch; + +namespace FieldSearch.Core.Inspectors.Controllers +{ + /// + /// Default Search Service for Inspectors. + /// Using + /// + public class SearchInspectorService + { + public SearchInspectorService(SerializedObject serializedObject) + { + searchFilters = + SearchFilter.IgnoreCase | + SearchFilter.ByFieldName | + SearchFilter.ByObjName; + + search = new SearchWithFilters(searchFilters); + this.serializedObject = serializedObject; + } + + public SerializedObject SerializedObject + { + get => serializedObject; + set => serializedObject = value; + } + + /// + /// Search status is inactive + /// + public bool IsNullOrNone => string.IsNullOrEmpty(searchText) || searchFilters.Equals(SearchFilter.None); + + /// + /// Current target object + /// + private object TargetObject => serializedObject?.targetObject; + + private SearchWithFilters search; + private SerializedObject serializedObject; + readonly string searchLabel = "Field Search:"; + + private string searchText; + private SearchFilter searchFilters; + + /// + /// Get current search data + /// with & + /// + /// + public (string searchText, int flags) GetData() + { + return (searchText, (int)searchFilters); + } + + /// + /// Update current search data + /// + /// + /// + public void UpdateData(string searchText, SearchFilter searchFilters) + { + if (!string.IsNullOrEmpty(searchText)) + { + this.searchText = searchText; + } + + this.searchFilters = searchFilters; + search.UpdateCriteria(this.searchFilters); + + serializedObject?.ApplyModifiedProperties(); + } + + /// + /// Try show full inspector search layer + /// + /// + public bool ShowInspectorLayer() + { + if (!ShowSearchTextArea()) + { + return false; + } + + return ShowSearchObjectsLayer(); + } + + /// + /// Try show only search layer + /// + /// + public bool ShowSearchTextArea() + { + try + { + if (SerializedObject == null) + { + return false; + } + + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + + if (!ShowSearchFields()) + { + EndVertical(); + return false; + } + + EndVertical(); + return true; + } + catch (Exception e) + { + Debug.LogError($"Fail with SearchArea: {e}"); + return false; + } + } + + /// + /// Try show only search result layer + /// + /// + public bool ShowSearchObjectsLayer() + { + if (IsNullOrNone) + { + return false; + } + + var rawProperties = GetFieldInfoRecursive(TargetObject.GetType()) + .Where(x => x.GetCustomAttributes(typeof(SerializeField), false) != null) + .Select(x => serializedObject.FindProperty(x.Name)) + .Where(x => x != null); + + var properties = new List(); + foreach (var prop in rawProperties) + { + if (prop.isArray) + { + var childProps = GetSerializedPropertyRecursive(prop, + x => search.GetResult(searchFilters, true, searchText, x)); + + properties.AddRange(childProps); + continue; + } + + if (!prop.isArray && search.GetResult(searchFilters, true, searchText, prop)) + { + properties.Add(prop); + continue; + } + } + + if (properties == null || !properties.Any()) + { + return false; + } + + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + EditorGUILayout.Space(); + + foreach (var prop in properties) + { + EditorGUILayout.PropertyField(prop, true); + } + + EndVertical(); + return true; + } + + /// + /// Get all based on + /// with inherited objs + /// + /// + /// + /// + private List GetSerializedPropertyRecursive(SerializedProperty property, + Func validateFunc) + { + var result = new List(); + + if (validateFunc(property)) + { + result.Add(property); + return result; + } + + for (int i = 0; i < property.arraySize; i++) + { + var prop = property.GetArrayElementAtIndex(i); + + if (prop.isArray) + { + var arrayProps = GetSerializedPropertyRecursive(prop, validateFunc); + if (arrayProps.Count != 0) + { + result.Add(prop); + } + continue; + } + else + { + if (validateFunc(prop)) + { + result.Add(prop); + } + continue; + } + } + + return result; + } + + /// + /// Get all for + /// with inherited objs + /// + /// + /// + /// + private List GetFieldInfoRecursive(Type type) + { + var result = + type + .GetFields( + BindingFlags.NonPublic + | BindingFlags.Public + | BindingFlags.Instance) + + .ToList(); + + if(type.BaseType != null) + { + result.AddRange(GetFieldInfoRecursive(type.BaseType)); + } + + return result; + } + + /// + /// Just show search layer + /// + /// + private bool ShowSearchFields() + { + var searchTextChanged = + ActionWithChangeCheck(() => searchText = EditorGUILayout.TextField(searchLabel, searchText)); + var searchFiltersChanged = + ActionWithChangeCheck(() => searchFilters = (SearchFilter)EditorGUILayout.EnumFlagsField(searchFilters)); + + if (searchFiltersChanged) + { + serializedObject?.ApplyModifiedProperties(); + search.UpdateCriteria(searchFilters); + } + + if (searchTextChanged || string.IsNullOrEmpty(searchText)) + { + return false; + } + + return true; + } + + /// + /// Method to call GUI action that returns state of change + /// + /// + /// + private bool ActionWithChangeCheck(Action action) + { + EditorGUI.BeginChangeCheck(); + action.Invoke(); + if (EditorGUI.EndChangeCheck()) + { + return true; + } + return false; + } + + /// + /// Default call with extra actions + /// + /// + private bool EndVertical() + { + serializedObject?.ApplyModifiedProperties(); + EditorGUILayout.EndVertical(); + return false; + } + } +} diff --git a/FieldSearch/Assets/FieldSearch/Core/Inspectors/Controllers/SearchInspectorService.cs.meta b/FieldSearch/Assets/FieldSearch/Core/Inspectors/Controllers/SearchInspectorService.cs.meta new file mode 100644 index 0000000..1198dce --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Inspectors/Controllers/SearchInspectorService.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5524f0a239ac6a34bb8dedae898064bd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/Inspectors/DefaultSearchLayerInspector.cs b/FieldSearch/Assets/FieldSearch/Core/Inspectors/DefaultSearchLayerInspector.cs new file mode 100644 index 0000000..2b6c2b0 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Inspectors/DefaultSearchLayerInspector.cs @@ -0,0 +1,62 @@ +using FieldSearch.Core.Inspectors.Base; +using FieldSearch.Core.Inspectors.Controllers; +using FieldSearch.Helpers.Cache; +using FieldSearch.Helpers.Cache.Data; +using System; +using UnityEditor; +using UnityEngine; +using static FieldSearch.Core.Base.BaseSearch; +using Object = UnityEngine.Object; + +namespace FieldSearch.Core.Inspectors +{ + /// + /// Default implementation + /// + public class DefaultSearchLayerInspector : BaseSearchLayerInspector + { + /// + /// Func to get Id of current target Object + /// + protected Func Id => (target) => target.GetInstanceID(); + protected SearchInspectorService searchInspectorService; + + protected virtual void OnEnable() + { + var id = Id(target); + searchInspectorService = new SearchInspectorService(serializedObject); + + SearchCacheObj cachedData; + if (SearchInspectorCache.TryGetValue(id, out cachedData)) + { + searchInspectorService.UpdateData(cachedData.searchText, (SearchFilter)cachedData.flags); + } + } + + protected virtual void OnDisable() + { + var id = Id(target); + var data = searchInspectorService.GetData(); + SearchInspectorCache.TryAddValue(new SearchCacheObj(id, data.searchText, data.flags)); + } + + public override void OnInspectorGUI() + { + searchInspectorService.ShowSearchTextArea(); + + if (!searchInspectorService.ShowSearchObjectsLayer() || searchInspectorService.IsNullOrNone) + { + if (!searchInspectorService.IsNullOrNone) + { + EditorGUILayout.HelpBox("No results found!", MessageType.Info); + } + + GUILayout.Space(3); + base.OnInspectorGUI(); + } + + serializedObject.Update(); + serializedObject.ApplyModifiedProperties(); + } + } +} diff --git a/FieldSearch/Assets/FieldSearch/Core/Inspectors/DefaultSearchLayerInspector.cs.meta b/FieldSearch/Assets/FieldSearch/Core/Inspectors/DefaultSearchLayerInspector.cs.meta new file mode 100644 index 0000000..184009b --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Inspectors/DefaultSearchLayerInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f6ae2f51bdc16134491c161c1a341169 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/Inspectors/Editor.meta b/FieldSearch/Assets/FieldSearch/Core/Inspectors/Editor.meta new file mode 100644 index 0000000..74cca5f --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Inspectors/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d8caaa3134cce87428c5a7e297852ae4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/Inspectors/Editor/BaseSearchableEditor.cs b/FieldSearch/Assets/FieldSearch/Core/Inspectors/Editor/BaseSearchableEditor.cs new file mode 100644 index 0000000..725fddd --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Inspectors/Editor/BaseSearchableEditor.cs @@ -0,0 +1,29 @@ +using FieldSearch.Core.Inspectors.Base; + +namespace FieldSearch.Core.Inspectors.Editor.Base +{ + /// + /// Base class for manually created SearchableEditor's + /// + /// + public abstract class BaseSearchableEditor : UnityEditor.Editor + where T : BaseSearchLayerInspector + { + protected UnityEditor.Editor searchLayerInspector; + + protected void OnEnable() + { + searchLayerInspector = CreateEditor(target, typeof(T)); + } + + private void OnDisable() + { + DestroyImmediate(searchLayerInspector); + } + + public override void OnInspectorGUI() + { + searchLayerInspector?.OnInspectorGUI(); + } + } +} diff --git a/FieldSearch/Assets/FieldSearch/Core/Inspectors/Editor/BaseSearchableEditor.cs.meta b/FieldSearch/Assets/FieldSearch/Core/Inspectors/Editor/BaseSearchableEditor.cs.meta new file mode 100644 index 0000000..aac77ab --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Inspectors/Editor/BaseSearchableEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4200a937ca1bfe8408684621252960e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/SearchWithFilters.cs b/FieldSearch/Assets/FieldSearch/Core/SearchWithFilters.cs new file mode 100644 index 0000000..dcaa718 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/SearchWithFilters.cs @@ -0,0 +1,39 @@ +using FieldSearch.Core.Base; +using FieldSearch.Core.Data.Criteria; +using UnityEngine; + +namespace FieldSearch.Core +{ + /// + /// Default search with filters + /// + public class SearchWithFilters : BaseSearch + { + public SearchWithFilters(SearchFilter currentFlags) : base(currentFlags) + { + CreateCriteria(currentFlags); + } + + protected override bool CreateCriteria(SearchFilter currentFlags) + { + try + { + if (currentFlags.HasFlag(ByFieldNameSearchCriterion.CRITERION_SEARCH_FILTER)) + { + AddCriterion(new ByFieldNameSearchCriterion()); + } + + if(currentFlags.HasFlag(ByObjNameSearchCriterion.CRITERION_SEARCH_FILTER)) + { + AddCriterion(new ByObjNameSearchCriterion()); + } + return true; + } + catch (System.Exception e) + { + Debug.LogError($"CreateCriteria fail: {e}"); + return false; + } + } + } +} diff --git a/FieldSearch/Assets/FieldSearch/Core/SearchWithFilters.cs.meta b/FieldSearch/Assets/FieldSearch/Core/SearchWithFilters.cs.meta new file mode 100644 index 0000000..2997803 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/SearchWithFilters.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a4c2aa4e805ae884f818832aa049aa8c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/Settings.meta b/FieldSearch/Assets/FieldSearch/Core/Settings.meta new file mode 100644 index 0000000..6d53fbc --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Settings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: db35fcbdfc035164485e8a10228fb434 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/Settings/BaseFieldSearchSettings.cs b/FieldSearch/Assets/FieldSearch/Core/Settings/BaseFieldSearchSettings.cs new file mode 100644 index 0000000..82f3afa --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Settings/BaseFieldSearchSettings.cs @@ -0,0 +1,135 @@ +using System.IO; +using System.Linq; +using UnityEditor; +using UnityEngine; +using System.Diagnostics; +using System; +using FieldSearch.Core.Inspectors.Base; +using FieldSearch.Attributes; +using Debug = UnityEngine.Debug; + +namespace FieldSearch.Settings.Base +{ + /// + /// Base settings singleton class for + /// + public abstract class BaseFieldSearchSettings : ScriptableObject + { + /// + /// Relative path to custom global gitignore file + /// + protected const string GlobalGitignorePath = "FieldSearch/gitignore.global"; + + public static BaseFieldSearchSettings Instance + { + get + { + if (_instance == null) + { + _instance = GetInstance(); + } + return _instance; + } + set => _instance = value; + } + protected static BaseFieldSearchSettings _instance; + + [Header("Inspector settings")] + [SerializeField] + [Tooltip("Apply SearchableEditor to all MonoBehaviour (who don't use custom inspector)")] + protected bool applyToAll = true; + + [SerializeField, TypeRefDropdown(typeof(BaseSearchLayerInspector))] + protected string searchLayerTypeName; + + [Header("Cache settings")] + [SerializeField] + [Tooltip("Save cache to disk to use previous cache between sessions")] + protected bool saveToDisk = true; + + [SerializeField] + [Range(100, 10000)] + [Tooltip("Memory limit in MB - memory and disk cache limit")] + protected int memoryLimitInMb = 100; + + /// + /// Apply SearchableEditor to all MonoBehaviour flag + /// + public bool ApplyToAll => applyToAll; + + /// + /// Custom SearchableLayerInspector type + /// + public Type SearchLayerInspectorType => Type.GetType(searchLayerTypeName); + + /// + /// Save cache to disk flag + /// + public bool SaveToDisk => saveToDisk; + + /// + /// Disk/Memory cache limit in MB + /// + public int MemoryLimitInMb => memoryLimitInMb; + + private void OnEnable() + { + if (GetInstance() != null) + { + TryUpdateInstance(); + } + } + + /// + /// Delete previous instance when creating a new one + /// + protected virtual void TryUpdateInstance() + { + if (Instance != this) + { + var path = AssetDatabase.GetAssetPath(Instance); + + Debug.LogWarning($"Delete previous setting \n(name: {Instance.name},path: {path})" + + $" && set new instance ({this.name}) to {typeof(BaseFieldSearchSettings)}"); + + AssetDatabase.DeleteAsset(path); + Instance = this; + } + } + + protected static BaseFieldSearchSettings GetInstance() + { + var guid = AssetDatabase.FindAssets($"t:{nameof(BaseFieldSearchSettings)}") + .FirstOrDefault(); + var path = AssetDatabase.GUIDToAssetPath(guid); + + return AssetDatabase.LoadAssetAtPath(path); + } + + protected static string GetDirectoryName() + { + var path = Application.dataPath; + + // Debug line for repo dev + //path = Path.GetDirectoryName(path); + return Path.GetDirectoryName(path); + } + + /// + /// Start hidden cmd process + /// + /// + /// + protected static void StartCmdProcess(string path, string cmdArgs) + { + Process process = new Process(); + ProcessStartInfo startInfo = new ProcessStartInfo(); + startInfo.WorkingDirectory = path; + startInfo.WindowStyle = ProcessWindowStyle.Hidden; + startInfo.FileName = "cmd.exe"; + startInfo.Arguments = $"/C {cmdArgs}"; + process.StartInfo = startInfo; + process.Start(); + } + } +} diff --git a/FieldSearch/Assets/FieldSearch/Core/Settings/BaseFieldSearchSettings.cs.meta b/FieldSearch/Assets/FieldSearch/Core/Settings/BaseFieldSearchSettings.cs.meta new file mode 100644 index 0000000..5f9b9bb --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Settings/BaseFieldSearchSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a84440953b8e08144ae602ad895960cc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/Settings/Editor.meta b/FieldSearch/Assets/FieldSearch/Core/Settings/Editor.meta new file mode 100644 index 0000000..e502f9a --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Settings/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0266198bb35f0c846899b17b744e2b32 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Core/Settings/Editor/DefaultFieldSearchSettingsEditor.cs b/FieldSearch/Assets/FieldSearch/Core/Settings/Editor/DefaultFieldSearchSettingsEditor.cs new file mode 100644 index 0000000..f101757 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Settings/Editor/DefaultFieldSearchSettingsEditor.cs @@ -0,0 +1,32 @@ +using FieldSearch.Helpers.Cache; +using FieldSearch.Settings.Base; +using UnityEditor; +using UnityEngine; + +namespace FieldSearch.Settings.Editor +{ + /// + /// Editor for + /// + [CustomEditor(typeof(BaseFieldSearchSettings), true)] + public class DefaultFieldSearchSettingsEditor : UnityEditor.Editor + { + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + GUILayout.Space(20); + if(GUILayout.Button("Clear cache from disk")) + { + SearchInspectorCache.ClearCache(true, false); + } + if (GUILayout.Button("Clear cache from memory")) + { + SearchInspectorCache.ClearCache(false, true); + } + if (GUILayout.Button("Clear all cache")) + { + SearchInspectorCache.ClearCache(); + } + } + } +} diff --git a/FieldSearch/Assets/FieldSearch/Core/Settings/Editor/DefaultFieldSearchSettingsEditor.cs.meta b/FieldSearch/Assets/FieldSearch/Core/Settings/Editor/DefaultFieldSearchSettingsEditor.cs.meta new file mode 100644 index 0000000..d8a4d0c --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Core/Settings/Editor/DefaultFieldSearchSettingsEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bbf0ef45625266b4082e137c1999e4a8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration.meta b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration.meta new file mode 100644 index 0000000..2ba5848 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0ee15241486670c42a927155cb48fb88 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGenerator.cs b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGenerator.cs new file mode 100644 index 0000000..a09ee8c --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGenerator.cs @@ -0,0 +1,63 @@ +using CodeGeneration; +using CodeGeneration.Base; +using FieldSearch.EditorScriptGeneration.Templates; +using System; +using UnityEditor; + +namespace FieldSearch.EditorScriptGeneration +{ + /// + /// for + /// + public class EditorScriptGenerator : BaseCodeGenerator + { + public EditorScriptGenerator(BaseCodeGeneratorSettings settings) + : base(settings) { } + + public override void CreateScripts(BaseEditorScriptTemplate scriptTemplate = null, bool refresh = true, params Type[] inputTypes) + { + if (scriptTemplate == null) + { + scriptTemplate = _settings.DefaultScriptTemplate; + } + + foreach (var editorType in inputTypes) + { + if (!editorType.IsSubclassOf(typeof(UnityEditor.Editor))) + { + continue; + } + + var script = scriptTemplate.CreateScript(editorType); + + CodeGenerationUtils.SaveToFile(_settings.DefaultFileFolder, script); + } + + if (refresh) + { + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + AssetDatabase.ForceReserializeAssets( + assetPaths: new[] { _settings.DefaultFileFolder }, + options: ForceReserializeAssetsOptions.ReserializeAssets); + } + } + + public bool TryCreateAllEditors() + { + try + { + var inputClasses = CodeGenerationUtils.GetAllAvailableEditorTypes(); + + CreateScripts(refresh: true, inputTypes: inputClasses); + + return true; + } + catch (Exception e) + { + UnityEngine.Debug.LogError(e); + return false; + } + } + } +} diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGenerator.cs.meta b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGenerator.cs.meta new file mode 100644 index 0000000..1ab9b85 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 52c58d38ebcef83498c14e674672fcfd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorSettings.Properties.cs b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorSettings.Properties.cs new file mode 100644 index 0000000..7befd04 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorSettings.Properties.cs @@ -0,0 +1,11 @@ +namespace FieldSearch.EditorScriptGeneration +{ + public partial class EditorScriptGeneratorSettings + { + const string DIRECTORY_PATH = "Assets/FieldSearchConfigs/EditorScriptGenerator"; + const string DEFAULT_OBJECT_NAME = "EditorScriptGenerator Settings"; + + const string DEFAULT_GENERATED_FILE_FOLDER = @"Assets/Generated_FieldSearch/Editor"; + + } +} diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorSettings.Properties.cs.meta b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorSettings.Properties.cs.meta new file mode 100644 index 0000000..00b5a28 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorSettings.Properties.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5236b47d7285e78439bd7e6da4cbb6b3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorSettings.cs b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorSettings.cs new file mode 100644 index 0000000..b76f5fd --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorSettings.cs @@ -0,0 +1,62 @@ +using CodeGeneration.Base; +using FieldSearch.Attributes; +using FieldSearch.EditorScriptGeneration.Templates; +using System.IO; +using UnityEditor; +using UnityEngine; + +namespace FieldSearch.EditorScriptGeneration +{ + /// + /// Settings singleton object for + /// + [CreateAssetMenu(fileName = DEFAULT_OBJECT_NAME, menuName = "ScriptableObjects/FieldSearch/EditorScriptGenerator/Settings")] + public partial class EditorScriptGeneratorSettings : BaseCodeGeneratorSettings + { + public EditorScriptGenerator GeneratorInstance + { + get + { + if(_generatorInstance == null) + { + _generatorInstance = (EditorScriptGenerator)CreateGeneratorInstance(); + } + return _generatorInstance; + } + } + private EditorScriptGenerator _generatorInstance; + + /// + /// CodeGenerator type name + /// + protected override string CodeGeneratorTypeName => _codeGeneratorTypeName; + + [SerializeField] + [TypeRefDropdown(typeof(BaseCodeGenerator))] + protected string _codeGeneratorTypeName; + + /// + /// Create with default fields + /// + /// + public static EditorScriptGeneratorSettings CreateSettingsObject() + { + var settings = CreateInstance(); + + if (!Directory.Exists(DIRECTORY_PATH)) + { + Directory.CreateDirectory(DIRECTORY_PATH); + } + + settings._defaultFileFolder = DEFAULT_GENERATED_FILE_FOLDER; + settings._defaultScriptTemplate = DefaultEditorScriptTemplate.CreateTemplateObject(); + settings._codeGeneratorTypeName = typeof(EditorScriptGenerator).AssemblyQualifiedName; + + string path = $"{DIRECTORY_PATH}/{DEFAULT_OBJECT_NAME}.asset"; + AssetDatabase.CreateAsset(settings, path); + AssetDatabase.SaveAssets(); + + return settings; + } + } +} diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorSettings.cs.meta b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorSettings.cs.meta new file mode 100644 index 0000000..87187ea --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 847eb9eb85f0af74c87aea09be2a271d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorWindow.meta b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorWindow.meta new file mode 100644 index 0000000..7eaabe0 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorWindow.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d38671d7f12afe54e95fbac242503a9d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorWindow/Editor.meta b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorWindow/Editor.meta new file mode 100644 index 0000000..90f9aef --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorWindow/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: be17c2aa238f79f408f7db963dad4301 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorWindow/Editor/EditorScriptGeneratorWindow.cs b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorWindow/Editor/EditorScriptGeneratorWindow.cs new file mode 100644 index 0000000..e88a6df --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorWindow/Editor/EditorScriptGeneratorWindow.cs @@ -0,0 +1,117 @@ +using CodeGeneration; +using System; +using System.Linq; +using UnityEditor; +using UnityEngine; + +namespace FieldSearch.EditorScriptGeneration.Editor +{ + /// + /// Window for + /// + public partial class EditorScriptGeneratorWindow : EditorWindow + { + EditorScriptGenerator editorScriptGenerator; + + ScrollViewData typeDatas; + ScrollViewData selectedTypeDatas; + + GUIStyle labelHeaderStyle; + + public static void Init(EditorScriptGeneratorSettings editorScriptGeneratorSettings) + { + EditorScriptGeneratorWindow window = (EditorScriptGeneratorWindow) + GetWindow(typeof(EditorScriptGeneratorWindow)); + + window.editorScriptGenerator = editorScriptGeneratorSettings.GeneratorInstance; + + var size = new Vector2(WIDTH, HEIGHT); + window.minSize = size; + window.maxSize = size; + + size.x -= RL_OFFSET * 2; + size.x /= 2; + size.y -= TB_OFFSET * 2; + + window.InitScrollView(size); + window.InitStyles(); + window.Show(); + } + + void InitStyles() + { + labelHeaderStyle = new GUIStyle(EditorStyles.boldLabel); + labelHeaderStyle.alignment = TextAnchor.MiddleCenter; + } + + void InitScrollView(Vector2 size) + { + var allEditorClasses = CodeGenerationUtils.GetAllAvailableEditorTypes(); + + typeDatas = new ScrollViewData(size); + typeDatas.AddObjects(allEditorClasses); + + selectedTypeDatas = new ScrollViewData(size); + } + + void OnGUI() + { + if(editorScriptGenerator == null) + { + Close(); + return; + } + + ShowScrollViewLayout(); + ShowButtonsLayout(); + } + + void ShowButtonsLayout() + { + EditorGUILayout.BeginHorizontal(); + if (GUILayout.Button("Try update all Editors", GUILayout.MinHeight(TB_OFFSET))) + { + var allTypes = typeDatas.Objects.ToList(); + allTypes.AddRange(selectedTypeDatas.Objects); + + TryCreateEditors(allTypes.ToArray()); + Close(); + } + if (GUILayout.Button("Try update selected Editors", GUILayout.MinHeight(TB_OFFSET))) + { + TryCreateEditors(selectedTypeDatas.Objects.ToArray()); + Close(); + } + EditorGUILayout.EndHorizontal(); + } + + void TryCreateEditors(params Type[] types) + { + editorScriptGenerator.CreateScripts(inputTypes: types); + } + + void ShowScrollViewLayout() + { + EditorGUILayout.BeginHorizontal(); + GUILayout.Space(RL_OFFSET); + + ShowScrollViewSingleLayout("Editor Types", typeDatas, OnClickAllTypesData); + ShowScrollViewSingleLayout("Selected Types", selectedTypeDatas, OnClickSelectedTypeData); + + GUILayout.Space(RL_OFFSET); + EditorGUILayout.EndHorizontal(); + } + + void OnClickAllTypesData(Type type) + { + typeDatas.RemoveObjects(type); + selectedTypeDatas.AddObjects(type); + } + + void OnClickSelectedTypeData(Type type) + { + selectedTypeDatas.RemoveObjects(type); + typeDatas.AddObjects(type); + } + } +} diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorWindow/Editor/EditorScriptGeneratorWindow.cs.meta b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorWindow/Editor/EditorScriptGeneratorWindow.cs.meta new file mode 100644 index 0000000..6e913be --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorWindow/Editor/EditorScriptGeneratorWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b0bd3cdcdd3815a42ae46d45b2ee6aef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorWindow/EditorScriptGeneratorWindow.Properties.cs b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorWindow/EditorScriptGeneratorWindow.Properties.cs new file mode 100644 index 0000000..2d175b8 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorWindow/EditorScriptGeneratorWindow.Properties.cs @@ -0,0 +1,15 @@ +namespace FieldSearch.EditorScriptGeneration.Editor +{ + public partial class EditorScriptGeneratorWindow + { + const int WIDTH = 800; + const int HEIGHT = 600; + + const int TB_OFFSET = 75; + const int RL_OFFSET = 25; + + const int MIN_LABEL_AREA_HEIGHT = 15; + + const int BUTTON_SCROLLVIEW_RL_OFFSET = 5; + } +} diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorWindow/EditorScriptGeneratorWindow.Properties.cs.meta b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorWindow/EditorScriptGeneratorWindow.Properties.cs.meta new file mode 100644 index 0000000..23962c7 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorWindow/EditorScriptGeneratorWindow.Properties.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4b1ccc7bc8c4c5349af4908f066b688b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorWindow/EditorScriptGeneratorWindow.ScollViewData.cs b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorWindow/EditorScriptGeneratorWindow.ScollViewData.cs new file mode 100644 index 0000000..6ad3a74 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorWindow/EditorScriptGeneratorWindow.ScollViewData.cs @@ -0,0 +1,70 @@ +using System; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + +namespace FieldSearch.EditorScriptGeneration.Editor +{ + public partial class EditorScriptGeneratorWindow + { + /// + /// ScrollViewData class for + /// + /// + private class ScrollViewData + { + public ScrollViewData(Vector2 size) : this(size.x, size.y) { } + + public ScrollViewData(float width, float height) + { + size = new Vector2(width, height); + objects = new List(); + } + + public List Objects => objects; + + public Vector2 size; + public Vector2 scrollPosition; + private List objects; + + public void AddObjects(params T[] objs) + { + objects.AddRange(objs); + } + + public void RemoveObjects(params T[] objs) + { + foreach (var obj in objs) + { + objects.Remove(obj); + } + } + } + + void ShowScrollViewSingleLayout(string label, ScrollViewData scrollViewData, Action onClickData) + { + EditorGUILayout.BeginVertical(); + + EditorGUILayout.LabelField(label, labelHeaderStyle, GUILayout.MinHeight(TB_OFFSET)); + + scrollViewData.scrollPosition = GUILayout.BeginScrollView(scrollViewData.scrollPosition, + false, false, + GUIStyle.none, GUI.skin.verticalScrollbar, + GUILayout.Width(scrollViewData.size.x), GUILayout.Height(scrollViewData.size.y)); + + foreach (var data in scrollViewData.Objects.ToArray()) + { + if (GUILayout.Button(data.Name, + GUILayout.MinHeight(MIN_LABEL_AREA_HEIGHT), + GUILayout.MaxWidth(scrollViewData.size.x - BUTTON_SCROLLVIEW_RL_OFFSET))) + { + onClickData(data); + } + } + + GUILayout.EndScrollView(); + + EditorGUILayout.EndVertical(); + } + } +} diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorWindow/EditorScriptGeneratorWindow.ScollViewData.cs.meta b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorWindow/EditorScriptGeneratorWindow.ScollViewData.cs.meta new file mode 100644 index 0000000..a220bde --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/EditorScriptGeneratorWindow/EditorScriptGeneratorWindow.ScollViewData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c9aa26f0c0d4939418c055caa5ee9fd6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/FieldSearch.EditorScriptGenerator.asmdef b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/FieldSearch.EditorScriptGenerator.asmdef new file mode 100644 index 0000000..24502c0 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/FieldSearch.EditorScriptGenerator.asmdef @@ -0,0 +1,19 @@ +{ + "name": "FieldSearch.EditorScriptGeneration", + "references": [ + "CodeGenerator", + "FieldSearch.Attributes", + "FieldSearch.Core.GlobalEditor", + "FieldSearch.Core" + ], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/FieldSearch.EditorScriptGenerator.asmdef.meta b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/FieldSearch.EditorScriptGenerator.asmdef.meta new file mode 100644 index 0000000..4d31d45 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/FieldSearch.EditorScriptGenerator.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6c7622cb34036d64881c3ed0458c9235 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/GlobalEditor.meta b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/GlobalEditor.meta new file mode 100644 index 0000000..923277f --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/GlobalEditor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8ab39de3813a6bf4fa5348a8ff6a8383 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/GlobalEditor/GeneratedFieldSearchGlobalEditor.cs b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/GlobalEditor/GeneratedFieldSearchGlobalEditor.cs new file mode 100644 index 0000000..30b55bf --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/GlobalEditor/GeneratedFieldSearchGlobalEditor.cs @@ -0,0 +1,33 @@ +using FieldSearch.Core.GlobalEditor; +using System; +using Inspector = UnityEditor.Editor; + +namespace FieldSearch.EditorScriptGeneration.GlobalEditor +{ + /// + /// GeneratedFieldSearch implementation + /// + public class GeneratedFieldSearchGlobalEditor : DefaultFieldSearchGlobalEditor + { + protected override Type SearchLayerInspectorType => typeof(GeneratedSearchLayerInspector); + protected override bool IsActive => true; + + public override void OnInspectorGUI() + { + searchLayerInspector?.OnInspectorGUI(); + } + } + + /// + /// Abstract to save default Inspector + /// + /// Default inspector + public abstract class GeneratedFieldSearchGlobalEditor : DefaultFieldSearchGlobalEditor where T : Inspector + { + protected override void InitSearchableInspector() + { + searchableGlobalEditor = CreateEditor(target, typeof(GeneratedFieldSearchGlobalEditor)); + defaultEditor = CreateEditor(target, typeof(T)); + } + } +} diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/GlobalEditor/GeneratedFieldSearchGlobalEditor.cs.meta b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/GlobalEditor/GeneratedFieldSearchGlobalEditor.cs.meta new file mode 100644 index 0000000..fc13b80 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/GlobalEditor/GeneratedFieldSearchGlobalEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bb07fe3a8a8f5974a9784729720382b1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/GlobalEditor/GeneratedSearchLayerInspector.cs b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/GlobalEditor/GeneratedSearchLayerInspector.cs new file mode 100644 index 0000000..30cc1e9 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/GlobalEditor/GeneratedSearchLayerInspector.cs @@ -0,0 +1,27 @@ +using FieldSearch.Core.Inspectors; +using UnityEditor; + +namespace FieldSearch.EditorScriptGeneration.GlobalEditor +{ + /// + /// GeneratedSearchLayer implementation + /// + public class GeneratedSearchLayerInspector : DefaultSearchLayerInspector + { + public override void OnInspectorGUI() + { + searchInspectorService.ShowSearchTextArea(); + + if (!searchInspectorService.ShowSearchObjectsLayer() || searchInspectorService.IsNullOrNone) + { + if (!searchInspectorService.IsNullOrNone) + { + EditorGUILayout.HelpBox("No results found!", MessageType.Info); + } + } + + serializedObject.Update(); + serializedObject.ApplyModifiedProperties(); + } + } +} diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/GlobalEditor/GeneratedSearchLayerInspector.cs.meta b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/GlobalEditor/GeneratedSearchLayerInspector.cs.meta new file mode 100644 index 0000000..7efe877 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/GlobalEditor/GeneratedSearchLayerInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f907c90ec3352d54d909b575e7da769b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/Templates.meta b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/Templates.meta new file mode 100644 index 0000000..567d624 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/Templates.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 31b804f7226019947a4fff159556acad +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/Templates/BaseEditorScriptTemplate.cs b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/Templates/BaseEditorScriptTemplate.cs new file mode 100644 index 0000000..e513462 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/Templates/BaseEditorScriptTemplate.cs @@ -0,0 +1,22 @@ +using CodeGeneration.Base; +using FieldSearch.Attributes; +using FieldSearch.Core.GlobalEditor; +using System; +using UnityEngine; + +namespace FieldSearch.EditorScriptGeneration.Templates +{ + /// + /// Base editor script template object. + /// Base editor implementation + /// + public abstract class BaseEditorScriptTemplate : BaseScriptTemplate + { + protected Type DefaultBaseEditorType => Type.GetType(_defaultBaseEditorTypeName); + + [SerializeField] + [TypeRefDropdown(typeof(BaseFieldSearchGlobalEditor), + ignoredNamespaces: new string[] { null })] // null to ignore generated classes w/o namespace + protected string _defaultBaseEditorTypeName; + } +} diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/Templates/BaseEditorScriptTemplate.cs.meta b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/Templates/BaseEditorScriptTemplate.cs.meta new file mode 100644 index 0000000..895939b --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/Templates/BaseEditorScriptTemplate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c159859e1666b064f810fedaa54173ad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/Templates/DefaultEditorScriptTemplate.Properties.cs b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/Templates/DefaultEditorScriptTemplate.Properties.cs new file mode 100644 index 0000000..db32708 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/Templates/DefaultEditorScriptTemplate.Properties.cs @@ -0,0 +1,21 @@ +namespace FieldSearch.EditorScriptGeneration.Templates +{ + public partial class DefaultEditorScriptTemplate + { + const string DIRECTORY_PATH = "Assets/FieldSearchConfigs/EditorScriptGenerator"; + const string DEFAULT_OBJECT_NAME = "DefaultEditorScriptTemplate"; + + public const string DEFAULT_SCRIPT_NAME_FORMAT = "{0}_Generated.cs"; + public const string DEFAULT_SCRIPT_FORMAT = +@"using UnityEditor; +{0} +{1} +{2} +[CustomEditor({3})] +public class {4} : {5}<{6}> +{{ + +}} +"; + } +} diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/Templates/DefaultEditorScriptTemplate.Properties.cs.meta b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/Templates/DefaultEditorScriptTemplate.Properties.cs.meta new file mode 100644 index 0000000..9e01dde --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/Templates/DefaultEditorScriptTemplate.Properties.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2dc5cf3fece03924dacd98154836a110 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/Templates/DefaultEditorScriptTemplate.cs b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/Templates/DefaultEditorScriptTemplate.cs new file mode 100644 index 0000000..56d8f69 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/Templates/DefaultEditorScriptTemplate.cs @@ -0,0 +1,98 @@ +using CodeGeneration; +using CodeGeneration.Data; +using FieldSearch.EditorScriptGeneration.GlobalEditor; +using System; +using System.IO; +using UnityEditor; +using UnityEngine; + +namespace FieldSearch.EditorScriptGeneration.Templates +{ + /// + /// Default implementation + /// + [CreateAssetMenu(fileName = DEFAULT_OBJECT_NAME, + menuName = "ScriptableObjects/FieldSearch/EditorScriptGenerator/Templates/DefaultEditorScriptTemplate")] + public partial class DefaultEditorScriptTemplate : BaseEditorScriptTemplate + { + public override GeneratedScript CreateScript(Type type, params object[] args) + { + try + { + var attribute = CodeGenerationUtils.GetFirstClassAttribute(type); + if (attribute == null) + { + return null; + } + var targetTypeField = CodeGenerationUtils.GetFirstAttributeFieldByType(attribute); + var editorTargetType = targetTypeField.GetValue(attribute) as Type; + + var editorForChildClassesField = CodeGenerationUtils.GetAttributeFieldByName(attribute, "m_EditorForChildClasses"); + var isEditorForChildClasses = (bool)editorForChildClassesField.GetValue(attribute); + var isEditorForChildClassesLine = isEditorForChildClasses ? ", true" : ""; + + var customEditorAttributeLine = $"typeof({editorTargetType.Name}){isEditorForChildClassesLine}"; + + if (editorTargetType != null) + { + var newEditor = DefaultBaseEditorType; + + var newEditorTypeNamespaceLine = string.IsNullOrEmpty(newEditor.Namespace) ? + string.Empty : $"using {newEditor.Namespace};"; + var targetTypeNamespaceLine = string.IsNullOrEmpty(editorTargetType.Namespace) ? + string.Empty : $"using {editorTargetType.Namespace};"; + var editorTypeNamespaceLine = string.IsNullOrEmpty(type.Namespace) ? + string.Empty : $"using {type.Namespace};"; + + var newFileName = string.Format(_scriptNameFormatString, type.Name); ; + var newScriptName = Path.GetFileNameWithoutExtension(newFileName); + + object[] scriptArgs = new[] + { + newEditorTypeNamespaceLine, + targetTypeNamespaceLine, + editorTypeNamespaceLine, + customEditorAttributeLine, + newScriptName, + newEditor.Name, + type.Name, + }; + + var scriptStr = string.Format(_scriptFormatString, scriptArgs); + + return new GeneratedScript(newFileName, scriptStr); + } + } + catch (Exception e) + { + Debug.LogError(e); + } + + return null; + } + + /// + /// Create with default fields + /// + /// + public static DefaultEditorScriptTemplate CreateTemplateObject() + { + var template = CreateInstance(); + + if (!Directory.Exists(DIRECTORY_PATH)) + { + Directory.CreateDirectory(DIRECTORY_PATH); + } + + template._scriptNameFormatString = DEFAULT_SCRIPT_NAME_FORMAT; + template._scriptFormatString = DEFAULT_SCRIPT_FORMAT; + template._defaultBaseEditorTypeName = typeof(GeneratedFieldSearchGlobalEditor).AssemblyQualifiedName; + + string path = $"{DIRECTORY_PATH}/{DEFAULT_OBJECT_NAME}.asset"; + AssetDatabase.CreateAsset(template, path); + AssetDatabase.SaveAssets(); + + return template; + } + } +} diff --git a/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/Templates/DefaultEditorScriptTemplate.cs.meta b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/Templates/DefaultEditorScriptTemplate.cs.meta new file mode 100644 index 0000000..cc43d73 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/EditorScriptGeneration/Templates/DefaultEditorScriptTemplate.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 26c4a87ce878a6d458fe22f903ea1b09 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Settings.meta b/FieldSearch/Assets/FieldSearch/Settings.meta new file mode 100644 index 0000000..c88dff5 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Settings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 093e830f706f18446bb8ba8a6612153d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Settings/Editor.meta b/FieldSearch/Assets/FieldSearch/Settings/Editor.meta new file mode 100644 index 0000000..9695039 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Settings/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c0f8d2a93a2865e4cac5b6a24f79e313 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Settings/Editor/FieldSearchSettingsEditor.cs b/FieldSearch/Assets/FieldSearch/Settings/Editor/FieldSearchSettingsEditor.cs new file mode 100644 index 0000000..ff5d45e --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Settings/Editor/FieldSearchSettingsEditor.cs @@ -0,0 +1,30 @@ +using FieldSearch.EditorScriptGeneration.Editor; +using UnityEditor; +using UnityEngine; + +namespace FieldSearch.Settings.Editor +{ + /// + /// Custom editor for + /// + [CustomEditor(typeof(FieldSearchSettings), true)] + public class FieldSearchSettingsEditor : DefaultFieldSearchSettingsEditor + { + FieldSearchSettings fieldSearchSettings; + + private void OnEnable() + { + fieldSearchSettings = target as FieldSearchSettings; + } + + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + GUILayout.Space(20); + if (GUILayout.Button("Open EditorScriptGenerator Window")) + { + EditorScriptGeneratorWindow.Init(fieldSearchSettings.EditorScriptGeneratorSettings); + } + } + } +} diff --git a/FieldSearch/Assets/FieldSearch/Settings/Editor/FieldSearchSettingsEditor.cs.meta b/FieldSearch/Assets/FieldSearch/Settings/Editor/FieldSearchSettingsEditor.cs.meta new file mode 100644 index 0000000..73d6e57 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Settings/Editor/FieldSearchSettingsEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2127039e43ee3cc458ab16fde07fcf19 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Settings/FieldSearch.Settings.asmdef b/FieldSearch/Assets/FieldSearch/Settings/FieldSearch.Settings.asmdef new file mode 100644 index 0000000..e7d5157 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Settings/FieldSearch.Settings.asmdef @@ -0,0 +1,18 @@ +{ + "name": "FieldSearch.Settings", + "references": [ + "FieldSearch.Core", + "FieldSearch.EditorScriptGeneration", + "CodeGenerator" + ], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/FieldSearch/Assets/FieldSearch/Settings/FieldSearch.Settings.asmdef.meta b/FieldSearch/Assets/FieldSearch/Settings/FieldSearch.Settings.asmdef.meta new file mode 100644 index 0000000..f106673 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Settings/FieldSearch.Settings.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e7daa219613db6d429cec48a50d13733 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/Settings/FieldSearchSettings.cs b/FieldSearch/Assets/FieldSearch/Settings/FieldSearchSettings.cs new file mode 100644 index 0000000..25643da --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Settings/FieldSearchSettings.cs @@ -0,0 +1,98 @@ +using FieldSearch.Core.Inspectors; +using FieldSearch.EditorScriptGeneration; +using FieldSearch.Settings.Base; +using System.IO; +using UnityEditor; +using UnityEngine; + +namespace FieldSearch.Settings +{ + /// + /// FieldSearchSettings implementation + /// based on + /// + [CreateAssetMenu(fileName = "FieldSearch Settings", menuName = "ScriptableObjects/FieldSearch/Settings", order = -1)] + public class FieldSearchSettings : BaseFieldSearchSettings + { + /// + /// EditorScriptGenerator settings ref + /// + public EditorScriptGeneratorSettings EditorScriptGeneratorSettings => + _editorScriptGeneratorSettings; + + [Header("EditorScriptGenerator Settings")] + [SerializeField] + private EditorScriptGeneratorSettings _editorScriptGeneratorSettings; + + /// + /// Show settings object, + /// method for editor menu + /// + [MenuItem("Field Search/ShowSettings")] + public static void ShowSettings() + { + Selection.activeObject = Instance; + EditorGUIUtility.PingObject(Instance); + } + + [MenuItem("Field Search/ShowSettings", true)] + static bool ValidateShowSettings() + { + return Instance != null; + } + + /// + /// Create with default fields + /// + [MenuItem("Field Search/Add default settings (override if exists)")] + public static void CreateSettingsObject() + { + var settings = CreateInstance(); + + var directoryPath = "Assets/FieldSearchConfigs"; + if (!Directory.Exists(directoryPath)) + { + Directory.CreateDirectory(directoryPath); + } + + settings.searchLayerTypeName = typeof(DefaultSearchLayerInspector).AssemblyQualifiedName; + settings._editorScriptGeneratorSettings = EditorScriptGeneratorSettings.CreateSettingsObject(); + + string path = $"{directoryPath}/FieldSearch Settings.asset"; + AssetDatabase.CreateAsset(settings, path); + AssetDatabase.SaveAssets(); + + Selection.activeObject = settings; + EditorGUIUtility.PingObject(settings); + } + + [MenuItem("Field Search/Add default settings (override if exists)", true)] + static bool ValidateCreateSettingsObject() + { + return Instance == null; + } + + /// + /// Add custom global gitignore to project, + /// method for editor menu + /// + [MenuItem("Field Search/Add package folders to .gitignore (global)")] + public static void AddToGlobalGitignore() + { + var gitignorePath = Path.Combine(Application.dataPath, GlobalGitignorePath); + var str = $"git config --global core.excludesfile {gitignorePath}"; + StartCmdProcess(GetDirectoryName(), str); + } + + /// + /// Remove custom global gitignore from project, + /// method for editor menu + /// + [MenuItem("Field Search/Remove package folders from .gitignore (global)")] + public static void RemoveFromGlobalGitignore() + { + var str = $"git config --global --unset core.excludesfile"; + StartCmdProcess(GetDirectoryName(), str); + } + } +} diff --git a/FieldSearch/Assets/FieldSearch/Settings/FieldSearchSettings.cs.meta b/FieldSearch/Assets/FieldSearch/Settings/FieldSearchSettings.cs.meta new file mode 100644 index 0000000..ec708b7 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/Settings/FieldSearchSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 910fedb993cf9b545a55d085fedd3bfb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/gitignore.global b/FieldSearch/Assets/FieldSearch/gitignore.global new file mode 100644 index 0000000..c197038 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/gitignore.global @@ -0,0 +1,3 @@ +*/[Aa]ssets/FieldSearch* +FieldSearch*.meta +Generated_FieldSearch* diff --git a/FieldSearch/Assets/FieldSearch/gitignore.global.meta b/FieldSearch/Assets/FieldSearch/gitignore.global.meta new file mode 100644 index 0000000..7a24bb6 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/gitignore.global.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 290832e223bee0f4294e749fa34860d6 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearch/package.json b/FieldSearch/Assets/FieldSearch/package.json new file mode 100644 index 0000000..8e9820b --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/package.json @@ -0,0 +1,14 @@ +{ + "name": "com.protonv.fieldsearch", + "version": "1.0.3", + "displayName": "FieldSearch", + "description": "FieldSearch Inspector", + "unity": "2018.4", + "dependencies": { + + }, + "author": { + "name": "Proton-V", + "url": "https://github.com/Proton-V" + } +} \ No newline at end of file diff --git a/FieldSearch/Assets/FieldSearch/package.json.meta b/FieldSearch/Assets/FieldSearch/package.json.meta new file mode 100644 index 0000000..d2387b5 --- /dev/null +++ b/FieldSearch/Assets/FieldSearch/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 9a9c2a9d0f1136646886c86a87a8f79b +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearchDemo.meta b/FieldSearch/Assets/FieldSearchDemo.meta new file mode 100644 index 0000000..5d4b1f6 --- /dev/null +++ b/FieldSearch/Assets/FieldSearchDemo.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2534d5d353d475b498dc70f645d8da4d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/SampleScene.unity b/FieldSearch/Assets/FieldSearchDemo/FieldSearchSampleScene.unity similarity index 54% rename from Assets/Scenes/SampleScene.unity rename to FieldSearch/Assets/FieldSearchDemo/FieldSearchSampleScene.unity index 2221b04..73237cf 100644 --- a/Assets/Scenes/SampleScene.unity +++ b/FieldSearch/Assets/FieldSearchDemo/FieldSearchSampleScene.unity @@ -37,13 +37,13 @@ RenderSettings: m_ReflectionBounces: 1 m_ReflectionIntensity: 1 m_CustomReflection: {fileID: 0} - m_Sun: {fileID: 705507994} + m_Sun: {fileID: 0} m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 - serializedVersion: 12 + serializedVersion: 11 m_GIWorkflowMode: 1 m_GISettings: serializedVersion: 2 @@ -54,7 +54,7 @@ LightmapSettings: m_EnableBakedLightmaps: 1 m_EnableRealtimeLightmaps: 0 m_LightmapEditorSettings: - serializedVersion: 12 + serializedVersion: 10 m_Resolution: 2 m_BakeResolution: 40 m_AtlasSize: 1024 @@ -62,7 +62,6 @@ LightmapSettings: m_AOMaxDistance: 1 m_CompAOExponent: 1 m_CompAOExponentDirect: 0 - m_ExtractAmbientOcclusion: 0 m_Padding: 2 m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 @@ -77,16 +76,10 @@ LightmapSettings: m_PVRDirectSampleCount: 32 m_PVRSampleCount: 500 m_PVRBounces: 2 - m_PVREnvironmentSampleCount: 500 - m_PVREnvironmentReferencePointCount: 2048 - m_PVRFilteringMode: 2 - m_PVRDenoiserTypeDirect: 0 - m_PVRDenoiserTypeIndirect: 0 - m_PVRDenoiserTypeAO: 0 m_PVRFilterTypeDirect: 0 m_PVRFilterTypeIndirect: 0 m_PVRFilterTypeAO: 0 - m_PVREnvironmentMIS: 0 + m_PVRFilteringMode: 2 m_PVRCulling: 1 m_PVRFilteringGaussRadiusDirect: 1 m_PVRFilteringGaussRadiusIndirect: 5 @@ -94,11 +87,9 @@ LightmapSettings: m_PVRFilteringAtrousPositionSigmaDirect: 0.5 m_PVRFilteringAtrousPositionSigmaIndirect: 2 m_PVRFilteringAtrousPositionSigmaAO: 1 - m_ExportTrainingData: 0 - m_TrainingDataDestination: TrainingData - m_LightProbeSampleCountMultiplier: 4 + m_ShowResolutionOverlay: 1 m_LightingDataAsset: {fileID: 0} - m_LightingSettings: {fileID: 0} + m_UseShadowmask: 1 --- !u!196 &4 NavMeshSettings: serializedVersion: 2 @@ -121,147 +112,161 @@ NavMeshSettings: debug: m_Flags: 0 m_NavMeshData: {fileID: 0} ---- !u!1 &705507993 +--- !u!1 &316345520 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 705507995} - - component: {fileID: 705507994} + - component: {fileID: 316345522} + - component: {fileID: 316345521} + - component: {fileID: 316345525} + - component: {fileID: 316345523} + - component: {fileID: 316345524} m_Layer: 0 - m_Name: Directional Light + m_Name: SampleSearchableRootObject m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!108 &705507994 -Light: +--- !u!114 &316345521 +MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 705507993} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 316345520} m_Enabled: 1 - serializedVersion: 8 - m_Type: 1 - m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} - m_Intensity: 1 - m_Range: 10 - m_SpotAngle: 30 - m_CookieSize: 10 - m_Shadows: - m_Type: 2 - m_Resolution: -1 - m_CustomResolution: -1 - m_Strength: 1 - m_Bias: 0.05 - m_NormalBias: 0.4 - m_NearPlane: 0.2 - m_Cookie: {fileID: 0} - m_DrawHalo: 0 - m_Flare: {fileID: 0} - m_RenderMode: 0 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_Lightmapping: 1 - m_LightShadowCasterMode: 0 - m_AreaSize: {x: 1, y: 1} - m_BounceIntensity: 1 - m_ColorTemperature: 6570 - m_UseColorTemperature: 0 - m_ShadowRadius: 0 - m_ShadowAngle: 0 ---- !u!4 &705507995 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cdf2f9e2fdd206c4e8809634ef438510, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver2: + - {fileID: 1348587120} + - {fileID: 1824152153} + Sender2: {fileID: 0} + Receiver: {fileID: 1348587120} + Sender: {fileID: 1824152153} +--- !u!4 &316345522 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 705507993} - m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} - m_LocalPosition: {x: 0, y: 3, z: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 316345520} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} - m_Children: [] + m_Children: + - {fileID: 1824152153} + - {fileID: 1348587120} m_Father: {fileID: 0} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} ---- !u!1 &963194225 + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &316345523 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 316345520} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a4cf10282636b9b44b2547f959b8ab84, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: {fileID: 0} + Sender: {fileID: 0} +--- !u!114 &316345524 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 316345520} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a4cf10282636b9b44b2547f959b8ab84, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver: {fileID: 0} + Sender: {fileID: 0} +--- !u!114 &316345525 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 316345520} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: cdf2f9e2fdd206c4e8809634ef438510, type: 3} + m_Name: + m_EditorClassIdentifier: + Receiver2: [] + Sender2: {fileID: 0} + Receiver: {fileID: 0} + Sender: {fileID: 0} +--- !u!1 &1348587119 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 963194228} - - component: {fileID: 963194227} - - component: {fileID: 963194226} + - component: {fileID: 1348587120} m_Layer: 0 - m_Name: Main Camera - m_TagString: MainCamera + m_Name: SampleSender + m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!81 &963194226 -AudioListener: +--- !u!4 &1348587120 +Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 963194225} - m_Enabled: 1 ---- !u!20 &963194227 -Camera: + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1348587119} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.3399162, y: -0.20356975, z: -2.3404076} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 316345522} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1824152152 +GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 963194225} - m_Enabled: 1 - serializedVersion: 2 - m_ClearFlags: 1 - m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} - m_projectionMatrixMode: 1 - m_SensorSize: {x: 36, y: 24} - m_LensShift: {x: 0, y: 0} - m_GateFitMode: 2 - m_FocalLength: 50 - m_NormalizedViewPortRect: - serializedVersion: 2 - x: 0 - y: 0 - width: 1 - height: 1 - near clip plane: 0.3 - far clip plane: 1000 - field of view: 60 - orthographic: 0 - orthographic size: 5 - m_Depth: -1 - m_CullingMask: - serializedVersion: 2 - m_Bits: 4294967295 - m_RenderingPath: -1 - m_TargetTexture: {fileID: 0} - m_TargetDisplay: 0 - m_TargetEye: 3 - m_HDR: 1 - m_AllowMSAA: 1 - m_AllowDynamicResolution: 0 - m_ForceIntoRT: 0 - m_OcclusionCulling: 1 - m_StereoConvergence: 10 - m_StereoSeparation: 0.022 ---- !u!4 &963194228 + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1824152153} + m_Layer: 0 + m_Name: SampleReceiver + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1824152153 Transform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 963194225} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 1, z: -10} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1824152152} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.3399162, y: -0.20356975, z: -2.3404076} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] - m_Father: {fileID: 0} + m_Father: {fileID: 316345522} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} diff --git a/FieldSearch/Assets/FieldSearchDemo/FieldSearchSampleScene.unity.meta b/FieldSearch/Assets/FieldSearchDemo/FieldSearchSampleScene.unity.meta new file mode 100644 index 0000000..be251d5 --- /dev/null +++ b/FieldSearch/Assets/FieldSearchDemo/FieldSearchSampleScene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 660c67b04be7cf44d9046e3d2ff5f445 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearchDemo/Scripts.meta b/FieldSearch/Assets/FieldSearchDemo/Scripts.meta new file mode 100644 index 0000000..4f9fd71 --- /dev/null +++ b/FieldSearch/Assets/FieldSearchDemo/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 04e478ae080ca6640b3233c67e3b581d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearchDemo/Scripts/BaseSampleSearchableMonoBehaviour.cs b/FieldSearch/Assets/FieldSearchDemo/Scripts/BaseSampleSearchableMonoBehaviour.cs new file mode 100644 index 0000000..44ceba8 --- /dev/null +++ b/FieldSearch/Assets/FieldSearchDemo/Scripts/BaseSampleSearchableMonoBehaviour.cs @@ -0,0 +1,13 @@ +using UnityEngine; + +namespace FieldSearch.Samples +{ + /// + /// Base class for + /// + public class BaseSampleSearchableMonoBehaviour : MonoBehaviour + { + [SerializeField] private Transform[] Receiver2; + [SerializeField] private Transform Sender2; + } +} diff --git a/FieldSearch/Assets/FieldSearchDemo/Scripts/BaseSampleSearchableMonoBehaviour.cs.meta b/FieldSearch/Assets/FieldSearchDemo/Scripts/BaseSampleSearchableMonoBehaviour.cs.meta new file mode 100644 index 0000000..ddfc345 --- /dev/null +++ b/FieldSearch/Assets/FieldSearchDemo/Scripts/BaseSampleSearchableMonoBehaviour.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 51cd17e2e9b042842884079ab89f431d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearchDemo/Scripts/Editor.meta b/FieldSearch/Assets/FieldSearchDemo/Scripts/Editor.meta new file mode 100644 index 0000000..56be192 --- /dev/null +++ b/FieldSearch/Assets/FieldSearchDemo/Scripts/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 358de3ca3100dd542a1271f45bbacd6c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearchDemo/Scripts/Editor/FieldSearch.Samples.Editor.asmdef b/FieldSearch/Assets/FieldSearchDemo/Scripts/Editor/FieldSearch.Samples.Editor.asmdef new file mode 100644 index 0000000..2e82393 --- /dev/null +++ b/FieldSearch/Assets/FieldSearchDemo/Scripts/Editor/FieldSearch.Samples.Editor.asmdef @@ -0,0 +1,17 @@ +{ + "name": "FieldSearch.Samples.Editor", + "references": [ + "FieldSearch.Core", + "FieldSearch.Samples" + ], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/FieldSearch/Assets/FieldSearchDemo/Scripts/Editor/FieldSearch.Samples.Editor.asmdef.meta b/FieldSearch/Assets/FieldSearchDemo/Scripts/Editor/FieldSearch.Samples.Editor.asmdef.meta new file mode 100644 index 0000000..6cdc390 --- /dev/null +++ b/FieldSearch/Assets/FieldSearchDemo/Scripts/Editor/FieldSearch.Samples.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 881d9158c5d88b94ca67ea7d9f8b02b8 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearchDemo/Scripts/Editor/SampleSearchableMonoBehaviourEditor.cs b/FieldSearch/Assets/FieldSearchDemo/Scripts/Editor/SampleSearchableMonoBehaviourEditor.cs new file mode 100644 index 0000000..320d8c7 --- /dev/null +++ b/FieldSearch/Assets/FieldSearchDemo/Scripts/Editor/SampleSearchableMonoBehaviourEditor.cs @@ -0,0 +1,21 @@ +using FieldSearch.Core.Inspectors; +using FieldSearch.Core.Inspectors.Editor.Base; +using UnityEditor; + +namespace FieldSearch.Samples.Editor +{ + /// + /// Custom editor for + /// + [CustomEditor(typeof(SampleSearchableMonoBehaviour))] + public class SampleSearchableMonoBehaviourEditor : BaseSearchableEditor + { + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + + // Your code + // ... + } + } +} diff --git a/FieldSearch/Assets/FieldSearchDemo/Scripts/Editor/SampleSearchableMonoBehaviourEditor.cs.meta b/FieldSearch/Assets/FieldSearchDemo/Scripts/Editor/SampleSearchableMonoBehaviourEditor.cs.meta new file mode 100644 index 0000000..87d1e38 --- /dev/null +++ b/FieldSearch/Assets/FieldSearchDemo/Scripts/Editor/SampleSearchableMonoBehaviourEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c5faeb36d83f31546bd2a2b4672822d6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearchDemo/Scripts/FieldSearch.Samples.asmdef b/FieldSearch/Assets/FieldSearchDemo/Scripts/FieldSearch.Samples.asmdef new file mode 100644 index 0000000..4ec27b4 --- /dev/null +++ b/FieldSearch/Assets/FieldSearchDemo/Scripts/FieldSearch.Samples.asmdef @@ -0,0 +1,12 @@ +{ + "name": "FieldSearch.Samples", + "references": [], + "optionalUnityReferences": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/FieldSearch/Assets/FieldSearchDemo/Scripts/FieldSearch.Samples.asmdef.meta b/FieldSearch/Assets/FieldSearchDemo/Scripts/FieldSearch.Samples.asmdef.meta new file mode 100644 index 0000000..7cd0161 --- /dev/null +++ b/FieldSearch/Assets/FieldSearchDemo/Scripts/FieldSearch.Samples.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: aceca26811c227d4e9aa29b79598b31a +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearchDemo/Scripts/SampleDefaultMonoBehaviour.cs b/FieldSearch/Assets/FieldSearchDemo/Scripts/SampleDefaultMonoBehaviour.cs new file mode 100644 index 0000000..675ceaf --- /dev/null +++ b/FieldSearch/Assets/FieldSearchDemo/Scripts/SampleDefaultMonoBehaviour.cs @@ -0,0 +1,13 @@ +using UnityEngine; + +namespace FieldSearch.Samples +{ + /// + /// Sample monobehaviour without specific inspector + /// + public class SampleDefaultMonoBehaviour : MonoBehaviour + { + [SerializeField] private Transform Receiver; + [SerializeField] private Transform Sender; + } +} diff --git a/FieldSearch/Assets/FieldSearchDemo/Scripts/SampleDefaultMonoBehaviour.cs.meta b/FieldSearch/Assets/FieldSearchDemo/Scripts/SampleDefaultMonoBehaviour.cs.meta new file mode 100644 index 0000000..a3491fc --- /dev/null +++ b/FieldSearch/Assets/FieldSearchDemo/Scripts/SampleDefaultMonoBehaviour.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a4cf10282636b9b44b2547f959b8ab84 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Assets/FieldSearchDemo/Scripts/SampleSearchableMonoBehaviour.cs b/FieldSearch/Assets/FieldSearchDemo/Scripts/SampleSearchableMonoBehaviour.cs new file mode 100644 index 0000000..9dbcb9b --- /dev/null +++ b/FieldSearch/Assets/FieldSearchDemo/Scripts/SampleSearchableMonoBehaviour.cs @@ -0,0 +1,13 @@ +using UnityEngine; + +namespace FieldSearch.Samples +{ + /// + /// Sample monobehaviour with specific inspector + /// + public class SampleSearchableMonoBehaviour : BaseSampleSearchableMonoBehaviour + { + [SerializeField] private Transform Receiver; + [SerializeField] private Transform Sender; + } +} diff --git a/FieldSearch/Assets/FieldSearchDemo/Scripts/SampleSearchableMonoBehaviour.cs.meta b/FieldSearch/Assets/FieldSearchDemo/Scripts/SampleSearchableMonoBehaviour.cs.meta new file mode 100644 index 0000000..dc83ea9 --- /dev/null +++ b/FieldSearch/Assets/FieldSearchDemo/Scripts/SampleSearchableMonoBehaviour.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cdf2f9e2fdd206c4e8809634ef438510 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/FieldSearch-Unity.sln.meta b/FieldSearch/FieldSearch-Unity.sln.meta new file mode 100644 index 0000000..484ee47 --- /dev/null +++ b/FieldSearch/FieldSearch-Unity.sln.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: fe07d7efeb7033e4b9b4c2f44a20c816 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/FieldSearch.Core.csproj.meta b/FieldSearch/FieldSearch.Core.csproj.meta new file mode 100644 index 0000000..247141e --- /dev/null +++ b/FieldSearch/FieldSearch.Core.csproj.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 459a5cd0f1b3e0e4489129c242d7ea29 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/FieldSearch.Demo.csproj.meta b/FieldSearch/FieldSearch.Demo.csproj.meta new file mode 100644 index 0000000..0c35294 --- /dev/null +++ b/FieldSearch/FieldSearch.Demo.csproj.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 927598da7cc641f47970827d58e13677 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/FieldSearch.Helpers.csproj.meta b/FieldSearch/FieldSearch.Helpers.csproj.meta new file mode 100644 index 0000000..8ea3af9 --- /dev/null +++ b/FieldSearch/FieldSearch.Helpers.csproj.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2eb901625d207f443ae18a124700e702 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/FieldSearch.Samples.Editor.csproj.meta b/FieldSearch/FieldSearch.Samples.Editor.csproj.meta new file mode 100644 index 0000000..cd37dbd --- /dev/null +++ b/FieldSearch/FieldSearch.Samples.Editor.csproj.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6276c946c90ed2749ba81fe57b968b15 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/FieldSearch.Samples.csproj.meta b/FieldSearch/FieldSearch.Samples.csproj.meta new file mode 100644 index 0000000..604dee1 --- /dev/null +++ b/FieldSearch/FieldSearch.Samples.csproj.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 85a9f47695fc08b45ab55ac7fa6237db +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/FieldSearch.Settings.csproj.meta b/FieldSearch/FieldSearch.Settings.csproj.meta new file mode 100644 index 0000000..f0e81bb --- /dev/null +++ b/FieldSearch/FieldSearch.Settings.csproj.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3c0049a25d03345459df1d7b69c4fba4 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/FieldSearch.csproj.meta b/FieldSearch/FieldSearch.csproj.meta new file mode 100644 index 0000000..bd3d998 --- /dev/null +++ b/FieldSearch/FieldSearch.csproj.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cfaa1df800e79de4bb79bef09fcc822f +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Library.meta b/FieldSearch/Library.meta new file mode 100644 index 0000000..9a7228d --- /dev/null +++ b/FieldSearch/Library.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6782fb31ea9fdb6458d5da4bf93375d9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Logs.meta b/FieldSearch/Logs.meta new file mode 100644 index 0000000..cfbb43f --- /dev/null +++ b/FieldSearch/Logs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 27cf1023a40103741acddc2ff6d746e5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/Packages.meta b/FieldSearch/Packages.meta new file mode 100644 index 0000000..19d2a7b --- /dev/null +++ b/FieldSearch/Packages.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 577fb58bf3303744b866e6e6ffd09fb0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/manifest.json b/FieldSearch/Packages/manifest.json similarity index 79% rename from Packages/manifest.json rename to FieldSearch/Packages/manifest.json index c6f1cc8..73c0efb 100644 --- a/Packages/manifest.json +++ b/FieldSearch/Packages/manifest.json @@ -1,15 +1,12 @@ { "dependencies": { - "com.unity.collab-proxy": "1.15.17", - "com.unity.ide.rider": "2.0.7", - "com.unity.ide.visualstudio": "2.0.15", - "com.unity.ide.vscode": "1.2.5", - "com.unity.test-framework": "1.1.31", - "com.unity.textmeshpro": "3.0.6", - "com.unity.timeline": "1.4.8", - "com.unity.ugui": "1.0.0", + "com.unity.ads": "2.0.8", + "com.unity.analytics": "3.2.2", + "com.unity.collab-proxy": "1.2.15", + "com.unity.package-manager-ui": "2.0.7", + "com.unity.purchasing": "2.0.3", + "com.unity.textmeshpro": "1.4.1", "com.unity.modules.ai": "1.0.0", - "com.unity.modules.androidjni": "1.0.0", "com.unity.modules.animation": "1.0.0", "com.unity.modules.assetbundle": "1.0.0", "com.unity.modules.audio": "1.0.0", diff --git a/FieldSearch/Packages/manifest.json.meta b/FieldSearch/Packages/manifest.json.meta new file mode 100644 index 0000000..0f4fe67 --- /dev/null +++ b/FieldSearch/Packages/manifest.json.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 75c2ae864f3e43149950eb471e8c98aa \ No newline at end of file diff --git a/FieldSearch/ProjectSettings.meta b/FieldSearch/ProjectSettings.meta new file mode 100644 index 0000000..2c88846 --- /dev/null +++ b/FieldSearch/ProjectSettings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4721817873618754ba4fc850589c3dc4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ProjectSettings/AudioManager.asset b/FieldSearch/ProjectSettings/AudioManager.asset similarity index 100% rename from ProjectSettings/AudioManager.asset rename to FieldSearch/ProjectSettings/AudioManager.asset diff --git a/FieldSearch/ProjectSettings/AudioManager.asset.meta b/FieldSearch/ProjectSettings/AudioManager.asset.meta new file mode 100644 index 0000000..8bab90e --- /dev/null +++ b/FieldSearch/ProjectSettings/AudioManager.asset.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: e87af2a3a5722204a8bd585e98f2dde6 \ No newline at end of file diff --git a/ProjectSettings/ClusterInputManager.asset b/FieldSearch/ProjectSettings/ClusterInputManager.asset similarity index 100% rename from ProjectSettings/ClusterInputManager.asset rename to FieldSearch/ProjectSettings/ClusterInputManager.asset diff --git a/FieldSearch/ProjectSettings/ClusterInputManager.asset.meta b/FieldSearch/ProjectSettings/ClusterInputManager.asset.meta new file mode 100644 index 0000000..d7f2b47 --- /dev/null +++ b/FieldSearch/ProjectSettings/ClusterInputManager.asset.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 2f3fe36fb3367f743bc72eed314a8522 \ No newline at end of file diff --git a/ProjectSettings/DynamicsManager.asset b/FieldSearch/ProjectSettings/DynamicsManager.asset similarity index 95% rename from ProjectSettings/DynamicsManager.asset rename to FieldSearch/ProjectSettings/DynamicsManager.asset index cdc1f3e..167dee7 100644 --- a/ProjectSettings/DynamicsManager.asset +++ b/FieldSearch/ProjectSettings/DynamicsManager.asset @@ -3,7 +3,7 @@ --- !u!55 &1 PhysicsManager: m_ObjectHideFlags: 0 - serializedVersion: 11 + serializedVersion: 10 m_Gravity: {x: 0, y: -9.81, z: 0} m_DefaultMaterial: {fileID: 0} m_BounceThreshold: 2 @@ -31,4 +31,3 @@ PhysicsManager: m_FrictionType: 0 m_EnableEnhancedDeterminism: 0 m_EnableUnifiedHeightmaps: 1 - m_DefaultMaxAngluarSpeed: 7 diff --git a/FieldSearch/ProjectSettings/DynamicsManager.asset.meta b/FieldSearch/ProjectSettings/DynamicsManager.asset.meta new file mode 100644 index 0000000..a363566 --- /dev/null +++ b/FieldSearch/ProjectSettings/DynamicsManager.asset.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: b8b5def6c7589564c9da0883fbb22abd \ No newline at end of file diff --git a/ProjectSettings/EditorBuildSettings.asset b/FieldSearch/ProjectSettings/EditorBuildSettings.asset similarity index 100% rename from ProjectSettings/EditorBuildSettings.asset rename to FieldSearch/ProjectSettings/EditorBuildSettings.asset diff --git a/FieldSearch/ProjectSettings/EditorBuildSettings.asset.meta b/FieldSearch/ProjectSettings/EditorBuildSettings.asset.meta new file mode 100644 index 0000000..f36f451 --- /dev/null +++ b/FieldSearch/ProjectSettings/EditorBuildSettings.asset.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: a9af1cadea731234389a2fe7996d6c02 \ No newline at end of file diff --git a/ProjectSettings/EditorSettings.asset b/FieldSearch/ProjectSettings/EditorSettings.asset similarity index 72% rename from ProjectSettings/EditorSettings.asset rename to FieldSearch/ProjectSettings/EditorSettings.asset index de5d0b2..4de03d7 100644 --- a/ProjectSettings/EditorSettings.asset +++ b/FieldSearch/ProjectSettings/EditorSettings.asset @@ -3,7 +3,7 @@ --- !u!159 &1 EditorSettings: m_ObjectHideFlags: 0 - serializedVersion: 11 + serializedVersion: 7 m_ExternalVersionControlSupport: Visible Meta Files m_SerializationMode: 2 m_LineEndingsForNewScripts: 0 @@ -20,11 +20,4 @@ EditorSettings: m_ProjectGenerationRootNamespace: m_CollabEditorSettings: inProgressEnabled: 1 - m_EnableTextureStreamingInEditMode: 1 m_EnableTextureStreamingInPlayMode: 1 - m_AsyncShaderCompilation: 1 - m_EnterPlayModeOptionsEnabled: 0 - m_EnterPlayModeOptions: 3 - m_ShowLightmapResolutionOverlay: 1 - m_UseLegacyProbeSampleCount: 0 - m_SerializeInlineMappingsOnOneLine: 1 \ No newline at end of file diff --git a/FieldSearch/ProjectSettings/EditorSettings.asset.meta b/FieldSearch/ProjectSettings/EditorSettings.asset.meta new file mode 100644 index 0000000..ec62aae --- /dev/null +++ b/FieldSearch/ProjectSettings/EditorSettings.asset.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: f9e8d1540df9ba44daed8c97b8e44f3d \ No newline at end of file diff --git a/ProjectSettings/GraphicsSettings.asset b/FieldSearch/ProjectSettings/GraphicsSettings.asset similarity index 95% rename from ProjectSettings/GraphicsSettings.asset rename to FieldSearch/ProjectSettings/GraphicsSettings.asset index 43369e3..74d7b53 100644 --- a/ProjectSettings/GraphicsSettings.asset +++ b/FieldSearch/ProjectSettings/GraphicsSettings.asset @@ -3,7 +3,7 @@ --- !u!30 &1 GraphicsSettings: m_ObjectHideFlags: 0 - serializedVersion: 13 + serializedVersion: 12 m_Deferred: m_Mode: 1 m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} @@ -59,5 +59,3 @@ GraphicsSettings: m_AlbedoSwatchInfos: [] m_LightsUseLinearIntensity: 0 m_LightsUseColorTemperature: 0 - m_LogWhenShaderIsCompiled: 0 - m_AllowEnlightenSupportForUpgradedProject: 0 diff --git a/FieldSearch/ProjectSettings/GraphicsSettings.asset.meta b/FieldSearch/ProjectSettings/GraphicsSettings.asset.meta new file mode 100644 index 0000000..ad3339a --- /dev/null +++ b/FieldSearch/ProjectSettings/GraphicsSettings.asset.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: f249110bb37d39d468e01bbee885cc3f \ No newline at end of file diff --git a/ProjectSettings/InputManager.asset b/FieldSearch/ProjectSettings/InputManager.asset similarity index 100% rename from ProjectSettings/InputManager.asset rename to FieldSearch/ProjectSettings/InputManager.asset diff --git a/FieldSearch/ProjectSettings/InputManager.asset.meta b/FieldSearch/ProjectSettings/InputManager.asset.meta new file mode 100644 index 0000000..aa10aef --- /dev/null +++ b/FieldSearch/ProjectSettings/InputManager.asset.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: ad778771c4c4c8447abdc17a96c15a1a \ No newline at end of file diff --git a/ProjectSettings/NavMeshAreas.asset b/FieldSearch/ProjectSettings/NavMeshAreas.asset similarity index 100% rename from ProjectSettings/NavMeshAreas.asset rename to FieldSearch/ProjectSettings/NavMeshAreas.asset diff --git a/FieldSearch/ProjectSettings/NavMeshAreas.asset.meta b/FieldSearch/ProjectSettings/NavMeshAreas.asset.meta new file mode 100644 index 0000000..e77da2c --- /dev/null +++ b/FieldSearch/ProjectSettings/NavMeshAreas.asset.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: fc2ed92cb566a3a4f9916ae883e4d623 \ No newline at end of file diff --git a/ProjectSettings/PackageManagerSettings.asset b/FieldSearch/ProjectSettings/PackageManagerSettings.asset similarity index 100% rename from ProjectSettings/PackageManagerSettings.asset rename to FieldSearch/ProjectSettings/PackageManagerSettings.asset diff --git a/FieldSearch/ProjectSettings/PackageManagerSettings.asset.meta b/FieldSearch/ProjectSettings/PackageManagerSettings.asset.meta new file mode 100644 index 0000000..2aee208 --- /dev/null +++ b/FieldSearch/ProjectSettings/PackageManagerSettings.asset.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: a9a66c28d4075464f9c810013cf9fb64 \ No newline at end of file diff --git a/ProjectSettings/Physics2DSettings.asset b/FieldSearch/ProjectSettings/Physics2DSettings.asset similarity index 100% rename from ProjectSettings/Physics2DSettings.asset rename to FieldSearch/ProjectSettings/Physics2DSettings.asset diff --git a/FieldSearch/ProjectSettings/Physics2DSettings.asset.meta b/FieldSearch/ProjectSettings/Physics2DSettings.asset.meta new file mode 100644 index 0000000..dc086c9 --- /dev/null +++ b/FieldSearch/ProjectSettings/Physics2DSettings.asset.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 2214411366442b8428a83c6dae2ee2b2 \ No newline at end of file diff --git a/ProjectSettings/PresetManager.asset b/FieldSearch/ProjectSettings/PresetManager.asset similarity index 68% rename from ProjectSettings/PresetManager.asset rename to FieldSearch/ProjectSettings/PresetManager.asset index 67a94da..636a595 100644 --- a/ProjectSettings/PresetManager.asset +++ b/FieldSearch/ProjectSettings/PresetManager.asset @@ -3,5 +3,4 @@ --- !u!1386491679 &1 PresetManager: m_ObjectHideFlags: 0 - serializedVersion: 2 - m_DefaultPresets: {} + m_DefaultList: [] diff --git a/FieldSearch/ProjectSettings/PresetManager.asset.meta b/FieldSearch/ProjectSettings/PresetManager.asset.meta new file mode 100644 index 0000000..8f43893 --- /dev/null +++ b/FieldSearch/ProjectSettings/PresetManager.asset.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 057d43545a4266140ade8d62772bfe8d \ No newline at end of file diff --git a/ProjectSettings/ProjectSettings.asset b/FieldSearch/ProjectSettings/ProjectSettings.asset similarity index 82% rename from ProjectSettings/ProjectSettings.asset rename to FieldSearch/ProjectSettings/ProjectSettings.asset index af24def..4aae68b 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/FieldSearch/ProjectSettings/ProjectSettings.asset @@ -3,7 +3,7 @@ --- !u!129 &1 PlayerSettings: m_ObjectHideFlags: 0 - serializedVersion: 22 + serializedVersion: 15 productGUID: f379ae1b13ec3194b86f3ff659791cff AndroidProfiler: 0 AndroidFilterTouchesWhenObscured: 0 @@ -49,12 +49,11 @@ PlayerSettings: m_StereoRenderingPath: 0 m_ActiveColorSpace: 0 m_MTRendering: 1 - mipStripping: 0 - numberOfMipsStripped: 0 m_StackTraceTypes: 010000000100000001000000010000000100000001000000 iosShowActivityIndicatorOnLoading: -1 androidShowActivityIndicatorOnLoading: -1 - iosUseCustomAppBackgroundBehavior: 0 + iosAppInBackgroundBehavior: 0 + displayResolutionDialog: 1 iosAllowHTTPDownload: 1 allowedAutorotateToPortrait: 1 allowedAutorotateToPortraitUpsideDown: 1 @@ -66,14 +65,7 @@ PlayerSettings: disableDepthAndStencilBuffers: 0 androidStartInFullscreen: 1 androidRenderOutsideSafeArea: 1 - androidUseSwappy: 1 androidBlitType: 0 - androidResizableWindow: 0 - androidDefaultWindowWidth: 1920 - androidDefaultWindowHeight: 1080 - androidMinimumWindowWidth: 400 - androidMinimumWindowHeight: 300 - androidFullscreenMode: 1 defaultIsNativeResolution: 1 macRetinaSupport: 1 runInBackground: 1 @@ -87,11 +79,11 @@ PlayerSettings: usePlayerLog: 1 bakeCollisionMeshes: 0 forceSingleInstance: 0 - useFlipModelSwapchain: 1 resizableWindow: 0 useMacAppStoreValidation: 0 macAppStoreCategory: public.app-category.games gpuSkinning: 1 + graphicsJobs: 0 xboxPIXTextureCapture: 0 xboxEnableAvatar: 0 xboxEnableKinect: 0 @@ -99,6 +91,7 @@ PlayerSettings: xboxEnableFitness: 0 visibleInBackground: 1 allowFullscreenSwitch: 1 + graphicsJobMode: 0 fullscreenMode: 1 xboxSpeechDB: 0 xboxEnableHeadOrientation: 0 @@ -111,7 +104,6 @@ PlayerSettings: xboxOneMonoLoggingLevel: 0 xboxOneLoggingLevel: 1 xboxOneDisableEsram: 0 - xboxOneEnableTypeOptimization: 0 xboxOnePresentImmediateThreshold: 0 switchQueueCommandMemory: 0 switchQueueControlMemory: 16384 @@ -119,15 +111,7 @@ PlayerSettings: switchNVNShaderPoolsGranularity: 33554432 switchNVNDefaultPoolsGranularity: 16777216 switchNVNOtherPoolsGranularity: 16777216 - switchNVNMaxPublicTextureIDCount: 0 - switchNVNMaxPublicSamplerIDCount: 0 - stadiaPresentMode: 0 - stadiaTargetFramerate: 0 - vulkanNumSwapchainBuffers: 3 vulkanEnableSetSRGBWrite: 0 - vulkanEnablePreTransform: 0 - vulkanEnableLateAcquireNextImage: 0 - vulkanEnableCommandBufferRecycling: 1 m_SupportedAspectRatios: 4:3: 1 5:4: 1 @@ -141,16 +125,31 @@ PlayerSettings: m_HolographicPauseOnTrackingLoss: 1 xboxOneDisableKinectGpuReservation: 1 xboxOneEnable7thCore: 1 + isWsaHolographicRemotingEnabled: 0 vrSettings: + cardboard: + depthFormat: 0 + enableTransitionView: 0 + daydream: + depthFormat: 0 + useSustainedPerformanceMode: 0 + enableVideoLayer: 0 + useProtectedVideoMemory: 0 + minimumSupportedHeadTracking: 0 + maximumSupportedHeadTracking: 1 + hololens: + depthFormat: 1 + depthBufferSharingEnabled: 1 + oculus: + sharedDepthBuffer: 1 + dashSupport: 1 enable360StereoCapture: 0 - isWsaHolographicRemotingEnabled: 0 + protectGraphicsMemory: 0 enableFrameTimingStats: 0 useHDRDisplay: 0 - D3DHDRBitDepth: 0 m_ColorGamuts: 00000000 targetPixelDensity: 30 resolutionScalingMode: 0 - resetResolutionOnWindowResize: 0 androidSupportedAspectRatio: 1 androidMaxAspectRatio: 2.1 applicationIdentifier: {} @@ -158,7 +157,6 @@ PlayerSettings: Standalone: 0 iPhone: 0 tvOS: 0 - overrideDefaultApplicationIdentifier: 0 AndroidBundleVersionCode: 1 AndroidMinSdkVersion: 19 AndroidTargetSdkVersion: 0 @@ -185,6 +183,18 @@ PlayerSettings: uIStatusBarHidden: 1 uIExitOnSuspend: 0 uIStatusBarStyle: 0 + iPhoneSplashScreen: {fileID: 0} + iPhoneHighResSplashScreen: {fileID: 0} + iPhoneTallHighResSplashScreen: {fileID: 0} + iPhone47inSplashScreen: {fileID: 0} + iPhone55inPortraitSplashScreen: {fileID: 0} + iPhone55inLandscapeSplashScreen: {fileID: 0} + iPhone58inPortraitSplashScreen: {fileID: 0} + iPhone58inLandscapeSplashScreen: {fileID: 0} + iPadPortraitSplashScreen: {fileID: 0} + iPadHighResPortraitSplashScreen: {fileID: 0} + iPadLandscapeSplashScreen: {fileID: 0} + iPadHighResLandscapeSplashScreen: {fileID: 0} appleTVSplashScreen: {fileID: 0} appleTVSplashScreen2x: {fileID: 0} tvOSSmallIconLayers: [] @@ -212,8 +222,8 @@ PlayerSettings: iOSLaunchScreeniPadFillPct: 100 iOSLaunchScreeniPadSize: 100 iOSLaunchScreeniPadCustomXibPath: + iOSUseLaunchScreenStoryboard: 0 iOSLaunchScreenCustomStoryboardPath: - iOSLaunchScreeniPadCustomStoryboardPath: iOSDeviceRequirements: [] iOSURLSchemes: [] iOSBackgroundModes: 0 @@ -221,7 +231,6 @@ PlayerSettings: metalEditorSupport: 1 metalAPIValidation: 1 iOSRenderExtraFrameOnPause: 0 - iosCopyPluginsCodeInsteadOfSymlink: 0 appleDeveloperTeamID: iOSManualSigningProvisioningProfileID: tvOSManualSigningProvisioningProfileID: @@ -231,19 +240,10 @@ PlayerSettings: iOSRequireARKit: 0 iOSAutomaticallyDetectAndAddCapabilities: 1 appleEnableProMotion: 0 - shaderPrecisionModel: 0 clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea templatePackageId: com.unity.template.3d@5.0.4 templateDefaultScene: Assets/Scenes/SampleScene.unity - useCustomMainManifest: 0 - useCustomLauncherManifest: 0 - useCustomMainGradleTemplate: 0 - useCustomLauncherGradleManifest: 0 - useCustomBaseGradleTemplate: 0 - useCustomGradlePropertiesTemplate: 0 - useCustomProguardFile: 0 AndroidTargetArchitectures: 1 - AndroidTargetDevices: 0 AndroidSplashScreenScale: 0 androidSplashScreen: {fileID: 0} AndroidKeystoreName: @@ -254,18 +254,12 @@ PlayerSettings: AndroidEnableTango: 0 androidEnableBanner: 1 androidUseLowAccuracyLocation: 0 - androidUseCustomKeystore: 0 m_AndroidBanners: - width: 320 height: 180 banner: {fileID: 0} androidGamepadSupportLevel: 0 - chromeosInputEmulation: 1 - AndroidMinifyWithR8: 0 - AndroidMinifyRelease: 0 - AndroidMinifyDebug: 0 - AndroidValidateAppBundleSize: 1 - AndroidAppBundleSizeToValidate: 150 + resolutionDialogBanner: {fileID: 0} m_BuildTargetIcons: [] m_BuildTargetPlatformIcons: [] m_BuildTargetBatching: @@ -284,38 +278,6 @@ PlayerSettings: - m_BuildTarget: WebGL m_StaticBatching: 0 m_DynamicBatching: 0 - m_BuildTargetGraphicsJobs: - - m_BuildTarget: MacStandaloneSupport - m_GraphicsJobs: 0 - - m_BuildTarget: Switch - m_GraphicsJobs: 1 - - m_BuildTarget: MetroSupport - m_GraphicsJobs: 1 - - m_BuildTarget: AppleTVSupport - m_GraphicsJobs: 0 - - m_BuildTarget: BJMSupport - m_GraphicsJobs: 1 - - m_BuildTarget: LinuxStandaloneSupport - m_GraphicsJobs: 1 - - m_BuildTarget: PS4Player - m_GraphicsJobs: 1 - - m_BuildTarget: iOSSupport - m_GraphicsJobs: 0 - - m_BuildTarget: WindowsStandaloneSupport - m_GraphicsJobs: 1 - - m_BuildTarget: XboxOnePlayer - m_GraphicsJobs: 1 - - m_BuildTarget: LuminSupport - m_GraphicsJobs: 0 - - m_BuildTarget: AndroidPlayer - m_GraphicsJobs: 0 - - m_BuildTarget: WebGLSupport - m_GraphicsJobs: 0 - m_BuildTargetGraphicsJobMode: - - m_BuildTarget: PS4Player - m_GraphicsJobMode: 0 - - m_BuildTarget: XboxOnePlayer - m_GraphicsJobMode: 0 m_BuildTargetGraphicsAPIs: - m_BuildTarget: AndroidPlayer m_APIs: 150000000b000000 @@ -335,9 +297,9 @@ PlayerSettings: m_Devices: - Oculus - OpenVR + m_BuildTargetEnableVuforiaSettings: [] openGLRequireES31: 0 openGLRequireES31AEP: 0 - openGLRequireES32: 0 m_TemplateCustomTags: {} mobileMTRendering: Android: 1 @@ -345,7 +307,6 @@ PlayerSettings: tvOS: 1 m_BuildTargetGroupLightmapEncodingQuality: [] m_BuildTargetGroupLightmapSettings: [] - m_BuildTargetNormalMapEncoding: [] playModeTestRunnerEnabled: 0 runPlayModeTestAsEditModeTest: 0 actionOnDotNetUnhandledException: 1 @@ -355,15 +316,12 @@ PlayerSettings: cameraUsageDescription: locationUsageDescription: microphoneUsageDescription: - bluetoothUsageDescription: - switchNMETAOverride: switchNetLibKey: switchSocketMemoryPoolSize: 6144 switchSocketAllocatorPoolSize: 128 switchSocketConcurrencyLimit: 14 switchScreenResolutionBehavior: 2 switchUseCPUProfiler: 0 - switchUseGOLDLinker: 0 switchApplicationID: 0x01004b9000490000 switchNSODependencies: switchTitleNames_0: @@ -381,7 +339,6 @@ PlayerSettings: switchTitleNames_12: switchTitleNames_13: switchTitleNames_14: - switchTitleNames_15: switchPublisherNames_0: switchPublisherNames_1: switchPublisherNames_2: @@ -397,7 +354,6 @@ PlayerSettings: switchPublisherNames_12: switchPublisherNames_13: switchPublisherNames_14: - switchPublisherNames_15: switchIcons_0: {fileID: 0} switchIcons_1: {fileID: 0} switchIcons_2: {fileID: 0} @@ -413,7 +369,6 @@ PlayerSettings: switchIcons_12: {fileID: 0} switchIcons_13: {fileID: 0} switchIcons_14: {fileID: 0} - switchIcons_15: {fileID: 0} switchSmallIcons_0: {fileID: 0} switchSmallIcons_1: {fileID: 0} switchSmallIcons_2: {fileID: 0} @@ -429,7 +384,6 @@ PlayerSettings: switchSmallIcons_12: {fileID: 0} switchSmallIcons_13: {fileID: 0} switchSmallIcons_14: {fileID: 0} - switchSmallIcons_15: {fileID: 0} switchManualHTML: switchAccessibleURLs: switchLegalInformation: @@ -461,7 +415,6 @@ PlayerSettings: switchRatingsInt_9: 0 switchRatingsInt_10: 0 switchRatingsInt_11: 0 - switchRatingsInt_12: 0 switchLocalCommunicationIds_0: switchLocalCommunicationIds_1: switchLocalCommunicationIds_2: @@ -492,11 +445,6 @@ PlayerSettings: switchSocketInitializeEnabled: 1 switchNetworkInterfaceManagerInitializeEnabled: 1 switchPlayerConnectionEnabled: 1 - switchUseNewStyleFilepaths: 0 - switchUseMicroSleepForYield: 1 - switchEnableRamDiskSupport: 0 - switchMicroSleepForYieldTime: 25 - switchRamDiskSpaceSize: 12 ps4NPAgeRating: 12 ps4NPTitleSecret: ps4NPTrophyPackPath: @@ -523,7 +471,6 @@ PlayerSettings: ps4ShareFilePath: ps4ShareOverlayImagePath: ps4PrivacyGuardImagePath: - ps4ExtraSceSysFile: ps4NPtitleDatPath: ps4RemotePlayKeyAssignment: -1 ps4RemotePlayKeyMappingDir: @@ -536,7 +483,6 @@ PlayerSettings: ps4DownloadDataSize: 0 ps4GarlicHeapSize: 2048 ps4ProGarlicHeapSize: 2560 - playerPrefsMaxSize: 32768 ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ ps4pnSessions: 1 ps4pnPresence: 1 @@ -549,7 +495,6 @@ PlayerSettings: ps4UseResolutionFallback: 0 ps4ReprojectionSupport: 0 ps4UseAudio3dBackend: 0 - ps4UseLowGarlicFragmentationMode: 1 ps4SocialScreenEnabled: 0 ps4ScriptOptimizationLevel: 0 ps4Audio3dVirtualSpeakerCount: 14 @@ -566,16 +511,11 @@ PlayerSettings: ps4disableAutoHideSplash: 0 ps4videoRecordingFeaturesUsed: 0 ps4contentSearchFeaturesUsed: 0 - ps4CompatibilityPS5: 0 - ps4AllowPS5Detection: 0 - ps4GPU800MHz: 1 ps4attribEyeToEyeDistanceSettingVR: 0 ps4IncludedModules: [] - ps4attribVROutputEnabled: 0 monoEnv: splashScreenBackgroundSourceLandscape: {fileID: 0} splashScreenBackgroundSourcePortrait: {fileID: 0} - blurSplashScreenBackground: 1 spritePackerPolicy: webGLMemorySize: 16 webGLExceptionSupport: 1 @@ -588,27 +528,17 @@ PlayerSettings: webGLAnalyzeBuildSize: 0 webGLUseEmbeddedResources: 0 webGLCompressionFormat: 1 - webGLWasmArithmeticExceptions: 0 webGLLinkerTarget: 1 webGLThreadsSupport: 0 - webGLDecompressionFallback: 0 scriptingDefineSymbols: {} - additionalCompilerArguments: {} platformArchitecture: {} scriptingBackend: {} il2cppCompilerConfiguration: {} managedStrippingLevel: {} incrementalIl2cppBuild: {} - suppressCommonWarnings: 1 allowUnsafeCode: 0 - useDeterministicCompilation: 1 - useReferenceAssemblies: 1 - enableRoslynAnalyzers: 1 additionalIl2CppArgs: scriptingRuntimeVersion: 1 - gcIncremental: 1 - assemblyVersionValidation: 1 - gcWBarrierValidation: 0 apiCompatibilityLevelPerPlatform: {} m_RenderingPath: 1 m_MobileRenderingPath: 1 @@ -631,14 +561,15 @@ PlayerSettings: metroDefaultTileSize: 1 metroTileForegroundText: 2 metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} - metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, a: 1} + metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, + a: 1} metroSplashScreenUseBackgroundColor: 0 platformCapabilities: {} metroTargetDeviceFamilies: {} metroFTAName: metroFTAFileTypes: [] metroProtocolName: - vcxProjDefaultLanguage: + metroCompilationOverrides: 1 XboxOneProductId: XboxOneUpdateKey: XboxOneSandboxId: @@ -657,16 +588,18 @@ PlayerSettings: XboxOneCapability: [] XboxOneGameRating: {} XboxOneIsContentPackage: 0 - XboxOneEnhancedXboxCompatibilityMode: 0 XboxOneEnableGPUVariability: 1 XboxOneSockets: {} XboxOneSplashScreen: {fileID: 0} XboxOneAllowedProductIds: [] XboxOnePersistentLocalStorageSize: 0 XboxOneXTitleMemory: 8 + xboxOneScriptCompiler: 0 XboxOneOverrideIdentityName: - XboxOneOverrideIdentityPublisher: - vrEditorSettings: {} + vrEditorSettings: + daydream: + daydreamIconForeground: {fileID: 0} + daydreamIconBackground: {fileID: 0} cloudServicesEnabled: UNet: 1 luminIcon: @@ -675,18 +608,24 @@ PlayerSettings: m_PortalFolderPath: luminCert: m_CertPath: - m_SignPackage: 1 + m_PrivateKeyPath: luminIsChannelApp: 0 luminVersion: m_VersionCode: 1 m_VersionName: + facebookSdkVersion: + facebookAppId: + facebookCookies: 1 + facebookLogging: 1 + facebookStatus: 1 + facebookXfbml: 0 + facebookFrictionlessRequests: 1 apiCompatibilityLevel: 6 - activeInputHandler: 0 cloudProjectId: framebufferDepthMemorylessMode: 0 - qualitySettingsNames: [] projectName: organizationId: cloudEnabled: 0 + enableNativePlatformBackendsForNewInputSystem: 0 + disableOldInputManagerSupport: 0 legacyClampBlendShapeWeights: 0 - virtualTexturingSupportEnabled: 0 diff --git a/FieldSearch/ProjectSettings/ProjectSettings.asset.meta b/FieldSearch/ProjectSettings/ProjectSettings.asset.meta new file mode 100644 index 0000000..c5ed832 --- /dev/null +++ b/FieldSearch/ProjectSettings/ProjectSettings.asset.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 6b32bf1358ec0a641af6ae6bf96f4c56 \ No newline at end of file diff --git a/ProjectSettings/ProjectVersion.txt b/FieldSearch/ProjectSettings/ProjectVersion.txt similarity index 100% rename from ProjectSettings/ProjectVersion.txt rename to FieldSearch/ProjectSettings/ProjectVersion.txt diff --git a/FieldSearch/ProjectSettings/ProjectVersion.txt.meta b/FieldSearch/ProjectSettings/ProjectVersion.txt.meta new file mode 100644 index 0000000..aefe06e --- /dev/null +++ b/FieldSearch/ProjectSettings/ProjectVersion.txt.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 64d8eed60a64790478b1ba2da912ea6e \ No newline at end of file diff --git a/ProjectSettings/QualitySettings.asset b/FieldSearch/ProjectSettings/QualitySettings.asset similarity index 100% rename from ProjectSettings/QualitySettings.asset rename to FieldSearch/ProjectSettings/QualitySettings.asset diff --git a/FieldSearch/ProjectSettings/QualitySettings.asset.meta b/FieldSearch/ProjectSettings/QualitySettings.asset.meta new file mode 100644 index 0000000..748902c --- /dev/null +++ b/FieldSearch/ProjectSettings/QualitySettings.asset.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: b79ef4057184cb542b0102b32e55434e \ No newline at end of file diff --git a/ProjectSettings/TagManager.asset b/FieldSearch/ProjectSettings/TagManager.asset similarity index 100% rename from ProjectSettings/TagManager.asset rename to FieldSearch/ProjectSettings/TagManager.asset diff --git a/FieldSearch/ProjectSettings/TagManager.asset.meta b/FieldSearch/ProjectSettings/TagManager.asset.meta new file mode 100644 index 0000000..7a182b1 --- /dev/null +++ b/FieldSearch/ProjectSettings/TagManager.asset.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: f3be266a905161747990142135f3d0a5 \ No newline at end of file diff --git a/ProjectSettings/TimeManager.asset b/FieldSearch/ProjectSettings/TimeManager.asset similarity index 100% rename from ProjectSettings/TimeManager.asset rename to FieldSearch/ProjectSettings/TimeManager.asset diff --git a/FieldSearch/ProjectSettings/TimeManager.asset.meta b/FieldSearch/ProjectSettings/TimeManager.asset.meta new file mode 100644 index 0000000..2af64a1 --- /dev/null +++ b/FieldSearch/ProjectSettings/TimeManager.asset.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 0c141e999dc5801439665d3cc5c626d6 \ No newline at end of file diff --git a/ProjectSettings/UnityConnectSettings.asset b/FieldSearch/ProjectSettings/UnityConnectSettings.asset similarity index 94% rename from ProjectSettings/UnityConnectSettings.asset rename to FieldSearch/ProjectSettings/UnityConnectSettings.asset index 6125b30..fa0b146 100644 --- a/ProjectSettings/UnityConnectSettings.asset +++ b/FieldSearch/ProjectSettings/UnityConnectSettings.asset @@ -9,7 +9,6 @@ UnityConnectSettings: m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events m_EventUrl: https://cdp.cloud.unity3d.com/v1/events m_ConfigUrl: https://config.uca.cloud.unity3d.com - m_DashboardUrl: https://dashboard.unity3d.com m_TestInitMode: 0 CrashReportingSettings: m_EventUrl: https://perf-events.cloud.unity3d.com diff --git a/FieldSearch/ProjectSettings/UnityConnectSettings.asset.meta b/FieldSearch/ProjectSettings/UnityConnectSettings.asset.meta new file mode 100644 index 0000000..bcb0509 --- /dev/null +++ b/FieldSearch/ProjectSettings/UnityConnectSettings.asset.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: d4532cab1a03f324485144434af856cf \ No newline at end of file diff --git a/ProjectSettings/VFXManager.asset b/FieldSearch/ProjectSettings/VFXManager.asset similarity index 88% rename from ProjectSettings/VFXManager.asset rename to FieldSearch/ProjectSettings/VFXManager.asset index 3a95c98..6e0eaca 100644 --- a/ProjectSettings/VFXManager.asset +++ b/FieldSearch/ProjectSettings/VFXManager.asset @@ -6,7 +6,6 @@ VFXManager: m_IndirectShader: {fileID: 0} m_CopyBufferShader: {fileID: 0} m_SortShader: {fileID: 0} - m_StripUpdateShader: {fileID: 0} m_RenderPipeSettingsPath: m_FixedTimeStep: 0.016666668 m_MaxDeltaTime: 0.05 diff --git a/FieldSearch/ProjectSettings/VFXManager.asset.meta b/FieldSearch/ProjectSettings/VFXManager.asset.meta new file mode 100644 index 0000000..dc371c9 --- /dev/null +++ b/FieldSearch/ProjectSettings/VFXManager.asset.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: c438b4ef9cbb9494d93982c2e89272e1 \ No newline at end of file diff --git a/ProjectSettings/VersionControlSettings.asset b/FieldSearch/ProjectSettings/VersionControlSettings.asset similarity index 100% rename from ProjectSettings/VersionControlSettings.asset rename to FieldSearch/ProjectSettings/VersionControlSettings.asset diff --git a/FieldSearch/ProjectSettings/VersionControlSettings.asset.meta b/FieldSearch/ProjectSettings/VersionControlSettings.asset.meta new file mode 100644 index 0000000..6ceb556 --- /dev/null +++ b/FieldSearch/ProjectSettings/VersionControlSettings.asset.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 61123fd035712c74bac110225eabf8f2 \ No newline at end of file diff --git a/ProjectSettings/XRSettings.asset b/FieldSearch/ProjectSettings/XRSettings.asset similarity index 100% rename from ProjectSettings/XRSettings.asset rename to FieldSearch/ProjectSettings/XRSettings.asset diff --git a/FieldSearch/ProjectSettings/XRSettings.asset.meta b/FieldSearch/ProjectSettings/XRSettings.asset.meta new file mode 100644 index 0000000..d5d1547 --- /dev/null +++ b/FieldSearch/ProjectSettings/XRSettings.asset.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: e858358aac0f67740a18ff693bf2f14d \ No newline at end of file diff --git a/FieldSearch/Temp.meta b/FieldSearch/Temp.meta new file mode 100644 index 0000000..72612e4 --- /dev/null +++ b/FieldSearch/Temp.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1f80b659e82e4bb4db442becc2ae6469 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/UserSettings.meta b/FieldSearch/UserSettings.meta new file mode 100644 index 0000000..6a1431f --- /dev/null +++ b/FieldSearch/UserSettings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0ba647f7db6c5ff47a7801e2243fbf5e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/FieldSearch/obj.meta b/FieldSearch/obj.meta new file mode 100644 index 0000000..03d90a2 --- /dev/null +++ b/FieldSearch/obj.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: eb88729c7033fda4fa8a2542f2a23967 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json deleted file mode 100644 index 51e4c4d..0000000 --- a/Packages/packages-lock.json +++ /dev/null @@ -1,349 +0,0 @@ -{ - "dependencies": { - "com.unity.collab-proxy": { - "version": "1.15.17", - "depth": 0, - "source": "registry", - "dependencies": { - "com.unity.services.core": "1.0.1" - }, - "url": "https://packages.unity.com" - }, - "com.unity.ext.nunit": { - "version": "1.0.6", - "depth": 1, - "source": "registry", - "dependencies": {}, - "url": "https://packages.unity.com" - }, - "com.unity.ide.rider": { - "version": "2.0.7", - "depth": 0, - "source": "registry", - "dependencies": { - "com.unity.test-framework": "1.1.1" - }, - "url": "https://packages.unity.com" - }, - "com.unity.ide.visualstudio": { - "version": "2.0.15", - "depth": 0, - "source": "registry", - "dependencies": { - "com.unity.test-framework": "1.1.9" - }, - "url": "https://packages.unity.com" - }, - "com.unity.ide.vscode": { - "version": "1.2.5", - "depth": 0, - "source": "registry", - "dependencies": {}, - "url": "https://packages.unity.com" - }, - "com.unity.services.core": { - "version": "1.0.1", - "depth": 1, - "source": "registry", - "dependencies": { - "com.unity.modules.unitywebrequest": "1.0.0" - }, - "url": "https://packages.unity.com" - }, - "com.unity.test-framework": { - "version": "1.1.31", - "depth": 0, - "source": "registry", - "dependencies": { - "com.unity.ext.nunit": "1.0.6", - "com.unity.modules.imgui": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0" - }, - "url": "https://packages.unity.com" - }, - "com.unity.textmeshpro": { - "version": "3.0.6", - "depth": 0, - "source": "registry", - "dependencies": { - "com.unity.ugui": "1.0.0" - }, - "url": "https://packages.unity.com" - }, - "com.unity.timeline": { - "version": "1.4.8", - "depth": 0, - "source": "registry", - "dependencies": { - "com.unity.modules.director": "1.0.0", - "com.unity.modules.animation": "1.0.0", - "com.unity.modules.audio": "1.0.0", - "com.unity.modules.particlesystem": "1.0.0" - }, - "url": "https://packages.unity.com" - }, - "com.unity.ugui": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.ui": "1.0.0", - "com.unity.modules.imgui": "1.0.0" - } - }, - "com.unity.modules.ai": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.androidjni": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.animation": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.assetbundle": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.audio": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.cloth": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.physics": "1.0.0" - } - }, - "com.unity.modules.director": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.audio": "1.0.0", - "com.unity.modules.animation": "1.0.0" - } - }, - "com.unity.modules.imageconversion": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.imgui": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.jsonserialize": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.particlesystem": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.physics": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.physics2d": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.screencapture": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.imageconversion": "1.0.0" - } - }, - "com.unity.modules.subsystems": { - "version": "1.0.0", - "depth": 1, - "source": "builtin", - "dependencies": { - "com.unity.modules.jsonserialize": "1.0.0" - } - }, - "com.unity.modules.terrain": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.terrainphysics": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.physics": "1.0.0", - "com.unity.modules.terrain": "1.0.0" - } - }, - "com.unity.modules.tilemap": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.physics2d": "1.0.0" - } - }, - "com.unity.modules.ui": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.uielements": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.ui": "1.0.0", - "com.unity.modules.imgui": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0", - "com.unity.modules.uielementsnative": "1.0.0" - } - }, - "com.unity.modules.uielementsnative": { - "version": "1.0.0", - "depth": 1, - "source": "builtin", - "dependencies": { - "com.unity.modules.ui": "1.0.0", - "com.unity.modules.imgui": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0" - } - }, - "com.unity.modules.umbra": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.unityanalytics": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.unitywebrequest": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0" - } - }, - "com.unity.modules.unitywebrequest": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.unitywebrequestassetbundle": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.assetbundle": "1.0.0", - "com.unity.modules.unitywebrequest": "1.0.0" - } - }, - "com.unity.modules.unitywebrequestaudio": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.unitywebrequest": "1.0.0", - "com.unity.modules.audio": "1.0.0" - } - }, - "com.unity.modules.unitywebrequesttexture": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.unitywebrequest": "1.0.0", - "com.unity.modules.imageconversion": "1.0.0" - } - }, - "com.unity.modules.unitywebrequestwww": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.unitywebrequest": "1.0.0", - "com.unity.modules.unitywebrequestassetbundle": "1.0.0", - "com.unity.modules.unitywebrequestaudio": "1.0.0", - "com.unity.modules.audio": "1.0.0", - "com.unity.modules.assetbundle": "1.0.0", - "com.unity.modules.imageconversion": "1.0.0" - } - }, - "com.unity.modules.vehicles": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.physics": "1.0.0" - } - }, - "com.unity.modules.video": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.audio": "1.0.0", - "com.unity.modules.ui": "1.0.0", - "com.unity.modules.unitywebrequest": "1.0.0" - } - }, - "com.unity.modules.vr": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.jsonserialize": "1.0.0", - "com.unity.modules.physics": "1.0.0", - "com.unity.modules.xr": "1.0.0" - } - }, - "com.unity.modules.wind": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": {} - }, - "com.unity.modules.xr": { - "version": "1.0.0", - "depth": 0, - "source": "builtin", - "dependencies": { - "com.unity.modules.physics": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0", - "com.unity.modules.subsystems": "1.0.0" - } - } - } -} diff --git a/README.md b/README.md index 5991d20..3ff5f3b 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,82 @@ -# FieldSearch-Unity +# FieldSearch-Unity V1.0.3 + ![image](https://user-images.githubusercontent.com/65833201/194973078-7e30de6f-072f-4861-a444-0338d207aa48.png) + +- Ability to set SearchableEditor for all MonoBehaviour +- Add to project without git handler +- Save your requests between sessions with caching logic +- Default Search with criteria (ObjName, FieldName) && options (StartWith, IgnoreCase) +- Create your own search logic if necessary +- Override current CustomEditors with EditorScriptGeneratorWindow + +[Docs link](https://proton-v.github.io/FieldSearch-Unity/html/index.html) + +### Tested on: + - Unity Editor: 2018.4.3f1 | 2020.3.35f1 + - OS: Windows 10 + +# Quick start +## Step 1 (Optional) + +You can install this as package (nit: git will always handle "package.json" && lock file). + +Use **PackageManager -> Add package from git URL...** +>https://github.com/Proton-V/FieldSearch-Unity.git?path=/FieldSearch/Assets/FieldSearch + +If you want example of using SearchableEditor for specific MonoBehaviour please see **Step 2** + +## Step 2 + +***Skip this if you installed this as package && you don't want to add a "FieldSearchDemo" folder*** + +Download && Import [latest asset package V1.0.3](https://github.com/Proton-V/FieldSearch-Unity/releases/download/V1.0.3/FieldSearch-UnityV1.0.3.unitypackage) + +**"FieldSearchDemo" folder (optional) contains example of using SearchableEditor for specific MonoBehaviour** +- [ ] Uncheck "FieldSearchDemo" folder **if you don't need it**. +- [ ] Uncheck "FieldSearch" folder **if you have this as pacakge**. + +![image](https://user-images.githubusercontent.com/65833201/194972948-a2bdd961-ae6d-4c6f-a77b-4c4507e9f00c.png) + +## Step 3 + +Create instance of default settings +**Field Search -> Add default settings ...** + +![image](https://user-images.githubusercontent.com/65833201/194972261-a7422752-be08-4f3b-a300-5022a309a4fb.png) + +## Step 4 (Optional) + +**Field Search -> Add package folders to .gitignore (global)** + +After adding this package as asset you have tracked files for you git repo. + +***You can remove it for git without updating .gitignore in repo*** + +Before press: + +![image](https://user-images.githubusercontent.com/65833201/188505094-ca7a51d4-0a4d-405e-815c-9ec218d6d68d.png) + +After press: + +![image](https://user-images.githubusercontent.com/65833201/188505211-4babd641-af57-469b-8758-acd4ed020d9d.png) + +### ***Also you can undo it*** +**Field Search -> Remove package folders from .gitignore (global)** + +# Settings +![image](https://user-images.githubusercontent.com/65833201/194972690-b6738e15-76b8-4859-965a-0f84df587674.png) +1. Apply SearchableEditor to all MonoBehaviour (who don't use custom inspector) +2. You can create && set custom SearchableLayerInspector to change default view of SearchableEditor +3. Save cache to disk to use previous cache between sessions +4. Memory limit in MB - memory and disk cache limit +5. Ref to EditorScriptGeneratorSettings +6. Clear cache buttons +7. Open EditorScriptGenerator window button + +> ## EditorScriptGenerator Window +> +> You can try to override current active editors +> +> ![image](https://user-images.githubusercontent.com/65833201/194973264-a3edc661-75f5-4d15-aca5-3fc7446ff483.png) +> +> * You can create your own Generation Template && Generator