├── add.gif ├── BookmarkEverything ├── ProjectSettings │ ├── ProjectVersion.txt │ ├── ClusterInputManager.asset │ ├── NetworkManager.asset │ ├── TimeManager.asset │ ├── EditorBuildSettings.asset │ ├── PresetManager.asset │ ├── AudioManager.asset │ ├── TagManager.asset │ ├── EditorSettings.asset │ ├── UnityConnectSettings.asset │ ├── DynamicsManager.asset │ ├── NavMeshAreas.asset │ ├── GraphicsSettings.asset │ ├── Physics2DSettings.asset │ ├── QualitySettings.asset │ ├── InputManager.asset │ └── ProjectSettings.asset ├── Assets │ ├── BookmarkEverything │ │ ├── BookmarkEverything-Documentation.pdf │ │ ├── Editor.meta │ │ ├── BookmarkEverything-Documentation.pdf.meta │ │ └── Editor │ │ │ ├── IOHelper.cs.meta │ │ │ ├── BookmarkEverythingEditor.cs.meta │ │ │ ├── EntryDataGUIDComparer.cs.meta │ │ │ ├── EntryDataGUIDComparer.cs │ │ │ ├── IOHelper.cs │ │ │ └── BookmarkEverythingEditor.cs │ ├── Scenes │ │ ├── SampleScene.unity.meta │ │ └── SampleScene.unity │ ├── Scenes.meta │ └── BookmarkEverything.meta └── Packages │ └── manifest.json ├── multiadd.gif ├── navigate.gif ├── .gitignore ├── LICENSE └── README.md /add.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dogukanerkut/bookmark-everything/HEAD/add.gif -------------------------------------------------------------------------------- /BookmarkEverything/ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 2018.2.12f1 2 | -------------------------------------------------------------------------------- /multiadd.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dogukanerkut/bookmark-everything/HEAD/multiadd.gif -------------------------------------------------------------------------------- /navigate.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dogukanerkut/bookmark-everything/HEAD/navigate.gif -------------------------------------------------------------------------------- /BookmarkEverything/ProjectSettings/ClusterInputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!236 &1 4 | ClusterInputManager: 5 | m_ObjectHideFlags: 0 6 | m_Inputs: [] 7 | -------------------------------------------------------------------------------- /BookmarkEverything/Assets/BookmarkEverything/BookmarkEverything-Documentation.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dogukanerkut/bookmark-everything/HEAD/BookmarkEverything/Assets/BookmarkEverything/BookmarkEverything-Documentation.pdf -------------------------------------------------------------------------------- /BookmarkEverything/Assets/Scenes/SampleScene.unity.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2cda990e2423bbf4892e6590ba056729 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /BookmarkEverything/ProjectSettings/NetworkManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!149 &1 4 | NetworkManager: 5 | m_ObjectHideFlags: 0 6 | m_DebugLevel: 0 7 | m_Sendrate: 15 8 | m_AssetToPrefab: {} 9 | -------------------------------------------------------------------------------- /BookmarkEverything/Assets/Scenes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 131a6b21c8605f84396be9f6751fb6e3 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /BookmarkEverything/Assets/BookmarkEverything.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1f29a210b29225041956be04d2353475 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /BookmarkEverything/Assets/BookmarkEverything/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 60063cb79de30b441a934dc0b0755811 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /BookmarkEverything/Assets/BookmarkEverything/BookmarkEverything-Documentation.pdf.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1fcc3ec785c03cb40a83946b57fcbf6b 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /BookmarkEverything/ProjectSettings/TimeManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!5 &1 4 | TimeManager: 5 | m_ObjectHideFlags: 0 6 | Fixed Timestep: 0.02 7 | Maximum Allowed Timestep: 0.1 8 | m_TimeScale: 1 9 | Maximum Particle Timestep: 0.03 10 | -------------------------------------------------------------------------------- /BookmarkEverything/Assets/BookmarkEverything/Editor/IOHelper.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 10b25ca066b4e714280829ee6c485b61 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /BookmarkEverything/ProjectSettings/EditorBuildSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1045 &1 4 | EditorBuildSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Scenes: 8 | - enabled: 1 9 | path: Assets/Scenes/SampleScene.unity 10 | guid: 2cda990e2423bbf4892e6590ba056729 11 | m_configObjects: {} 12 | -------------------------------------------------------------------------------- /BookmarkEverything/Assets/BookmarkEverything/Editor/BookmarkEverythingEditor.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 61a4dc2711454e2439828a035aa086c7 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /BookmarkEverything/Assets/BookmarkEverything/Editor/EntryDataGUIDComparer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2c4dce16e0f44cf4db62a7c93b5cbc80 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /BookmarkEverything/ProjectSettings/PresetManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1386491679 &1 4 | PresetManager: 5 | m_ObjectHideFlags: 0 6 | m_DefaultList: 7 | - type: 8 | m_NativeTypeID: 20 9 | m_ManagedTypePPtr: {fileID: 0} 10 | m_ManagedTypeFallback: 11 | defaultPresets: 12 | - m_Preset: {fileID: 2655988077585873504, guid: bfcfc320427f8224bbb7a96f3d3aebad, 13 | type: 2} 14 | -------------------------------------------------------------------------------- /BookmarkEverything/ProjectSettings/AudioManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!11 &1 4 | AudioManager: 5 | m_ObjectHideFlags: 0 6 | m_Volume: 1 7 | Rolloff Scale: 1 8 | Doppler Factor: 1 9 | Default Speaker Mode: 2 10 | m_SampleRate: 0 11 | m_DSPBufferSize: 1024 12 | m_VirtualVoiceCount: 512 13 | m_RealVoiceCount: 32 14 | m_SpatializerPlugin: 15 | m_AmbisonicDecoderPlugin: 16 | m_DisableAudio: 0 17 | m_VirtualizeEffects: 1 18 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | [Ll]ibrary/ 2 | [Tt]emp/ 3 | [Oo]bj/ 4 | [Bb]uild/ 5 | [Bb]uilds/ 6 | Assets/AssetStoreTools* 7 | 8 | # Visual Studio cache directory 9 | .vs/ 10 | 11 | # Autogenerated VS/MD/Consulo solution and project files 12 | ExportedObj/ 13 | .consulo/ 14 | *.csproj 15 | *.unityproj 16 | *.sln 17 | *.suo 18 | *.tmp 19 | *.user 20 | *.userprefs 21 | *.pidb 22 | *.booproj 23 | *.svd 24 | *.pdb 25 | *.opendb 26 | 27 | # Unity3D generated meta files 28 | *.pidb.meta 29 | *.pdb.meta 30 | 31 | # Unity3D Generated File On Crash Reports 32 | sysinfo.txt 33 | 34 | # Builds 35 | *.apk 36 | *.unitypackage 37 | -------------------------------------------------------------------------------- /BookmarkEverything/ProjectSettings/TagManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!78 &1 4 | TagManager: 5 | serializedVersion: 2 6 | tags: [] 7 | layers: 8 | - Default 9 | - TransparentFX 10 | - Ignore Raycast 11 | - 12 | - Water 13 | - UI 14 | - 15 | - 16 | - 17 | - 18 | - 19 | - 20 | - 21 | - 22 | - 23 | - 24 | - 25 | - 26 | - 27 | - 28 | - 29 | - 30 | - 31 | - 32 | - 33 | - 34 | - 35 | - 36 | - 37 | - 38 | - 39 | - 40 | m_SortingLayers: 41 | - name: Default 42 | uniqueID: 0 43 | locked: 0 44 | -------------------------------------------------------------------------------- /BookmarkEverything/Assets/BookmarkEverything/Editor/EntryDataGUIDComparer.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | namespace BookmarkEverything 3 | { 4 | public class EntryDataGUIDComparer : EqualityComparer 5 | { 6 | public override bool Equals(BookmarkEverythingEditor.EntryData x, BookmarkEverythingEditor.EntryData y) 7 | { 8 | return x.GUID == y.GUID; 9 | } 10 | 11 | public override int GetHashCode(BookmarkEverythingEditor.EntryData obj) 12 | { 13 | throw new System.NotImplementedException(); 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /BookmarkEverything/ProjectSettings/EditorSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!159 &1 4 | EditorSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 7 7 | m_ExternalVersionControlSupport: Visible Meta Files 8 | m_SerializationMode: 2 9 | m_LineEndingsForNewScripts: 2 10 | m_DefaultBehaviorMode: 1 11 | m_SpritePackerMode: 4 12 | m_SpritePackerPaddingPower: 1 13 | m_EtcTextureCompressorBehavior: 1 14 | m_EtcTextureFastCompressor: 1 15 | m_EtcTextureNormalCompressor: 2 16 | m_EtcTextureBestCompressor: 4 17 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd 18 | m_ProjectGenerationRootNamespace: 19 | m_UserGeneratedProjectSuffix: 20 | m_CollabEditorSettings: 21 | inProgressEnabled: 1 22 | -------------------------------------------------------------------------------- /BookmarkEverything/ProjectSettings/UnityConnectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!310 &1 4 | UnityConnectSettings: 5 | m_ObjectHideFlags: 0 6 | m_Enabled: 0 7 | m_TestMode: 0 8 | m_TestEventUrl: 9 | m_TestConfigUrl: 10 | m_TestInitMode: 0 11 | CrashReportingSettings: 12 | m_EventUrl: https://perf-events.cloud.unity3d.com/api/events/crashes 13 | m_NativeEventUrl: https://perf-events.cloud.unity3d.com/symbolicate 14 | m_Enabled: 0 15 | m_CaptureEditorExceptions: 1 16 | UnityPurchasingSettings: 17 | m_Enabled: 0 18 | m_TestMode: 0 19 | UnityAnalyticsSettings: 20 | m_Enabled: 0 21 | m_InitializeOnStartup: 1 22 | m_TestMode: 0 23 | m_TestEventUrl: 24 | m_TestConfigUrl: 25 | UnityAdsSettings: 26 | m_Enabled: 0 27 | m_InitializeOnStartup: 1 28 | m_TestMode: 0 29 | m_IosGameId: 30 | m_AndroidGameId: 31 | m_GameIds: {} 32 | m_GameId: 33 | PerformanceReportingSettings: 34 | m_Enabled: 0 35 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Doğukan Erkut 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /BookmarkEverything/ProjectSettings/DynamicsManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!55 &1 4 | PhysicsManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 7 7 | m_Gravity: {x: 0, y: -9.81, z: 0} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_BounceThreshold: 2 10 | m_SleepThreshold: 0.005 11 | m_DefaultContactOffset: 0.01 12 | m_DefaultSolverIterations: 6 13 | m_DefaultSolverVelocityIterations: 1 14 | m_QueriesHitBackfaces: 0 15 | m_QueriesHitTriggers: 1 16 | m_EnableAdaptiveForce: 0 17 | m_ClothInterCollisionDistance: 0 18 | m_ClothInterCollisionStiffness: 0 19 | m_ContactsGeneration: 1 20 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 21 | m_AutoSimulation: 1 22 | m_AutoSyncTransforms: 1 23 | m_ClothInterCollisionSettingsToggle: 0 24 | m_ContactPairsMode: 0 25 | m_BroadphaseType: 0 26 | m_WorldBounds: 27 | m_Center: {x: 0, y: 0, z: 0} 28 | m_Extent: {x: 250, y: 250, z: 250} 29 | m_WorldSubdivisions: 8 30 | -------------------------------------------------------------------------------- /BookmarkEverything/Packages/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "com.unity.package-manager-ui": "1.9.11", 4 | "com.unity.modules.ai": "1.0.0", 5 | "com.unity.modules.animation": "1.0.0", 6 | "com.unity.modules.assetbundle": "1.0.0", 7 | "com.unity.modules.audio": "1.0.0", 8 | "com.unity.modules.cloth": "1.0.0", 9 | "com.unity.modules.director": "1.0.0", 10 | "com.unity.modules.imageconversion": "1.0.0", 11 | "com.unity.modules.imgui": "1.0.0", 12 | "com.unity.modules.jsonserialize": "1.0.0", 13 | "com.unity.modules.particlesystem": "1.0.0", 14 | "com.unity.modules.physics": "1.0.0", 15 | "com.unity.modules.physics2d": "1.0.0", 16 | "com.unity.modules.screencapture": "1.0.0", 17 | "com.unity.modules.terrain": "1.0.0", 18 | "com.unity.modules.terrainphysics": "1.0.0", 19 | "com.unity.modules.tilemap": "1.0.0", 20 | "com.unity.modules.ui": "1.0.0", 21 | "com.unity.modules.uielements": "1.0.0", 22 | "com.unity.modules.umbra": "1.0.0", 23 | "com.unity.modules.unityanalytics": "1.0.0", 24 | "com.unity.modules.unitywebrequest": "1.0.0", 25 | "com.unity.modules.unitywebrequestassetbundle": "1.0.0", 26 | "com.unity.modules.unitywebrequestaudio": "1.0.0", 27 | "com.unity.modules.unitywebrequesttexture": "1.0.0", 28 | "com.unity.modules.unitywebrequestwww": "1.0.0", 29 | "com.unity.modules.vehicles": "1.0.0", 30 | "com.unity.modules.video": "1.0.0", 31 | "com.unity.modules.vr": "1.0.0", 32 | "com.unity.modules.wind": "1.0.0", 33 | "com.unity.modules.xr": "1.0.0" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /BookmarkEverything/ProjectSettings/NavMeshAreas.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!126 &1 4 | NavMeshProjectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | areas: 8 | - name: Walkable 9 | cost: 1 10 | - name: Not Walkable 11 | cost: 1 12 | - name: Jump 13 | cost: 2 14 | - name: 15 | cost: 1 16 | - name: 17 | cost: 1 18 | - name: 19 | cost: 1 20 | - name: 21 | cost: 1 22 | - name: 23 | cost: 1 24 | - name: 25 | cost: 1 26 | - name: 27 | cost: 1 28 | - name: 29 | cost: 1 30 | - name: 31 | cost: 1 32 | - name: 33 | cost: 1 34 | - name: 35 | cost: 1 36 | - name: 37 | cost: 1 38 | - name: 39 | cost: 1 40 | - name: 41 | cost: 1 42 | - name: 43 | cost: 1 44 | - name: 45 | cost: 1 46 | - name: 47 | cost: 1 48 | - name: 49 | cost: 1 50 | - name: 51 | cost: 1 52 | - name: 53 | cost: 1 54 | - name: 55 | cost: 1 56 | - name: 57 | cost: 1 58 | - name: 59 | cost: 1 60 | - name: 61 | cost: 1 62 | - name: 63 | cost: 1 64 | - name: 65 | cost: 1 66 | - name: 67 | cost: 1 68 | - name: 69 | cost: 1 70 | - name: 71 | cost: 1 72 | m_LastAgentTypeID: -887442657 73 | m_Settings: 74 | - serializedVersion: 2 75 | agentTypeID: 0 76 | agentRadius: 0.5 77 | agentHeight: 2 78 | agentSlope: 45 79 | agentClimb: 0.75 80 | ledgeDropHeight: 0 81 | maxJumpAcrossDistance: 0 82 | minRegionArea: 2 83 | manualCellSize: 0 84 | cellSize: 0.16666667 85 | manualTileSize: 0 86 | tileSize: 256 87 | accuratePlacement: 0 88 | debug: 89 | m_Flags: 0 90 | m_SettingNames: 91 | - Humanoid 92 | -------------------------------------------------------------------------------- /BookmarkEverything/ProjectSettings/GraphicsSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!30 &1 4 | GraphicsSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 12 7 | m_Deferred: 8 | m_Mode: 1 9 | m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} 10 | m_DeferredReflections: 11 | m_Mode: 1 12 | m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} 13 | m_ScreenSpaceShadows: 14 | m_Mode: 1 15 | m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} 16 | m_LegacyDeferred: 17 | m_Mode: 1 18 | m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} 19 | m_DepthNormals: 20 | m_Mode: 1 21 | m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} 22 | m_MotionVectors: 23 | m_Mode: 1 24 | m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} 25 | m_LightHalo: 26 | m_Mode: 1 27 | m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} 28 | m_LensFlare: 29 | m_Mode: 1 30 | m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} 31 | m_AlwaysIncludedShaders: 32 | - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} 33 | - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} 34 | - {fileID: 10783, guid: 0000000000000000f000000000000000, type: 0} 35 | m_PreloadedShaders: [] 36 | m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, 37 | type: 0} 38 | m_CustomRenderPipeline: {fileID: 0} 39 | m_TransparencySortMode: 0 40 | m_TransparencySortAxis: {x: 0, y: 0, z: 1} 41 | m_DefaultRenderingPath: 1 42 | m_DefaultMobileRenderingPath: 1 43 | m_TierSettings: [] 44 | m_LightmapStripping: 0 45 | m_FogStripping: 0 46 | m_InstancingStripping: 0 47 | m_LightmapKeepPlain: 1 48 | m_LightmapKeepDirCombined: 1 49 | m_LightmapKeepDynamicPlain: 1 50 | m_LightmapKeepDynamicDirCombined: 1 51 | m_LightmapKeepShadowMask: 1 52 | m_LightmapKeepSubtractive: 1 53 | m_FogKeepLinear: 1 54 | m_FogKeepExp: 1 55 | m_FogKeepExp2: 1 56 | m_AlbedoSwatchInfos: [] 57 | m_LightsUseLinearIntensity: 0 58 | m_LightsUseColorTemperature: 0 59 | -------------------------------------------------------------------------------- /BookmarkEverything/ProjectSettings/Physics2DSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!19 &1 4 | Physics2DSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 3 7 | m_Gravity: {x: 0, y: -9.81} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_VelocityIterations: 8 10 | m_PositionIterations: 3 11 | m_VelocityThreshold: 1 12 | m_MaxLinearCorrection: 0.2 13 | m_MaxAngularCorrection: 8 14 | m_MaxTranslationSpeed: 100 15 | m_MaxRotationSpeed: 360 16 | m_BaumgarteScale: 0.2 17 | m_BaumgarteTimeOfImpactScale: 0.75 18 | m_TimeToSleep: 0.5 19 | m_LinearSleepTolerance: 0.01 20 | m_AngularSleepTolerance: 2 21 | m_DefaultContactOffset: 0.01 22 | m_JobOptions: 23 | serializedVersion: 2 24 | useMultithreading: 0 25 | useConsistencySorting: 0 26 | m_InterpolationPosesPerJob: 100 27 | m_NewContactsPerJob: 30 28 | m_CollideContactsPerJob: 100 29 | m_ClearFlagsPerJob: 200 30 | m_ClearBodyForcesPerJob: 200 31 | m_SyncDiscreteFixturesPerJob: 50 32 | m_SyncContinuousFixturesPerJob: 50 33 | m_FindNearestContactsPerJob: 100 34 | m_UpdateTriggerContactsPerJob: 100 35 | m_IslandSolverCostThreshold: 100 36 | m_IslandSolverBodyCostScale: 1 37 | m_IslandSolverContactCostScale: 10 38 | m_IslandSolverJointCostScale: 10 39 | m_IslandSolverBodiesPerJob: 50 40 | m_IslandSolverContactsPerJob: 50 41 | m_AutoSimulation: 1 42 | m_QueriesHitTriggers: 1 43 | m_QueriesStartInColliders: 1 44 | m_CallbacksOnDisable: 1 45 | m_AutoSyncTransforms: 1 46 | m_AlwaysShowColliders: 0 47 | m_ShowColliderSleep: 1 48 | m_ShowColliderContacts: 0 49 | m_ShowColliderAABB: 0 50 | m_ContactArrowScale: 0.2 51 | m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} 52 | m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} 53 | m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} 54 | m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} 55 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 56 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # bookmark-everything 2 | ## About 3 | This tool enables you to add bookmarks to your project files so you can reach them easily. You can bookmark anything that exists and lives on your project folder. The shortcut is *CTRL+H* or you can open it in Window/Bookmark Everything. It also reflects to path/name changes, asset removals correctly. 4 | 5 | ## Download 6 | [Asset Store Page](https://assetstore.unity.com/packages/tools/utilities/bookmark-everything-134467), or clone/download this repository and add the folder named *BookmarkEverything* to your *Assets* folder. 7 | 8 | ## How to Use 9 | Here are some quick gifs and explanation on how to use it: 10 | 11 | ### Bookmarking Assets 12 | Drag&Drop assets from project folder to the Bookmark window. 13 | ![](add.gif) 14 | ### Bookmarking Multiple Assets 15 | You can select multiple assets from project folder to bookmark them at once. Please note that categories are just for organization purpose, so you can add any asset to any category as you see fit. 16 | ![](multiadd.gif) 17 | ### Navigating to Assets 18 | Just click to the bookmarks and you will be navigated to the asset itself. Your Project window will be automatically focused if it's not active. 19 | ![](navigate.gif) 20 | 21 | ### Settings 22 | In Settings tab, you can manage your registered assets quickly(changing their category, checking them or removing them). Other than that, there are General Settings which is kind of important. Here are the explanations: 23 | 24 | • **Current Ping Type :** Can be Selection, Ping and Both. Selection will only select the object, Ping will only ping the object(ping is some kind of highlight effect of unity) and Both is, well, doing both. 25 | 26 | • **Auto Close :** When you click a bookmark to navigate to the asset, the editor will be automatically closed. 27 | 28 | • **Show Full Path :** Shows full path of the assets(except folder). For example, instead of showing *MyScript.cs* it will show *Assets/Scripts/MyScript.cs* 29 | 30 | • **Show Full Path(Folders) :** Shows full path of the folders. This is enabled by default, because you may have such organization in your project which would use a lot of same-named folders, this is handy. 31 | 32 | • **Visual Mode(Experimental) :** Use it at your own risk. My brain made this in auto-mode while I wasn't actively managing it. 33 | 34 | ## Background Explanation and Limitations 35 | • The system uses json to serialize saved data throught *IOHelper.cs* class. Data is being saved to `Application.persistentDataPath` as `bookmarkeverythingsettings`. It's at *%userprofile%\appdata\locallow\[CompanyName]\[GameName]\bookmarkeverythingsettings.dat* in Windows, I have no idea where it is in Mac. 36 | 37 | • The data being used is *GUID* of assets. So whether you change the name or path of the asset, even delete it, Bookmark Everything will reflect accordingly. In a previous version, I was tracking path of the assets. This was suggested by a reddit user named All4thlulz in [this topic.](https://www.reddit.com/r/Unity3D/comments/a1x43r/i_made_an_editor_for_ease_of_access_to_project/) I thank him again for his suggestion. 38 | 39 | • The icons are the ones which are built inside Unity editor, so no external icons are actually used. 40 | 41 | ### Limitations 42 | • Currently, although fairly enough in my opinion(Starred, Scenes, Prefabs, Scripts, Scriptable Objects) the categories are hardcoded. Which means you can't add your own categories, or remove them of course. I'm planning to add customizable categories so you can add your own categories. 43 | 44 | • Bookmarking objects in hierarchy is not supported. Please contact me if you would like to have this feature, or you can contribute of course. 45 | 46 | • Reorganizing row of bookmarks is not possible. I can add up and down buttons right next to bookmarks, but I didn't see the necessity. On the side note, I tried to do it with Drag&Drop but I couldn't really achieve it. So if you have this piece of information, please contact me. 47 | -------------------------------------------------------------------------------- /BookmarkEverything/Assets/BookmarkEverything/Editor/IOHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using UnityEditor; 4 | using UnityEngine; 5 | 6 | namespace BookmarkEverything 7 | { 8 | public static class IOHelper 9 | { 10 | public static void WriteToDisk(string fileName, object serializeObject) 11 | { 12 | string path = Application.persistentDataPath + "/" + fileName + ".dat"; 13 | #if UNITY_5_4_OR_NEWER 14 | string str = JsonUtility.ToJson(serializeObject); 15 | File.AppendAllText(path, str + Environment.NewLine); 16 | #else 17 | System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); 18 | FileStream fs = new FileStream(path, FileMode.OpenOrCreate); 19 | bf.Serialize(fs, serializeObject); 20 | fs.Close(); 21 | #endif 22 | } 23 | public static T ReadFromDisk(string fileName) 24 | { 25 | string path = Application.persistentDataPath + "/" + fileName + ".dat"; 26 | T returnObject = default(T); 27 | if (File.Exists(path)) 28 | { 29 | #if UNITY_5_4_OR_NEWER 30 | using (StreamReader streamReader = new StreamReader(path)) 31 | { 32 | string line; 33 | while (!string.IsNullOrEmpty(line = streamReader.ReadLine())) 34 | { 35 | returnObject = Deserialize(line); 36 | } 37 | } 38 | #else 39 | FileStream fs = new FileStream(path, FileMode.Open); 40 | System.Runtime.Serialization.Formatters.Binary.BinaryFormatter bf = new System.Runtime.Serialization.Formatters.Binary.BinaryFormatter(); 41 | fs.Seek(0, SeekOrigin.Begin); 42 | returnObject = (T)bf.Deserialize(fs); 43 | fs.Close(); 44 | #endif 45 | } 46 | return returnObject; 47 | } 48 | #if UNITY_5_4_OR_NEWER 49 | private static T Deserialize(string text) 50 | { 51 | text = text.Trim(); 52 | Type typeFromHandle = typeof(T); 53 | object obj = null; 54 | try 55 | { 56 | obj = JsonUtility.FromJson(text); 57 | } 58 | catch (Exception ex) 59 | { 60 | Debug.LogError("Cannot deserialize to type " + typeFromHandle.ToString() + ": " + ex.Message + ", Json string: " + text); 61 | } 62 | if (obj != null && obj.GetType() == typeFromHandle) 63 | { 64 | return (T)obj; 65 | } 66 | return default(T); 67 | } 68 | #endif 69 | public static void ClearData(string fileName) 70 | { 71 | string path = Application.persistentDataPath + "/" + fileName + ".dat"; 72 | if (File.Exists(path)) 73 | { 74 | using (FileStream fileStream = File.Open(path, FileMode.Open)) 75 | { 76 | fileStream.SetLength(0L); 77 | } 78 | } 79 | } 80 | 81 | public static bool Exists(string value, ExistentialCheckStrategy strategy = ExistentialCheckStrategy.Path) 82 | { 83 | if (strategy == ExistentialCheckStrategy.GUID) 84 | { 85 | value = AssetDatabase.GUIDToAssetPath(value); 86 | } 87 | bool existsDir = Directory.Exists(value); 88 | bool existsFile = File.Exists(value); 89 | return existsDir || existsFile; 90 | } 91 | public static bool IsFolder(string value, ExistentialCheckStrategy strategy = ExistentialCheckStrategy.Path) 92 | { 93 | if (strategy == ExistentialCheckStrategy.GUID) 94 | { 95 | value = AssetDatabase.GUIDToAssetPath(value); 96 | } 97 | return Directory.Exists(value); 98 | } 99 | 100 | } 101 | public enum ExistentialCheckStrategy // :) 102 | { 103 | Path, 104 | GUID 105 | } 106 | } -------------------------------------------------------------------------------- /BookmarkEverything/ProjectSettings/QualitySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!47 &1 4 | QualitySettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 5 7 | m_CurrentQuality: 3 8 | m_QualitySettings: 9 | - serializedVersion: 2 10 | name: Very Low 11 | pixelLightCount: 0 12 | shadows: 0 13 | shadowResolution: 0 14 | shadowProjection: 1 15 | shadowCascades: 1 16 | shadowDistance: 15 17 | shadowNearPlaneOffset: 3 18 | shadowCascade2Split: 0.33333334 19 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 20 | shadowmaskMode: 0 21 | blendWeights: 1 22 | textureQuality: 1 23 | anisotropicTextures: 0 24 | antiAliasing: 0 25 | softParticles: 0 26 | softVegetation: 0 27 | realtimeReflectionProbes: 0 28 | billboardsFaceCameraPosition: 0 29 | vSyncCount: 0 30 | lodBias: 0.3 31 | maximumLODLevel: 0 32 | particleRaycastBudget: 4 33 | asyncUploadTimeSlice: 2 34 | asyncUploadBufferSize: 4 35 | resolutionScalingFixedDPIFactor: 1 36 | excludedTargetPlatforms: [] 37 | - serializedVersion: 2 38 | name: Low 39 | pixelLightCount: 0 40 | shadows: 0 41 | shadowResolution: 0 42 | shadowProjection: 1 43 | shadowCascades: 1 44 | shadowDistance: 20 45 | shadowNearPlaneOffset: 3 46 | shadowCascade2Split: 0.33333334 47 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 48 | shadowmaskMode: 0 49 | blendWeights: 2 50 | textureQuality: 0 51 | anisotropicTextures: 0 52 | antiAliasing: 0 53 | softParticles: 0 54 | softVegetation: 0 55 | realtimeReflectionProbes: 0 56 | billboardsFaceCameraPosition: 0 57 | vSyncCount: 0 58 | lodBias: 0.4 59 | maximumLODLevel: 0 60 | particleRaycastBudget: 16 61 | asyncUploadTimeSlice: 2 62 | asyncUploadBufferSize: 4 63 | resolutionScalingFixedDPIFactor: 1 64 | excludedTargetPlatforms: [] 65 | - serializedVersion: 2 66 | name: Medium 67 | pixelLightCount: 1 68 | shadows: 0 69 | shadowResolution: 0 70 | shadowProjection: 1 71 | shadowCascades: 1 72 | shadowDistance: 20 73 | shadowNearPlaneOffset: 3 74 | shadowCascade2Split: 0.33333334 75 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 76 | shadowmaskMode: 0 77 | blendWeights: 2 78 | textureQuality: 0 79 | anisotropicTextures: 0 80 | antiAliasing: 0 81 | softParticles: 0 82 | softVegetation: 0 83 | realtimeReflectionProbes: 0 84 | billboardsFaceCameraPosition: 0 85 | vSyncCount: 1 86 | lodBias: 0.7 87 | maximumLODLevel: 0 88 | particleRaycastBudget: 64 89 | asyncUploadTimeSlice: 2 90 | asyncUploadBufferSize: 4 91 | resolutionScalingFixedDPIFactor: 1 92 | excludedTargetPlatforms: [] 93 | - serializedVersion: 2 94 | name: High 95 | pixelLightCount: 2 96 | shadows: 0 97 | shadowResolution: 1 98 | shadowProjection: 1 99 | shadowCascades: 2 100 | shadowDistance: 40 101 | shadowNearPlaneOffset: 3 102 | shadowCascade2Split: 0.33333334 103 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 104 | shadowmaskMode: 1 105 | blendWeights: 2 106 | textureQuality: 0 107 | anisotropicTextures: 0 108 | antiAliasing: 0 109 | softParticles: 0 110 | softVegetation: 1 111 | realtimeReflectionProbes: 0 112 | billboardsFaceCameraPosition: 0 113 | vSyncCount: 1 114 | lodBias: 1 115 | maximumLODLevel: 0 116 | particleRaycastBudget: 256 117 | asyncUploadTimeSlice: 2 118 | asyncUploadBufferSize: 4 119 | resolutionScalingFixedDPIFactor: 1 120 | excludedTargetPlatforms: [] 121 | - serializedVersion: 2 122 | name: Very High 123 | pixelLightCount: 3 124 | shadows: 0 125 | shadowResolution: 2 126 | shadowProjection: 1 127 | shadowCascades: 2 128 | shadowDistance: 70 129 | shadowNearPlaneOffset: 3 130 | shadowCascade2Split: 0.33333334 131 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 132 | shadowmaskMode: 1 133 | blendWeights: 4 134 | textureQuality: 0 135 | anisotropicTextures: 0 136 | antiAliasing: 0 137 | softParticles: 0 138 | softVegetation: 1 139 | realtimeReflectionProbes: 0 140 | billboardsFaceCameraPosition: 0 141 | vSyncCount: 1 142 | lodBias: 1.5 143 | maximumLODLevel: 0 144 | particleRaycastBudget: 1024 145 | asyncUploadTimeSlice: 2 146 | asyncUploadBufferSize: 4 147 | resolutionScalingFixedDPIFactor: 1 148 | excludedTargetPlatforms: [] 149 | - serializedVersion: 2 150 | name: Ultra 151 | pixelLightCount: 4 152 | shadows: 0 153 | shadowResolution: 0 154 | shadowProjection: 1 155 | shadowCascades: 4 156 | shadowDistance: 150 157 | shadowNearPlaneOffset: 3 158 | shadowCascade2Split: 0.33333334 159 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 160 | shadowmaskMode: 1 161 | blendWeights: 4 162 | textureQuality: 0 163 | anisotropicTextures: 0 164 | antiAliasing: 0 165 | softParticles: 0 166 | softVegetation: 1 167 | realtimeReflectionProbes: 0 168 | billboardsFaceCameraPosition: 0 169 | vSyncCount: 1 170 | lodBias: 2 171 | maximumLODLevel: 0 172 | particleRaycastBudget: 4096 173 | asyncUploadTimeSlice: 2 174 | asyncUploadBufferSize: 4 175 | resolutionScalingFixedDPIFactor: 1 176 | excludedTargetPlatforms: [] 177 | m_PerPlatformDefaultQuality: 178 | Android: 2 179 | Nintendo 3DS: 5 180 | Nintendo Switch: 5 181 | PS4: 5 182 | PSM: 5 183 | PSP2: 2 184 | Standalone: 5 185 | Tizen: 2 186 | WebGL: 3 187 | WiiU: 5 188 | Windows Store Apps: 5 189 | XboxOne: 5 190 | iPhone: 2 191 | tvOS: 2 192 | -------------------------------------------------------------------------------- /BookmarkEverything/Assets/Scenes/SampleScene.unity: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!29 &1 4 | OcclusionCullingSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_OcclusionBakeSettings: 8 | smallestOccluder: 5 9 | smallestHole: 0.25 10 | backfaceThreshold: 100 11 | m_SceneGUID: 00000000000000000000000000000000 12 | m_OcclusionCullingData: {fileID: 0} 13 | --- !u!104 &2 14 | RenderSettings: 15 | m_ObjectHideFlags: 0 16 | serializedVersion: 9 17 | m_Fog: 0 18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} 19 | m_FogMode: 3 20 | m_FogDensity: 0.01 21 | m_LinearFogStart: 0 22 | m_LinearFogEnd: 300 23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} 24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} 25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} 26 | m_AmbientIntensity: 1 27 | m_AmbientMode: 3 28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} 29 | m_SkyboxMaterial: {fileID: 0} 30 | m_HaloStrength: 0.5 31 | m_FlareStrength: 1 32 | m_FlareFadeSpeed: 3 33 | m_HaloTexture: {fileID: 0} 34 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} 35 | m_DefaultReflectionMode: 0 36 | m_DefaultReflectionResolution: 128 37 | m_ReflectionBounces: 1 38 | m_ReflectionIntensity: 1 39 | m_CustomReflection: {fileID: 0} 40 | m_Sun: {fileID: 0} 41 | m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} 42 | m_UseRadianceAmbientProbe: 0 43 | --- !u!157 &3 44 | LightmapSettings: 45 | m_ObjectHideFlags: 0 46 | serializedVersion: 11 47 | m_GIWorkflowMode: 1 48 | m_GISettings: 49 | serializedVersion: 2 50 | m_BounceScale: 1 51 | m_IndirectOutputScale: 1 52 | m_AlbedoBoost: 1 53 | m_TemporalCoherenceThreshold: 1 54 | m_EnvironmentLightingMode: 0 55 | m_EnableBakedLightmaps: 0 56 | m_EnableRealtimeLightmaps: 0 57 | m_LightmapEditorSettings: 58 | serializedVersion: 10 59 | m_Resolution: 2 60 | m_BakeResolution: 40 61 | m_AtlasSize: 1024 62 | m_AO: 0 63 | m_AOMaxDistance: 1 64 | m_CompAOExponent: 1 65 | m_CompAOExponentDirect: 0 66 | m_Padding: 2 67 | m_LightmapParameters: {fileID: 0} 68 | m_LightmapsBakeMode: 1 69 | m_TextureCompression: 1 70 | m_FinalGather: 0 71 | m_FinalGatherFiltering: 1 72 | m_FinalGatherRayCount: 256 73 | m_ReflectionCompression: 2 74 | m_MixedBakeMode: 2 75 | m_BakeBackend: 0 76 | m_PVRSampling: 1 77 | m_PVRDirectSampleCount: 32 78 | m_PVRSampleCount: 500 79 | m_PVRBounces: 2 80 | m_PVRFilterTypeDirect: 0 81 | m_PVRFilterTypeIndirect: 0 82 | m_PVRFilterTypeAO: 0 83 | m_PVRFilteringMode: 1 84 | m_PVRCulling: 1 85 | m_PVRFilteringGaussRadiusDirect: 1 86 | m_PVRFilteringGaussRadiusIndirect: 5 87 | m_PVRFilteringGaussRadiusAO: 2 88 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5 89 | m_PVRFilteringAtrousPositionSigmaIndirect: 2 90 | m_PVRFilteringAtrousPositionSigmaAO: 1 91 | m_ShowResolutionOverlay: 1 92 | m_LightingDataAsset: {fileID: 0} 93 | m_UseShadowmask: 1 94 | --- !u!196 &4 95 | NavMeshSettings: 96 | serializedVersion: 2 97 | m_ObjectHideFlags: 0 98 | m_BuildSettings: 99 | serializedVersion: 2 100 | agentTypeID: 0 101 | agentRadius: 0.5 102 | agentHeight: 2 103 | agentSlope: 45 104 | agentClimb: 0.4 105 | ledgeDropHeight: 0 106 | maxJumpAcrossDistance: 0 107 | minRegionArea: 2 108 | manualCellSize: 0 109 | cellSize: 0.16666667 110 | manualTileSize: 0 111 | tileSize: 256 112 | accuratePlacement: 0 113 | debug: 114 | m_Flags: 0 115 | m_NavMeshData: {fileID: 0} 116 | --- !u!1 &519420028 117 | GameObject: 118 | m_ObjectHideFlags: 0 119 | m_PrefabParentObject: {fileID: 0} 120 | m_PrefabInternal: {fileID: 0} 121 | serializedVersion: 5 122 | m_Component: 123 | - component: {fileID: 519420032} 124 | - component: {fileID: 519420031} 125 | - component: {fileID: 519420029} 126 | m_Layer: 0 127 | m_Name: Main Camera 128 | m_TagString: MainCamera 129 | m_Icon: {fileID: 0} 130 | m_NavMeshLayer: 0 131 | m_StaticEditorFlags: 0 132 | m_IsActive: 1 133 | --- !u!81 &519420029 134 | AudioListener: 135 | m_ObjectHideFlags: 0 136 | m_PrefabParentObject: {fileID: 0} 137 | m_PrefabInternal: {fileID: 0} 138 | m_GameObject: {fileID: 519420028} 139 | m_Enabled: 1 140 | --- !u!20 &519420031 141 | Camera: 142 | m_ObjectHideFlags: 0 143 | m_PrefabParentObject: {fileID: 0} 144 | m_PrefabInternal: {fileID: 0} 145 | m_GameObject: {fileID: 519420028} 146 | m_Enabled: 1 147 | serializedVersion: 2 148 | m_ClearFlags: 2 149 | m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} 150 | m_NormalizedViewPortRect: 151 | serializedVersion: 2 152 | x: 0 153 | y: 0 154 | width: 1 155 | height: 1 156 | near clip plane: 0.3 157 | far clip plane: 1000 158 | field of view: 60 159 | orthographic: 1 160 | orthographic size: 5 161 | m_Depth: -1 162 | m_CullingMask: 163 | serializedVersion: 2 164 | m_Bits: 4294967295 165 | m_RenderingPath: -1 166 | m_TargetTexture: {fileID: 0} 167 | m_TargetDisplay: 0 168 | m_TargetEye: 0 169 | m_HDR: 1 170 | m_AllowMSAA: 0 171 | m_AllowDynamicResolution: 0 172 | m_ForceIntoRT: 0 173 | m_OcclusionCulling: 0 174 | m_StereoConvergence: 10 175 | m_StereoSeparation: 0.022 176 | --- !u!4 &519420032 177 | Transform: 178 | m_ObjectHideFlags: 0 179 | m_PrefabParentObject: {fileID: 0} 180 | m_PrefabInternal: {fileID: 0} 181 | m_GameObject: {fileID: 519420028} 182 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 183 | m_LocalPosition: {x: 0, y: 0, z: -10} 184 | m_LocalScale: {x: 1, y: 1, z: 1} 185 | m_Children: [] 186 | m_Father: {fileID: 0} 187 | m_RootOrder: 0 188 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 189 | -------------------------------------------------------------------------------- /BookmarkEverything/ProjectSettings/InputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!13 &1 4 | InputManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Axes: 8 | - serializedVersion: 3 9 | m_Name: Horizontal 10 | descriptiveName: 11 | descriptiveNegativeName: 12 | negativeButton: left 13 | positiveButton: right 14 | altNegativeButton: a 15 | altPositiveButton: d 16 | gravity: 3 17 | dead: 0.001 18 | sensitivity: 3 19 | snap: 1 20 | invert: 0 21 | type: 0 22 | axis: 0 23 | joyNum: 0 24 | - serializedVersion: 3 25 | m_Name: Vertical 26 | descriptiveName: 27 | descriptiveNegativeName: 28 | negativeButton: down 29 | positiveButton: up 30 | altNegativeButton: s 31 | altPositiveButton: w 32 | gravity: 3 33 | dead: 0.001 34 | sensitivity: 3 35 | snap: 1 36 | invert: 0 37 | type: 0 38 | axis: 0 39 | joyNum: 0 40 | - serializedVersion: 3 41 | m_Name: Fire1 42 | descriptiveName: 43 | descriptiveNegativeName: 44 | negativeButton: 45 | positiveButton: left ctrl 46 | altNegativeButton: 47 | altPositiveButton: mouse 0 48 | gravity: 1000 49 | dead: 0.001 50 | sensitivity: 1000 51 | snap: 0 52 | invert: 0 53 | type: 0 54 | axis: 0 55 | joyNum: 0 56 | - serializedVersion: 3 57 | m_Name: Fire2 58 | descriptiveName: 59 | descriptiveNegativeName: 60 | negativeButton: 61 | positiveButton: left alt 62 | altNegativeButton: 63 | altPositiveButton: mouse 1 64 | gravity: 1000 65 | dead: 0.001 66 | sensitivity: 1000 67 | snap: 0 68 | invert: 0 69 | type: 0 70 | axis: 0 71 | joyNum: 0 72 | - serializedVersion: 3 73 | m_Name: Fire3 74 | descriptiveName: 75 | descriptiveNegativeName: 76 | negativeButton: 77 | positiveButton: left shift 78 | altNegativeButton: 79 | altPositiveButton: mouse 2 80 | gravity: 1000 81 | dead: 0.001 82 | sensitivity: 1000 83 | snap: 0 84 | invert: 0 85 | type: 0 86 | axis: 0 87 | joyNum: 0 88 | - serializedVersion: 3 89 | m_Name: Jump 90 | descriptiveName: 91 | descriptiveNegativeName: 92 | negativeButton: 93 | positiveButton: space 94 | altNegativeButton: 95 | altPositiveButton: 96 | gravity: 1000 97 | dead: 0.001 98 | sensitivity: 1000 99 | snap: 0 100 | invert: 0 101 | type: 0 102 | axis: 0 103 | joyNum: 0 104 | - serializedVersion: 3 105 | m_Name: Mouse X 106 | descriptiveName: 107 | descriptiveNegativeName: 108 | negativeButton: 109 | positiveButton: 110 | altNegativeButton: 111 | altPositiveButton: 112 | gravity: 0 113 | dead: 0 114 | sensitivity: 0.1 115 | snap: 0 116 | invert: 0 117 | type: 1 118 | axis: 0 119 | joyNum: 0 120 | - serializedVersion: 3 121 | m_Name: Mouse Y 122 | descriptiveName: 123 | descriptiveNegativeName: 124 | negativeButton: 125 | positiveButton: 126 | altNegativeButton: 127 | altPositiveButton: 128 | gravity: 0 129 | dead: 0 130 | sensitivity: 0.1 131 | snap: 0 132 | invert: 0 133 | type: 1 134 | axis: 1 135 | joyNum: 0 136 | - serializedVersion: 3 137 | m_Name: Mouse ScrollWheel 138 | descriptiveName: 139 | descriptiveNegativeName: 140 | negativeButton: 141 | positiveButton: 142 | altNegativeButton: 143 | altPositiveButton: 144 | gravity: 0 145 | dead: 0 146 | sensitivity: 0.1 147 | snap: 0 148 | invert: 0 149 | type: 1 150 | axis: 2 151 | joyNum: 0 152 | - serializedVersion: 3 153 | m_Name: Horizontal 154 | descriptiveName: 155 | descriptiveNegativeName: 156 | negativeButton: 157 | positiveButton: 158 | altNegativeButton: 159 | altPositiveButton: 160 | gravity: 0 161 | dead: 0.19 162 | sensitivity: 1 163 | snap: 0 164 | invert: 0 165 | type: 2 166 | axis: 0 167 | joyNum: 0 168 | - serializedVersion: 3 169 | m_Name: Vertical 170 | descriptiveName: 171 | descriptiveNegativeName: 172 | negativeButton: 173 | positiveButton: 174 | altNegativeButton: 175 | altPositiveButton: 176 | gravity: 0 177 | dead: 0.19 178 | sensitivity: 1 179 | snap: 0 180 | invert: 1 181 | type: 2 182 | axis: 1 183 | joyNum: 0 184 | - serializedVersion: 3 185 | m_Name: Fire1 186 | descriptiveName: 187 | descriptiveNegativeName: 188 | negativeButton: 189 | positiveButton: joystick button 0 190 | altNegativeButton: 191 | altPositiveButton: 192 | gravity: 1000 193 | dead: 0.001 194 | sensitivity: 1000 195 | snap: 0 196 | invert: 0 197 | type: 0 198 | axis: 0 199 | joyNum: 0 200 | - serializedVersion: 3 201 | m_Name: Fire2 202 | descriptiveName: 203 | descriptiveNegativeName: 204 | negativeButton: 205 | positiveButton: joystick button 1 206 | altNegativeButton: 207 | altPositiveButton: 208 | gravity: 1000 209 | dead: 0.001 210 | sensitivity: 1000 211 | snap: 0 212 | invert: 0 213 | type: 0 214 | axis: 0 215 | joyNum: 0 216 | - serializedVersion: 3 217 | m_Name: Fire3 218 | descriptiveName: 219 | descriptiveNegativeName: 220 | negativeButton: 221 | positiveButton: joystick button 2 222 | altNegativeButton: 223 | altPositiveButton: 224 | gravity: 1000 225 | dead: 0.001 226 | sensitivity: 1000 227 | snap: 0 228 | invert: 0 229 | type: 0 230 | axis: 0 231 | joyNum: 0 232 | - serializedVersion: 3 233 | m_Name: Jump 234 | descriptiveName: 235 | descriptiveNegativeName: 236 | negativeButton: 237 | positiveButton: joystick button 3 238 | altNegativeButton: 239 | altPositiveButton: 240 | gravity: 1000 241 | dead: 0.001 242 | sensitivity: 1000 243 | snap: 0 244 | invert: 0 245 | type: 0 246 | axis: 0 247 | joyNum: 0 248 | - serializedVersion: 3 249 | m_Name: Submit 250 | descriptiveName: 251 | descriptiveNegativeName: 252 | negativeButton: 253 | positiveButton: return 254 | altNegativeButton: 255 | altPositiveButton: joystick button 0 256 | gravity: 1000 257 | dead: 0.001 258 | sensitivity: 1000 259 | snap: 0 260 | invert: 0 261 | type: 0 262 | axis: 0 263 | joyNum: 0 264 | - serializedVersion: 3 265 | m_Name: Submit 266 | descriptiveName: 267 | descriptiveNegativeName: 268 | negativeButton: 269 | positiveButton: enter 270 | altNegativeButton: 271 | altPositiveButton: space 272 | gravity: 1000 273 | dead: 0.001 274 | sensitivity: 1000 275 | snap: 0 276 | invert: 0 277 | type: 0 278 | axis: 0 279 | joyNum: 0 280 | - serializedVersion: 3 281 | m_Name: Cancel 282 | descriptiveName: 283 | descriptiveNegativeName: 284 | negativeButton: 285 | positiveButton: escape 286 | altNegativeButton: 287 | altPositiveButton: joystick button 1 288 | gravity: 1000 289 | dead: 0.001 290 | sensitivity: 1000 291 | snap: 0 292 | invert: 0 293 | type: 0 294 | axis: 0 295 | joyNum: 0 296 | -------------------------------------------------------------------------------- /BookmarkEverything/ProjectSettings/ProjectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!129 &1 4 | PlayerSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 15 7 | productGUID: a3e19539fe77da44d966a8f085efeae9 8 | AndroidProfiler: 0 9 | AndroidFilterTouchesWhenObscured: 0 10 | AndroidEnableSustainedPerformanceMode: 0 11 | defaultScreenOrientation: 4 12 | targetDevice: 2 13 | useOnDemandResources: 0 14 | accelerometerFrequency: 60 15 | companyName: DefaultCompany 16 | productName: BookmarkEverything 17 | defaultCursor: {fileID: 0} 18 | cursorHotspot: {x: 0, y: 0} 19 | m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} 20 | m_ShowUnitySplashScreen: 1 21 | m_ShowUnitySplashLogo: 1 22 | m_SplashScreenOverlayOpacity: 1 23 | m_SplashScreenAnimation: 1 24 | m_SplashScreenLogoStyle: 1 25 | m_SplashScreenDrawMode: 0 26 | m_SplashScreenBackgroundAnimationZoom: 1 27 | m_SplashScreenLogoAnimationZoom: 1 28 | m_SplashScreenBackgroundLandscapeAspect: 1 29 | m_SplashScreenBackgroundPortraitAspect: 1 30 | m_SplashScreenBackgroundLandscapeUvs: 31 | serializedVersion: 2 32 | x: 0 33 | y: 0 34 | width: 1 35 | height: 1 36 | m_SplashScreenBackgroundPortraitUvs: 37 | serializedVersion: 2 38 | x: 0 39 | y: 0 40 | width: 1 41 | height: 1 42 | m_SplashScreenLogos: [] 43 | m_VirtualRealitySplashScreen: {fileID: 0} 44 | m_HolographicTrackingLossScreen: {fileID: 0} 45 | defaultScreenWidth: 1024 46 | defaultScreenHeight: 768 47 | defaultScreenWidthWeb: 960 48 | defaultScreenHeightWeb: 600 49 | m_StereoRenderingPath: 0 50 | m_ActiveColorSpace: 0 51 | m_MTRendering: 1 52 | m_StackTraceTypes: 010000000100000001000000010000000100000001000000 53 | iosShowActivityIndicatorOnLoading: -1 54 | androidShowActivityIndicatorOnLoading: -1 55 | iosAppInBackgroundBehavior: 0 56 | displayResolutionDialog: 1 57 | iosAllowHTTPDownload: 1 58 | allowedAutorotateToPortrait: 1 59 | allowedAutorotateToPortraitUpsideDown: 1 60 | allowedAutorotateToLandscapeRight: 1 61 | allowedAutorotateToLandscapeLeft: 1 62 | useOSAutorotation: 1 63 | use32BitDisplayBuffer: 1 64 | preserveFramebufferAlpha: 0 65 | disableDepthAndStencilBuffers: 0 66 | androidBlitType: 0 67 | defaultIsNativeResolution: 1 68 | macRetinaSupport: 1 69 | runInBackground: 1 70 | captureSingleScreen: 0 71 | muteOtherAudioSources: 0 72 | Prepare IOS For Recording: 0 73 | Force IOS Speakers When Recording: 0 74 | deferSystemGesturesMode: 0 75 | hideHomeButton: 0 76 | submitAnalytics: 1 77 | usePlayerLog: 1 78 | bakeCollisionMeshes: 0 79 | forceSingleInstance: 0 80 | resizableWindow: 0 81 | useMacAppStoreValidation: 0 82 | macAppStoreCategory: public.app-category.games 83 | gpuSkinning: 0 84 | graphicsJobs: 0 85 | xboxPIXTextureCapture: 0 86 | xboxEnableAvatar: 0 87 | xboxEnableKinect: 0 88 | xboxEnableKinectAutoTracking: 0 89 | xboxEnableFitness: 0 90 | visibleInBackground: 1 91 | allowFullscreenSwitch: 1 92 | graphicsJobMode: 0 93 | fullscreenMode: 1 94 | xboxSpeechDB: 0 95 | xboxEnableHeadOrientation: 0 96 | xboxEnableGuest: 0 97 | xboxEnablePIXSampling: 0 98 | metalFramebufferOnly: 0 99 | n3dsDisableStereoscopicView: 0 100 | n3dsEnableSharedListOpt: 1 101 | n3dsEnableVSync: 0 102 | xboxOneResolution: 0 103 | xboxOneSResolution: 0 104 | xboxOneXResolution: 3 105 | xboxOneMonoLoggingLevel: 0 106 | xboxOneLoggingLevel: 1 107 | xboxOneDisableEsram: 0 108 | xboxOnePresentImmediateThreshold: 0 109 | switchQueueCommandMemory: 0 110 | videoMemoryForVertexBuffers: 0 111 | psp2PowerMode: 0 112 | psp2AcquireBGM: 1 113 | vulkanEnableSetSRGBWrite: 0 114 | vulkanUseSWCommandBuffers: 0 115 | m_SupportedAspectRatios: 116 | 4:3: 1 117 | 5:4: 1 118 | 16:10: 1 119 | 16:9: 1 120 | Others: 1 121 | bundleVersion: 0.1 122 | preloadedAssets: [] 123 | metroInputSource: 0 124 | wsaTransparentSwapchain: 0 125 | m_HolographicPauseOnTrackingLoss: 1 126 | xboxOneDisableKinectGpuReservation: 0 127 | xboxOneEnable7thCore: 0 128 | isWsaHolographicRemotingEnabled: 0 129 | vrSettings: 130 | cardboard: 131 | depthFormat: 0 132 | enableTransitionView: 0 133 | daydream: 134 | depthFormat: 0 135 | useSustainedPerformanceMode: 0 136 | enableVideoLayer: 0 137 | useProtectedVideoMemory: 0 138 | minimumSupportedHeadTracking: 0 139 | maximumSupportedHeadTracking: 1 140 | hololens: 141 | depthFormat: 1 142 | depthBufferSharingEnabled: 0 143 | oculus: 144 | sharedDepthBuffer: 0 145 | dashSupport: 0 146 | enable360StereoCapture: 0 147 | protectGraphicsMemory: 0 148 | useHDRDisplay: 0 149 | m_ColorGamuts: 00000000 150 | targetPixelDensity: 30 151 | resolutionScalingMode: 0 152 | androidSupportedAspectRatio: 1 153 | androidMaxAspectRatio: 2.1 154 | applicationIdentifier: 155 | Standalone: com.Company.ProductName 156 | buildNumber: {} 157 | AndroidBundleVersionCode: 1 158 | AndroidMinSdkVersion: 16 159 | AndroidTargetSdkVersion: 0 160 | AndroidPreferredInstallLocation: 1 161 | aotOptions: 162 | stripEngineCode: 1 163 | iPhoneStrippingLevel: 0 164 | iPhoneScriptCallOptimization: 0 165 | ForceInternetPermission: 0 166 | ForceSDCardPermission: 0 167 | CreateWallpaper: 0 168 | APKExpansionFiles: 0 169 | keepLoadedShadersAlive: 0 170 | StripUnusedMeshComponents: 1 171 | VertexChannelCompressionMask: 4054 172 | iPhoneSdkVersion: 988 173 | iOSTargetOSVersionString: 8.0 174 | tvOSSdkVersion: 0 175 | tvOSRequireExtendedGameController: 0 176 | tvOSTargetOSVersionString: 9.0 177 | uIPrerenderedIcon: 0 178 | uIRequiresPersistentWiFi: 0 179 | uIRequiresFullScreen: 1 180 | uIStatusBarHidden: 1 181 | uIExitOnSuspend: 0 182 | uIStatusBarStyle: 0 183 | iPhoneSplashScreen: {fileID: 0} 184 | iPhoneHighResSplashScreen: {fileID: 0} 185 | iPhoneTallHighResSplashScreen: {fileID: 0} 186 | iPhone47inSplashScreen: {fileID: 0} 187 | iPhone55inPortraitSplashScreen: {fileID: 0} 188 | iPhone55inLandscapeSplashScreen: {fileID: 0} 189 | iPhone58inPortraitSplashScreen: {fileID: 0} 190 | iPhone58inLandscapeSplashScreen: {fileID: 0} 191 | iPadPortraitSplashScreen: {fileID: 0} 192 | iPadHighResPortraitSplashScreen: {fileID: 0} 193 | iPadLandscapeSplashScreen: {fileID: 0} 194 | iPadHighResLandscapeSplashScreen: {fileID: 0} 195 | appleTVSplashScreen: {fileID: 0} 196 | appleTVSplashScreen2x: {fileID: 0} 197 | tvOSSmallIconLayers: [] 198 | tvOSSmallIconLayers2x: [] 199 | tvOSLargeIconLayers: [] 200 | tvOSLargeIconLayers2x: [] 201 | tvOSTopShelfImageLayers: [] 202 | tvOSTopShelfImageLayers2x: [] 203 | tvOSTopShelfImageWideLayers: [] 204 | tvOSTopShelfImageWideLayers2x: [] 205 | iOSLaunchScreenType: 0 206 | iOSLaunchScreenPortrait: {fileID: 0} 207 | iOSLaunchScreenLandscape: {fileID: 0} 208 | iOSLaunchScreenBackgroundColor: 209 | serializedVersion: 2 210 | rgba: 0 211 | iOSLaunchScreenFillPct: 100 212 | iOSLaunchScreenSize: 100 213 | iOSLaunchScreenCustomXibPath: 214 | iOSLaunchScreeniPadType: 0 215 | iOSLaunchScreeniPadImage: {fileID: 0} 216 | iOSLaunchScreeniPadBackgroundColor: 217 | serializedVersion: 2 218 | rgba: 0 219 | iOSLaunchScreeniPadFillPct: 100 220 | iOSLaunchScreeniPadSize: 100 221 | iOSLaunchScreeniPadCustomXibPath: 222 | iOSUseLaunchScreenStoryboard: 0 223 | iOSLaunchScreenCustomStoryboardPath: 224 | iOSDeviceRequirements: [] 225 | iOSURLSchemes: [] 226 | iOSBackgroundModes: 0 227 | iOSMetalForceHardShadows: 0 228 | metalEditorSupport: 1 229 | metalAPIValidation: 1 230 | iOSRenderExtraFrameOnPause: 0 231 | appleDeveloperTeamID: 232 | iOSManualSigningProvisioningProfileID: 233 | tvOSManualSigningProvisioningProfileID: 234 | iOSManualSigningProvisioningProfileType: 0 235 | tvOSManualSigningProvisioningProfileType: 0 236 | appleEnableAutomaticSigning: 0 237 | iOSRequireARKit: 0 238 | appleEnableProMotion: 0 239 | vulkanEditorSupport: 0 240 | clonedFromGUID: 5f34be1353de5cf4398729fda238591b 241 | templatePackageId: com.unity.template.2d@1.0.1 242 | templateDefaultScene: Assets/Scenes/SampleScene.unity 243 | AndroidTargetArchitectures: 5 244 | AndroidSplashScreenScale: 0 245 | androidSplashScreen: {fileID: 0} 246 | AndroidKeystoreName: 247 | AndroidKeyaliasName: 248 | AndroidBuildApkPerCpuArchitecture: 0 249 | AndroidTVCompatibility: 1 250 | AndroidIsGame: 1 251 | AndroidEnableTango: 0 252 | androidEnableBanner: 1 253 | androidUseLowAccuracyLocation: 0 254 | m_AndroidBanners: 255 | - width: 320 256 | height: 180 257 | banner: {fileID: 0} 258 | androidGamepadSupportLevel: 0 259 | resolutionDialogBanner: {fileID: 0} 260 | m_BuildTargetIcons: [] 261 | m_BuildTargetPlatformIcons: [] 262 | m_BuildTargetBatching: [] 263 | m_BuildTargetGraphicsAPIs: [] 264 | m_BuildTargetVRSettings: [] 265 | m_BuildTargetEnableVuforiaSettings: [] 266 | openGLRequireES31: 0 267 | openGLRequireES31AEP: 0 268 | m_TemplateCustomTags: {} 269 | mobileMTRendering: 270 | Android: 1 271 | iPhone: 1 272 | tvOS: 1 273 | m_BuildTargetGroupLightmapEncodingQuality: [] 274 | m_BuildTargetGroupLightmapSettings: [] 275 | playModeTestRunnerEnabled: 0 276 | runPlayModeTestAsEditModeTest: 0 277 | actionOnDotNetUnhandledException: 1 278 | enableInternalProfiler: 0 279 | logObjCUncaughtExceptions: 1 280 | enableCrashReportAPI: 0 281 | cameraUsageDescription: 282 | locationUsageDescription: 283 | microphoneUsageDescription: 284 | switchNetLibKey: 285 | switchSocketMemoryPoolSize: 6144 286 | switchSocketAllocatorPoolSize: 128 287 | switchSocketConcurrencyLimit: 14 288 | switchScreenResolutionBehavior: 2 289 | switchUseCPUProfiler: 0 290 | switchApplicationID: 0x01004b9000490000 291 | switchNSODependencies: 292 | switchTitleNames_0: 293 | switchTitleNames_1: 294 | switchTitleNames_2: 295 | switchTitleNames_3: 296 | switchTitleNames_4: 297 | switchTitleNames_5: 298 | switchTitleNames_6: 299 | switchTitleNames_7: 300 | switchTitleNames_8: 301 | switchTitleNames_9: 302 | switchTitleNames_10: 303 | switchTitleNames_11: 304 | switchTitleNames_12: 305 | switchTitleNames_13: 306 | switchTitleNames_14: 307 | switchPublisherNames_0: 308 | switchPublisherNames_1: 309 | switchPublisherNames_2: 310 | switchPublisherNames_3: 311 | switchPublisherNames_4: 312 | switchPublisherNames_5: 313 | switchPublisherNames_6: 314 | switchPublisherNames_7: 315 | switchPublisherNames_8: 316 | switchPublisherNames_9: 317 | switchPublisherNames_10: 318 | switchPublisherNames_11: 319 | switchPublisherNames_12: 320 | switchPublisherNames_13: 321 | switchPublisherNames_14: 322 | switchIcons_0: {fileID: 0} 323 | switchIcons_1: {fileID: 0} 324 | switchIcons_2: {fileID: 0} 325 | switchIcons_3: {fileID: 0} 326 | switchIcons_4: {fileID: 0} 327 | switchIcons_5: {fileID: 0} 328 | switchIcons_6: {fileID: 0} 329 | switchIcons_7: {fileID: 0} 330 | switchIcons_8: {fileID: 0} 331 | switchIcons_9: {fileID: 0} 332 | switchIcons_10: {fileID: 0} 333 | switchIcons_11: {fileID: 0} 334 | switchIcons_12: {fileID: 0} 335 | switchIcons_13: {fileID: 0} 336 | switchIcons_14: {fileID: 0} 337 | switchSmallIcons_0: {fileID: 0} 338 | switchSmallIcons_1: {fileID: 0} 339 | switchSmallIcons_2: {fileID: 0} 340 | switchSmallIcons_3: {fileID: 0} 341 | switchSmallIcons_4: {fileID: 0} 342 | switchSmallIcons_5: {fileID: 0} 343 | switchSmallIcons_6: {fileID: 0} 344 | switchSmallIcons_7: {fileID: 0} 345 | switchSmallIcons_8: {fileID: 0} 346 | switchSmallIcons_9: {fileID: 0} 347 | switchSmallIcons_10: {fileID: 0} 348 | switchSmallIcons_11: {fileID: 0} 349 | switchSmallIcons_12: {fileID: 0} 350 | switchSmallIcons_13: {fileID: 0} 351 | switchSmallIcons_14: {fileID: 0} 352 | switchManualHTML: 353 | switchAccessibleURLs: 354 | switchLegalInformation: 355 | switchMainThreadStackSize: 1048576 356 | switchPresenceGroupId: 357 | switchLogoHandling: 0 358 | switchReleaseVersion: 0 359 | switchDisplayVersion: 1.0.0 360 | switchStartupUserAccount: 0 361 | switchTouchScreenUsage: 0 362 | switchSupportedLanguagesMask: 0 363 | switchLogoType: 0 364 | switchApplicationErrorCodeCategory: 365 | switchUserAccountSaveDataSize: 0 366 | switchUserAccountSaveDataJournalSize: 0 367 | switchApplicationAttribute: 0 368 | switchCardSpecSize: -1 369 | switchCardSpecClock: -1 370 | switchRatingsMask: 0 371 | switchRatingsInt_0: 0 372 | switchRatingsInt_1: 0 373 | switchRatingsInt_2: 0 374 | switchRatingsInt_3: 0 375 | switchRatingsInt_4: 0 376 | switchRatingsInt_5: 0 377 | switchRatingsInt_6: 0 378 | switchRatingsInt_7: 0 379 | switchRatingsInt_8: 0 380 | switchRatingsInt_9: 0 381 | switchRatingsInt_10: 0 382 | switchRatingsInt_11: 0 383 | switchLocalCommunicationIds_0: 384 | switchLocalCommunicationIds_1: 385 | switchLocalCommunicationIds_2: 386 | switchLocalCommunicationIds_3: 387 | switchLocalCommunicationIds_4: 388 | switchLocalCommunicationIds_5: 389 | switchLocalCommunicationIds_6: 390 | switchLocalCommunicationIds_7: 391 | switchParentalControl: 0 392 | switchAllowsScreenshot: 1 393 | switchAllowsVideoCapturing: 1 394 | switchAllowsRuntimeAddOnContentInstall: 0 395 | switchDataLossConfirmation: 0 396 | switchUserAccountLockEnabled: 0 397 | switchSupportedNpadStyles: 3 398 | switchNativeFsCacheSize: 32 399 | switchIsHoldTypeHorizontal: 0 400 | switchSupportedNpadCount: 8 401 | switchSocketConfigEnabled: 0 402 | switchTcpInitialSendBufferSize: 32 403 | switchTcpInitialReceiveBufferSize: 64 404 | switchTcpAutoSendBufferSizeMax: 256 405 | switchTcpAutoReceiveBufferSizeMax: 256 406 | switchUdpSendBufferSize: 9 407 | switchUdpReceiveBufferSize: 42 408 | switchSocketBufferEfficiency: 4 409 | switchSocketInitializeEnabled: 1 410 | switchNetworkInterfaceManagerInitializeEnabled: 1 411 | switchPlayerConnectionEnabled: 1 412 | ps4NPAgeRating: 12 413 | ps4NPTitleSecret: 414 | ps4NPTrophyPackPath: 415 | ps4ParentalLevel: 11 416 | ps4ContentID: ED1633-NPXX51362_00-0000000000000000 417 | ps4Category: 0 418 | ps4MasterVersion: 01.00 419 | ps4AppVersion: 01.00 420 | ps4AppType: 0 421 | ps4ParamSfxPath: 422 | ps4VideoOutPixelFormat: 0 423 | ps4VideoOutInitialWidth: 1920 424 | ps4VideoOutBaseModeInitialWidth: 1920 425 | ps4VideoOutReprojectionRate: 60 426 | ps4PronunciationXMLPath: 427 | ps4PronunciationSIGPath: 428 | ps4BackgroundImagePath: 429 | ps4StartupImagePath: 430 | ps4StartupImagesFolder: 431 | ps4IconImagesFolder: 432 | ps4SaveDataImagePath: 433 | ps4SdkOverride: 434 | ps4BGMPath: 435 | ps4ShareFilePath: 436 | ps4ShareOverlayImagePath: 437 | ps4PrivacyGuardImagePath: 438 | ps4NPtitleDatPath: 439 | ps4RemotePlayKeyAssignment: -1 440 | ps4RemotePlayKeyMappingDir: 441 | ps4PlayTogetherPlayerCount: 0 442 | ps4EnterButtonAssignment: 1 443 | ps4ApplicationParam1: 0 444 | ps4ApplicationParam2: 0 445 | ps4ApplicationParam3: 0 446 | ps4ApplicationParam4: 0 447 | ps4DownloadDataSize: 0 448 | ps4GarlicHeapSize: 2048 449 | ps4ProGarlicHeapSize: 2560 450 | ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ 451 | ps4pnSessions: 1 452 | ps4pnPresence: 1 453 | ps4pnFriends: 1 454 | ps4pnGameCustomData: 1 455 | playerPrefsSupport: 0 456 | enableApplicationExit: 0 457 | restrictedAudioUsageRights: 0 458 | ps4UseResolutionFallback: 0 459 | ps4ReprojectionSupport: 0 460 | ps4UseAudio3dBackend: 0 461 | ps4SocialScreenEnabled: 0 462 | ps4ScriptOptimizationLevel: 0 463 | ps4Audio3dVirtualSpeakerCount: 14 464 | ps4attribCpuUsage: 0 465 | ps4PatchPkgPath: 466 | ps4PatchLatestPkgPath: 467 | ps4PatchChangeinfoPath: 468 | ps4PatchDayOne: 0 469 | ps4attribUserManagement: 0 470 | ps4attribMoveSupport: 0 471 | ps4attrib3DSupport: 0 472 | ps4attribShareSupport: 0 473 | ps4attribExclusiveVR: 0 474 | ps4disableAutoHideSplash: 0 475 | ps4videoRecordingFeaturesUsed: 0 476 | ps4contentSearchFeaturesUsed: 0 477 | ps4attribEyeToEyeDistanceSettingVR: 0 478 | ps4IncludedModules: [] 479 | monoEnv: 480 | psp2Splashimage: {fileID: 0} 481 | psp2NPTrophyPackPath: 482 | psp2NPSupportGBMorGJP: 0 483 | psp2NPAgeRating: 12 484 | psp2NPTitleDatPath: 485 | psp2NPCommsID: 486 | psp2NPCommunicationsID: 487 | psp2NPCommsPassphrase: 488 | psp2NPCommsSig: 489 | psp2ParamSfxPath: 490 | psp2ManualPath: 491 | psp2LiveAreaGatePath: 492 | psp2LiveAreaBackroundPath: 493 | psp2LiveAreaPath: 494 | psp2LiveAreaTrialPath: 495 | psp2PatchChangeInfoPath: 496 | psp2PatchOriginalPackage: 497 | psp2PackagePassword: F69AzBlax3CF3EDNhm3soLBPh71Yexui 498 | psp2KeystoneFile: 499 | psp2MemoryExpansionMode: 0 500 | psp2DRMType: 0 501 | psp2StorageType: 0 502 | psp2MediaCapacity: 0 503 | psp2DLCConfigPath: 504 | psp2ThumbnailPath: 505 | psp2BackgroundPath: 506 | psp2SoundPath: 507 | psp2TrophyCommId: 508 | psp2TrophyPackagePath: 509 | psp2PackagedResourcesPath: 510 | psp2SaveDataQuota: 10240 511 | psp2ParentalLevel: 1 512 | psp2ShortTitle: Not Set 513 | psp2ContentID: IV0000-ABCD12345_00-0123456789ABCDEF 514 | psp2Category: 0 515 | psp2MasterVersion: 01.00 516 | psp2AppVersion: 01.00 517 | psp2TVBootMode: 0 518 | psp2EnterButtonAssignment: 2 519 | psp2TVDisableEmu: 0 520 | psp2AllowTwitterDialog: 1 521 | psp2Upgradable: 0 522 | psp2HealthWarning: 0 523 | psp2UseLibLocation: 0 524 | psp2InfoBarOnStartup: 0 525 | psp2InfoBarColor: 0 526 | psp2ScriptOptimizationLevel: 0 527 | splashScreenBackgroundSourceLandscape: {fileID: 0} 528 | splashScreenBackgroundSourcePortrait: {fileID: 0} 529 | spritePackerPolicy: 530 | webGLMemorySize: 256 531 | webGLExceptionSupport: 1 532 | webGLNameFilesAsHashes: 0 533 | webGLDataCaching: 1 534 | webGLDebugSymbols: 0 535 | webGLEmscriptenArgs: 536 | webGLModulesDirectory: 537 | webGLTemplate: APPLICATION:Default 538 | webGLAnalyzeBuildSize: 0 539 | webGLUseEmbeddedResources: 0 540 | webGLCompressionFormat: 1 541 | webGLLinkerTarget: 1 542 | scriptingDefineSymbols: {} 543 | platformArchitecture: {} 544 | scriptingBackend: {} 545 | il2cppCompilerConfiguration: {} 546 | incrementalIl2cppBuild: {} 547 | allowUnsafeCode: 0 548 | additionalIl2CppArgs: 549 | scriptingRuntimeVersion: 0 550 | apiCompatibilityLevelPerPlatform: {} 551 | m_RenderingPath: 1 552 | m_MobileRenderingPath: 1 553 | metroPackageName: Template_2D 554 | metroPackageVersion: 555 | metroCertificatePath: 556 | metroCertificatePassword: 557 | metroCertificateSubject: 558 | metroCertificateIssuer: 559 | metroCertificateNotAfter: 0000000000000000 560 | metroApplicationDescription: Template_2D 561 | wsaImages: {} 562 | metroTileShortName: 563 | metroTileShowName: 0 564 | metroMediumTileShowName: 0 565 | metroLargeTileShowName: 0 566 | metroWideTileShowName: 0 567 | metroDefaultTileSize: 1 568 | metroTileForegroundText: 2 569 | metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} 570 | metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, 571 | a: 1} 572 | metroSplashScreenUseBackgroundColor: 0 573 | platformCapabilities: {} 574 | metroFTAName: 575 | metroFTAFileTypes: [] 576 | metroProtocolName: 577 | metroCompilationOverrides: 1 578 | n3dsUseExtSaveData: 0 579 | n3dsCompressStaticMem: 1 580 | n3dsExtSaveDataNumber: 0x12345 581 | n3dsStackSize: 131072 582 | n3dsTargetPlatform: 2 583 | n3dsRegion: 7 584 | n3dsMediaSize: 0 585 | n3dsLogoStyle: 3 586 | n3dsTitle: GameName 587 | n3dsProductCode: 588 | n3dsApplicationId: 0xFF3FF 589 | XboxOneProductId: 590 | XboxOneUpdateKey: 591 | XboxOneSandboxId: 592 | XboxOneContentId: 593 | XboxOneTitleId: 594 | XboxOneSCId: 595 | XboxOneGameOsOverridePath: 596 | XboxOnePackagingOverridePath: 597 | XboxOneAppManifestOverridePath: 598 | XboxOneVersion: 1.0.0.0 599 | XboxOnePackageEncryption: 0 600 | XboxOnePackageUpdateGranularity: 2 601 | XboxOneDescription: 602 | XboxOneLanguage: 603 | - enus 604 | XboxOneCapability: [] 605 | XboxOneGameRating: {} 606 | XboxOneIsContentPackage: 0 607 | XboxOneEnableGPUVariability: 0 608 | XboxOneSockets: {} 609 | XboxOneSplashScreen: {fileID: 0} 610 | XboxOneAllowedProductIds: [] 611 | XboxOnePersistentLocalStorageSize: 0 612 | XboxOneXTitleMemory: 8 613 | xboxOneScriptCompiler: 0 614 | vrEditorSettings: 615 | daydream: 616 | daydreamIconForeground: {fileID: 0} 617 | daydreamIconBackground: {fileID: 0} 618 | cloudServicesEnabled: 619 | UNet: 1 620 | facebookSdkVersion: 7.9.4 621 | apiCompatibilityLevel: 2 622 | cloudProjectId: 623 | projectName: 624 | organizationId: 625 | cloudEnabled: 0 626 | enableNativePlatformBackendsForNewInputSystem: 0 627 | disableOldInputManagerSupport: 0 628 | -------------------------------------------------------------------------------- /BookmarkEverything/Assets/BookmarkEverything/Editor/BookmarkEverythingEditor.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | using UnityEditor; 4 | using UnityEngine; 5 | using System.Text; 6 | 7 | namespace BookmarkEverything 8 | { 9 | public class BookmarkEverythingEditor : EditorWindow 10 | { 11 | private SaveData _currentSettings = new SaveData(); 12 | 13 | private bool _initialized; 14 | private const char CHAR_SEPERATOR = ':'; 15 | List _tempLocations = new List(); 16 | private const string SETTINGS_FILENAME = "bookmarkeverythingsettings"; 17 | private const string CATEGORY_SCENE = "Scenes"; 18 | private const string CATEGORY_PREFAB = "Prefabs"; 19 | private const string CATEGORY_SCRIPT = "Scripts"; 20 | private const string CATEGORY_SO = "Scriptable Objects"; 21 | private const string CATEGORY_STARRED = "Starred"; 22 | private string[] _projectFinderHeaders = new string[] { CATEGORY_STARRED, CATEGORY_SCENE, CATEGORY_PREFAB, CATEGORY_SCRIPT, CATEGORY_SO }; 23 | [System.Serializable] 24 | public class EntryData 25 | { 26 | public string GUID; 27 | public string Category; 28 | public int Index; 29 | 30 | public EntryData(string path, string category, int index) 31 | { 32 | GUID = path; 33 | Category = category; 34 | Index = index; 35 | } 36 | public EntryData(string path) 37 | { 38 | GUID = path; 39 | Category = "default"; 40 | } 41 | public EntryData(UnityEngine.Object obj) 42 | { 43 | //use GetAssetPath+AssetPathToGUID instead of TryGetGUIDAndLocalFileIdentifier because that method is fairly new and not supported in many unity editors 44 | string path = AssetDatabase.GetAssetPath(obj); 45 | string guid = AssetDatabase.AssetPathToGUID(path); 46 | //AssetDatabase.TryGetGUIDAndLocalFileIdentifier(obj, out guid, out localId); 47 | 48 | GUID = guid; 49 | if (obj.GetType() == typeof(DefaultAsset)) 50 | { 51 | Category = "Folder"; 52 | } 53 | else 54 | { 55 | string[] s = obj.name.Split(CHAR_SEPERATOR); 56 | Category = s[s.Length - 1]; 57 | } 58 | } 59 | public static EntryData Clone(EntryData data) 60 | { 61 | return new EntryData(data.GUID, data.Category, data.Index); 62 | } 63 | public static EntryData[] Clone(EntryData[] data) 64 | { 65 | EntryData[] newData = new EntryData[data.Length]; 66 | for (int i = 0; i < data.Length; i++) 67 | { 68 | newData[i] = Clone(data[i]); 69 | } 70 | return newData; 71 | } 72 | 73 | public static implicit operator EntryData(string path) 74 | { 75 | if (path == null) 76 | { 77 | return null; 78 | } 79 | return new EntryData(path); 80 | } 81 | public static implicit operator EntryData(UnityEngine.Object obj) 82 | { 83 | return new EntryData(obj); 84 | } 85 | 86 | } 87 | 88 | [System.Serializable] 89 | public class SaveData 90 | { 91 | public List EntryData = new List(); 92 | public PingTypes PingType; 93 | public bool VisualMode; 94 | public bool AutoClose; 95 | public bool ShowFullPath; 96 | public bool ShowFullPathForFolders = true; 97 | public SaveData(List entryData, PingTypes pingType, bool visualMode, bool autoClose, bool showFullPath, bool showFullPathForFolders) 98 | { 99 | EntryData = entryData; 100 | PingType = pingType; 101 | VisualMode = visualMode; 102 | AutoClose = autoClose; 103 | ShowFullPath = showFullPath; 104 | ShowFullPathForFolders = showFullPathForFolders; 105 | } 106 | public SaveData() { } 107 | 108 | public void Save() 109 | { 110 | IOHelper.ClearData(SETTINGS_FILENAME); 111 | IOHelper.WriteToDisk(SETTINGS_FILENAME, this); 112 | } 113 | } 114 | 115 | #region GUI REFERENCES 116 | GUIStyle _buttonStyle; 117 | GUIStyle _textFieldStyle; 118 | GUIStyle _scrollViewStyle; 119 | GUIStyle _boxStyle; 120 | GUIStyle _popupStyle; 121 | GUIStyle _toolbarButtonStyle; 122 | GUIStyle _boldLabelStyle; 123 | 124 | Texture _editorWindowBackground; 125 | #endregion 126 | 127 | private List _headerContents = new List(); 128 | private List _projectFinderContents = new List(); 129 | 130 | private PingTypes _pingType; 131 | private bool _visualMode; 132 | private bool _autoClose; 133 | private bool _showFullPath; 134 | private bool _showFullPathForFolder; 135 | 136 | [MenuItem("Window/Bookmark Everything %h")] 137 | private static void Init() 138 | { 139 | var windows = (BookmarkEverythingEditor[])Resources.FindObjectsOfTypeAll(typeof(BookmarkEverythingEditor)); 140 | if (windows.Length == 0) 141 | { 142 | BookmarkEverythingEditor window = (BookmarkEverythingEditor)GetWindow(typeof(BookmarkEverythingEditor)); 143 | window.InitInternal(); 144 | 145 | 146 | } 147 | else 148 | { 149 | FocusWindowIfItsOpen(typeof(BookmarkEverythingEditor)); 150 | } 151 | } 152 | 153 | private void OnEnable() { 154 | titleContent =RetrieveGUIContent("Bookmark", "CustomSorting"); 155 | _defaultGUIColor = GUI.color; 156 | minSize = new Vector2(400,400); 157 | } 158 | 159 | public void InitInternal() 160 | { 161 | //loads entries from playerprefs 162 | //Construct main headers(Project Finder, Settings etc.) 163 | LoadSettings(); 164 | ConstructStyles(); 165 | ConstructMainHeaders(); 166 | 167 | ConstructProjectFinderHeaders(); 168 | _initialized = true; 169 | //constructs all gui element styles 170 | 171 | } 172 | /// 173 | /// Construct tab view of Project Finder 174 | /// 175 | private void ConstructProjectFinderHeaders() 176 | { 177 | _projectFinderContents.Add(RetrieveGUIContent(CATEGORY_STARRED, "Favorite")); 178 | _projectFinderContents.Add(RetrieveGUIContent(CATEGORY_SCENE, ResolveIconNameFromFileExtension("unity"))); 179 | _projectFinderContents.Add(RetrieveGUIContent(CATEGORY_PREFAB, ResolveIconNameFromFileExtension("prefab"))); 180 | _projectFinderContents.Add(RetrieveGUIContent(CATEGORY_SCRIPT, ResolveIconNameFromFileExtension("cs"))); 181 | _projectFinderContents.Add(RetrieveGUIContent(CATEGORY_SO, ResolveIconNameFromFileExtension("asset"))); 182 | if (_projectFinderContents.Count != _projectFinderHeaders.Length) 183 | { 184 | Debug.LogError("Inconsistency between Content count and Header count, please add to both of them!"); 185 | } 186 | } 187 | private int GetIndexOfCategory(string category) 188 | { 189 | for (int i = 0; i < _projectFinderHeaders.Length; i++) 190 | { 191 | if (_projectFinderHeaders[i] == category) 192 | { 193 | return i; 194 | } 195 | } 196 | return -1; 197 | } 198 | private string GetNameOfCategory(int index) 199 | { 200 | if (index >= 0 && index < _projectFinderHeaders.Length) 201 | { 202 | return _projectFinderHeaders[index]; 203 | } 204 | Debug.LogError("No category found with given index of " + index); 205 | return ""; 206 | } 207 | 208 | /// 209 | /// Construct main tab view that is going to be used in 210 | /// 211 | private void ConstructMainHeaders() 212 | { 213 | _headerContents.Add(RetrieveGUIContent("Project Finder", "UnityEditor.SceneHierarchyWindow")); 214 | _headerContents.Add(RetrieveGUIContent("Settings", "SettingsIcon")); 215 | } 216 | 217 | private void OnGUI() 218 | { 219 | if (!_initialized) 220 | { 221 | InitInternal(); 222 | } 223 | if (_visualMode) 224 | { 225 | GUI.DrawTexture(new Rect(0, 0, EditorGUIUtility.currentViewWidth, position.height), _editorWindowBackground); 226 | } 227 | DrawHeader(); 228 | 229 | DropAreaGUI(); 230 | 231 | } 232 | //Older versions of Unity doesn't like Close() being called in OnGUI 233 | private void Update() 234 | { 235 | if (_autoClose && _reachedToAsset) 236 | { 237 | this.Close(); 238 | } 239 | else if (!_autoClose && _reachedToAsset) 240 | { 241 | _reachedToAsset = false; 242 | } 243 | } 244 | public void DropAreaGUI() 245 | { 246 | Event evt = Event.current; 247 | Rect drop_area = new Rect(0, 0, EditorGUIUtility.currentViewWidth, position.height); 248 | 249 | switch (evt.type) 250 | { 251 | case EventType.DragUpdated: 252 | case EventType.DragPerform: 253 | if (!drop_area.Contains(evt.mousePosition)) 254 | return; 255 | 256 | DragAndDrop.visualMode = DragAndDropVisualMode.Generic; 257 | 258 | if (evt.type == EventType.DragPerform) 259 | { 260 | DragAndDrop.AcceptDrag(); 261 | List duplicateList = new List(); 262 | List allowedList = new List(); 263 | foreach (UnityEngine.Object draggedObject in DragAndDrop.objectReferences) 264 | { 265 | if(!AssetDatabase.Contains(draggedObject)) 266 | { 267 | EditorUtility.DisplayDialog("Bookmark Everything", "Objects from hierarchy is not supported for now. Would you like me to add that? Please e-mail me at dogukanerkut@gmail.com.", "Okay"); 268 | return; 269 | } 270 | EntryData entryData = new EntryData(draggedObject); 271 | if (_tempLocations.Contains(entryData, new EntryDataGUIDComparer())) 272 | { 273 | duplicateList.Add(_tempLocations.Find((entry) => entry.GUID == entryData.GUID)); 274 | } 275 | else 276 | { 277 | allowedList.Add(entryData); 278 | } 279 | } 280 | if(duplicateList.Count > 0) 281 | { 282 | StringBuilder sb = new StringBuilder(); 283 | sb.Append("\n\n"); 284 | for (int i = 0; i < duplicateList.Count; i++) 285 | { 286 | sb.Append(string.Format("{0} in {1} Category\n\n", GetNameForFile(AssetDatabase.GUIDToAssetPath(duplicateList[i].GUID)), duplicateList[i].Category)); 287 | } 288 | 289 | if (EditorUtility.DisplayDialog("Bookmark Everything", string.Format("Duplicate Entries Found: {0} Would you still like to add them ?(Non-duplicates will be added anyway)", sb.ToString()), "Yes", "No")) 290 | { 291 | duplicateList.AddRange(allowedList); 292 | for (int i = 0; i < duplicateList.Count; i++) 293 | { 294 | if (_tabIndex == 0) 295 | { 296 | duplicateList[i].Category = GetNameOfCategory(_projectFinderTabIndex); 297 | duplicateList[i].Index = _projectFinderTabIndex; 298 | } 299 | else if (_tabIndex == 1) 300 | { 301 | duplicateList[i].Category = GetNameOfCategory(0); 302 | duplicateList[i].Index = 0; 303 | _lastlyAddedCount++; 304 | 305 | } 306 | } 307 | _tempLocations.AddRange(duplicateList); 308 | if (_tabIndex == 0) 309 | { 310 | SaveChanges(); 311 | } 312 | // else if (_tabIndex == 1) 313 | // { 314 | // _changesMade = true; 315 | // } 316 | } 317 | else 318 | { 319 | for (int i = 0; i < allowedList.Count; i++) 320 | { 321 | if (_tabIndex == 0) 322 | { 323 | allowedList[i].Category = GetNameOfCategory(_projectFinderTabIndex); 324 | allowedList[i].Index = _projectFinderTabIndex; 325 | } 326 | else if (_tabIndex == 1) 327 | { 328 | allowedList[i].Category = GetNameOfCategory(0); 329 | allowedList[i].Index = 0; 330 | _lastlyAddedCount++; 331 | } 332 | } 333 | _tempLocations.AddRange(allowedList); 334 | if (_tabIndex == 0) 335 | { 336 | SaveChanges(); 337 | } 338 | // else if (_tabIndex == 1) 339 | // { 340 | // _changesMade = true; 341 | // } 342 | } 343 | } 344 | else if(allowedList.Count > 0) 345 | { 346 | for (int i = 0; i < allowedList.Count; i++) 347 | { 348 | if (_tabIndex == 0) 349 | { 350 | allowedList[i].Category = GetNameOfCategory(_projectFinderTabIndex); 351 | allowedList[i].Index = _projectFinderTabIndex; 352 | } 353 | else if (_tabIndex == 1) 354 | { 355 | allowedList[i].Category = GetNameOfCategory(0); 356 | allowedList[i].Index = 0; 357 | _lastlyAddedCount++; 358 | 359 | } 360 | } 361 | 362 | _tempLocations.AddRange(allowedList); 363 | if (_tabIndex == 0) 364 | { 365 | SaveChanges(); 366 | } 367 | // else if (_tabIndex == 1) 368 | // { 369 | // _changesMade = true; 370 | // } 371 | } 372 | 373 | } 374 | break; 375 | } 376 | } 377 | 378 | #region HELPERS 379 | 380 | #region LOAD DATA 381 | 382 | private void LoadSettings() 383 | { 384 | //attempt to load the entries 385 | _currentSettings = IOHelper.ReadFromDisk(SETTINGS_FILENAME); 386 | //if nothing is saved, retrieve the default values 387 | if (_currentSettings == null) 388 | { 389 | _currentSettings = new SaveData(); 390 | _currentSettings.PingType = PingTypes.Both; 391 | _currentSettings.Save(); 392 | } 393 | _tempLocations.AddRange(EntryData.Clone(_currentSettings.EntryData.ToArray())); 394 | 395 | _pingType = _currentSettings.PingType; 396 | _visualMode = _currentSettings.VisualMode; 397 | VisualMode(_visualMode); 398 | _autoClose = _currentSettings.AutoClose; 399 | _showFullPath = _currentSettings.ShowFullPath; 400 | _showFullPathForFolder = _currentSettings.ShowFullPathForFolders; 401 | } 402 | 403 | #endregion 404 | 405 | #region STRING HELPERS 406 | 407 | private string Capital(string s) 408 | { 409 | return System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(s); 410 | } 411 | private string GetNameForFile(string path) 412 | { 413 | if (_currentSettings.ShowFullPath) 414 | { 415 | return path; 416 | } 417 | string[] s = path.Split('/'); 418 | return s[s.Length - 1]; 419 | } 420 | private string GetNameForFolder(string path) 421 | { 422 | if (_currentSettings.ShowFullPathForFolders) 423 | { 424 | return path; 425 | } 426 | string[] s = path.Split('/'); 427 | return s[s.Length - 1]; 428 | } 429 | 430 | private GUIContent ContentWithIcon(string name, string path) 431 | { 432 | 433 | GUIContent c = new GUIContent(name, AssetDatabase.GetCachedIcon(path)); 434 | return c; 435 | } 436 | /// 437 | /// Assumes that the name is actually type and tries to resolve icon from name. 438 | /// 439 | /// 440 | /// 441 | private GUIContent ContentWithIcon(string name) 442 | { 443 | GUIContent c = EditorGUIUtility.IconContent(ResolveIconNameFromFileExtension(name)); 444 | c.text = name; 445 | return c; 446 | } 447 | private string ResolveFileExtensionFromHeaderName(string header) 448 | { 449 | switch (header) 450 | { 451 | case CATEGORY_SCENE: 452 | return "unity"; 453 | case CATEGORY_PREFAB: 454 | return "prefab"; 455 | case CATEGORY_SCRIPT: 456 | return "cs"; 457 | case CATEGORY_SO: 458 | return "asset"; 459 | case CATEGORY_STARRED: 460 | return "Favorite"; 461 | default: 462 | return "default"; 463 | } 464 | } 465 | private string ResolveIconNameFromFileExtension(string fileExtension) 466 | { 467 | switch (fileExtension) 468 | { 469 | case "unity": 470 | return "SceneAsset Icon"; 471 | case "prefab": 472 | #if UNITY_2018_3_OR_NEWER 473 | return "d_Prefab Icon"; 474 | #else 475 | return "PrefabNormal Icon"; 476 | #endif 477 | case "mat": 478 | return "Material Icon"; 479 | case "cs": 480 | return "cs Script Icon"; 481 | case "wav": 482 | return "AudioClip Icon"; 483 | case "mp3": 484 | return "AudioClip Icon"; 485 | case "flac": 486 | return "AudioClip Icon"; 487 | case "folder": 488 | return "Folder Icon"; 489 | case "dll": 490 | return "dll Script Icon"; 491 | case "fbx": 492 | return "PrefabModel Icon"; 493 | case "asset": 494 | return "ScriptableObject Icon"; 495 | case "txt": 496 | return "TextAsset Icon"; 497 | case "controller": 498 | return "UnityEditor.Graphs.AnimatorControllerTool"; 499 | case "Favorite": 500 | return "Favorite"; 501 | 502 | default: 503 | return "DefaultAsset Icon"; 504 | } 505 | } 506 | 507 | #endregion 508 | 509 | #region GUI STYLE ARRRANGEMENT 510 | /// 511 | /// Creates a single pixel Texture2D and paints it with given color. We can't directly edit GUIStyle's color so we do this. 512 | /// 513 | private Texture2D CreateColorForEditor(string htmlString) 514 | { 515 | Texture2D t = new Texture2D(1, 1); 516 | Color c; 517 | #if UNITY_5_1 518 | Color.TryParseHexString(htmlString, out c); 519 | #else 520 | ColorUtility.TryParseHtmlString(htmlString, out c); 521 | #endif 522 | t.SetPixel(0, 0, c); 523 | t.Apply(); 524 | return t; 525 | } 526 | /// 527 | /// Creates a color from given HTML string. 528 | /// 529 | /// 530 | /// 531 | private Color CreateColor(string htmlString) 532 | { 533 | Color c; 534 | #if UNITY_5_1 535 | Color.TryParseHexString(htmlString, out c); 536 | #else 537 | ColorUtility.TryParseHtmlString(htmlString, out c); 538 | #endif 539 | return c; 540 | } 541 | 542 | private void ConstructStyles() 543 | { 544 | 545 | VisualMode(_visualMode); 546 | 547 | } 548 | 549 | private void VisualMode(bool visualMode) 550 | { 551 | _boldLabelStyle = new GUIStyle(EditorStyles.boldLabel); 552 | 553 | if (visualMode) 554 | { 555 | _buttonStyle = new GUIStyle(EditorStyles.miniButton); 556 | _textFieldStyle = new GUIStyle(EditorStyles.textField); 557 | _scrollViewStyle = new GUIStyle(); 558 | _boxStyle = new GUIStyle(EditorStyles.helpBox); 559 | _popupStyle = new GUIStyle(EditorStyles.popup); 560 | _toolbarButtonStyle = new GUIStyle(EditorStyles.toolbarButton); 561 | 562 | _editorWindowBackground = CreateColorForEditor("#362914"); 563 | 564 | _buttonStyle.normal.background = CreateColorForEditor("#EACA93"); 565 | _buttonStyle.active.background = CreateColorForEditor("#5A4B31"); 566 | _buttonStyle.active.textColor = CreateColor("#ecf0f1"); 567 | _buttonStyle.focused.background = CreateColorForEditor("#EACA93"); 568 | _buttonStyle.alignment = TextAnchor.MiddleLeft; 569 | 570 | _scrollViewStyle.normal.background = CreateColorForEditor("#231703"); 571 | 572 | _textFieldStyle.normal.background = CreateColorForEditor("#EACA93"); 573 | _textFieldStyle.active.background = CreateColorForEditor("#EACA93"); 574 | _textFieldStyle.focused.background = CreateColorForEditor("#EACA93"); 575 | 576 | _boxStyle.normal.background = CreateColorForEditor("#EACA93"); 577 | 578 | _popupStyle.normal.background = CreateColorForEditor("#EACA93"); 579 | _popupStyle.focused.background = CreateColorForEditor("#EACA93"); 580 | 581 | _toolbarButtonStyle.normal.background = CreateColorForEditor("#EACA93"); 582 | _toolbarButtonStyle.alignment = TextAnchor.MiddleLeft; 583 | } 584 | else 585 | { 586 | _buttonStyle = new GUIStyle(EditorStyles.miniButton); 587 | _textFieldStyle = new GUIStyle(EditorStyles.textField); 588 | _scrollViewStyle = new GUIStyle(); 589 | _boxStyle = new GUIStyle(EditorStyles.helpBox); 590 | _popupStyle = new GUIStyle(EditorStyles.popup); 591 | _toolbarButtonStyle = new GUIStyle(EditorStyles.toolbarButton); 592 | 593 | _buttonStyle.alignment = TextAnchor.MiddleLeft; 594 | _toolbarButtonStyle.alignment = TextAnchor.MiddleLeft; 595 | } 596 | } 597 | #endregion 598 | 599 | 600 | 601 | #endregion 602 | 603 | 604 | #region ELEMENT DRAWERS 605 | 606 | #region GUICONTENT 607 | 608 | private GUIContent[] RetrieveGUIContent(string[] entries) 609 | { 610 | GUIContent[] c = new GUIContent[entries.Length]; 611 | for (int i = 0; i < entries.Length; i++) 612 | { 613 | c[i] = RetrieveGUIContent(entries[i], ResolveIconNameFromFileExtension(ResolveFileExtensionFromHeaderName(entries[i]))); 614 | } 615 | return c; 616 | } 617 | 618 | /// 619 | /// Easily create GUIContent 620 | /// 621 | /// 622 | /// 623 | /// 624 | /// 625 | private GUIContent RetrieveGUIContent(string name, string iconName = "", string tooltip = "", bool useIconResolver = false) 626 | { 627 | if (iconName != null || iconName != "") 628 | { 629 | GUIContent c = new GUIContent(EditorGUIUtility.IconContent(iconName)); 630 | c.text = name; 631 | c.tooltip = tooltip; 632 | return c; 633 | } 634 | else 635 | { 636 | return new GUIContent(name); 637 | } 638 | } 639 | #endregion 640 | 641 | #region BUTTON 642 | 643 | private const float _standardButtonMaxWidth = 25; 644 | private const float _standardButtonMaxHeight = 18; 645 | private const float _bigButtonMaxHeight = 30; 646 | private bool DrawButton(string name, string iconName = "", string tooltip = "") 647 | { 648 | if (iconName != null && iconName != "") 649 | { 650 | 651 | GUIContent c = new GUIContent(EditorGUIUtility.IconContent(iconName)); 652 | c.text = name; 653 | c.tooltip = tooltip; 654 | return GUILayout.Button(c); 655 | } 656 | else 657 | { 658 | return GUILayout.Button(name); 659 | } 660 | 661 | } 662 | private bool DrawButton(string name, string iconName = "", params GUILayoutOption[] options) 663 | { 664 | if (iconName != null && iconName != "") 665 | { 666 | 667 | GUIContent c = new GUIContent(EditorGUIUtility.IconContent(iconName)); 668 | c.text = name; 669 | return GUILayout.Button(c, options); 670 | } 671 | else 672 | { 673 | return GUILayout.Button(name, options); 674 | } 675 | 676 | } 677 | private bool DrawButton(string name, string iconName, ButtonTypes type) 678 | { 679 | GUILayoutOption[] options = null; 680 | 681 | switch (type) 682 | { 683 | case ButtonTypes.Standard: 684 | options = new GUILayoutOption[] { GUILayout.MaxHeight(_standardButtonMaxHeight) }; 685 | break; 686 | case ButtonTypes.Big: 687 | options = new GUILayoutOption[] { GUILayout.MaxHeight(_bigButtonMaxHeight) }; 688 | break; 689 | case ButtonTypes.SmallLongHeight: 690 | options = new GUILayoutOption[]{ GUILayout.MaxHeight(EditorGUIUtility.singleLineHeight + (EditorGUIUtility.singleLineHeight * .5f)), GUILayout.MaxWidth(25) }; 691 | break; 692 | case ButtonTypes.SmallNormalHeight: 693 | options = new GUILayoutOption[] { GUILayout.MaxHeight(_standardButtonMaxHeight), GUILayout.MaxWidth(25) }; 694 | break; 695 | default: 696 | break; 697 | } 698 | 699 | if (iconName != null && iconName != "") 700 | { 701 | 702 | GUIContent c = new GUIContent(EditorGUIUtility.IconContent(iconName)); 703 | c.text = name; 704 | return GUILayout.Button(c, _buttonStyle, options); 705 | } 706 | else 707 | { 708 | return GUILayout.Button(name, options); 709 | } 710 | 711 | 712 | } 713 | 714 | #endregion 715 | 716 | #region READ-ONLY TEXT FIELD 717 | 718 | void ReadOnlyTextField(string label, string text) 719 | { 720 | EditorGUILayout.BeginHorizontal(); 721 | { 722 | EditorGUILayout.LabelField(label, GUILayout.Width(EditorGUIUtility.labelWidth - 4)); 723 | EditorGUILayout.SelectableLabel(text, EditorStyles.textField, GUILayout.Height(EditorGUIUtility.singleLineHeight)); 724 | } 725 | EditorGUILayout.EndHorizontal(); 726 | } 727 | 728 | #endregion 729 | 730 | #endregion 731 | 732 | #region CONTENT 733 | 734 | #region MAIN HEADER DRAWERS 735 | 736 | private int _tabIndex = 0; 737 | private void DrawHeader() 738 | { 739 | _tabIndex = GUILayout.Toolbar(_tabIndex, _headerContents.ToArray()); 740 | if (_tabIndex == 0 && _changesMade) 741 | { 742 | bool save = EditorUtility.DisplayDialog("Bookmark Everything", "You have unsaved changes. Would you like to save them?", "Yes", "No"); 743 | if (save) 744 | { 745 | SaveChanges(); 746 | } 747 | else 748 | { 749 | _lastlyAddedCount = -1; 750 | _tempLocations.Clear(); 751 | _tempLocations.AddRange(EntryData.Clone(_currentSettings.EntryData.ToArray())); 752 | _changesMade = false; 753 | } 754 | } 755 | switch (_tabIndex) 756 | { 757 | case 0: 758 | DrawProjectFinder(); 759 | break; 760 | case 1: 761 | DrawSettings(); 762 | break; 763 | default: 764 | break; 765 | } 766 | } 767 | private int _projectFinderTabIndex = 0; 768 | private bool _visualModeChanged; 769 | private bool _controlVisualMode; 770 | private bool _controlAutoClose; 771 | private bool _autoCloseChanged; 772 | private bool _controlShowFullPath; 773 | private bool _showFullPathChanged; 774 | private bool _controlShowFullPathForFolder; 775 | private bool _showFullPathForFolderChanged; 776 | private void DrawProjectFinder() 777 | { 778 | _projectFinderTabIndex = GUILayout.Toolbar(_projectFinderTabIndex, _projectFinderContents.ToArray(), _toolbarButtonStyle, GUILayout.ExpandHeight(false)); 779 | switch (_projectFinderTabIndex) 780 | { 781 | case 0://starred 782 | DrawProjectFinderEntries(CATEGORY_STARRED); 783 | break; 784 | case 1://scenes 785 | DrawProjectFinderEntries(CATEGORY_SCENE); 786 | 787 | break; 788 | case 2://prefab 789 | DrawProjectFinderEntries(CATEGORY_PREFAB); 790 | 791 | break; 792 | case 3://script 793 | DrawProjectFinderEntries(CATEGORY_SCRIPT); 794 | 795 | break; 796 | case 4://so 797 | DrawProjectFinderEntries(CATEGORY_SO); 798 | break; 799 | default: 800 | break; 801 | } 802 | } 803 | private bool _reachedToAsset; 804 | Vector2 _projectFinderEntriesScroll; 805 | int _objectIndexToBeRemovedDueToDeletedAsset = -1; 806 | int _objectIndexToBeRemoved = -1; 807 | private void DrawProjectFinderEntries(string category) 808 | { 809 | bool clicked = false; 810 | _projectFinderEntriesScroll = EditorGUILayout.BeginScrollView(_projectFinderEntriesScroll, _scrollViewStyle, GUILayout.MaxHeight(position.height)); 811 | for (int i = 0; i < _currentSettings.EntryData.Count; i++) 812 | { 813 | if (_currentSettings.EntryData[i].Category == category) 814 | { 815 | string path = AssetDatabase.GUIDToAssetPath(_currentSettings.EntryData[i].GUID); 816 | bool exists = IOHelper.Exists(path); 817 | bool isFolder = IOHelper.IsFolder(path); 818 | GUIContent content; 819 | if (exists) 820 | { 821 | content = ContentWithIcon(isFolder ? GetNameForFolder(path) : GetNameForFile(path), path); 822 | } 823 | else 824 | { 825 | content = RetrieveGUIContent((isFolder ? GetNameForFolder(path) : GetNameForFile(path)) + "(File is removed, click to remove)" , "console.erroricon.sml"); 826 | } 827 | EditorGUILayout.BeginHorizontal(); 828 | if (GUILayout.Button(content, _buttonStyle, GUILayout.MaxHeight(EditorGUIUtility.singleLineHeight + (EditorGUIUtility.singleLineHeight * .5f)))) 829 | { 830 | if (exists) 831 | { 832 | if (_pingType == PingTypes.Ping) 833 | { 834 | if (Selection.activeObject) 835 | { 836 | Selection.activeObject = null; 837 | } 838 | EditorGUIUtility.PingObject(AssetDatabase.LoadMainAssetAtPath(path)); 839 | } 840 | else if (_pingType == PingTypes.Selection) 841 | { 842 | Selection.activeObject = AssetDatabase.LoadMainAssetAtPath(path); 843 | } 844 | else if (_pingType == PingTypes.Both) 845 | { 846 | if (Selection.activeObject) 847 | { 848 | Selection.activeObject = null; 849 | } 850 | EditorGUIUtility.PingObject(AssetDatabase.LoadMainAssetAtPath(path)); 851 | Selection.activeObject = AssetDatabase.LoadMainAssetAtPath(path); 852 | } 853 | clicked = true; 854 | } 855 | else 856 | { 857 | _objectIndexToBeRemovedDueToDeletedAsset = i; 858 | } 859 | _reachedToAsset = true; 860 | } 861 | if (DrawButton("", "ol minus", ButtonTypes.SmallLongHeight)) 862 | { 863 | _objectIndexToBeRemoved = i; 864 | } 865 | EditorGUILayout.EndHorizontal(); 866 | } 867 | 868 | } 869 | if (_objectIndexToBeRemovedDueToDeletedAsset != -1) 870 | { 871 | _tempLocations.RemoveAt(_objectIndexToBeRemovedDueToDeletedAsset); 872 | _objectIndexToBeRemovedDueToDeletedAsset = -1; 873 | SaveChanges(); 874 | } 875 | if(_objectIndexToBeRemoved != -1) 876 | { 877 | _tempLocations.RemoveAt(_objectIndexToBeRemoved); 878 | _objectIndexToBeRemoved = -1; 879 | SaveChanges(); 880 | } 881 | if (_currentSettings.EntryData.Count == 0) 882 | { 883 | EditorGUILayout.LabelField("You can Drag&Drop assets from Project Folder and easily access them here.", _boldLabelStyle); 884 | } 885 | EditorGUILayout.EndScrollView(); 886 | 887 | //Older version of unity has issues with FocusProjectWindow being in the middle of the run(before EndXViews). 888 | if (clicked) 889 | { 890 | EditorUtility.FocusProjectWindow(); 891 | } 892 | } 893 | 894 | Vector2 _settingScrollPos; 895 | bool _changesMade = false; 896 | int _lastlyAddedCount = -1; 897 | Color _defaultGUIColor; 898 | private void DrawSettings() 899 | { 900 | DrawInnerSettings(); 901 | 902 | int toBeRemoved = -1; 903 | UnityEngine.Object pingedObject = null; 904 | _settingScrollPos = EditorGUILayout.BeginScrollView(_settingScrollPos, _scrollViewStyle, GUILayout.MaxHeight(position.height)); 905 | //Iterate all found entries - key is path value is type 906 | EditorGUILayout.BeginVertical(_boxStyle); 907 | EditorGUILayout.LabelField("Manage Registered Assets", _boldLabelStyle); 908 | EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); 909 | for (int i = 0; i < _tempLocations.Count; i++) 910 | { 911 | bool exists = IOHelper.Exists(_tempLocations[i].GUID, ExistentialCheckStrategy.GUID); 912 | if (_lastlyAddedCount != -1 && i >= _tempLocations.Count - _lastlyAddedCount -1) 913 | { 914 | GUI.color = Color.green; 915 | } 916 | EditorGUILayout.BeginHorizontal(); 917 | { 918 | EditorGUILayout.BeginVertical(); 919 | { 920 | string fullPath = exists ? AssetDatabase.GUIDToAssetPath(_tempLocations[i].GUID) : "(Removed)" + AssetDatabase.GUIDToAssetPath(_tempLocations[i].GUID); 921 | GUILayout.Space(4); 922 | EditorGUILayout.SelectableLabel(fullPath, _textFieldStyle, GUILayout.Height(EditorGUIUtility.singleLineHeight)); 923 | } 924 | EditorGUILayout.EndVertical(); 925 | if (!exists) 926 | { 927 | GUI.enabled = false; 928 | } 929 | if (DrawButton("", "ViewToolOrbit", ButtonTypes.SmallNormalHeight)) 930 | { 931 | pingedObject = AssetDatabase.LoadMainAssetAtPath(AssetDatabase.GUIDToAssetPath(_tempLocations[i].GUID)); 932 | if (Selection.activeObject) 933 | { 934 | Selection.activeObject = null; 935 | } 936 | 937 | if (_pingType == PingTypes.Ping) 938 | { 939 | EditorGUIUtility.PingObject(pingedObject); 940 | } 941 | else if (_pingType == PingTypes.Selection) 942 | { 943 | Selection.activeObject = pingedObject; 944 | } 945 | else if (_pingType == PingTypes.Both) 946 | { 947 | EditorGUIUtility.PingObject(pingedObject); 948 | Selection.activeObject = pingedObject; 949 | } 950 | } 951 | 952 | // if (DrawButton("Assign Selected Object", "TimeLinePingPong", ButtonTypes.Standard)) 953 | // { 954 | // string s = AssetDatabase.GetAssetPath(Selection.activeObject); 955 | // if (s == "" || s == null || Selection.activeObject == null) 956 | // { 957 | // EditorUtility.DisplayDialog("Empty Selection", "Please select an item from Project Hierarchy.", "Okay"); 958 | // } 959 | // else 960 | // { 961 | // _tempLocations[i] = Selection.activeObject; 962 | // _changesMade = true; 963 | // } 964 | // GUI.FocusControl(null); 965 | // } 966 | //çatecori 967 | ///*int categoryIndex*/ = GetIndexOfCategory(_tempPlayerPrefLocations[i].Category); 968 | _tempLocations[i].Index = EditorGUILayout.Popup(_tempLocations[i].Index, RetrieveGUIContent(_projectFinderHeaders), _popupStyle, GUILayout.MinHeight(EditorGUIUtility.singleLineHeight), GUILayout.MaxWidth(150)); 969 | 970 | _tempLocations[i].Category = _projectFinderHeaders[_tempLocations[i].Index]; 971 | 972 | if (!exists) 973 | { 974 | GUI.enabled = true; 975 | } 976 | //Remove Button 977 | if (DrawButton("", "ol minus", ButtonTypes.SmallNormalHeight)) 978 | { 979 | if(_lastlyAddedCount != -1 && i >= _tempLocations.Count - _lastlyAddedCount -1) 980 | { 981 | _lastlyAddedCount--; 982 | } 983 | toBeRemoved = i; 984 | } 985 | } 986 | EditorGUILayout.EndHorizontal(); 987 | 988 | if (_lastlyAddedCount != -1 && i >= _tempLocations.Count - _lastlyAddedCount - 1) 989 | { 990 | GUI.color = _defaultGUIColor; 991 | } 992 | }//endfor 993 | if (_tempLocations.Count == 0 && _currentSettings.EntryData.Count == 0) 994 | { 995 | EditorGUILayout.LabelField("Start dragging some assets from Project Folder!", _boldLabelStyle); 996 | } 997 | EditorGUILayout.EndVertical(); 998 | EditorGUILayout.EndScrollView(); 999 | 1000 | //Focus to Project window if a ping object is selected. Causes an error if it is directly made within the for loop 1001 | if (pingedObject != null) 1002 | { 1003 | EditorUtility.FocusProjectWindow(); 1004 | } 1005 | //Remove item 1006 | if (toBeRemoved != -1) 1007 | { 1008 | _tempLocations.RemoveAt(toBeRemoved); 1009 | } 1010 | //-- 1011 | //Add 1012 | 1013 | // if (DrawButton("Add", "ol plus", ButtonTypes.Big)) 1014 | // { 1015 | // if (Selection.activeObject != null) 1016 | // { 1017 | // _tempLocations.Add(Selection.activeObject); 1018 | // } 1019 | // else 1020 | // { 1021 | // EditorUtility.DisplayDialog("Empty Selection", "Please select an item from Project Hierarchy.", "Okay"); 1022 | // } 1023 | // GUI.FocusControl(null); 1024 | // } 1025 | 1026 | //Save 1027 | 1028 | //detect if any change occured, if not reverse the HelpBox 1029 | if (_currentSettings.EntryData.Count != _tempLocations.Count) 1030 | { 1031 | _changesMade = true; 1032 | } 1033 | else 1034 | { 1035 | for (int i = 0; i < _currentSettings.EntryData.Count; i++) 1036 | { 1037 | if (_currentSettings.EntryData[i].GUID != _tempLocations[i].GUID || _currentSettings.EntryData[i].Category != _tempLocations[i].Category) 1038 | { 1039 | _changesMade = true; 1040 | break; 1041 | } 1042 | if (i == _currentSettings.EntryData.Count - 1) 1043 | { 1044 | _changesMade = false; 1045 | } 1046 | } 1047 | } 1048 | //Show info about saving 1049 | if (_changesMade) 1050 | { 1051 | if (DrawButton("Save", "redLight", ButtonTypes.Big)) 1052 | { 1053 | SaveChanges(); 1054 | } 1055 | EditorGUILayout.HelpBox("Changes are made, you should save changes if you want to keep them.", MessageType.Info); 1056 | if (DrawButton("Discard Changes", "", ButtonTypes.Standard)) 1057 | { 1058 | _lastlyAddedCount = -1; 1059 | _tempLocations.Clear(); 1060 | _tempLocations.AddRange(EntryData.Clone(_currentSettings.EntryData.ToArray())); 1061 | _changesMade = false; 1062 | } 1063 | 1064 | } 1065 | 1066 | } 1067 | 1068 | private void SaveChanges() 1069 | { 1070 | _currentSettings.EntryData.Clear(); 1071 | _currentSettings.EntryData.AddRange(EntryData.Clone(_tempLocations.ToArray())); 1072 | _lastlyAddedCount = -1; 1073 | 1074 | _currentSettings.Save(); 1075 | _changesMade = false; 1076 | } 1077 | #endregion 1078 | 1079 | #endregion 1080 | 1081 | private void DrawInnerSettings() 1082 | { 1083 | EditorGUILayout.BeginVertical(_boxStyle); 1084 | EditorGUILayout.LabelField("General Settings", _boldLabelStyle); 1085 | EditorGUILayout.LabelField("", GUI.skin.horizontalSlider); 1086 | EditorGUILayout.BeginHorizontal(); 1087 | string label = "Current Ping Type : "; 1088 | EditorGUILayout.LabelField(label, GUILayout.MaxWidth(label.Length * 7.3f)); 1089 | if (_pingType == PingTypes.Ping) 1090 | { 1091 | if (GUILayout.Button("Ping", _buttonStyle, GUILayout.ExpandWidth(false))) 1092 | { 1093 | _pingType = PingTypes.Selection; 1094 | _currentSettings.PingType = _pingType; 1095 | _currentSettings.Save(); 1096 | } 1097 | } 1098 | else if (_pingType == PingTypes.Selection) 1099 | { 1100 | if (GUILayout.Button("Selection", _buttonStyle, GUILayout.ExpandWidth(false))) 1101 | { 1102 | _pingType = PingTypes.Both; 1103 | _currentSettings.PingType = _pingType; 1104 | _currentSettings.Save(); 1105 | } 1106 | } 1107 | else if (_pingType == PingTypes.Both) 1108 | { 1109 | if (GUILayout.Button("Both", _buttonStyle, GUILayout.ExpandWidth(false))) 1110 | { 1111 | _pingType = PingTypes.Ping; 1112 | _currentSettings.PingType = _pingType; 1113 | _currentSettings.Save(); 1114 | } 1115 | } 1116 | EditorGUILayout.EndHorizontal(); 1117 | 1118 | EditorGUILayout.BeginHorizontal(); 1119 | _controlAutoClose = _autoClose; 1120 | _autoClose = EditorGUILayout.Toggle("Auto Close : ", _autoClose); 1121 | 1122 | if (_controlAutoClose != _autoClose) 1123 | { 1124 | _autoCloseChanged = true; 1125 | } 1126 | if (_autoCloseChanged) 1127 | { 1128 | _currentSettings.AutoClose = _autoClose; 1129 | _currentSettings.Save(); 1130 | _autoCloseChanged = false; 1131 | } 1132 | EditorGUILayout.EndHorizontal(); 1133 | 1134 | 1135 | 1136 | EditorGUILayout.BeginHorizontal(); 1137 | label = "Show Full Path : "; 1138 | _controlShowFullPath = _showFullPath; 1139 | _showFullPath = EditorGUILayout.Toggle(label, _showFullPath); 1140 | 1141 | if (_controlShowFullPath != _showFullPath) 1142 | { 1143 | _showFullPathChanged = true; 1144 | } 1145 | if (_showFullPathChanged) 1146 | { 1147 | _currentSettings.ShowFullPath = _showFullPath; 1148 | _currentSettings.Save(); 1149 | _showFullPathChanged = false; 1150 | } 1151 | 1152 | EditorGUILayout.EndHorizontal(); 1153 | 1154 | EditorGUILayout.BeginHorizontal(); 1155 | label = "Show Full Path(Folders) : "; 1156 | _controlShowFullPathForFolder = _showFullPathForFolder; 1157 | _showFullPathForFolder = EditorGUILayout.Toggle(label, _showFullPathForFolder); 1158 | 1159 | if (_controlShowFullPathForFolder != _showFullPathForFolder) 1160 | { 1161 | _showFullPathForFolderChanged = true; 1162 | } 1163 | if (_showFullPathForFolderChanged) 1164 | { 1165 | _currentSettings.ShowFullPathForFolders = _showFullPathForFolder; 1166 | _currentSettings.Save(); 1167 | _showFullPathForFolderChanged = false; 1168 | } 1169 | 1170 | EditorGUILayout.EndHorizontal(); 1171 | 1172 | EditorGUILayout.BeginHorizontal(); 1173 | 1174 | label = "Visual Mode(Experimental!) : "; 1175 | _controlVisualMode = _visualMode; 1176 | _visualMode = EditorGUILayout.Toggle(label, _visualMode); 1177 | 1178 | if (_controlVisualMode != _visualMode) 1179 | { 1180 | _visualModeChanged = true; 1181 | } 1182 | if (_visualModeChanged) 1183 | { 1184 | VisualMode(_visualMode); 1185 | _currentSettings.VisualMode = _visualMode; 1186 | _currentSettings.Save(); 1187 | _visualModeChanged = false; 1188 | } 1189 | 1190 | EditorGUILayout.EndHorizontal(); 1191 | 1192 | EditorGUILayout.EndVertical(); 1193 | } 1194 | } 1195 | } 1196 | 1197 | 1198 | public enum MainHeaders 1199 | { 1200 | Scenes, 1201 | Prefabs, 1202 | Scripts 1203 | } 1204 | public enum ButtonTypes 1205 | { 1206 | Standard, 1207 | Big, 1208 | SmallLongHeight, 1209 | SmallNormalHeight 1210 | } 1211 | public enum PingTypes 1212 | { 1213 | Ping, 1214 | Selection, 1215 | Both 1216 | } --------------------------------------------------------------------------------