├── .gitignore ├── CHANGELOG.md ├── CHANGELOG.md.meta ├── Documentation.url ├── Documentation.url.meta ├── Fonts.meta ├── Fonts ├── Montserrat.meta ├── Montserrat │ ├── Montserrat-Black SDF.asset │ ├── Montserrat-Black SDF.asset.meta │ ├── Montserrat-Black.ttf │ ├── Montserrat-Black.ttf.meta │ ├── Montserrat-Regular SDF.asset │ ├── Montserrat-Regular SDF.asset.meta │ ├── Montserrat-Regular.ttf │ └── Montserrat-Regular.ttf.meta ├── Raleway.meta ├── Raleway │ ├── Raleway-Bold SDF.asset │ ├── Raleway-Bold SDF.asset.meta │ ├── Raleway-Bold.ttf │ ├── Raleway-Bold.ttf.meta │ ├── Raleway-Regular SDF.asset │ ├── Raleway-Regular SDF.asset.meta │ ├── Raleway-Regular.ttf │ └── Raleway-Regular.ttf.meta ├── Roboto.meta └── Roboto │ ├── Roboto-Bold SDF.asset │ ├── Roboto-Bold SDF.asset.meta │ ├── Roboto-Bold.ttf │ ├── Roboto-Bold.ttf.meta │ ├── Roboto-Regular SDF.asset │ ├── Roboto-Regular SDF.asset.meta │ ├── Roboto-Regular.ttf │ ├── Roboto-Regular.ttf.meta │ ├── RobotoMono-Light SDF.asset │ ├── RobotoMono-Light SDF.asset.meta │ ├── RobotoMono-Light.ttf │ └── RobotoMono-Light.ttf.meta ├── Integrations.meta ├── Integrations ├── Oculus Integrations Support.meta ├── Oculus Integrations Support │ ├── RDASettings InputSystem VR Oculus.preset │ ├── RDASettings InputSystem VR Oculus.preset.meta │ ├── UI Default VR Oculus.prefab │ └── UI Default VR Oculus.prefab.meta ├── XR Interaction Toolkit Support.meta └── XR Interaction Toolkit Support │ ├── RDASettings InputSystem XR.preset │ ├── RDASettings InputSystem XR.preset.meta │ ├── UI Default XR.prefab │ └── UI Default XR.prefab.meta ├── LICENSE ├── LICENSE.meta ├── Prefabs.meta ├── Prefabs ├── EmbeddedEventSystem.prefab ├── EmbeddedEventSystem.prefab.meta ├── EmbeddedEventSystemInputSystem.prefab ├── EmbeddedEventSystemInputSystem.prefab.meta ├── ItemView.meta ├── ItemView │ ├── Item View Compact.prefab │ ├── Item View Compact.prefab.meta │ ├── Item View Spaced.prefab │ ├── Item View Spaced.prefab.meta │ ├── Item View.prefab │ ├── Item View.prefab.meta │ ├── VRKey.prefab │ └── VRKey.prefab.meta ├── ListView.meta ├── ListView │ ├── Action List.prefab │ └── Action List.prefab.meta ├── Scrollable Text Field.prefab ├── Scrollable Text Field.prefab.meta ├── Search Field.prefab ├── Search Field.prefab.meta ├── UI Compact Bottom.prefab ├── UI Compact Bottom.prefab.meta ├── UI Compact.prefab ├── UI Compact.prefab.meta ├── UI Default Spaced.prefab ├── UI Default Spaced.prefab.meta ├── UI Default World Space.prefab ├── UI Default World Space.prefab.meta ├── UI Default.prefab ├── UI Default.prefab.meta ├── VRKeyboard.meta └── VRKeyboard │ ├── Keyboard VR.prefab │ └── Keyboard VR.prefab.meta ├── README.md ├── README.md.meta ├── Runtime.meta ├── Runtime ├── Actions.meta ├── Actions │ ├── Base.meta │ ├── Base │ │ ├── BaseDebugAction.cs │ │ ├── BaseDebugAction.cs.meta │ │ ├── FluentAction.cs │ │ └── FluentAction.cs.meta │ ├── Builder.meta │ ├── Builder │ │ ├── DebugActionBuilder.cs │ │ └── DebugActionBuilder.cs.meta │ ├── DebugActionButton.cs │ ├── DebugActionButton.cs.meta │ ├── DebugActionEnum.cs │ ├── DebugActionEnum.cs.meta │ ├── DebugActionFlag.cs │ ├── DebugActionFlag.cs.meta │ ├── DebugActionInput.cs │ ├── DebugActionInput.cs.meta │ ├── DebugActionToggle.cs │ └── DebugActionToggle.cs.meta ├── Attributes.meta ├── Attributes │ ├── DebugActionAttribute.cs │ └── DebugActionAttribute.cs.meta ├── Components.meta ├── Components │ ├── Actions.meta │ ├── Actions │ │ ├── BaseDebugActionHandler.cs │ │ ├── BaseDebugActionHandler.cs.meta │ │ ├── DebugActionAutoHandler.cs │ │ ├── DebugActionAutoHandler.cs.meta │ │ ├── DebugActionButtonHandler.cs │ │ ├── DebugActionButtonHandler.cs.meta │ │ ├── DebugActionFlagHandler.cs │ │ ├── DebugActionFlagHandler.cs.meta │ │ ├── DebugActionInputHandler.cs │ │ ├── DebugActionInputHandler.cs.meta │ │ ├── DebugActionToggleHandler.cs │ │ ├── DebugActionToggleHandler.cs.meta │ │ ├── RuntimeDebugBehaviour.cs │ │ └── RuntimeDebugBehaviour.cs.meta │ ├── Event.meta │ ├── Event │ │ ├── DebugSystemEventHandler.cs │ │ └── DebugSystemEventHandler.cs.meta │ ├── UI.meta │ └── UI │ │ ├── AutoFacingCamera.cs │ │ ├── AutoFacingCamera.cs.meta │ │ ├── DebugUIHandler.cs │ │ ├── DebugUIHandler.cs.meta │ │ ├── FontSetter.cs │ │ ├── FontSetter.cs.meta │ │ ├── InputUIHandler.cs │ │ ├── InputUIHandler.cs.meta │ │ ├── InputUISlider.cs │ │ ├── InputUISlider.cs.meta │ │ ├── ListItemView.cs │ │ ├── ListItemView.cs.meta │ │ ├── ListView.cs │ │ ├── ListView.cs.meta │ │ ├── LoggerHandler.cs │ │ ├── LoggerHandler.cs.meta │ │ ├── LoggerLineSelectHandler.cs │ │ ├── LoggerLineSelectHandler.cs.meta │ │ ├── TooltipHandler.cs │ │ ├── TooltipHandler.cs.meta │ │ ├── Utils.meta │ │ └── Utils │ │ ├── ChangeSiblingIndexOnAwake.cs │ │ ├── ChangeSiblingIndexOnAwake.cs.meta │ │ ├── LongPressDetector.cs │ │ ├── LongPressDetector.cs.meta │ │ ├── MaxWidthHeight.cs │ │ ├── MaxWidthHeight.cs.meta │ │ ├── SafeAreaExtender.cs │ │ ├── SafeAreaExtender.cs.meta │ │ ├── SafeAreaHelper.cs │ │ ├── SafeAreaHelper.cs.meta │ │ ├── SizeMatcher.cs │ │ └── SizeMatcher.cs.meta ├── Data.meta ├── Data │ ├── ListItem.cs │ ├── ListItem.cs.meta │ ├── ReflectedActionData.cs │ ├── ReflectedActionData.cs.meta │ ├── Settings.cs │ ├── Settings.cs.meta │ ├── Theme.cs │ └── Theme.cs.meta ├── Input.meta ├── Input │ ├── InputQuery.cs │ ├── InputQuery.cs.meta │ ├── InputResponse.cs │ ├── InputResponse.cs.meta │ ├── Param.cs │ ├── Param.cs.meta │ ├── ParamType.cs │ ├── ParamType.cs.meta │ ├── System.meta │ └── System │ │ ├── InputLayer.cs │ │ ├── InputLayer.cs.meta │ │ ├── InputManagerLayer.cs │ │ ├── InputManagerLayer.cs.meta │ │ ├── InputSystemLayer.cs │ │ └── InputSystemLayer.cs.meta ├── Keyboard VR.meta ├── Keyboard VR │ ├── VRKey.cs │ ├── VRKey.cs.meta │ ├── VRKeyboard.cs │ └── VRKeyboard.cs.meta ├── Systems.meta ├── Systems │ ├── DebugActionDefaults.cs │ ├── DebugActionDefaults.cs.meta │ ├── RuntimeDebugSystem.cs │ └── RuntimeDebugSystem.cs.meta ├── Utils.meta ├── Utils │ ├── AttributeUtils.cs │ ├── AttributeUtils.cs.meta │ ├── Singleton.cs │ └── Singleton.cs.meta ├── com.bennykok.runtime-debug-action.asmdef └── com.bennykok.runtime-debug-action.asmdef.meta ├── Settings.meta ├── Settings ├── Presets.meta ├── Presets │ ├── Components.meta │ ├── Components │ │ ├── Flag Toggle.preset │ │ └── Flag Toggle.preset.meta │ ├── RDASettings Default.preset │ ├── RDASettings Default.preset.meta │ ├── RDASettings InputSystem.preset │ └── RDASettings InputSystem.preset.meta ├── RDASettings Default [DO NOT EDIT].asset └── RDASettings Default [DO NOT EDIT].asset.meta ├── Sprites.meta ├── Sprites ├── arrow-backward-outline.png ├── arrow-backward-outline.png.meta ├── arrow-forward-outline.png ├── arrow-forward-outline.png.meta ├── arrow-left-outline.png ├── arrow-left-outline.png.meta ├── arrow-right-outline.png ├── arrow-right-outline.png.meta ├── close-outline.png ├── close-outline.png.meta ├── collapse-outline.png ├── collapse-outline.png.meta ├── outline_folder_white_48dp.png ├── outline_folder_white_48dp.png.meta ├── round_folder_white_48dp.png ├── round_folder_white_48dp.png.meta ├── search-outline.png ├── search-outline.png.meta ├── two-arrow-vertical.png ├── two-arrow-vertical.png.meta ├── two-arrow.png └── two-arrow.png.meta ├── package.json └── package.json.meta /.gitignore: -------------------------------------------------------------------------------- 1 | # This .gitignore file should be placed at the root of your Unity project directory 2 | # 3 | # Get latest from https://github.com/github/gitignore/blob/master/Unity.gitignore 4 | # 5 | /[Ll]ibrary/ 6 | /[Tt]emp/ 7 | /[Oo]bj/ 8 | /[Bb]uild/ 9 | /[Bb]uilds/ 10 | /[Ll]ogs/ 11 | /[Mm]emoryCaptures/ 12 | 13 | # Asset meta data should only be ignored when the corresponding asset is also ignored 14 | !/[Aa]ssets/**/*.meta 15 | 16 | # Uncomment this line if you wish to ignore the asset store tools plugin 17 | # /[Aa]ssets/AssetStoreTools* 18 | 19 | # Autogenerated Jetbrains Rider plugin 20 | [Aa]ssets/Plugins/Editor/JetBrains* 21 | 22 | # Visual Studio cache directory 23 | .vs/ 24 | 25 | # Gradle cache directory 26 | .gradle/ 27 | 28 | # Autogenerated VS/MD/Consulo solution and project files 29 | ExportedObj/ 30 | .consulo/ 31 | *.csproj 32 | *.unityproj 33 | *.sln 34 | *.suo 35 | *.tmp 36 | *.user 37 | *.userprefs 38 | *.pidb 39 | *.booproj 40 | *.svd 41 | *.pdb 42 | *.mdb 43 | *.opendb 44 | *.VC.db 45 | 46 | # Unity3D generated meta files 47 | *.pidb.meta 48 | *.pdb.meta 49 | *.mdb.meta 50 | 51 | # Unity3D generated file on crash reports 52 | sysinfo.txt 53 | 54 | # Builds 55 | *.apk 56 | *.unitypackage 57 | 58 | # Crashlytics generated file 59 | crashlytics-build.properties 60 | 61 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. 4 | 5 | ## [1.1.0](https://gitlab.com/BennyKok/unity-runtime-debug-action/compare/v1.0.1...v1.1.0) (2021-01-06) 6 | 7 | 8 | ### Features 9 | 10 | * make sure the default settings is not editable with extra GUI ([d1906c7](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/d1906c7cc762702f2d3ced593b6419be1290ca8c)) 11 | * UnityEvent bindings for Flag component ([671c0f0](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/671c0f02b9aa8d522c5d2035c88a53e57b276609)) 12 | 13 | 14 | ### Bug Fixes 15 | 16 | * action display should not be interactable ([6d00109](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/6d0010935295e8767db8e11fb74af9cbb343cde5)) 17 | * closePanelAfterTrigger not working with toggle action ([700fa94](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/700fa94da2e3f313c1c10e55b5330541f7957474)) 18 | * component action not setup property upon registering ([21ad00d](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/21ad00de03167cc298520dc30226f0768112e04b)) 19 | * menu display error when reload scene sometimes ([7d59973](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/7d59973410ca91574cb772ac7ccd0e7d33b43481)) 20 | * rename IsIsSystemEnabled -> IsSystemEnabled ([630188c](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/630188ccb253bd623de71bb900dcd3b390c22720)) 21 | * **editor:** component action compatibility with Odin ([d285539](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/d2855390fe06254886079cc0d23bd705b0257886)) 22 | 23 | ## 1.0.1 (2020-12-26) 24 | 25 | ### Refactor 26 | * Extract world space UI prefab from VR integration 27 | 28 | ## 1.0.0 (2020-12-14) 29 | 30 | 31 | ### Features 32 | 33 | * 🎸 folder support for action, init back navigation support ([4bb6211](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/4bb62111b3a2606ccd654355094c0141084c54d7)) 34 | * 🎸 init search impl, fix remove action not removing view ([cb82e86](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/cb82e8651f7fdaaf901661a03c3044787bba3f0f)) 35 | * 🎸 keyboard navigation for action menu ([7972213](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/797221338eb6f10c1cb47c49d9196437a07d2c86)) 36 | * 🎸 simple action search implemented ([63797e6](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/63797e62629ee7441d222ab425bfd9ff0afbae0b)) 37 | * 🎸 swap theme action and settings ([28d92e7](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/28d92e7265c155aef07e9259b9877248ed6d7235)) 38 | * add enable mode in settings ([2c4826a](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/2c4826a778ef6c4acc46b0c32946a87ddb8c543b)) 39 | * basic reflection test ([fd384df](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/fd384df87b946aacce540c61303b98ac0ab727ef)) 40 | * custom font in DebugUIHandler ([13e3ab0](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/13e3ab00f53014d7a41318813795fbcabae84554)) 41 | * init dashsu demo ([89eafbb](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/89eafbbf36e33fbe00a966b4c3b21de8f3074bb8)) 42 | * init input system support ([30a05bf](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/30a05bf222d1e46e295a9927e80f76c578b50d53)) 43 | * MenuPauseMode ([f747113](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/f74711370b392aa794768399c39e6325104494da)) 44 | * new compact bottom theme ([b3626a7](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/b3626a7741198c482ff7b0eed94d8ffeef63de40)) 45 | * quality settings actions now dynamically populated ([335b405](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/335b405787f16adff7cc09cccb7ad59025d99292)) 46 | * reflection support input, flag ([803cd44](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/803cd44b049eaf8b3caec41dcb89e5c192629f98)) 47 | * search by tag, remove by path ignore tag ([76cbb96](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/76cbb96e42ccce66e271ab737c20c9cacfadcc19)) 48 | * some api ([5eb6469](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/5eb646951278b490e7c87707c96fdcc19234d806)) 49 | * **demo:** reveal text demo, set text action ([2ce3295](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/2ce3295aa373277a1ebd055b7f14b778634f15c2)) 50 | * theme settings will now be saved ([038172d](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/038172d7dffdfdbeaf8dee90d54f7c775f816f82)) 51 | 52 | 53 | ### Bug Fixes 54 | 55 | * 🐛 minor tweak ([47c9930](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/47c99304b3cf4abcca000b1ef78c49892e781de4)) 56 | * 🐛 use AssetPostprocessor for settings file check at start ([ac7a22e](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/ac7a22ef8c81179c178d1f64665d79318e26c098)) 57 | * crash error because ui is null in ListItemView ([8471b71](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/8471b71996f5b4c7c68d86d7a41aa12ef8a86f91)) 58 | * first frame flicker list selection ([8bc7f44](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/8bc7f4491174975a07db78190b4c72f98c4c517b)) 59 | * shortcut action triggered when during search ([9b51b5e](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/9b51b5e2e5233b032abfb95c0263a3d7cffa8ac8)) 60 | * tag display ([c932dd4](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/c932dd4f0b9eaaf01025cb4280e374fe1f8ed275)) 61 | * time not paused when switch theme ([167b303](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/167b3036e09ad9c033aa1f059c17c3a0b650eda3)) 62 | * tmp late import screw up text display ([d753ea3](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/d753ea37620c78e1c829ada9ef371bbd1bb6ba25)) 63 | * uiParent null in sub list ([3458e8f](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/3458e8f9bd376bb3552139c256937e000e448f22)) 64 | * UnregisterActionsAuto ([fd41ec8](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/fd41ec87dde218bf930bc8bfa5c56a1dcf3f2d00)) 65 | * visibility attribute to clean up RDASettings ([c1c6d7c](https://gitlab.com/BennyKok/unity-runtime-debug-action/commit/c1c6d7cfc4b7cfc9cbcc6c26659334a260f86031)) -------------------------------------------------------------------------------- /CHANGELOG.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4deeceb31de654f498f45c00136f42c9 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Documentation.url: -------------------------------------------------------------------------------- 1 | [InternetShortcut] 2 | URL=https://bennykok.github.io/runtime-debug-action-docs/index.html 3 | -------------------------------------------------------------------------------- /Documentation.url.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 498aa519dc314b240bdd1b22b0dc8a95 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Fonts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 27350f6dc24999349ac096ee9fff6d73 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Fonts/Montserrat.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8892a1e5ee19d514f9d9ecbc404107cb 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Fonts/Montserrat/Montserrat-Black SDF.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a48514571bbdf4846a3d6d4275a6413d 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Fonts/Montserrat/Montserrat-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BennyKok/unity-runtime-debug-action/6b679eb58876ebddcfebb5d6e6a6d87bfca45f3d/Fonts/Montserrat/Montserrat-Black.ttf -------------------------------------------------------------------------------- /Fonts/Montserrat/Montserrat-Black.ttf.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ffdb66a6d4bfcfe47b3fd9e1dddd3065 3 | TrueTypeFontImporter: 4 | externalObjects: {} 5 | serializedVersion: 4 6 | fontSize: 16 7 | forceTextureCase: -2 8 | characterSpacing: 0 9 | characterPadding: 1 10 | includeFontData: 1 11 | fontName: Montserrat 12 | fontNames: 13 | - Montserrat 14 | fallbackFontReferences: 15 | - {fileID: 12800000, guid: 2a337828fa735734496e1480b72ba0e4, type: 3} 16 | customCharacters: 17 | fontRenderingMode: 0 18 | ascentCalculationMode: 1 19 | useLegacyBoundsCalculation: 0 20 | shouldRoundAdvanceValue: 1 21 | userData: 22 | assetBundleName: 23 | assetBundleVariant: 24 | -------------------------------------------------------------------------------- /Fonts/Montserrat/Montserrat-Regular SDF.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6c7c7bd9ce455de4880de30bf445d972 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Fonts/Montserrat/Montserrat-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BennyKok/unity-runtime-debug-action/6b679eb58876ebddcfebb5d6e6a6d87bfca45f3d/Fonts/Montserrat/Montserrat-Regular.ttf -------------------------------------------------------------------------------- /Fonts/Montserrat/Montserrat-Regular.ttf.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2a337828fa735734496e1480b72ba0e4 3 | TrueTypeFontImporter: 4 | externalObjects: {} 5 | serializedVersion: 4 6 | fontSize: 16 7 | forceTextureCase: -2 8 | characterSpacing: 0 9 | characterPadding: 1 10 | includeFontData: 1 11 | fontName: Montserrat 12 | fontNames: 13 | - Montserrat 14 | fallbackFontReferences: [] 15 | customCharacters: 16 | fontRenderingMode: 0 17 | ascentCalculationMode: 1 18 | useLegacyBoundsCalculation: 0 19 | shouldRoundAdvanceValue: 1 20 | userData: 21 | assetBundleName: 22 | assetBundleVariant: 23 | -------------------------------------------------------------------------------- /Fonts/Raleway.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9efff1d7a7388c841ac9b7006e3deb1b 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Fonts/Raleway/Raleway-Bold SDF.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5457217bd98bb5040a081da4969b180c 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Fonts/Raleway/Raleway-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BennyKok/unity-runtime-debug-action/6b679eb58876ebddcfebb5d6e6a6d87bfca45f3d/Fonts/Raleway/Raleway-Bold.ttf -------------------------------------------------------------------------------- /Fonts/Raleway/Raleway-Bold.ttf.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d455c3b84c08eb84188fe96f164b1e2b 3 | TrueTypeFontImporter: 4 | externalObjects: {} 5 | serializedVersion: 4 6 | fontSize: 16 7 | forceTextureCase: -2 8 | characterSpacing: 0 9 | characterPadding: 1 10 | includeFontData: 1 11 | fontName: Raleway 12 | fontNames: 13 | - Raleway 14 | fallbackFontReferences: [] 15 | customCharacters: 16 | fontRenderingMode: 0 17 | ascentCalculationMode: 1 18 | useLegacyBoundsCalculation: 0 19 | shouldRoundAdvanceValue: 1 20 | userData: 21 | assetBundleName: 22 | assetBundleVariant: 23 | -------------------------------------------------------------------------------- /Fonts/Raleway/Raleway-Regular SDF.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: db87c55fd26d159489601db07eba2d60 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Fonts/Raleway/Raleway-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BennyKok/unity-runtime-debug-action/6b679eb58876ebddcfebb5d6e6a6d87bfca45f3d/Fonts/Raleway/Raleway-Regular.ttf -------------------------------------------------------------------------------- /Fonts/Raleway/Raleway-Regular.ttf.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e77eb62f00f05ae40ac36db50d9b6f2e 3 | TrueTypeFontImporter: 4 | externalObjects: {} 5 | serializedVersion: 4 6 | fontSize: 16 7 | forceTextureCase: -2 8 | characterSpacing: 0 9 | characterPadding: 1 10 | includeFontData: 1 11 | fontName: Raleway 12 | fontNames: 13 | - Raleway 14 | fallbackFontReferences: 15 | - {fileID: 12800000, guid: d455c3b84c08eb84188fe96f164b1e2b, type: 3} 16 | customCharacters: 17 | fontRenderingMode: 0 18 | ascentCalculationMode: 1 19 | useLegacyBoundsCalculation: 0 20 | shouldRoundAdvanceValue: 1 21 | userData: 22 | assetBundleName: 23 | assetBundleVariant: 24 | -------------------------------------------------------------------------------- /Fonts/Roboto.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7a464fa283be8ce45b389148eddf6bd8 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Fonts/Roboto/Roboto-Bold SDF.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 16f336ff9082f4942ba6769be050a9f6 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Fonts/Roboto/Roboto-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BennyKok/unity-runtime-debug-action/6b679eb58876ebddcfebb5d6e6a6d87bfca45f3d/Fonts/Roboto/Roboto-Bold.ttf -------------------------------------------------------------------------------- /Fonts/Roboto/Roboto-Bold.ttf.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 940c189f719652d4fb518e0eabc5bdea 3 | TrueTypeFontImporter: 4 | externalObjects: {} 5 | serializedVersion: 4 6 | fontSize: 16 7 | forceTextureCase: -2 8 | characterSpacing: 0 9 | characterPadding: 1 10 | includeFontData: 1 11 | fontName: Roboto 12 | fontNames: 13 | - Roboto 14 | fallbackFontReferences: 15 | - {fileID: 12800000, guid: afce44bbf3a619249a69b66c45c405c3, type: 3} 16 | customCharacters: 17 | fontRenderingMode: 0 18 | ascentCalculationMode: 1 19 | useLegacyBoundsCalculation: 0 20 | shouldRoundAdvanceValue: 1 21 | userData: 22 | assetBundleName: 23 | assetBundleVariant: 24 | -------------------------------------------------------------------------------- /Fonts/Roboto/Roboto-Regular SDF.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 38f61c21d2f67b847acfa5e32fa6bac8 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Fonts/Roboto/Roboto-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BennyKok/unity-runtime-debug-action/6b679eb58876ebddcfebb5d6e6a6d87bfca45f3d/Fonts/Roboto/Roboto-Regular.ttf -------------------------------------------------------------------------------- /Fonts/Roboto/Roboto-Regular.ttf.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: afce44bbf3a619249a69b66c45c405c3 3 | TrueTypeFontImporter: 4 | externalObjects: {} 5 | serializedVersion: 4 6 | fontSize: 16 7 | forceTextureCase: -2 8 | characterSpacing: 0 9 | characterPadding: 1 10 | includeFontData: 1 11 | fontName: Roboto 12 | fontNames: 13 | - Roboto 14 | fallbackFontReferences: [] 15 | customCharacters: 16 | fontRenderingMode: 0 17 | ascentCalculationMode: 1 18 | useLegacyBoundsCalculation: 0 19 | shouldRoundAdvanceValue: 1 20 | userData: 21 | assetBundleName: 22 | assetBundleVariant: 23 | -------------------------------------------------------------------------------- /Fonts/Roboto/RobotoMono-Light SDF.asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 31e06e6e232827247982ca9c14655235 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Fonts/Roboto/RobotoMono-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BennyKok/unity-runtime-debug-action/6b679eb58876ebddcfebb5d6e6a6d87bfca45f3d/Fonts/Roboto/RobotoMono-Light.ttf -------------------------------------------------------------------------------- /Fonts/Roboto/RobotoMono-Light.ttf.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e90a2dbbd885797409911172eda220a8 3 | TrueTypeFontImporter: 4 | externalObjects: {} 5 | serializedVersion: 4 6 | fontSize: 16 7 | forceTextureCase: -2 8 | characterSpacing: 0 9 | characterPadding: 1 10 | includeFontData: 1 11 | fontName: Roboto Mono 12 | fontNames: 13 | - Roboto Mono 14 | fallbackFontReferences: [] 15 | customCharacters: 16 | fontRenderingMode: 0 17 | ascentCalculationMode: 1 18 | useLegacyBoundsCalculation: 0 19 | shouldRoundAdvanceValue: 1 20 | userData: 21 | assetBundleName: 22 | assetBundleVariant: 23 | -------------------------------------------------------------------------------- /Integrations.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3bcb7fcb2eeb7064395f826ff772ded3 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Integrations/Oculus Integrations Support.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3c36a5faf41b843478e1af843a631b2a 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Integrations/Oculus Integrations Support/RDASettings InputSystem VR Oculus.preset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2f3601f8d53cc5748a9b29e8615f85f4 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Integrations/Oculus Integrations Support/UI Default VR Oculus.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: bdf9bfdeb4b8d474582394ac7db5d775 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Integrations/XR Interaction Toolkit Support.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cfa79553f939a114c909d3144cb65b6c 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Integrations/XR Interaction Toolkit Support/RDASettings InputSystem XR.preset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ca0d7353c0a5e824ca7aea24309b476a 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Integrations/XR Interaction Toolkit Support/UI Default XR.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 91a498a613bc04b45b6f4a2a414d778f 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 BennyKok 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 | -------------------------------------------------------------------------------- /LICENSE.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 68169f5e89a5c1641926918cc7716792 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Prefabs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d9b90f7da57f53f48ba7d1f49e98c33a 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Prefabs/EmbeddedEventSystem.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1 &4391802490427358298 4 | GameObject: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | serializedVersion: 6 10 | m_Component: 11 | - component: {fileID: 5747575547912894628} 12 | - component: {fileID: 2704006777162314853} 13 | - component: {fileID: 4701240910328976669} 14 | m_Layer: 0 15 | m_Name: EmbeddedEventSystem 16 | m_TagString: Untagged 17 | m_Icon: {fileID: 0} 18 | m_NavMeshLayer: 0 19 | m_StaticEditorFlags: 0 20 | m_IsActive: 1 21 | --- !u!4 &5747575547912894628 22 | Transform: 23 | m_ObjectHideFlags: 0 24 | m_CorrespondingSourceObject: {fileID: 0} 25 | m_PrefabInstance: {fileID: 0} 26 | m_PrefabAsset: {fileID: 0} 27 | m_GameObject: {fileID: 4391802490427358298} 28 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 29 | m_LocalPosition: {x: -302.946, y: -300, z: 0} 30 | m_LocalScale: {x: 0.9819968, y: 0.9819968, z: 0.9819968} 31 | m_Children: [] 32 | m_Father: {fileID: 0} 33 | m_RootOrder: 0 34 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 35 | --- !u!114 &2704006777162314853 36 | MonoBehaviour: 37 | m_ObjectHideFlags: 0 38 | m_CorrespondingSourceObject: {fileID: 0} 39 | m_PrefabInstance: {fileID: 0} 40 | m_PrefabAsset: {fileID: 0} 41 | m_GameObject: {fileID: 4391802490427358298} 42 | m_Enabled: 1 43 | m_EditorHideFlags: 0 44 | m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} 45 | m_Name: 46 | m_EditorClassIdentifier: 47 | m_FirstSelected: {fileID: 0} 48 | m_sendNavigationEvents: 1 49 | m_DragThreshold: 10 50 | --- !u!114 &4701240910328976669 51 | MonoBehaviour: 52 | m_ObjectHideFlags: 0 53 | m_CorrespondingSourceObject: {fileID: 0} 54 | m_PrefabInstance: {fileID: 0} 55 | m_PrefabAsset: {fileID: 0} 56 | m_GameObject: {fileID: 4391802490427358298} 57 | m_Enabled: 1 58 | m_EditorHideFlags: 0 59 | m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} 60 | m_Name: 61 | m_EditorClassIdentifier: 62 | m_HorizontalAxis: Horizontal 63 | m_VerticalAxis: Vertical 64 | m_SubmitButton: Submit 65 | m_CancelButton: Cancel 66 | m_InputActionsPerSecond: 10 67 | m_RepeatDelay: 0.5 68 | m_ForceModuleActive: 0 69 | -------------------------------------------------------------------------------- /Prefabs/EmbeddedEventSystem.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fad178ee18eb2a0409ceda6610266cde 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Prefabs/EmbeddedEventSystemInputSystem.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1 &4391802490427358298 4 | GameObject: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | serializedVersion: 6 10 | m_Component: 11 | - component: {fileID: 5747575547912894628} 12 | - component: {fileID: 2704006777162314853} 13 | - component: {fileID: 4726939307303374256} 14 | m_Layer: 0 15 | m_Name: EmbeddedEventSystemInputSystem 16 | m_TagString: Untagged 17 | m_Icon: {fileID: 0} 18 | m_NavMeshLayer: 0 19 | m_StaticEditorFlags: 0 20 | m_IsActive: 1 21 | --- !u!4 &5747575547912894628 22 | Transform: 23 | m_ObjectHideFlags: 0 24 | m_CorrespondingSourceObject: {fileID: 0} 25 | m_PrefabInstance: {fileID: 0} 26 | m_PrefabAsset: {fileID: 0} 27 | m_GameObject: {fileID: 4391802490427358298} 28 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 29 | m_LocalPosition: {x: -302.946, y: -300, z: 0} 30 | m_LocalScale: {x: 0.9819968, y: 0.9819968, z: 0.9819968} 31 | m_Children: [] 32 | m_Father: {fileID: 0} 33 | m_RootOrder: 0 34 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 35 | --- !u!114 &2704006777162314853 36 | MonoBehaviour: 37 | m_ObjectHideFlags: 0 38 | m_CorrespondingSourceObject: {fileID: 0} 39 | m_PrefabInstance: {fileID: 0} 40 | m_PrefabAsset: {fileID: 0} 41 | m_GameObject: {fileID: 4391802490427358298} 42 | m_Enabled: 1 43 | m_EditorHideFlags: 0 44 | m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} 45 | m_Name: 46 | m_EditorClassIdentifier: 47 | m_FirstSelected: {fileID: 0} 48 | m_sendNavigationEvents: 1 49 | m_DragThreshold: 10 50 | --- !u!114 &4726939307303374256 51 | MonoBehaviour: 52 | m_ObjectHideFlags: 0 53 | m_CorrespondingSourceObject: {fileID: 0} 54 | m_PrefabInstance: {fileID: 0} 55 | m_PrefabAsset: {fileID: 0} 56 | m_GameObject: {fileID: 4391802490427358298} 57 | m_Enabled: 1 58 | m_EditorHideFlags: 0 59 | m_Script: {fileID: 11500000, guid: 01614664b831546d2ae94a42149d80ac, type: 3} 60 | m_Name: 61 | m_EditorClassIdentifier: 62 | m_MoveRepeatDelay: 0.5 63 | m_MoveRepeatRate: 0.1 64 | m_ActionsAsset: {fileID: -944628639613478452, guid: ca9f5fa95ffab41fb9a615ab714db018, 65 | type: 3} 66 | m_PointAction: {fileID: 1054132383583890850, guid: ca9f5fa95ffab41fb9a615ab714db018, 67 | type: 3} 68 | m_MoveAction: {fileID: 3710738434707379630, guid: ca9f5fa95ffab41fb9a615ab714db018, 69 | type: 3} 70 | m_SubmitAction: {fileID: 2064916234097673511, guid: ca9f5fa95ffab41fb9a615ab714db018, 71 | type: 3} 72 | m_CancelAction: {fileID: -1967631576421560919, guid: ca9f5fa95ffab41fb9a615ab714db018, 73 | type: 3} 74 | m_LeftClickAction: {fileID: 8056856818456041789, guid: ca9f5fa95ffab41fb9a615ab714db018, 75 | type: 3} 76 | m_MiddleClickAction: {fileID: 3279352641294131588, guid: ca9f5fa95ffab41fb9a615ab714db018, 77 | type: 3} 78 | m_RightClickAction: {fileID: 3837173908680883260, guid: ca9f5fa95ffab41fb9a615ab714db018, 79 | type: 3} 80 | m_ScrollWheelAction: {fileID: 4502412055082496612, guid: ca9f5fa95ffab41fb9a615ab714db018, 81 | type: 3} 82 | m_TrackedDevicePositionAction: {fileID: 4754684134866288074, guid: ca9f5fa95ffab41fb9a615ab714db018, 83 | type: 3} 84 | m_TrackedDeviceOrientationAction: {fileID: 1025543830046995696, guid: ca9f5fa95ffab41fb9a615ab714db018, 85 | type: 3} 86 | m_DeselectOnBackgroundClick: 1 87 | m_PointerBehavior: 0 88 | -------------------------------------------------------------------------------- /Prefabs/EmbeddedEventSystemInputSystem.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c0e5375d5dba4ac4eb49273c712ec70a 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Prefabs/ItemView.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 50b9e7d25bff6b341a3815c85da669f3 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Prefabs/ItemView/Item View Compact.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1001 &3250835604708633604 4 | PrefabInstance: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Modification: 8 | m_TransformParent: {fileID: 0} 9 | m_Modifications: 10 | - target: {fileID: 4697603242077483381, guid: 109c1b1982f0b0346bf657ad20970425, 11 | type: 3} 12 | propertyPath: m_SizeDelta.x 13 | value: 14 14 | objectReference: {fileID: 0} 15 | - target: {fileID: 4697603242077483381, guid: 109c1b1982f0b0346bf657ad20970425, 16 | type: 3} 17 | propertyPath: m_AnchoredPosition.x 18 | value: 10 19 | objectReference: {fileID: 0} 20 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425, 21 | type: 3} 22 | propertyPath: m_LocalPosition.x 23 | value: 0 24 | objectReference: {fileID: 0} 25 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425, 26 | type: 3} 27 | propertyPath: m_LocalPosition.y 28 | value: 0 29 | objectReference: {fileID: 0} 30 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425, 31 | type: 3} 32 | propertyPath: m_LocalRotation.x 33 | value: -0 34 | objectReference: {fileID: 0} 35 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425, 36 | type: 3} 37 | propertyPath: m_LocalRotation.y 38 | value: -0 39 | objectReference: {fileID: 0} 40 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425, 41 | type: 3} 42 | propertyPath: m_LocalRotation.z 43 | value: -0 44 | objectReference: {fileID: 0} 45 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425, 46 | type: 3} 47 | propertyPath: m_LocalRotation.w 48 | value: 1 49 | objectReference: {fileID: 0} 50 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425, 51 | type: 3} 52 | propertyPath: m_RootOrder 53 | value: 0 54 | objectReference: {fileID: 0} 55 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425, 56 | type: 3} 57 | propertyPath: m_LocalEulerAnglesHint.x 58 | value: 0 59 | objectReference: {fileID: 0} 60 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425, 61 | type: 3} 62 | propertyPath: m_LocalEulerAnglesHint.y 63 | value: 0 64 | objectReference: {fileID: 0} 65 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425, 66 | type: 3} 67 | propertyPath: m_LocalEulerAnglesHint.z 68 | value: 0 69 | objectReference: {fileID: 0} 70 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425, 71 | type: 3} 72 | propertyPath: m_SizeDelta.x 73 | value: 300 74 | objectReference: {fileID: 0} 75 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425, 76 | type: 3} 77 | propertyPath: m_SizeDelta.y 78 | value: 20 79 | objectReference: {fileID: 0} 80 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425, 81 | type: 3} 82 | propertyPath: m_AnchorMin.x 83 | value: 0.5 84 | objectReference: {fileID: 0} 85 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425, 86 | type: 3} 87 | propertyPath: m_AnchorMin.y 88 | value: 1 89 | objectReference: {fileID: 0} 90 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425, 91 | type: 3} 92 | propertyPath: m_AnchorMax.x 93 | value: 0.5 94 | objectReference: {fileID: 0} 95 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425, 96 | type: 3} 97 | propertyPath: m_AnchorMax.y 98 | value: 1 99 | objectReference: {fileID: 0} 100 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425, 101 | type: 3} 102 | propertyPath: m_Pivot.x 103 | value: 0.5 104 | objectReference: {fileID: 0} 105 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425, 106 | type: 3} 107 | propertyPath: m_Pivot.y 108 | value: 1 109 | objectReference: {fileID: 0} 110 | - target: {fileID: 5612962261251937386, guid: 109c1b1982f0b0346bf657ad20970425, 111 | type: 3} 112 | propertyPath: m_AnchoredPosition.y 113 | value: 0 114 | objectReference: {fileID: 0} 115 | - target: {fileID: 6854774738720367511, guid: 109c1b1982f0b0346bf657ad20970425, 116 | type: 3} 117 | propertyPath: m_Name 118 | value: Item View Compact 119 | objectReference: {fileID: 0} 120 | - target: {fileID: 8692686718843453193, guid: 109c1b1982f0b0346bf657ad20970425, 121 | type: 3} 122 | propertyPath: folderIcon 123 | value: 124 | objectReference: {fileID: 21300000, guid: 2955bf7a9a06f8f4ba73e2e8f7ce4baf, 125 | type: 3} 126 | m_RemovedComponents: [] 127 | m_SourcePrefab: {fileID: 100100000, guid: 109c1b1982f0b0346bf657ad20970425, type: 3} 128 | -------------------------------------------------------------------------------- /Prefabs/ItemView/Item View Compact.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e0bccccd0854e3c479df02015d4bd5a2 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Prefabs/ItemView/Item View Spaced.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c2478ef61c76ca4409b6f28cb4e9ec8b 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Prefabs/ItemView/Item View.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 109c1b1982f0b0346bf657ad20970425 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Prefabs/ItemView/VRKey.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d5e72dd8f0aa73241ba3b69325babb66 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Prefabs/ListView.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 66c4fb4413fe6764a8d2026b2ea67239 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Prefabs/ListView/Action List.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 41c5a487f4bfa7c43b5c5f6663b96d55 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Prefabs/Scrollable Text Field.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 64944c7c38026a647924aeae870c874d 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Prefabs/Search Field.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 48530f7af59ca8f40a00c556407bb631 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Prefabs/UI Compact Bottom.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 858e738f85e0d994abcc5c73dfc6916e 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Prefabs/UI Compact.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1e73a1be2fd063646ac75c76b6589e89 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Prefabs/UI Default Spaced.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8a2ba8b7b1be39c4ba48f467cf224176 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Prefabs/UI Default World Space.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e93221dc7693cf44eab36053c6a35742 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Prefabs/UI Default.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 58ec4a5fd80f0854cbc79850c507b61b 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Prefabs/VRKeyboard.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 17d1ec22246a2154abfa07e7baa4db8c 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Prefabs/VRKeyboard/Keyboard VR.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 55f3a9419b9126445aea0d5089885fc9 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Unity Runtime Debug Action 2 | 3 | RuntimeDebugAction is a runtime debug menu system for Unity that lets you register and trigger debug actions with no extra setup. With a set of built-in debug actions and a tiny logger that works out of the box, RDA is built to supercharge your mobile and desktop game development. 4 | 5 | ## Input 6 | Cross platform input support 7 | - Desktop 8 | - [Mobile](https://bennykok.github.io/runtime-debug-action-docs/manuals/testing-with-mobile.html) 9 | - [VR (InputSystem)](https://bennykok.github.io/runtime-debug-action-docs/manuals/VR/index.html) 10 | 11 | https://user-images.githubusercontent.com/18395202/127760553-2fe09c74-c6da-4ebd-af84-2cf162acec17.mp4 12 | 13 | ## Links 14 | 15 | [Twitter](https://twitter.com/BennyKokMusic/status/1316547829817466880) | [Documentation](https://bennykok.github.io/runtime-debug-action-docs/manuals/QuickStart/index.html) | [Discord](https://discord.gg/fHGsArj) 16 | 17 | ## Install 18 | 19 | Via UPM. 20 | 21 | ``` 22 | UPM install via git url -> https://github.com/BennyKok/unity-runtime-debug-action.git 23 | ``` 24 | 25 | You can also choose to add this as a submodule in your package folder. 26 | 27 | ``` 28 | git submodule add https://github.com/BennyKok/unity-runtime-debug-action.git Packages/unity-runtime-debug-action 29 | ``` 30 | 31 | ## Examples 32 | 33 | With RDA, you can add action via [code](https://bennykok.github.io/runtime-debug-action-docs/manuals/CustomActions/fluent-api.html), [component](https://bennykok.github.io/runtime-debug-action-docs/manuals/CustomActions/debug-action-component.html), [reflection](https://bennykok.github.io/runtime-debug-action-docs/manuals/CustomActions/attribute-reflection.html) 34 | 35 | Here's a glimpse of adding via code. 36 | 37 | ```csharp 38 | RuntimeDebugSystem.RegisterActions( 39 | DebugActionBuilder.Button() 40 | .WithName("Your actions") 41 | .WithAction(()=>{ }); 42 | ); 43 | ``` 44 | 45 | ## Explore 46 | Feel free to check me out!! :) 47 | 48 | [Twitter](https://twitter.com/BennyKokMusic) | [Website](https://bennykok.com) | [AssetStore](https://assetstore.unity.com/publishers/28510) 49 | -------------------------------------------------------------------------------- /README.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0828b88c0fedd3f46a267b8797c25380 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Runtime.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 78e96b510d4aba249afa0d671663284f 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Runtime/Actions.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ca5e35d3305981b46b1284747a9450de 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Runtime/Actions/Base.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a8b0f2845ccf53a439ae9c9bdc870947 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Runtime/Actions/Base/BaseDebugAction.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using BennyKok.RuntimeDebug.Systems; 3 | using BennyKok.RuntimeDebug.Utils; 4 | using UnityEngine; 5 | using UnityEngine.Events; 6 | 7 | namespace BennyKok.RuntimeDebug 8 | { 9 | /// 10 | /// Base class for all debug action 11 | /// 12 | [Serializable] 13 | public class BaseDebugAction 14 | { 15 | [Comment("Base Action Properties")] 16 | public string group; 17 | public string name; 18 | public string id; 19 | 20 | [Multiline] 21 | public string description; 22 | public string shortcutKey; 23 | public bool closePanelAfterTrigger = false; 24 | public Color actionColor = Color.gray; 25 | 26 | [Space] 27 | [Comment("Action Event", order = 1)] 28 | [CollapsedEvent] 29 | public UnityEvent unityAction; 30 | public Action action; 31 | public Func actionStatus; 32 | 33 | public Action onSliderValueChanged; 34 | public Func onGetSliderValue; 35 | public Func onGetMinMax; 36 | 37 | public virtual void ResolveAction() 38 | { 39 | action?.Invoke(); 40 | 41 | if (closePanelAfterTrigger) 42 | { 43 | RuntimeDebugSystem.UIHandler.TogglePanel(true); 44 | } 45 | } 46 | 47 | public virtual bool CanDisplayAction() 48 | { 49 | return closePanelAfterTrigger; 50 | } 51 | 52 | public virtual string GetDescription() 53 | { 54 | String desc = ""; 55 | 56 | if (!string.IsNullOrWhiteSpace(description)) 57 | desc += "Description: \n" + description + "\n"; 58 | 59 | if (!string.IsNullOrEmpty(shortcutKey)) 60 | desc += "Shortcut Key: " + shortcutKey + "\n"; 61 | 62 | return desc; 63 | } 64 | 65 | public BaseDebugAction() 66 | { 67 | action += () => unityAction?.Invoke(); 68 | } 69 | 70 | public virtual void Setup() 71 | { 72 | 73 | } 74 | } 75 | 76 | } -------------------------------------------------------------------------------- /Runtime/Actions/Base/BaseDebugAction.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0f0a63108d05ff0459e3cda791da19d6 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Actions/Base/FluentAction.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using UnityEngine; 3 | using UnityEngine.Events; 4 | 5 | namespace BennyKok.RuntimeDebug 6 | { 7 | /// 8 | /// Base debug action class that has common fluent methods 9 | /// 10 | [Serializable] 11 | public class FluentAction : BaseDebugAction where T : FluentAction 12 | { 13 | #region Builder Method 14 | 15 | /// 16 | /// Assign specific id to the action, can be use for unregistering. 17 | /// 18 | /// Id of the action 19 | public virtual T WithId(string id) 20 | { 21 | this.id = id; 22 | return (T)this; 23 | } 24 | 25 | /// 26 | /// Assign primary action 27 | /// 28 | /// 29 | public virtual T WithAction(Action action) 30 | { 31 | this.action = action; 32 | return (T)this; 33 | } 34 | 35 | /// 36 | /// The name to be displayed in the debug menu 37 | /// 38 | /// 39 | /// 40 | public virtual T WithName(string name) 41 | { 42 | this.name = name; 43 | return (T)this; 44 | } 45 | 46 | /// 47 | /// The description of this action to be displayed in the tooltip panel 48 | /// 49 | /// 50 | public virtual T WithDescription(string description) 51 | { 52 | this.description = description; 53 | return (T)this; 54 | } 55 | 56 | /// 57 | /// The group this action belongs to 58 | /// 59 | /// 60 | public virtual T WithGroup(string group) 61 | { 62 | this.group = group; 63 | return (T)this; 64 | } 65 | 66 | /// 67 | /// A shortcut keyboard key to trigger this action when the debug menu is not visible, see https://docs.unity3d.com/Manual/class-InputManager.html for availble key names 68 | /// 69 | /// 70 | public virtual T WithShortcutKey(string keycode) 71 | { 72 | this.shortcutKey = keycode; 73 | return (T)this; 74 | } 75 | 76 | /// 77 | /// The tint color for this action displayed in the debug menu 78 | /// 79 | /// 80 | public virtual T WithActionColor(Color actionColor) 81 | { 82 | this.actionColor = actionColor; 83 | return (T)this; 84 | } 85 | 86 | /// 87 | /// Should the debug menu be closed after the action was triggered? 88 | /// 89 | /// 90 | public virtual T WithClosePanelAfterTrigger(bool closePanelAfterTrigger = true) 91 | { 92 | this.closePanelAfterTrigger = closePanelAfterTrigger; 93 | return (T)this; 94 | } 95 | #endregion 96 | 97 | } 98 | 99 | } -------------------------------------------------------------------------------- /Runtime/Actions/Base/FluentAction.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 27230c86e1d203640a238979c2647310 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Actions/Builder.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 129259973f0871748a7d6ccda5fffff6 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Runtime/Actions/Builder/DebugActionBuilder.cs: -------------------------------------------------------------------------------- 1 | namespace BennyKok.RuntimeDebug.Actions 2 | { 3 | /// 4 | /// Builder class for built-in derived class 5 | /// 6 | public static class DebugActionBuilder 7 | { 8 | /// 9 | /// Create a new instance 10 | /// 11 | /// A new instance 12 | public static DebugActionButton Button() => new DebugActionButton(); 13 | 14 | /// 15 | /// Create a new instance 16 | /// 17 | /// A aew instance 18 | public static DebugActionToggle Toggle() => new DebugActionToggle(); 19 | 20 | /// 21 | /// Create a new instance 22 | /// 23 | /// A aew instance 24 | public static DebugActionEnum Enum() => new DebugActionEnum(); 25 | 26 | /// 27 | /// Create a new instance 28 | /// 29 | /// A new instance 30 | public static DebugActionInput Input() => new DebugActionInput(); 31 | 32 | /// 33 | /// Create a new instance 34 | /// 35 | /// A new instance 36 | public static DebugActionFlag Flag() => new DebugActionFlag(); 37 | } 38 | } -------------------------------------------------------------------------------- /Runtime/Actions/Builder/DebugActionBuilder.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e7bb61a20441c9843907c19c17e3a10f 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Actions/DebugActionButton.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using UnityEngine; 3 | using UnityEngine.Events; 4 | 5 | namespace BennyKok.RuntimeDebug 6 | { 7 | /// 8 | /// Button action will be represented as a simple button in the debug menu 9 | /// 10 | /// 11 | /// 12 | /// RuntimeDebugSystem.RegisterActions( 13 | /// DebugActionBuilder.Button() 14 | /// .WithName("Quit") 15 | /// .WithAction(() => Application.Quit()) 16 | /// ); 17 | /// 18 | /// 19 | [Serializable] 20 | public class DebugActionButton : FluentAction 21 | { 22 | 23 | } 24 | 25 | } -------------------------------------------------------------------------------- /Runtime/Actions/DebugActionButton.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: daed28d10ea3fdd43aa6c09093e4a819 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Actions/DebugActionEnum.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using BennyKok.RuntimeDebug.Utils; 3 | using UnityEngine; 4 | using UnityEngine.Events; 5 | 6 | namespace BennyKok.RuntimeDebug 7 | { 8 | /// 9 | /// Enum action will be represented as a button selector in the debug menu, triggering the action will cycle the value 10 | /// 11 | /// 12 | /// 13 | /// RuntimeDebugSystem.RegisterActions( 14 | /// DebugActionBuilder.Enum() 15 | /// .WithName("Set My Enum") 16 | /// .WithEnumType(typeof(MyEnum)) 17 | /// .WithActionGet(() => myEnum) 18 | /// .WithActionSet((value) => myEnum = value) 19 | /// ); 20 | /// 21 | /// 22 | [Serializable] 23 | public class DebugActionEnum : FluentAction 24 | { 25 | public Action actionChange; 26 | 27 | public Action actionSet; 28 | public Func actionGet; 29 | 30 | private string[] enumDisplay; 31 | 32 | protected string GetDisplayStatus(int value) => $"{enumDisplay[value]}"; 33 | 34 | public virtual DebugActionEnum WithEnumType(Type enumType) 35 | { 36 | enumDisplay = Enum.GetNames(enumType); 37 | return this; 38 | } 39 | 40 | public virtual DebugActionEnum WithActionGet(Func actionGet) 41 | { 42 | this.actionGet = actionGet; 43 | this.actionStatus = () => GetDisplayStatus(actionGet()); 44 | return this; 45 | } 46 | 47 | public virtual DebugActionEnum WithActionSet(Action actionSet) 48 | { 49 | this.actionSet = actionSet; 50 | return this; 51 | } 52 | 53 | public override void ResolveAction() 54 | { 55 | var val = actionGet() + 1; 56 | if (val >= enumDisplay.Length) 57 | val = 0; 58 | this.actionSet(val); 59 | } 60 | } 61 | 62 | } -------------------------------------------------------------------------------- /Runtime/Actions/DebugActionEnum.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 320826d5cd65b81499326b023086ad9a 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Actions/DebugActionFlag.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using BennyKok.RuntimeDebug.Utils; 3 | using UnityEngine; 4 | 5 | namespace BennyKok.RuntimeDebug 6 | { 7 | /// 8 | /// Flag action will be represented as a button selector in the debug menu, triggering the action will cycle the value and notify the flag listener, if `isPersistence` is true, the value will also be updated to PlayerPrefs. 9 | /// 10 | /// 11 | /// 12 | /// RuntimeDebugSystem.RegisterActions( 13 | /// DebugActionBuilder.Flag() 14 | /// .WithName("Target FPS") 15 | /// .WithFlag("target-fps", new string[] { "Default", "30", "60" }, true) 16 | /// .WithFlagListener((flag) => 17 | /// { 18 | /// switch (flag) 19 | /// { 20 | /// case 0: 21 | /// Application.targetFrameRate = -1; 22 | /// break; 23 | /// case 1: 24 | /// Application.targetFrameRate = 30; 25 | /// break; 26 | /// case 2: 27 | /// Application.targetFrameRate = 60; 28 | /// break; 29 | /// } 30 | /// }) 31 | /// ); 32 | /// 33 | /// 34 | /// RuntimeDebugSystem.RegisterActions( 35 | /// DebugActionBuilder.Flag() 36 | /// .WithName("Set Screen Orientation") 37 | /// .WithFlag("screen-orientation", Enum.GetNames(typeof(ScreenOrientation)), true, (int)Screen.orientation) 38 | /// .WithFlagListener((flag) => 39 | /// { 40 | /// Screen.orientation = (ScreenOrientation)(int)flag; 41 | /// }) 42 | /// ); 43 | /// 44 | /// 45 | [Serializable] 46 | public class DebugActionFlag : FluentAction 47 | { 48 | /// 49 | /// If true, the key will be saved to PlayerPrefs 50 | /// 51 | [Title("Flag", 2)] 52 | public bool isPersistence; 53 | [Visibility("isPersistence", true)] 54 | public string flagKey; 55 | [NonSerialized] public int defaultFlagValue; 56 | public int flagValue; 57 | public string[] flagValues; 58 | private string flagValuesDisplay; 59 | 60 | [NonSerialized] private bool isFlagDirty; 61 | 62 | 63 | public Action onFlagChange; 64 | 65 | public static readonly string[] BOOLEAN_VALUES = { "Off", "On" }; 66 | 67 | public static string GetFlagKeyWithPrefix(string key) 68 | { 69 | return "rda-flag-" + key; 70 | } 71 | 72 | public DebugActionFlag WithFlag(string flagKey, bool persistence = true, bool defaultValue = false) 73 | { 74 | SetupFlag(flagKey, BOOLEAN_VALUES, persistence, defaultValue ? 1 : 0); 75 | return this; 76 | } 77 | 78 | public DebugActionFlag WithFlag(string flagKey, string[] values, bool persistence = true, int defaultValue = 0) 79 | { 80 | SetupFlag(flagKey, values, persistence, defaultValue); 81 | return this; 82 | } 83 | 84 | public DebugActionFlag WithFlagListener(Action onFlagChange, bool invokeNowIfDirty = true) 85 | { 86 | this.onFlagChange = onFlagChange; 87 | 88 | //Invoke once since the flag value might be loaded from PlayerPrefs 89 | if (invokeNowIfDirty && isFlagDirty) onFlagChange?.Invoke(this); 90 | 91 | return this; 92 | } 93 | 94 | public override string GetDescription() 95 | { 96 | var desc = base.GetDescription(); 97 | 98 | if (!string.IsNullOrEmpty(flagKey)) 99 | desc += "Flag Key: " + flagKey + "\n"; 100 | 101 | desc += "Persistence: " + isPersistence + "\n"; 102 | 103 | if (flagValues != null && flagValues.Length > 0) 104 | desc += "Flag Values: " + flagValuesDisplay + "\n"; 105 | 106 | return desc; 107 | } 108 | 109 | public bool ResetFlag(bool invokeFlagListener = true) 110 | { 111 | return SetFlagValue(defaultFlagValue, invokeFlagListener); 112 | } 113 | 114 | public bool CycleFlagValue(bool invokeFlagListener = true) 115 | { 116 | var val = flagValue + 1; 117 | if (val >= flagValues.Length) 118 | val = 0; 119 | return SetFlagValue(val, invokeFlagListener); 120 | } 121 | 122 | public void InvokeFlagListener() 123 | { 124 | onFlagChange?.Invoke(this); 125 | } 126 | 127 | public bool SetFlagValue(int newFlagValue, bool invokeFlagListener = true) 128 | { 129 | bool changed = flagValue != newFlagValue; 130 | 131 | this.flagValue = newFlagValue; 132 | 133 | UpdatePlayerPrefs(); 134 | 135 | if (changed && invokeFlagListener) 136 | onFlagChange?.Invoke(this); 137 | 138 | return changed; 139 | } 140 | 141 | private void UpdatePlayerPrefs() 142 | { 143 | if (isPersistence) 144 | PlayerPrefs.SetInt(GetFlagKeyWithPrefix(flagKey), flagValue); 145 | } 146 | 147 | private void SetupFlag(string flagKey, string[] values, bool persistence = true, int defaultValue = 0) 148 | { 149 | this.flagKey = flagKey; 150 | this.isPersistence = persistence; 151 | this.flagValues = values; 152 | this.defaultFlagValue = defaultValue; 153 | 154 | if (flagValues.Length > 0) 155 | { 156 | flagValuesDisplay = string.Join(" | ", flagValues); 157 | } 158 | 159 | if (persistence) 160 | { 161 | flagValue = PlayerPrefs.GetInt(GetFlagKeyWithPrefix(flagKey), defaultValue); 162 | 163 | if (flagValue != defaultFlagValue) 164 | isFlagDirty = true; 165 | } 166 | else 167 | flagValue = defaultValue; 168 | 169 | this.action = () => 170 | { 171 | flagValue++; 172 | if (flagValue >= values.Length) 173 | flagValue = 0; 174 | 175 | UpdatePlayerPrefs(); 176 | onFlagChange?.Invoke(this); 177 | }; 178 | this.actionStatus = () => 179 | { 180 | if (values.Length == 0) return null; 181 | 182 | if (values[flagValue] == "Off") 183 | return "Off"; 184 | 185 | return $"{values[flagValue]}"; 186 | }; 187 | } 188 | 189 | public override void Setup() 190 | { 191 | SetupFlag(flagKey, flagValues, isPersistence, flagValue); 192 | } 193 | 194 | public static implicit operator int(DebugActionFlag flag) => flag.flagValue; 195 | public static implicit operator bool(DebugActionFlag flag) => flag.flagValue == 1; 196 | } 197 | 198 | } -------------------------------------------------------------------------------- /Runtime/Actions/DebugActionFlag.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f9171023227846d478344198d28ec0ce 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Actions/DebugActionInput.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e1007e1eee3e87740875f3db5dc57a65 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Actions/DebugActionToggle.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using BennyKok.RuntimeDebug.Systems; 3 | using BennyKok.RuntimeDebug.Utils; 4 | using UnityEngine; 5 | using UnityEngine.Events; 6 | 7 | namespace BennyKok.RuntimeDebug 8 | { 9 | /// 10 | /// Toggle action will be represented as a button toggle in the debug menu with on/off status 11 | /// 12 | /// 13 | /// 14 | /// RuntimeDebugSystem.RegisterActions( 15 | /// DebugActionBuilder.Toggle() 16 | /// .WithName("PostProcessing") 17 | /// .WithActionGet(() => GetCameraData().renderPostProcessing) 18 | /// .WithActionSet((isOn) => GetCameraData().renderPostProcessing = isOn), 19 | /// ); 20 | /// 21 | /// 22 | [Serializable] 23 | public class DebugActionToggle : FluentAction 24 | { 25 | [Title("Toggle", 0)] 26 | public bool isOn; 27 | 28 | public Action actionSwitch; 29 | 30 | [CollapsedEvent] 31 | public UnityEvent unityActionOff; 32 | 33 | public Action actionSet; 34 | public Func actionGet; 35 | 36 | protected string GetDisplayStatus(bool isOn) => isOn ? "On" : "Off"; 37 | 38 | public virtual DebugActionToggle WithActionGet(Func actionGet) 39 | { 40 | this.actionGet = actionGet; 41 | this.actionStatus = () => GetDisplayStatus(actionGet()); 42 | return this; 43 | } 44 | 45 | public virtual DebugActionToggle WithActionSet(Action actionSet) 46 | { 47 | this.actionSet = actionSet; 48 | return this; 49 | } 50 | 51 | public override void ResolveAction() 52 | { 53 | isOn = !actionGet(); 54 | this.actionSet(isOn); 55 | 56 | if (closePanelAfterTrigger) 57 | { 58 | RuntimeDebugSystem.UIHandler.TogglePanel(true); 59 | } 60 | } 61 | 62 | public override void Setup() 63 | { 64 | //Handling situration when this is serialized, e.g. being used in RuntimeDebugActionHandler 65 | this.actionGet = () => isOn; 66 | this.actionStatus = () => GetDisplayStatus(isOn); 67 | this.actionSwitch += () => unityActionOff.Invoke(); 68 | this.actionSet = (_isOn) => 69 | { 70 | if (_isOn) 71 | action.Invoke(); 72 | else 73 | actionSwitch.Invoke(); 74 | }; 75 | } 76 | } 77 | 78 | } -------------------------------------------------------------------------------- /Runtime/Actions/DebugActionToggle.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 26cb463ee687c2d42ac77401961c4c8b 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Attributes.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 54812ff9b894e2145a75d032e427c43f 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Runtime/Attributes/DebugActionAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace BennyKok.RuntimeDebug 4 | { 5 | [Serializable] 6 | [AttributeUsage(AttributeTargets.Method | AttributeTargets.Field | AttributeTargets.Property)] 7 | public class DebugActionAttribute : Attribute 8 | { 9 | public string name; 10 | public string group; 11 | public string id; 12 | public string description; 13 | public string shortcutKey; 14 | public bool closePanelAfterTrigger = false; 15 | 16 | public bool useSlider = false; 17 | public float min = 0; 18 | public float max = 1; 19 | } 20 | } -------------------------------------------------------------------------------- /Runtime/Attributes/DebugActionAttribute.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 181702289c9577e49a12e72e88a14859 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Components.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 66979f6eab8bd05459e08c690f60b2a5 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Runtime/Components/Actions.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ba0fb9e8f7e24664fb86b49482eacec7 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Runtime/Components/Actions/BaseDebugActionHandler.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | using BennyKok.RuntimeDebug.Actions; 3 | using BennyKok.RuntimeDebug.Systems; 4 | using UnityEngine; 5 | using System.Collections.Generic; 6 | using UnityEngine.Events; 7 | 8 | #if UNITY_EDITOR 9 | using UnityEditor; 10 | #endif 11 | 12 | namespace BennyKok.RuntimeDebug.Components 13 | { 14 | public class BaseDebugActionHandler : MonoBehaviour where T : BaseDebugAction 15 | { 16 | public T action; 17 | 18 | protected virtual void Awake() 19 | { 20 | action.Setup(); 21 | RuntimeDebugSystem.RegisterActions(action); 22 | } 23 | 24 | protected virtual void OnDestroy() 25 | { 26 | RuntimeDebugSystem.UnregisterActions(action); 27 | } 28 | } 29 | 30 | #if UNITY_EDITOR 31 | [CanEditMultipleObjects] 32 | public class DebugActionHandlerEditor : Editor 33 | { 34 | protected SerializedProperty actionProp; 35 | private List innerProps; 36 | 37 | protected virtual void OnEnable() 38 | { 39 | actionProp = serializedObject.FindProperty("action"); 40 | innerProps = GetVisibleChildren(actionProp).ToList(); 41 | 42 | var eventTypeName = typeof(UnityEvent).Name; 43 | 44 | //We sort out action to the bottom of draw order 45 | var j = innerProps.Count; 46 | for (int i = 0; i < j; i++) 47 | { 48 | var prop = innerProps[i]; 49 | // Debug.Log(prop.type + " " + eventTypeName); 50 | if (prop.type == eventTypeName) 51 | { 52 | innerProps.RemoveAt(i); 53 | innerProps.Add(prop); 54 | j--; 55 | } 56 | } 57 | } 58 | 59 | public override void OnInspectorGUI() 60 | { 61 | serializedObject.Update(); 62 | 63 | foreach (var a in innerProps) 64 | { 65 | EditorGUILayout.PropertyField(a); 66 | } 67 | 68 | DrawPropertiesExcluding(serializedObject, "m_Script", "action"); 69 | 70 | serializedObject.ApplyModifiedProperties(); 71 | } 72 | 73 | private IEnumerable GetVisibleChildren(SerializedProperty serializedProperty) 74 | { 75 | SerializedProperty currentProperty = serializedProperty.Copy(); 76 | SerializedProperty nextSiblingProperty = serializedProperty.Copy(); 77 | { 78 | nextSiblingProperty.NextVisible(false); 79 | } 80 | 81 | if (currentProperty.NextVisible(true)) 82 | { 83 | do 84 | { 85 | if (SerializedProperty.EqualContents(currentProperty, nextSiblingProperty)) 86 | break; 87 | 88 | yield return currentProperty.Copy(); 89 | } 90 | while (currentProperty.NextVisible(false)); 91 | } 92 | } 93 | } 94 | #endif 95 | 96 | } -------------------------------------------------------------------------------- /Runtime/Components/Actions/BaseDebugActionHandler.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9f1c2aef00b40a7458e80f163a0c35f9 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Components/Actions/DebugActionAutoHandler.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6729bb9d10a6ba84cac4182f8596e695 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Components/Actions/DebugActionButtonHandler.cs: -------------------------------------------------------------------------------- 1 | using BennyKok.RuntimeDebug.Actions; 2 | using UnityEngine; 3 | 4 | namespace BennyKok.RuntimeDebug.Components 5 | { 6 | [AddComponentMenu("Runtime Debug Action/Actions/Debug Action Button")] 7 | public class DebugActionButtonHandler : BaseDebugActionHandler 8 | { 9 | 10 | } 11 | 12 | #if UNITY_EDITOR 13 | [UnityEditor.CanEditMultipleObjects] 14 | [UnityEditor.CustomEditor(typeof(DebugActionButtonHandler))] 15 | public class DebugActionButtonHandlerEditor : DebugActionHandlerEditor { } 16 | #endif 17 | } -------------------------------------------------------------------------------- /Runtime/Components/Actions/DebugActionButtonHandler.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 7e1e5378d3da21b4cacda91d284f8231 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Components/Actions/DebugActionFlagHandler.cs: -------------------------------------------------------------------------------- 1 | using BennyKok.RuntimeDebug.Actions; 2 | using UnityEngine; 3 | using UnityEngine.Events; 4 | using BennyKok.RuntimeDebug.Utils; 5 | 6 | #if UNITY_EDITOR 7 | using UnityEditor; 8 | #endif 9 | 10 | namespace BennyKok.RuntimeDebug.Components 11 | { 12 | [AddComponentMenu("Runtime Debug Action/Actions/Debug Action Flag")] 13 | public class DebugActionFlagHandler : BaseDebugActionHandler 14 | { 15 | [Comment("The event at corresponsing index will be called when the flag is changed or init from persistence value")] 16 | public UnityEvent[] flagActions; 17 | 18 | protected override void Awake() 19 | { 20 | base.Awake(); 21 | action.WithFlagListener((flag) => 22 | { 23 | if (flag < flagActions.Length) 24 | flagActions[flag].Invoke(); 25 | else 26 | Debug.LogWarning("Not matching UnityEvent counts for flag listener callback."); 27 | }); 28 | } 29 | } 30 | 31 | #if UNITY_EDITOR 32 | [UnityEditor.CanEditMultipleObjects] 33 | [UnityEditor.CustomEditor(typeof(DebugActionFlagHandler))] 34 | public class DebugActionFlagHandlerEditor : DebugActionHandlerEditor 35 | { 36 | protected SerializedProperty flagValuesProp; 37 | protected SerializedProperty flagActionsProp; 38 | 39 | protected override void OnEnable() 40 | { 41 | base.OnEnable(); 42 | 43 | flagActionsProp = serializedObject.FindProperty("flagActions"); 44 | flagValuesProp = actionProp.FindPropertyRelative("flagValues"); 45 | } 46 | public override void OnInspectorGUI() 47 | { 48 | base.OnInspectorGUI(); 49 | 50 | serializedObject.Update(); 51 | 52 | // Sync the UnityEvents size with the values size 53 | if (flagValuesProp.arraySize != flagActionsProp.arraySize) 54 | flagActionsProp.arraySize = flagValuesProp.arraySize; 55 | 56 | serializedObject.ApplyModifiedProperties(); 57 | } 58 | } 59 | #endif 60 | } -------------------------------------------------------------------------------- /Runtime/Components/Actions/DebugActionFlagHandler.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 056712b5f6ad4e948b123da60880d498 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Components/Actions/DebugActionInputHandler.cs: -------------------------------------------------------------------------------- 1 | using BennyKok.RuntimeDebug.Actions; 2 | using UnityEngine; 3 | 4 | namespace BennyKok.RuntimeDebug.Components 5 | { 6 | [AddComponentMenu("Runtime Debug Action/Actions/Debug Action Input")] 7 | public class DebugActionInputHandler : BaseDebugActionHandler 8 | { 9 | 10 | } 11 | 12 | #if UNITY_EDITOR 13 | [UnityEditor.CanEditMultipleObjects] 14 | [UnityEditor.CustomEditor(typeof(DebugActionInputHandler))] 15 | public class DebugActionInputHandlerEditor : DebugActionHandlerEditor { } 16 | #endif 17 | } -------------------------------------------------------------------------------- /Runtime/Components/Actions/DebugActionInputHandler.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fca7b0bdb38389748b591d497ee84a46 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Components/Actions/DebugActionToggleHandler.cs: -------------------------------------------------------------------------------- 1 | using BennyKok.RuntimeDebug.Actions; 2 | using UnityEngine; 3 | 4 | namespace BennyKok.RuntimeDebug.Components 5 | { 6 | [AddComponentMenu("Runtime Debug Action/Actions/Debug Action Toggle")] 7 | public class DebugActionToggleHandler : BaseDebugActionHandler 8 | { 9 | 10 | } 11 | 12 | #if UNITY_EDITOR 13 | [UnityEditor.CanEditMultipleObjects] 14 | [UnityEditor.CustomEditor(typeof(DebugActionToggleHandler))] 15 | public class DebugActionToggleHandlerEditor : DebugActionHandlerEditor { } 16 | #endif 17 | } -------------------------------------------------------------------------------- /Runtime/Components/Actions/DebugActionToggleHandler.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5317351a64bd7ae4bbe9f9f191b5f7e3 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Components/Actions/RuntimeDebugBehaviour.cs: -------------------------------------------------------------------------------- 1 | using BennyKok.RuntimeDebug.Actions; 2 | using BennyKok.RuntimeDebug.Systems; 3 | using UnityEngine; 4 | 5 | namespace BennyKok.RuntimeDebug.Components 6 | { 7 | public abstract class RuntimeDebugBehaviour : MonoBehaviour 8 | { 9 | private BaseDebugAction[] actions; 10 | 11 | protected virtual void Awake() 12 | { 13 | actions = RuntimeDebugSystem.RegisterActionsAuto(this); 14 | } 15 | 16 | protected virtual void OnDestroy() 17 | { 18 | RuntimeDebugSystem.UnregisterActions(actions); 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /Runtime/Components/Actions/RuntimeDebugBehaviour.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f8f3f88eb3d763e4489349afac0ac2b7 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Components/Event.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 15ebec5fef1ff7c4aa9eb5fed42f76bf 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Runtime/Components/Event/DebugSystemEventHandler.cs: -------------------------------------------------------------------------------- 1 | using BennyKok.RuntimeDebug; 2 | using BennyKok.RuntimeDebug.Systems; 3 | using BennyKok.RuntimeDebug.Utils; 4 | using UnityEngine; 5 | using UnityEngine.Events; 6 | 7 | namespace BennyKok.RuntimeDebug.Components.UI 8 | { 9 | [AddComponentMenu("Runtime Debug Action/Event/Debug System Event Handler")] 10 | public class DebugSystemEventHandler : MonoBehaviour 11 | { 12 | [Title("Events", false, 2)] 13 | [CollapsedEvent] 14 | public UnityEvent onDebugMenuShow = new UnityEvent(); 15 | 16 | [CollapsedEvent] 17 | public UnityEvent onDebugMenuHide = new UnityEvent(); 18 | 19 | 20 | private void OnEnable() => RuntimeDebugSystem.Instance.OnDebugMenuToggleEvent += OnToggle; 21 | 22 | private void OnDisable() => RuntimeDebugSystem.Instance.OnDebugMenuToggleEvent -= OnToggle; 23 | 24 | public void OnToggle(bool isVisible) 25 | { 26 | if (isVisible) 27 | onDebugMenuShow.Invoke(); 28 | else 29 | onDebugMenuHide.Invoke(); 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /Runtime/Components/Event/DebugSystemEventHandler.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2fd103875d06b9d4e8bb042afd73ed1e 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Components/UI.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5494a79eacc55d44eb24aee8ae0c22d8 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Runtime/Components/UI/AutoFacingCamera.cs: -------------------------------------------------------------------------------- 1 | using BennyKok.RuntimeDebug.Systems; 2 | using UnityEngine; 3 | 4 | namespace BennyKok.RuntimeDebug.Components.UI 5 | { 6 | public class AutoFacingCamera : MonoBehaviour 7 | { 8 | public float distanceAwayCamera = 1; 9 | public float recenterTime = 0.2f; 10 | public float distanceThreshold = 2.5f; 11 | 12 | [Range(0, 300)] 13 | public float angleThreshold = 50f; 14 | 15 | private bool isUpdating; 16 | 17 | private Camera m_Camera; 18 | private Camera Camera 19 | { 20 | get 21 | { 22 | if (m_Camera == null) m_Camera = Camera.main; 23 | return m_Camera; 24 | } 25 | } 26 | 27 | private void Start() 28 | { 29 | Recenter(); 30 | } 31 | 32 | private void OnEnable() 33 | { 34 | RuntimeDebugSystem.Instance.OnDebugMenuToggleEvent += OnMenuToggle; 35 | } 36 | 37 | private void OnDisable() 38 | { 39 | RuntimeDebugSystem.Instance.OnDebugMenuToggleEvent -= OnMenuToggle; 40 | } 41 | 42 | private void OnMenuToggle(bool isShowing) 43 | { 44 | if (isShowing) Recenter(); 45 | } 46 | 47 | private Vector3 newPosition; 48 | private Quaternion newRotation; 49 | private Vector3 velocity = Vector3.zero; 50 | 51 | private void Recenter() 52 | { 53 | isUpdating = true; 54 | 55 | var dir = Camera.transform.forward; 56 | dir.y = 0; 57 | 58 | newPosition = Camera.transform.position + dir * distanceAwayCamera; 59 | } 60 | 61 | private void Update() 62 | { 63 | var distanceDiff = Vector3.Distance(transform.position, Camera.transform.position); 64 | var diff = transform.position - Camera.transform.position; 65 | diff.y = 0; 66 | newRotation = Quaternion.LookRotation(diff.normalized); 67 | transform.rotation = Quaternion.Slerp(transform.rotation, newRotation, Time.unscaledDeltaTime / recenterTime); 68 | 69 | Vector3 lookDir = Camera.transform.position - transform.position; 70 | lookDir.y = 0; 71 | Vector3 yourDir = Camera.transform.forward; 72 | yourDir.y = 0; 73 | 74 | float angleDiff = Vector3.Angle(yourDir, -lookDir); 75 | // Debug.Log(angleDiff); 76 | if (distanceDiff > distanceThreshold || angleDiff > angleThreshold) 77 | { 78 | Recenter(); 79 | } 80 | 81 | if (isUpdating) 82 | { 83 | transform.position = Vector3.SmoothDamp(transform.position, newPosition, ref velocity, recenterTime, 20, Time.unscaledDeltaTime); 84 | if (transform.position == newPosition) 85 | { 86 | isUpdating = false; 87 | } 88 | } 89 | } 90 | } 91 | } -------------------------------------------------------------------------------- /Runtime/Components/UI/AutoFacingCamera.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c98349c16945f2643b89ff8fa466ec87 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Components/UI/DebugUIHandler.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e2f92e4dd1f1ae44298c58b5886a03a5 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Components/UI/FontSetter.cs: -------------------------------------------------------------------------------- 1 | using BennyKok.RuntimeDebug.Data; 2 | using BennyKok.RuntimeDebug.Systems; 3 | using TMPro; 4 | using UnityEngine; 5 | 6 | namespace BennyKok.RuntimeDebug.Components.UI 7 | { 8 | [AddComponentMenu("Runtime Debug Action/UI/Font Setter")] 9 | public class FontSetter : MonoBehaviour 10 | { 11 | public DebugUIHandler uiHandler; 12 | 13 | private void Awake() 14 | { 15 | if (uiHandler && uiHandler.customFont && TryGetComponent(out var text)) 16 | { 17 | text.font = uiHandler.customFont; 18 | } 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /Runtime/Components/UI/FontSetter.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3a661a3f39da566469dffa2d9dd23610 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Components/UI/InputUIHandler.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System; 3 | using BennyKok.RuntimeDebug.Data; 4 | using BennyKok.RuntimeDebug.DebugInput; 5 | using BennyKok.RuntimeDebug.Systems; 6 | using BennyKok.RuntimeDebug.Utils; 7 | using TMPro; 8 | using UnityEngine; 9 | using UnityEngine.EventSystems; 10 | using UnityEngine.UI; 11 | using System.Linq; 12 | 13 | namespace BennyKok.RuntimeDebug.Components.UI 14 | { 15 | [RequireComponent(typeof(TMP_InputField))] 16 | public class InputUIHandler : MonoBehaviour 17 | { 18 | [Title("References", false, 3)] 19 | public TMP_InputField inputField; 20 | public Button cancelButton; 21 | 22 | public InputUISlider sliderHelper; 23 | 24 | private Action resultCallback; 25 | private Action cancelCallback; 26 | 27 | private void Awake() 28 | { 29 | gameObject.SetActive(false); 30 | 31 | if (cancelButton) cancelButton.onClick.AddListener(DimissInput); 32 | 33 | inputField.onSubmit.AddListener((val) => 34 | { 35 | OnConfirm(); 36 | }); 37 | } 38 | 39 | private void Update() 40 | { 41 | if (!RuntimeDebugSystem.UIHandler.IsVisible) return; 42 | 43 | if (RuntimeDebugSystem.isInputLayerReady && RuntimeDebugSystem.InputLayer.IsMenuAction()) 44 | { 45 | cancelCallback?.Invoke(); 46 | DimissInput(); 47 | } 48 | } 49 | 50 | private void OnConfirm() 51 | { 52 | if (confirmDelayCoroutine != null) StopCoroutine(confirmDelayCoroutine); 53 | confirmDelayCoroutine = StartCoroutine(OnConfirmDelay()); 54 | } 55 | 56 | private Coroutine confirmDelayCoroutine; 57 | 58 | private IEnumerator OnConfirmDelay() 59 | { 60 | yield return new WaitForEndOfFrame(); 61 | //User confirm input 62 | resultCallback?.Invoke(inputField.text); 63 | // RuntimeDebugSystem.UIHandler.TogglePanel(true, false); 64 | 65 | // Make sure the submit key is being consumed until next frame 66 | DimissInput(); 67 | } 68 | 69 | /// 70 | /// Dismiss the input, which will deactivate the gameobject and replease the input block of the 71 | /// 72 | public void DimissInput() 73 | { 74 | inputField.text = null; 75 | DebugUIHandler.currentInputField = null; 76 | 77 | gameObject.SetActive(false); 78 | RuntimeDebugSystem.Instance.ReleaseInputBlock(); 79 | 80 | sliderHelper?.Clear(); 81 | } 82 | 83 | public void AskForInput(InputQuery query, Action resultCallback, Action cancelCallback = null) 84 | { 85 | this.resultCallback = resultCallback; 86 | this.cancelCallback = cancelCallback; 87 | 88 | RuntimeDebugSystem.Instance.RequsetInputBlock(); 89 | 90 | gameObject.SetActive(true); 91 | (inputField.placeholder as TextMeshProUGUI).text = query.GetParamsDisplay(); 92 | var prefill = query.allParams.Aggregate("", 93 | (result, param) => 94 | { 95 | if (param.valuePrefillCallback == null) return result; 96 | var prefillValue = param.valuePrefillCallback?.Invoke(); 97 | var prefillString = prefillValue != null ? prefillValue.ToString() : ""; 98 | if (prefillValue is string && !string.IsNullOrEmpty(prefillString) && query.allParams.Count > 1) 99 | prefillString = "\"" + prefillString + "\""; 100 | return result + (result.Length > 0 ? " " : null) + prefillString; 101 | }); 102 | if (!string.IsNullOrWhiteSpace(prefill)) 103 | { 104 | inputField.text = prefill; 105 | inputField.caretPosition = prefill.Length; 106 | } 107 | 108 | sliderHelper?.OnNewInput(query); 109 | 110 | if (!inputField.isFocused) 111 | inputField.ActivateInputField(); 112 | 113 | DebugUIHandler.currentInputField = inputField; 114 | } 115 | } 116 | } -------------------------------------------------------------------------------- /Runtime/Components/UI/InputUIHandler.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 582e34cab83f1c84ba767bfc4c9ec38e 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Components/UI/InputUISlider.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | using System.Security; 4 | using BennyKok.RuntimeDebug.DebugInput; 5 | using UnityEngine; 6 | using UnityEngine.EventSystems; 7 | 8 | namespace BennyKok.RuntimeDebug.Components.UI 9 | { 10 | public class InputUISlider : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler 11 | { 12 | public InputUIHandler target; 13 | 14 | private Param currentParma; 15 | 16 | private double currentValue, step; 17 | 18 | private void Awake() 19 | { 20 | gameObject.SetActive(false); 21 | } 22 | 23 | public void OnBeginDrag(PointerEventData eventData) 24 | { 25 | if (currentParma == null) return; 26 | if (double.TryParse(target.inputField.text, out var value)) 27 | currentValue = RoundToNearest(value, step); 28 | // currentValue = step; 29 | else 30 | currentValue = 0; 31 | target.inputField.text = currentValue.ToString(); 32 | } 33 | 34 | public void OnDrag(PointerEventData eventData) 35 | { 36 | if (currentParma == null) return; 37 | var draggedValue = eventData.delta.y * step; 38 | currentValue = RoundToNearest(currentValue + draggedValue, step); 39 | // currentValue += draggedValue; 40 | // Debug.Log(currentValue); 41 | target.inputField.text = currentValue.ToString(); 42 | target.inputField.caretPosition = target.inputField.text.Length; 43 | } 44 | 45 | public static double RoundToNearest(double value, double step) 46 | { 47 | return System.Math.Round(value * (1 / step), System.MidpointRounding.ToEven) / (1 / step); 48 | } 49 | 50 | public void OnEndDrag(PointerEventData eventData) { } 51 | 52 | public void OnNewInput(InputQuery query) 53 | { 54 | if (query.allParams.Count != 1) return; 55 | 56 | var param = query.allParams[0]; 57 | if (!(param.type == ParamType.Int || param.type == ParamType.Float)) return; 58 | 59 | gameObject.SetActive(true); 60 | currentParma = param; 61 | step = currentParma.type == ParamType.Float ? 0.1 : 1.0; 62 | } 63 | 64 | public void Clear() 65 | { 66 | gameObject.SetActive(false); 67 | currentParma = null; 68 | } 69 | } 70 | } -------------------------------------------------------------------------------- /Runtime/Components/UI/InputUISlider.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8f8fee089e8055f419ee5e9a9a650fe2 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Components/UI/ListItemView.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ea543a93c197b664a8b31130de7aeb81 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Components/UI/ListView.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a1db088aa9053b74295fe1415b5484e0 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Components/UI/LoggerHandler.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | using System; 3 | using System.Collections.Generic; 4 | using BennyKok.RuntimeDebug.Systems; 5 | using UnityEngine; 6 | using UnityEngine.UI; 7 | using BennyKok.RuntimeDebug.Actions; 8 | 9 | namespace BennyKok.RuntimeDebug.Components.UI 10 | { 11 | public class LoggerHandler : MonoBehaviour 12 | { 13 | public TMPro.TextMeshProUGUI logText; 14 | public ScrollRect scrollRect; 15 | 16 | public List allLogs = new List(); 17 | 18 | private string textCache; 19 | private Vector2 textScrollCache; 20 | private bool isOnHold; 21 | 22 | public struct Log 23 | { 24 | public string logString; 25 | public string stackTrace; 26 | public LogType type; 27 | public DateTime time; 28 | 29 | public Log(string logString, string stackTrace, LogType type, DateTime time) 30 | { 31 | this.logString = logString; 32 | this.stackTrace = stackTrace; 33 | this.type = type; 34 | this.time = time; 35 | } 36 | 37 | public override string ToString() 38 | { 39 | var log = $"{type} | {time.ToString("hh:mm:ss")} | {logString}"; 40 | switch (type) 41 | { 42 | case LogType.Exception: 43 | case LogType.Error: 44 | log = $"{log}"; 45 | break; 46 | case LogType.Warning: 47 | log = $"{log}"; 48 | break; 49 | } 50 | return log + "\n"; 51 | } 52 | } 53 | 54 | public void Hold() 55 | { 56 | isOnHold = true; 57 | textScrollCache = scrollRect.normalizedPosition; 58 | textCache = logText.text; 59 | } 60 | 61 | public void Resume() 62 | { 63 | isOnHold = false; 64 | textScrollCache = scrollRect.normalizedPosition; 65 | logText.text = textCache; 66 | } 67 | 68 | private void Awake() 69 | { 70 | if (RuntimeDebugSystem.GetPersistantFlagValue("show-logger") == 0) 71 | { 72 | scrollRect.gameObject.SetActive(false); 73 | } 74 | } 75 | 76 | private DebugActionFlag panelFlag; 77 | private DebugActionFlag loggerFlag; 78 | 79 | private DebugActionFlag PanelFlag 80 | { 81 | get 82 | { 83 | if (panelFlag == null) 84 | panelFlag = RuntimeDebugSystem.GetFlag("bottom-panel-height"); 85 | 86 | return panelFlag; 87 | } 88 | } 89 | 90 | private DebugActionFlag LoggerFlag 91 | { 92 | get 93 | { 94 | if (loggerFlag == null) 95 | loggerFlag = RuntimeDebugSystem.GetFlag("show-logger"); 96 | 97 | return loggerFlag; 98 | } 99 | } 100 | 101 | private void Start() 102 | { 103 | if (PanelFlag != null) 104 | { 105 | PanelFlag.InvokeFlagListener(); 106 | } 107 | } 108 | 109 | public void Close() 110 | { 111 | LoggerFlag.SetFlagValue(0); 112 | } 113 | 114 | public void SwitchHeight() 115 | { 116 | PanelFlag.CycleFlagValue(); 117 | } 118 | 119 | public void OnLogUpdated(string logString, string stackTrace, LogType type) 120 | { 121 | Log item = new Log(logString, stackTrace, type, DateTime.Now); 122 | 123 | if (allLogs.Count == RuntimeDebugSystem.Settings.loggerMaxLine) 124 | { 125 | logText.text = logText.text.Remove(0, allLogs[0].ToString().Count()); 126 | allLogs.RemoveAt(0); 127 | } 128 | 129 | if (isOnHold) 130 | textCache += item; 131 | else 132 | logText.text += item; 133 | allLogs.Add(item); 134 | } 135 | } 136 | } -------------------------------------------------------------------------------- /Runtime/Components/UI/LoggerHandler.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3941d01c19ec9db4da6455c697773c9a 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Components/UI/LoggerLineSelectHandler.cs: -------------------------------------------------------------------------------- 1 | using TMPro; 2 | using UnityEngine; 3 | using UnityEngine.EventSystems; 4 | using UnityEngine.UI; 5 | 6 | namespace BennyKok.RuntimeDebug.Components.UI 7 | { 8 | public class LoggerLineSelectHandler : MonoBehaviour, IPointerClickHandler, IBeginDragHandler, IEndDragHandler 9 | { 10 | public LoggerHandler loggerHandler; 11 | public TextMeshProUGUI text; 12 | // public TextMeshProUGUI detailText; 13 | public ScrollRect scrollRect; 14 | 15 | private bool isDragging; 16 | private bool isShowingDetails; 17 | 18 | private Canvas canvas; 19 | 20 | private void Awake() 21 | { 22 | canvas = GetComponentInParent(); 23 | } 24 | 25 | public void OnPointerClick(PointerEventData eventData) 26 | { 27 | if (isDragging) return; 28 | if (isShowingDetails) 29 | { 30 | CloseLogDetails(); 31 | return; 32 | } 33 | var line = TMP_TextUtilities.FindIntersectingLine(text, eventData.position, canvas.worldCamera); 34 | 35 | if (line >= 0 && line < loggerHandler.allLogs.Count) 36 | { 37 | loggerHandler.Hold(); 38 | isShowingDetails = true; 39 | 40 | var log = loggerHandler.allLogs[line]; 41 | text.text = "Log Details:\n" + log + "\nStack Trace:\n" + log.stackTrace; 42 | } 43 | } 44 | 45 | public void CloseLogDetails() 46 | { 47 | isShowingDetails = false; 48 | loggerHandler.Resume(); 49 | } 50 | 51 | public void OnBeginDrag(PointerEventData eventData) 52 | { 53 | isDragging = true; 54 | } 55 | 56 | public void OnEndDrag(PointerEventData eventData) 57 | { 58 | isDragging = false; 59 | } 60 | } 61 | } -------------------------------------------------------------------------------- /Runtime/Components/UI/LoggerLineSelectHandler.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 87b3d7d6b51e3fe488f0ef246eed6766 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Components/UI/TooltipHandler.cs: -------------------------------------------------------------------------------- 1 | using TMPro; 2 | using UnityEngine; 3 | 4 | namespace BennyKok.RuntimeDebug.Components.UI 5 | { 6 | public class TooltipHandler : MonoBehaviour 7 | { 8 | public TextMeshProUGUI tooltip; 9 | 10 | private Canvas canvas; 11 | 12 | public bool IsActive => canvas.enabled; 13 | 14 | private void Awake() 15 | { 16 | if (!canvas) canvas = GetComponent(); 17 | } 18 | 19 | public void ShowTooltip(string text) 20 | { 21 | canvas.enabled = true; 22 | tooltip.text = text; 23 | } 24 | 25 | public void ClearTooltip() 26 | { 27 | if (!canvas) canvas = GetComponent(); 28 | canvas.enabled = false; 29 | tooltip.text = null; 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /Runtime/Components/UI/TooltipHandler.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 623cbd51a57a63347aceca9ff8345488 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Components/UI/Utils.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9d8297c21e550394e8c5d8529105d733 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Runtime/Components/UI/Utils/ChangeSiblingIndexOnAwake.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using BennyKok.RuntimeDebug.Utils; 4 | using UnityEngine; 5 | 6 | namespace BennyKok.RuntimeDebug.Components.UI 7 | { 8 | public class ChangeSiblingIndexOnAwake : MonoBehaviour 9 | { 10 | [Comment("Set -1 for SetAsLastSibling")] 11 | public int targetIndex; 12 | 13 | private void Awake() 14 | { 15 | if (targetIndex == -1) 16 | transform.SetAsLastSibling(); 17 | else 18 | transform.SetSiblingIndex(targetIndex); 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /Runtime/Components/UI/Utils/ChangeSiblingIndexOnAwake.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 083c0550efa14754ea0f23d66254bc08 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Components/UI/Utils/LongPressDetector.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using UnityEngine.Events; 3 | using UnityEngine.EventSystems; 4 | 5 | namespace BennyKok.RuntimeDebug.Components.UI 6 | { 7 | //Reference form https://forum.unity.com/threads/long-press-gesture-on-ugui-button.264388/#post-1911939 8 | public class LongPressDetector : UIBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler 9 | { 10 | public float longPressduration = 0.5f; 11 | public float pressDuration = 0.01f; 12 | 13 | public UnityEvent onLongPress = new UnityEvent(); 14 | public UnityEvent onPress = new UnityEvent(); 15 | 16 | private bool isPointerDown = false; 17 | private bool anyPressTriggered = false; 18 | private float timePressStarted; 19 | 20 | private void Update() 21 | { 22 | if (isPointerDown && !anyPressTriggered) 23 | { 24 | if (Time.unscaledTime - timePressStarted > longPressduration) 25 | { 26 | anyPressTriggered = true; 27 | onLongPress.Invoke(); 28 | } 29 | } 30 | } 31 | 32 | public void OnPointerDown(PointerEventData eventData) 33 | { 34 | timePressStarted = Time.unscaledTime; 35 | isPointerDown = true; 36 | anyPressTriggered = false; 37 | } 38 | 39 | public void OnPointerUp(PointerEventData eventData) 40 | { 41 | isPointerDown = false; 42 | 43 | if (!anyPressTriggered) 44 | { 45 | onPress.Invoke(); 46 | } 47 | } 48 | 49 | 50 | public void OnPointerExit(PointerEventData eventData) 51 | { 52 | isPointerDown = false; 53 | } 54 | } 55 | } -------------------------------------------------------------------------------- /Runtime/Components/UI/Utils/LongPressDetector.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1fddc5feea087a143b0be65ac0d9a861 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Components/UI/Utils/MaxWidthHeight.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using System.Collections.Generic; 4 | using UnityEngine; 5 | using UnityEngine.EventSystems; 6 | using UnityEngine.UI; 7 | 8 | namespace BennyKok.RuntimeDebug.Components.UI 9 | { 10 | // https://forum.unity.com/threads/limit-max-width-of-layout-component.316625/#post-6207483 11 | 12 | /// 13 | /// Helper class to constraint a RectTransfrom with a max size 14 | /// 15 | [ExecuteAlways] 16 | [RequireComponent(typeof(RectTransform))] 17 | public class MaxWidthHeight : UIBehaviour, ILayoutSelfController 18 | { 19 | public RectTransform referenceRectTransfrom; 20 | public RectTransform rectTransform; 21 | 22 | private Rect previousRect; 23 | 24 | 25 | [Tooltip("Maximum Preferred size when using Preferred Size")] 26 | public Vector2 MaximumPreferredSize; 27 | 28 | private DrivenRectTransformTracker tracker; 29 | 30 | protected override void OnEnable() 31 | { 32 | base.OnEnable(); 33 | SetDirty(); 34 | } 35 | 36 | public void SetPreferredHeight(float newHeight) 37 | { 38 | if (MaximumPreferredSize.y != newHeight) 39 | { 40 | MaximumPreferredSize.y = newHeight; 41 | SetDirty(); 42 | } 43 | } 44 | 45 | protected override void OnDisable() 46 | { 47 | tracker.Clear(); 48 | LayoutRebuilder.MarkLayoutForRebuild(rectTransform); 49 | base.OnDisable(); 50 | } 51 | 52 | private void Update() 53 | { 54 | if (referenceRectTransfrom.rect.width != previousRect.width || referenceRectTransfrom.rect.height != previousRect.height) 55 | { 56 | if (MaximumPreferredSize.x > referenceRectTransfrom.rect.width || MaximumPreferredSize.y > referenceRectTransfrom.rect.height) 57 | { 58 | SetDirty(); 59 | } 60 | } 61 | previousRect = referenceRectTransfrom.rect; 62 | } 63 | 64 | protected override void OnRectTransformDimensionsChange() 65 | { 66 | SetDirty(); 67 | } 68 | 69 | private void HandleSelfFittingAlongAxis(int axis) 70 | { 71 | float prefereredSize = LayoutUtility.GetPreferredSize(rectTransform, axis); 72 | float max = axis == 0 ? MaximumPreferredSize.x : MaximumPreferredSize.y; 73 | float min = Mathf.Min(axis == 0 ? referenceRectTransfrom.rect.width : referenceRectTransfrom.rect.height, max); 74 | float size = Mathf.Clamp(prefereredSize, min, max); 75 | 76 | // if (size != (axis == 0 ? rectTransform.rect.size.x : rectTransform.rect.size.y)) 77 | // { 78 | tracker.Add(this, rectTransform, (axis == 0 ? DrivenTransformProperties.SizeDeltaX : DrivenTransformProperties.SizeDeltaY)); 79 | rectTransform.SetSizeWithCurrentAnchors((RectTransform.Axis)axis, size); 80 | // } 81 | } 82 | 83 | /// 84 | /// Calculate and apply the horizontal component of the size to the RectTransform 85 | /// 86 | public virtual void SetLayoutHorizontal() 87 | { 88 | tracker.Clear(); 89 | HandleSelfFittingAlongAxis(0); 90 | } 91 | 92 | /// 93 | /// Calculate and apply the vertical component of the size to the RectTransform 94 | /// 95 | public virtual void SetLayoutVertical() 96 | { 97 | HandleSelfFittingAlongAxis(1); 98 | } 99 | 100 | protected void SetDirty() 101 | { 102 | if (!IsActive()) 103 | return; 104 | 105 | LayoutRebuilder.MarkLayoutForRebuild(rectTransform); 106 | } 107 | 108 | #if UNITY_EDITOR 109 | protected override void OnValidate() 110 | { 111 | SetDirty(); 112 | } 113 | 114 | #endif 115 | } 116 | } 117 | -------------------------------------------------------------------------------- /Runtime/Components/UI/Utils/MaxWidthHeight.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d797277dd9e086c42b753cc3e8778f66 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Components/UI/Utils/SafeAreaExtender.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | namespace BennyKok.RuntimeDebug.Components.UI 4 | { 5 | /// 6 | /// Work with SafeAreaHelper to extend any UI under SafeArea parent to fill the safe area (full screen), useful for background UI element 7 | /// 8 | public class SafeAreaExtender : MonoBehaviour 9 | { 10 | private RectTransform rectTransform; 11 | 12 | private void Awake() 13 | { 14 | rectTransform = GetComponent(); 15 | SafeAreaHelper.OnResolutionOrOrientationChanged.AddListener(UpdateSafeOffset); 16 | } 17 | 18 | private void UpdateSafeOffset() 19 | { 20 | var safeArea = Screen.safeArea; 21 | var safeOffsetV = Mathf.Abs((Screen.height - safeArea.size.y) / 2); 22 | var safeOffsetH = Mathf.Abs((Screen.width - safeArea.size.x) / 2); 23 | // Debug.Log(safeArea); 24 | // Debug.Log(safeArea.min); 25 | // Debug.Log(safeArea.max); 26 | rectTransform.offsetMin = new Vector2(-safeArea.xMin, -safeArea.yMin); 27 | rectTransform.offsetMax = new Vector2(Screen.width - safeArea.xMax, Screen.height - safeArea.yMax); 28 | } 29 | 30 | private void Start() 31 | { 32 | UpdateSafeOffset(); 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /Runtime/Components/UI/Utils/SafeAreaExtender.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 1de8feb803ce3164fa1ef13011d01e42 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Components/UI/Utils/SafeAreaHelper.cs: -------------------------------------------------------------------------------- 1 |  2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | using UnityEngine.Events; 5 | 6 | namespace BennyKok.RuntimeDebug.Components.UI 7 | { 8 | //https://forum.unity.com/threads/canvashelper-resizes-a-recttransform-to-iphone-xs-safe-area.521107/ 9 | [RequireComponent(typeof(Canvas))] 10 | public class SafeAreaHelper : MonoBehaviour 11 | { 12 | private static List helpers = new List(); 13 | 14 | public static UnityEvent OnResolutionOrOrientationChanged = new UnityEvent(); 15 | 16 | private static bool screenChangeVarsInitialized = false; 17 | private static ScreenOrientation lastOrientation = ScreenOrientation.LandscapeLeft; 18 | private static Vector2 lastResolution = Vector2.zero; 19 | private static Rect lastSafeArea = Rect.zero; 20 | 21 | private Canvas canvas; 22 | private RectTransform rectTransform; 23 | private RectTransform safeAreaTransform; 24 | 25 | void Awake() 26 | { 27 | if (!helpers.Contains(this)) 28 | helpers.Add(this); 29 | 30 | canvas = GetComponent(); 31 | rectTransform = GetComponent(); 32 | 33 | safeAreaTransform = transform.Find("SafeArea") as RectTransform; 34 | 35 | if (!screenChangeVarsInitialized) 36 | { 37 | lastOrientation = Screen.orientation; 38 | lastResolution.x = Screen.width; 39 | lastResolution.y = Screen.height; 40 | lastSafeArea = GetSafeArea; 41 | 42 | screenChangeVarsInitialized = true; 43 | } 44 | 45 | ApplySafeArea(); 46 | } 47 | 48 | public static Rect GetSafeArea => 49 | 50 | #if UNITY_2021_1_OR_NEWER 51 | UnityEngine.Device.Screen.safeArea; 52 | #else 53 | Screen.safeArea; 54 | #endif 55 | 56 | 57 | public static bool IsMobilePlatform => 58 | 59 | #if UNITY_2021_1_OR_NEWER 60 | UnityEngine.Device.Application.isMobilePlatform; 61 | #else 62 | Application.isMobilePlatform; 63 | #endif 64 | 65 | 66 | 67 | void Update() 68 | { 69 | if (helpers[0] != this) 70 | return; 71 | 72 | if (IsMobilePlatform && Screen.orientation != lastOrientation) 73 | OrientationChanged(); 74 | 75 | if (GetSafeArea != lastSafeArea) 76 | SafeAreaChanged(); 77 | 78 | if (Screen.width != lastResolution.x || Screen.height != lastResolution.y) 79 | ResolutionChanged(); 80 | } 81 | 82 | void ApplySafeArea() 83 | { 84 | if (safeAreaTransform == null) 85 | return; 86 | 87 | var safeArea = GetSafeArea; 88 | 89 | var anchorMin = safeArea.position; 90 | var anchorMax = safeArea.position + safeArea.size; 91 | 92 | var w = canvas.pixelRect.width; 93 | var h = canvas.pixelRect.height; 94 | 95 | anchorMin.x /= w; 96 | anchorMin.y /= h; 97 | anchorMax.x /= w; 98 | anchorMax.y /= h; 99 | 100 | safeAreaTransform.anchorMin = anchorMin; 101 | safeAreaTransform.anchorMax = anchorMax; 102 | } 103 | 104 | void OnDestroy() 105 | { 106 | if (helpers != null && helpers.Contains(this)) 107 | helpers.Remove(this); 108 | } 109 | 110 | private static void OrientationChanged() 111 | { 112 | //Debug.Log("Orientation changed from " + lastOrientation + " to " + Screen.orientation + " at " + Time.time); 113 | 114 | lastOrientation = Screen.orientation; 115 | lastResolution.x = Screen.width; 116 | lastResolution.y = Screen.height; 117 | 118 | OnResolutionOrOrientationChanged.Invoke(); 119 | } 120 | 121 | private static void ResolutionChanged() 122 | { 123 | //Debug.Log("Resolution changed from " + lastResolution + " to (" + Screen.width + ", " + Screen.height + ") at " + Time.time); 124 | 125 | lastResolution.x = Screen.width; 126 | lastResolution.y = Screen.height; 127 | 128 | OnResolutionOrOrientationChanged.Invoke(); 129 | } 130 | 131 | private static void SafeAreaChanged() 132 | { 133 | // Debug.Log("Safe Area changed from " + lastSafeArea + " to " + Screen.safeArea.size + " at " + Time.time); 134 | 135 | lastSafeArea = GetSafeArea; 136 | 137 | for (int i = 0; i < helpers.Count; i++) 138 | { 139 | helpers[i].ApplySafeArea(); 140 | } 141 | } 142 | } 143 | } -------------------------------------------------------------------------------- /Runtime/Components/UI/Utils/SafeAreaHelper.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 96920ea271ed3404791eba2b01d92483 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Components/UI/Utils/SizeMatcher.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using UnityEngine.EventSystems; 3 | using UnityEngine.UI; 4 | 5 | namespace BennyKok.RuntimeDebug.Components.UI 6 | { 7 | /// 8 | /// Helper component to match the RectTransfrom's size to the reference RectTransform 9 | /// 10 | [ExecuteAlways] 11 | [AddComponentMenu("")] 12 | public class SizeMatcher : UIBehaviour, ILayoutController 13 | { 14 | public RectTransform target; 15 | public RectTransform reference; 16 | 17 | public bool matchPositionRotation = true; 18 | 19 | private DrivenRectTransformTracker tracker; 20 | 21 | protected override void OnEnable() 22 | { 23 | base.OnEnable(); 24 | SetDirty(); 25 | } 26 | 27 | protected override void OnDisable() 28 | { 29 | tracker.Clear(); 30 | LayoutRebuilder.MarkLayoutForRebuild(target); 31 | base.OnDisable(); 32 | } 33 | 34 | protected void SetDirty() 35 | { 36 | if (!IsActive()) 37 | return; 38 | 39 | LayoutRebuilder.MarkLayoutForRebuild(target); 40 | } 41 | 42 | protected override void OnRectTransformDimensionsChange() 43 | { 44 | SetDirty(); 45 | } 46 | 47 | void ILayoutController.SetLayoutHorizontal() 48 | { 49 | if (reference && target) 50 | { 51 | if (reference.rect.width != target.rect.width) 52 | { 53 | tracker.Add(this, target, DrivenTransformProperties.SizeDeltaX); 54 | target.SetSizeWithCurrentAnchors(RectTransform.Axis.Horizontal, reference.rect.width); 55 | } 56 | 57 | if ((reference.position != target.position || reference.rotation != target.rotation) && matchPositionRotation) 58 | { 59 | tracker.Add(this, target, DrivenTransformProperties.AnchoredPosition); 60 | tracker.Add(this, target, DrivenTransformProperties.Rotation); 61 | target.SetPositionAndRotation(reference.position, reference.rotation); 62 | } 63 | } 64 | } 65 | 66 | void ILayoutController.SetLayoutVertical() 67 | { 68 | if (reference && target) 69 | { 70 | if (reference.rect.height != target.rect.height) 71 | { 72 | tracker.Add(this, target, DrivenTransformProperties.SizeDeltaY); 73 | target.SetSizeWithCurrentAnchors(RectTransform.Axis.Vertical, reference.rect.height); 74 | } 75 | } 76 | } 77 | 78 | #if UNITY_EDITOR 79 | protected override void OnValidate() 80 | { 81 | SetDirty(); 82 | } 83 | #endif 84 | 85 | } 86 | } -------------------------------------------------------------------------------- /Runtime/Components/UI/Utils/SizeMatcher.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8f93121f9cb111841883fd45dfab98de 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Data.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f3738b71d8d551048b70c89b4fea6320 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Runtime/Data/ListItem.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using BennyKok.RuntimeDebug.Actions; 3 | using BennyKok.RuntimeDebug.Components.UI; 4 | 5 | namespace BennyKok.RuntimeDebug.Data 6 | { 7 | public class ListItem 8 | { 9 | public List children; 10 | public BaseDebugAction actionTrigger; 11 | public ListItemView view; 12 | public ListView uiList; 13 | public string fullPath; 14 | public string groupName; 15 | 16 | public bool IsGroup => children != null && children.Count > 0; 17 | public string Name => IsGroup ? groupName : actionTrigger.name; 18 | 19 | public ListItem(BaseDebugAction actionTrigger) 20 | { 21 | this.actionTrigger = actionTrigger; 22 | } 23 | 24 | public ListItem() { } 25 | } 26 | } -------------------------------------------------------------------------------- /Runtime/Data/ListItem.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: dfe133fcb6b9ad54e9e89657ed99522b 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Data/ReflectedActionData.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Reflection; 3 | using BennyKok.RuntimeDebug.Actions; 4 | //using BennyKok.RuntimeDebug.Attributes; 5 | 6 | namespace BennyKok.RuntimeDebug.Data 7 | { 8 | public struct ReflectedActionData 9 | { 10 | public PropertyInfo propertyInfo; 11 | public FieldInfo fieldInfo; 12 | public MethodInfo methodInfo; 13 | public ParameterInfo[] parameterInfos; 14 | public DebugActionAttribute attribute; 15 | 16 | public string GetActionName() 17 | { 18 | if (!string.IsNullOrEmpty(attribute.name)) return attribute.name; 19 | if (fieldInfo != null) return fieldInfo.Name; 20 | if (propertyInfo != null) return propertyInfo.Name; 21 | return methodInfo.Name; 22 | } 23 | 24 | public bool IsButton() 25 | { 26 | return methodInfo != null && (parameterInfos == null || parameterInfos.Length == 0); 27 | } 28 | 29 | public bool IsInput() 30 | { 31 | return methodInfo != null && (parameterInfos != null && parameterInfos.Length > 0); 32 | } 33 | 34 | public string[] GetFlagDisplay() 35 | { 36 | Type type = null; 37 | if (fieldInfo != null) type = fieldInfo.FieldType; 38 | if (propertyInfo != null) type = propertyInfo.PropertyType; 39 | 40 | if (type == typeof(bool)) 41 | return DebugActionFlag.BOOLEAN_VALUES; 42 | 43 | if (type.IsEnum) 44 | return Enum.GetNames(type); 45 | 46 | return null; 47 | } 48 | 49 | public int GetFlagValue(object obj) 50 | { 51 | var value = GetValue(obj); 52 | // if (value != null) return Convert.ToInt32(value); 53 | 54 | // Making sure if the enum has special value, it will still works 55 | var flagIndex = Array.IndexOf(Enum.GetValues(GetTargetType()), value); 56 | return flagIndex; 57 | } 58 | 59 | public void SetFlagValue(object obj, object value) 60 | { 61 | // Making sure if the enum has special value, it will still works 62 | SetValue(obj, Enum.GetValues(GetTargetType()).GetValue(Convert.ToInt32(value))); 63 | } 64 | 65 | public bool GetBoolValue(object obj) 66 | { 67 | var value = GetValue(obj); 68 | if (value != null) return Convert.ToBoolean(value); 69 | return false; 70 | } 71 | 72 | public object GetValue(object obj) 73 | { 74 | if (fieldInfo != null) return fieldInfo.GetValue(obj); 75 | if (propertyInfo != null) return propertyInfo.GetGetMethod(false).Invoke(obj, null); 76 | return null; 77 | } 78 | 79 | private static object Cast(object value, Type castTo) 80 | { 81 | if (castTo.IsEnum) return Enum.ToObject(castTo, value); 82 | return Convert.ChangeType(value, castTo); 83 | } 84 | 85 | public void SetValue(object obj, object value) 86 | { 87 | var castedValue = Cast(value, GetTargetType()); 88 | 89 | if (fieldInfo != null) fieldInfo.SetValue(obj, castedValue); 90 | if (propertyInfo != null) propertyInfo.GetSetMethod(false).Invoke(obj, new object[] { castedValue }); 91 | } 92 | 93 | public Type GetTargetType() 94 | { 95 | Type type = null; 96 | if (fieldInfo != null) type = fieldInfo.FieldType; 97 | if (propertyInfo != null) type = propertyInfo.PropertyType; 98 | 99 | return type; 100 | } 101 | 102 | public string GetTargetName() 103 | { 104 | string type = null; 105 | if (fieldInfo != null) type = fieldInfo.Name; 106 | if (propertyInfo != null) type = propertyInfo.Name; 107 | 108 | return type; 109 | } 110 | 111 | public bool IsEnum() 112 | { 113 | var type = GetTargetType(); 114 | return type != null && type.IsEnum; 115 | } 116 | 117 | public bool IsBoolean() 118 | { 119 | var type = GetTargetType(); 120 | return type != null && type == typeof(bool); 121 | } 122 | 123 | public bool IsInt() 124 | { 125 | var type = GetTargetType(); 126 | return type != null && type == typeof(int); 127 | } 128 | 129 | public bool IsFloat() 130 | { 131 | var type = GetTargetType(); 132 | return type != null && type == typeof(float); 133 | } 134 | 135 | public bool IsString() 136 | { 137 | var type = GetTargetType(); 138 | return type != null && type == typeof(string); 139 | } 140 | } 141 | } -------------------------------------------------------------------------------- /Runtime/Data/ReflectedActionData.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cec145f7353e5b54586a0a41e6f30364 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Data/Settings.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4bcb3b9b853adea48be36b686d2ce19e 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Data/Theme.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using BennyKok.RuntimeDebug.Components.UI; 3 | using BennyKok.RuntimeDebug.Utils; 4 | using UnityEngine; 5 | 6 | namespace BennyKok.RuntimeDebug.Data 7 | { 8 | [Serializable] 9 | public class Theme 10 | { 11 | public string themeName; 12 | public GameObject prefab; 13 | } 14 | 15 | [Serializable] 16 | public class ThemeList : ReorderableList { } 17 | } -------------------------------------------------------------------------------- /Runtime/Data/Theme.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 01cd18c2d046f474b9eef61014a1290f 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Input.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 398adf7a8a178334f9c513f94a7e2461 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Runtime/Input/InputQuery.cs: -------------------------------------------------------------------------------- 1 | using System.Net.Http.Headers; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | 6 | namespace BennyKok.RuntimeDebug.DebugInput 7 | { 8 | /// 9 | /// Data class for holding list of input params definition for use in the 10 | /// 11 | [Serializable] 12 | public class InputQuery 13 | { 14 | /// 15 | /// Create a new instance of 16 | /// 17 | /// A new instace of 18 | public static InputQuery Create() => new InputQuery(); 19 | 20 | public List allParams = new List(); 21 | 22 | public InputQuery SetParams(List allParams) 23 | { 24 | this.allParams = allParams; 25 | return this; 26 | } 27 | 28 | /// 29 | /// Get a string representation of all the params definition 30 | /// 31 | /// Returns a string 32 | public string GetParamsDisplay() 33 | { 34 | return allParams.Aggregate("", (i, j) => i + (i.Length == 0 ? "" : " ") + $"<{j.name}>"); 35 | } 36 | 37 | /// 38 | /// Add a new param to the param list 39 | /// 40 | /// Thrown when there's no default value for optional param 41 | /// Thrown when there's a duplicated param name 42 | public InputQuery Query(string name, ParamType type) 43 | { 44 | return Query(name, type, null, null, null); 45 | } 46 | 47 | /// 48 | /// Add a new param to the param list 49 | /// 50 | /// Thrown when there's no default value for optional param 51 | /// Thrown when there's a duplicated param name 52 | public InputQuery Query(string name, ParamType type, string description) 53 | { 54 | return Query(name, type, description, null, null); 55 | } 56 | 57 | /// 58 | /// Add a new param to the param list 59 | /// 60 | /// Thrown when there's no default value for optional param 61 | /// Thrown when there's a duplicated param name 62 | public InputQuery Query(string name, ParamType type, string description, object defaultValue) 63 | { 64 | return Query(name, type, description, defaultValue, null); 65 | } 66 | 67 | /// 68 | /// Add a new param to the param list 69 | /// 70 | /// Thrown when there's no default value for optional param 71 | /// Thrown when there's a duplicated param name 72 | public InputQuery Query(string name, ParamType type, string description, Func valuePrefillCallback) 73 | { 74 | return Query(name, type, description, null, valuePrefillCallback); 75 | } 76 | 77 | private InputQuery Query(string name, ParamType type, string description, object defaultValue, Func valuePrefillCallback) 78 | { 79 | var param = new Param(name, type, description, defaultValue, valuePrefillCallback); 80 | 81 | if (allParams.Count > 0 && allParams.Last().defaultValue != null) 82 | throw new ParamWithoutDefaultValueException(); 83 | 84 | if (allParams.Count > 0 && allParams.Any(x => x.name == param.name)) 85 | throw new ParamNameDuplicatedException(param.name); 86 | 87 | allParams.Add(param); 88 | return this; 89 | } 90 | } 91 | 92 | public class ParamNameDuplicatedException : Exception 93 | { 94 | public ParamNameDuplicatedException(string name) : 95 | base($"Parameters must have unique name, duplicated name : {name}") 96 | { } 97 | } 98 | 99 | public class ParamWithoutDefaultValueException : Exception 100 | { 101 | public ParamWithoutDefaultValueException() : 102 | base("Ending parameters must have default value if the previous param in the list has default value") 103 | { } 104 | } 105 | } -------------------------------------------------------------------------------- /Runtime/Input/InputQuery.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 8e687543bcbdf114f8f83778ea689e4e 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Input/InputResponse.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | 5 | namespace BennyKok.RuntimeDebug.DebugInput 6 | { 7 | /// 8 | /// Data class to warp around the response returned by the Input debug action 9 | /// 10 | public class InputResponse 11 | { 12 | public Dictionary responses; 13 | 14 | private InputQuery query; 15 | 16 | public bool AllInputValid => parsedResponse != null; 17 | 18 | private List parsedResponse; 19 | 20 | public InputResponse(Dictionary responses, InputQuery query) 21 | { 22 | this.responses = responses; 23 | this.query = query; 24 | 25 | //There maybe error 26 | try 27 | { 28 | parsedResponse = ParseToObjects(); 29 | } 30 | catch (System.Exception) { } 31 | } 32 | 33 | private static object Cast(object obj, Type castTo) 34 | { 35 | return Convert.ChangeType(obj, castTo); 36 | } 37 | 38 | public object[] GetObjectsForReflection(bool fillMissing = true) 39 | { 40 | //if there is some optional input, have to fill them with the default value (Type.Missing) 41 | if (fillMissing && responses.Count < query.allParams.Count) 42 | { 43 | var newResponses = parsedResponse.ToList(); 44 | for (int i = query.allParams.Count - responses.Count; i < query.allParams.Count; i++) 45 | { 46 | var param = query.allParams[i]; 47 | newResponses.Add(Type.Missing); 48 | } 49 | return newResponses.ToArray(); 50 | } 51 | else 52 | { 53 | return parsedResponse.ToArray(); 54 | } 55 | } 56 | 57 | private List ParseToObjects() 58 | { 59 | var reference = this; 60 | 61 | var result = responses.Select, object>(entry => 62 | { 63 | switch (entry.Key.type) 64 | { 65 | case ParamType.Bool: 66 | return reference.GetParamBool(entry); 67 | case ParamType.Int: 68 | return reference.GetParamInt(entry); 69 | case ParamType.Float: 70 | return reference.GetParamFloat(entry); 71 | case ParamType.String: 72 | return reference.GetParamString(entry); 73 | default: 74 | return null; 75 | } 76 | }).ToList(); 77 | 78 | return result; 79 | } 80 | 81 | public KeyValuePair GetParam(string paramName) 82 | { 83 | foreach (var response in responses) 84 | if (response.Key.name == paramName) 85 | return response; 86 | 87 | //This is a optional param 88 | if (query.allParams.Exists(x => x.name == paramName)) 89 | return default(KeyValuePair); 90 | 91 | throw new Exception("Unable to find param: " + paramName); 92 | } 93 | 94 | public string GetParamString(string paramName) => GetParamString(GetParam(paramName)); 95 | 96 | public string GetParamString(KeyValuePair entry) 97 | { 98 | if (entry.Value == null && entry.Key != null) 99 | return (string)entry.Key.defaultValue; 100 | 101 | return entry.Value; 102 | } 103 | 104 | public bool GetParamBool(string paramName) => GetParamBool(GetParam(paramName)); 105 | 106 | public bool GetParamBool(KeyValuePair entry) 107 | { 108 | if (entry.Value == null && entry.Key != null) 109 | return (bool)entry.Key.defaultValue; 110 | 111 | return ParseBool(entry.Value); 112 | } 113 | 114 | public float GetParamFloat(string paramName) => GetParamFloat(GetParam(paramName)); 115 | 116 | public float GetParamFloat(KeyValuePair entry) 117 | { 118 | //Make sure the number is not null 119 | if (!string.IsNullOrEmpty(entry.Value)) 120 | if (float.TryParse(entry.Value, out var value)) 121 | return value; 122 | else 123 | UnityEngine.Debug.LogWarning("Unable to parse the input float"); 124 | 125 | return (float)entry.Key.defaultValue; 126 | } 127 | 128 | public int GetParamInt(string paramName) => GetParamInt(GetParam(paramName)); 129 | 130 | public int GetParamInt(KeyValuePair entry) 131 | { 132 | //Make sure the number is not null 133 | if (!string.IsNullOrEmpty(entry.Value)) 134 | if (int.TryParse(entry.Value, out var value)) 135 | return value; 136 | else 137 | UnityEngine.Debug.LogWarning("Unable to parse the input int"); 138 | 139 | return (int)entry.Key.defaultValue; 140 | } 141 | 142 | private bool ParseBool(string value) 143 | { 144 | if (Boolean.TryParse(value, out var boolValue)) 145 | return boolValue; 146 | 147 | return false; 148 | } 149 | } 150 | } -------------------------------------------------------------------------------- /Runtime/Input/InputResponse.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 840bf6d63d4b64a4992cbfc97be8876b 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Input/Param.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace BennyKok.RuntimeDebug.DebugInput 4 | { 5 | /// 6 | /// Data class for holding input param definition for use in the 7 | /// 8 | [Serializable] 9 | public class Param 10 | { 11 | public string name; 12 | public ParamType type; 13 | public string description; 14 | public object defaultValue; 15 | public Func valuePrefillCallback = null; 16 | 17 | public Param(string name, ParamType type, string description = null, object defaultValue = null, Func valuePrefillCallback = null) 18 | { 19 | this.name = name; 20 | this.type = type; 21 | this.description = description; 22 | this.defaultValue = defaultValue; 23 | this.valuePrefillCallback = valuePrefillCallback; 24 | } 25 | 26 | public static ParamType MapTypeToParamType(Type type) 27 | { 28 | if (type == typeof(bool)) 29 | return ParamType.Bool; 30 | 31 | if (type == typeof(int)) 32 | return ParamType.Int; 33 | 34 | if (type == typeof(float)) 35 | return ParamType.Float; 36 | 37 | if (type == typeof(string)) 38 | return ParamType.String; 39 | 40 | throw new Exception("Unsupported ParamType"); 41 | } 42 | 43 | public static Type MapParamTypeToType(ParamType type) 44 | { 45 | if (type == ParamType.Bool) 46 | return typeof(bool); 47 | 48 | if (type == ParamType.Int) 49 | return typeof(int); 50 | 51 | if (type == ParamType.Float) 52 | return typeof(float); 53 | 54 | if (type == ParamType.String) 55 | return typeof(string); 56 | 57 | throw new Exception("Unsupported Type"); 58 | } 59 | } 60 | } -------------------------------------------------------------------------------- /Runtime/Input/Param.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5db6ae9e066dd7a4d99ab2cd4ca1f04d 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Input/ParamType.cs: -------------------------------------------------------------------------------- 1 | namespace BennyKok.RuntimeDebug.DebugInput 2 | { 3 | public enum ParamType 4 | { 5 | String, 6 | Int, 7 | Float, 8 | Bool 9 | } 10 | } -------------------------------------------------------------------------------- /Runtime/Input/ParamType.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fc172546975b4b34483b98c7a1eb8c5a 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Input/System.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 712a6d1b83eaf7f4d898b8676d21921c 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Runtime/Input/System/InputLayer.cs: -------------------------------------------------------------------------------- 1 | namespace BennyKok.RuntimeDebug.DebugInput 2 | { 3 | public interface InputLayer 4 | { 5 | void Enable(); 6 | void Disable(); 7 | void Update(); 8 | 9 | bool Check(); 10 | 11 | bool IsConfirmAction(); 12 | 13 | bool IsBackAction(); 14 | 15 | bool IsMenuAction(); 16 | 17 | bool IsKeyDown(string keycode); 18 | 19 | 20 | bool IsUpPressing(); 21 | 22 | bool IsUpReleased(); 23 | 24 | bool IsUp(); 25 | 26 | 27 | bool IsDownPressing(); 28 | 29 | bool IsDownReleased(); 30 | 31 | bool IsDown(); 32 | } 33 | } -------------------------------------------------------------------------------- /Runtime/Input/System/InputLayer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ebd8a0ecbb79f494bbafaca08898f044 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Input/System/InputManagerLayer.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | namespace BennyKok.RuntimeDebug.DebugInput 4 | { 5 | 6 | [System.Serializable] 7 | public class InputManagerLayer : InputLayer 8 | { 9 | public KeyCode menuKey = KeyCode.Tab; 10 | 11 | public bool Check() => true; 12 | 13 | public bool IsConfirmAction() 14 | { 15 | return Input.GetKeyDown(KeyCode.Return) || Input.GetKeyDown(KeyCode.RightArrow); 16 | } 17 | 18 | public bool IsBackAction() 19 | { 20 | return Input.GetKeyDown(KeyCode.Backspace) || Input.GetKeyDown(KeyCode.LeftArrow); 21 | } 22 | 23 | public bool IsMenuAction() 24 | { 25 | return Input.GetKeyDown(menuKey); 26 | } 27 | 28 | public bool IsKeyDown(string keycode) 29 | { 30 | return Input.GetKeyDown(keycode); 31 | } 32 | 33 | public bool IsUpPressing() 34 | { 35 | return Input.GetKey(KeyCode.UpArrow); 36 | } 37 | 38 | public bool IsUpReleased() 39 | { 40 | return Input.GetKeyUp(KeyCode.UpArrow); 41 | } 42 | 43 | public bool IsUp() 44 | { 45 | return Input.GetKeyDown(KeyCode.UpArrow); 46 | } 47 | 48 | public bool IsDownPressing() 49 | { 50 | return Input.GetKey(KeyCode.DownArrow); 51 | } 52 | 53 | public bool IsDownReleased() 54 | { 55 | return Input.GetKeyUp(KeyCode.DownArrow); 56 | } 57 | 58 | public bool IsDown() 59 | { 60 | return Input.GetKeyDown(KeyCode.DownArrow); 61 | } 62 | 63 | public void Update() 64 | { 65 | 66 | } 67 | 68 | public void Enable() { } 69 | 70 | public void Disable() { } 71 | } 72 | } -------------------------------------------------------------------------------- /Runtime/Input/System/InputManagerLayer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: a7e0facd16404f341a288e4aff593bf2 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Input/System/InputSystemLayer.cs: -------------------------------------------------------------------------------- 1 | using BennyKok.RuntimeDebug.Utils; 2 | using UnityEngine; 3 | using UnityEngine.EventSystems; 4 | 5 | #if ENABLE_INPUT_SYSTEM 6 | using UnityEngine.InputSystem; 7 | using UnityEngine.InputSystem.Controls; 8 | using UnityEngine.InputSystem.UI; 9 | #endif 10 | 11 | #if ENABLE_INPUT_SYSTEM 12 | namespace BennyKok.RuntimeDebug.DebugInput 13 | { 14 | [System.Serializable] 15 | public class InputSystemLayer : InputLayer 16 | { 17 | private InputSystemUIInputModule inputModule; 18 | public InputAction menuToggleAction; 19 | 20 | [Tooltip("Should we use the action mapping from the InputSystemUIInputModule for navigation? or we use our custom action")] 21 | public bool useInputActionFromInputModule = true; 22 | 23 | // [Visibility("useInputActionFromInputModule", false)] 24 | // public InputActionReference menu; 25 | [Visibility("useInputActionFromInputModule", false, true)] 26 | public InputActionReference confirm; 27 | [Visibility("useInputActionFromInputModule", false, true)] 28 | public InputActionReference cancel; 29 | [Visibility("useInputActionFromInputModule", false, true)] 30 | public InputActionReference navigate; 31 | 32 | 33 | public InputAction MenuAction 34 | { 35 | get => menuToggleAction; 36 | // get => useInputActionFromInputModule ? menuToggleAction : menu.action; 37 | } 38 | 39 | public InputAction ConfirmAction 40 | { 41 | get => useInputActionFromInputModule ? GetInputModule().submit.action : confirm.action; 42 | } 43 | 44 | 45 | public InputAction CancelAction 46 | { 47 | get => useInputActionFromInputModule ? GetInputModule().cancel.action : cancel.action; 48 | } 49 | 50 | public InputAction NavigateAction 51 | { 52 | get => useInputActionFromInputModule ? GetInputModule().move.action : navigate.action; 53 | } 54 | 55 | 56 | public bool Check() 57 | { 58 | if (!useInputActionFromInputModule) 59 | if (confirm == null || cancel == null || navigate == null) 60 | { 61 | Debug.LogWarning("Some input action reference is missing, please check the RDASettings"); 62 | return false; 63 | } 64 | 65 | return useInputActionFromInputModule ? GetInputModule() : true; 66 | } 67 | 68 | private InputSystemUIInputModule GetInputModule() 69 | { 70 | if (inputModule == null && EventSystem.current) 71 | inputModule = EventSystem.current.GetComponent(); 72 | 73 | if (!inputModule) 74 | Debug.LogWarning("InputSystemUIInputModule not found! Unable to check for navigation input."); 75 | return inputModule; 76 | } 77 | 78 | public void Enable() 79 | { 80 | menuToggleAction.Enable(); 81 | 82 | confirm?.action?.Enable(); 83 | cancel?.action?.Enable(); 84 | navigate?.action?.Enable(); 85 | } 86 | 87 | public void Disable() 88 | { 89 | menuToggleAction.Disable(); 90 | 91 | confirm?.action?.Disable(); 92 | cancel?.action?.Disable(); 93 | navigate?.action?.Disable(); 94 | } 95 | 96 | private bool previousConfirmTriggered; 97 | 98 | public void Update() 99 | { 100 | if (previousConfirmTriggered && NavigateAction.ReadValue().sqrMagnitude == 0) 101 | previousConfirmTriggered = false; 102 | } 103 | 104 | public bool IsConfirmAction() 105 | { 106 | var isMove = !previousConfirmTriggered && NavigateAction.ReadValue().x > 0; 107 | if (isMove) previousConfirmTriggered = true; 108 | return ConfirmAction.triggered || isMove; 109 | } 110 | 111 | public bool IsBackAction() 112 | { 113 | return 114 | NavigateAction.ReadValue().x < 0 115 | || 116 | CancelAction.triggered 117 | || 118 | (Keyboard.current != null ? Keyboard.current.backspaceKey.wasPressedThisFrame : false); 119 | } 120 | 121 | public bool IsMenuAction() 122 | { 123 | return MenuAction.triggered; 124 | } 125 | 126 | 127 | //No support for other input device 128 | public bool IsKeyDown(string keycode) 129 | { 130 | if (Keyboard.current == null) return false; 131 | 132 | return ((KeyControl)Keyboard.current[keycode]).wasPressedThisFrame; 133 | } 134 | 135 | #region Navigation Up 136 | public bool IsUpPressing() 137 | { 138 | return NavigateAction.ReadValue().y > 0; 139 | } 140 | 141 | private bool isUpTriggered; 142 | 143 | public bool IsUp() 144 | { 145 | var isUp = !isUpTriggered && NavigateAction.ReadValue().y > 0; 146 | if (isUp) isUpTriggered = true; 147 | return isUp; 148 | } 149 | 150 | public bool IsUpReleased() 151 | { 152 | var upReleased = isUpTriggered && NavigateAction.ReadValue().sqrMagnitude == 0; 153 | if (upReleased) isUpTriggered = false; 154 | return upReleased; 155 | } 156 | #endregion 157 | 158 | #region Navigation Down 159 | public bool IsDownPressing() 160 | { 161 | return NavigateAction.ReadValue().y < 0; 162 | } 163 | 164 | private bool isDownTriggered; 165 | 166 | public bool IsDown() 167 | { 168 | var isUp = !isDownTriggered && NavigateAction.ReadValue().y < 0; 169 | if (isUp) isDownTriggered = true; 170 | return isUp; 171 | } 172 | 173 | public bool IsDownReleased() 174 | { 175 | var downReleased = isDownTriggered && NavigateAction.ReadValue().sqrMagnitude == 0; 176 | if (downReleased) isDownTriggered = false; 177 | return downReleased; 178 | } 179 | #endregion 180 | } 181 | } 182 | #endif -------------------------------------------------------------------------------- /Runtime/Input/System/InputSystemLayer.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 409b1c5933797ab409e14a52a043b6b9 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Keyboard VR.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f55b42776afef404a82837bdd3e959d2 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Runtime/Keyboard VR/VRKey.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using UnityEngine; 3 | using UnityEngine.EventSystems; 4 | using BennyKok.RuntimeDebug.Components.UI; 5 | using TMPro; 6 | using BennyKok.RuntimeDebug.Systems; 7 | 8 | namespace BennyKok.RuntimeDebug.VR 9 | { 10 | public class VRKey : MonoBehaviour, IPointerClickHandler 11 | { 12 | public bool ignoreKey; 13 | public KeyCode keyCode; 14 | 15 | [NonSerialized] public VRKeyboard keyboard; 16 | 17 | public TextMeshProUGUI Label 18 | { 19 | get 20 | { 21 | if (!label) 22 | label = GetComponentInChildren(); 23 | return label; 24 | } 25 | set => label = value; 26 | } 27 | 28 | private void Awake() 29 | { 30 | 31 | } 32 | 33 | private TMPro.TextMeshProUGUI label; 34 | 35 | public void OnPointerClick(PointerEventData eventData) 36 | { 37 | if (ignoreKey) return; 38 | 39 | RuntimeDebugSystem.Instance.SendShortcutAction(GetKeyCodeForShortcut(keyCode)); 40 | 41 | if (DebugUIHandler.currentInputField) 42 | { 43 | string keyCodeString = keyCode.ToString().ToLower(); 44 | 45 | 46 | if (keyCode == KeyCode.CapsLock) 47 | { 48 | keyboard.IsCaps = !keyboard.IsCaps; 49 | return; 50 | } 51 | else if (keyCode == KeyCode.Return) 52 | { 53 | DebugUIHandler.currentInputField.onSubmit.Invoke(DebugUIHandler.currentInputField.text); 54 | return; 55 | } 56 | 57 | Event e = Event.KeyboardEvent(keyCodeString); 58 | 59 | e.character = VRKeyboard.GetKeyCodeForInput(keyCode, keyboard.IsCaps); 60 | e.capsLock = keyboard.IsCaps; 61 | e.keyCode = keyCode; 62 | 63 | DebugUIHandler.currentInputField.ProcessEvent(e); 64 | DebugUIHandler.currentInputField.ForceLabelUpdate(); 65 | if (keyboard.refocusInputFieldOnKeyPress) 66 | DebugUIHandler.currentInputField.ActivateInputField(); 67 | } 68 | // else 69 | // { 70 | // Debug.Log("No input field"); 71 | // } 72 | } 73 | 74 | public static string GetKeyCodeForShortcut(KeyCode keyCode) 75 | { 76 | string keyCodeString = keyCode.ToString().ToLower(); 77 | 78 | switch (keyCode) 79 | { 80 | case var n when (n >= KeyCode.Alpha0 && n <= KeyCode.Alpha9): 81 | keyCodeString = keyCodeString.Substring(5); 82 | break; 83 | } 84 | 85 | return keyCodeString; 86 | } 87 | } 88 | } -------------------------------------------------------------------------------- /Runtime/Keyboard VR/VRKey.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5af599f701be6e3419525e1744515f9f 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Keyboard VR/VRKeyboard.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 307c77faae0d3c34eb0e2da1013f237d 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Systems.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 08045b9573bb00c418c7c6aa006fa2ac 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Runtime/Systems/DebugActionDefaults.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5e26b8bd171776049aff76468643d50b 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Systems/RuntimeDebugSystem.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 93f16c618d3ba37488c2efdf30766c4d 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Utils.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0b373f5d0610ba14b8c3a2c5a8ee2c7c 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Runtime/Utils/AttributeUtils.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f7f7da9481613ea4eb5d13c34243d2e5 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/Utils/Singleton.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | namespace BennyKok.RuntimeDebug.Utils 4 | { 5 | public class Singleton : MonoBehaviour where T : MonoBehaviour 6 | { 7 | private static T m_Instance; 8 | 9 | public static T Instance 10 | { 11 | get 12 | { 13 | return m_Instance; 14 | } 15 | } 16 | 17 | protected virtual void Awake() 18 | { 19 | if (m_Instance) 20 | Destroy(m_Instance.gameObject); 21 | 22 | m_Instance = GetComponent(); 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /Runtime/Utils/Singleton.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b1b2f54caaf509345a6bc83d5bde3869 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Runtime/com.bennykok.runtime-debug-action.asmdef: -------------------------------------------------------------------------------- 1 | { 2 | "name": "com.bennykok.runtime-debug-action", 3 | "references": [ 4 | "GUID:6055be8ebefd69e48b49212b09b47b2f", 5 | "Unity.RenderPipelines.Universal.Runtime", 6 | "GUID:75469ad4d38634e559750d17036d5f7c" 7 | ], 8 | "includePlatforms": [], 9 | "excludePlatforms": [], 10 | "allowUnsafeCode": false, 11 | "overrideReferences": false, 12 | "precompiledReferences": [], 13 | "autoReferenced": true, 14 | "defineConstraints": [], 15 | "versionDefines": [ 16 | { 17 | "name": "com.unity.render-pipelines.universal", 18 | "expression": "", 19 | "define": "RENDER_PIPELINE_URP" 20 | } 21 | ], 22 | "noEngineReferences": false 23 | } -------------------------------------------------------------------------------- /Runtime/com.bennykok.runtime-debug-action.asmdef.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 11f037fcfadef8e468821bb92182ab2d 3 | AssemblyDefinitionImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Settings.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 097a6da05d422204199d45b083e63008 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Settings/Presets.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 9a8c1ab5c08db8145826ee9fc78ca691 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Settings/Presets/Components.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0e7b825ec5f0ffb4f92a2711f743dd03 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Settings/Presets/Components/Flag Toggle.preset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!181963792 &2655988077585873504 4 | Preset: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_Name: Flag Toggle 10 | m_TargetType: 11 | m_NativeTypeID: 114 12 | m_ManagedTypePPtr: {fileID: 11500000, guid: 056712b5f6ad4e948b123da60880d498, 13 | type: 3} 14 | m_ManagedTypeFallback: 15 | m_Properties: 16 | - target: {fileID: 0} 17 | propertyPath: m_Enabled 18 | value: 1 19 | objectReference: {fileID: 0} 20 | - target: {fileID: 0} 21 | propertyPath: m_EditorHideFlags 22 | value: 0 23 | objectReference: {fileID: 0} 24 | - target: {fileID: 0} 25 | propertyPath: m_EditorClassIdentifier 26 | value: 27 | objectReference: {fileID: 0} 28 | - target: {fileID: 0} 29 | propertyPath: action.group 30 | value: 31 | objectReference: {fileID: 0} 32 | - target: {fileID: 0} 33 | propertyPath: action.name 34 | value: 35 | objectReference: {fileID: 0} 36 | - target: {fileID: 0} 37 | propertyPath: action.id 38 | value: 39 | objectReference: {fileID: 0} 40 | - target: {fileID: 0} 41 | propertyPath: action.description 42 | value: 43 | objectReference: {fileID: 0} 44 | - target: {fileID: 0} 45 | propertyPath: action.shortcutKey 46 | value: 47 | objectReference: {fileID: 0} 48 | - target: {fileID: 0} 49 | propertyPath: action.closePanelAfterTrigger 50 | value: 0 51 | objectReference: {fileID: 0} 52 | - target: {fileID: 0} 53 | propertyPath: action.actionColor.r 54 | value: 0.5 55 | objectReference: {fileID: 0} 56 | - target: {fileID: 0} 57 | propertyPath: action.actionColor.g 58 | value: 0.5 59 | objectReference: {fileID: 0} 60 | - target: {fileID: 0} 61 | propertyPath: action.actionColor.b 62 | value: 0.5 63 | objectReference: {fileID: 0} 64 | - target: {fileID: 0} 65 | propertyPath: action.actionColor.a 66 | value: 1 67 | objectReference: {fileID: 0} 68 | - target: {fileID: 0} 69 | propertyPath: action.unityAction.m_PersistentCalls.m_Calls.Array.size 70 | value: 0 71 | objectReference: {fileID: 0} 72 | - target: {fileID: 0} 73 | propertyPath: action.isPersistence 74 | value: 0 75 | objectReference: {fileID: 0} 76 | - target: {fileID: 0} 77 | propertyPath: action.flagKey 78 | value: 79 | objectReference: {fileID: 0} 80 | - target: {fileID: 0} 81 | propertyPath: action.flagValue 82 | value: 0 83 | objectReference: {fileID: 0} 84 | - target: {fileID: 0} 85 | propertyPath: action.flagValues.Array.size 86 | value: 2 87 | objectReference: {fileID: 0} 88 | - target: {fileID: 0} 89 | propertyPath: action.flagValues.Array.data[0] 90 | value: Off 91 | objectReference: {fileID: 0} 92 | - target: {fileID: 0} 93 | propertyPath: action.flagValues.Array.data[1] 94 | value: On 95 | objectReference: {fileID: 0} 96 | - target: {fileID: 0} 97 | propertyPath: flagActions.Array.size 98 | value: 2 99 | objectReference: {fileID: 0} 100 | - target: {fileID: 0} 101 | propertyPath: flagActions.Array.data[0].m_PersistentCalls.m_Calls.Array.size 102 | value: 0 103 | objectReference: {fileID: 0} 104 | - target: {fileID: 0} 105 | propertyPath: flagActions.Array.data[1].m_PersistentCalls.m_Calls.Array.size 106 | value: 0 107 | objectReference: {fileID: 0} 108 | m_ExcludedProperties: [] 109 | -------------------------------------------------------------------------------- /Settings/Presets/Components/Flag Toggle.preset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d8e4b8328d224e541aedca8195c05d63 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 2655988077585873504 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Settings/Presets/RDASettings Default.preset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 181563b44f132ea41a3ec75de7b93675 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Settings/Presets/RDASettings InputSystem.preset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 41a5c27f4d81b82478a1e41f733f6203 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Settings/RDASettings Default [DO NOT EDIT].asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 11500000, guid: 4bcb3b9b853adea48be36b686d2ce19e, type: 3} 13 | m_Name: RDASettings Default [DO NOT EDIT] 14 | m_EditorClassIdentifier: 15 | isDefaultAndDontEdit: 1 16 | enableMode: 0 17 | menuPauseMode: 0 18 | themes: 19 | values: 20 | - themeName: Default 21 | prefab: {fileID: 2559394076283934732, guid: 58ec4a5fd80f0854cbc79850c507b61b, type: 3} 22 | - themeName: Default Spaced 23 | prefab: {fileID: 2975541835506345482, guid: 8a2ba8b7b1be39c4ba48f467cf224176, type: 3} 24 | - themeName: Compact 25 | prefab: {fileID: 7209576613531672539, guid: 1e73a1be2fd063646ac75c76b6589e89, type: 3} 26 | - themeName: Compact Bottom 27 | prefab: {fileID: 8765543467267073045, guid: 858e738f85e0d994abcc5c73dfc6916e, type: 3} 28 | actionDisplayFadeInTime: 0.3 29 | actionDisplayFadeTime: 0.5 30 | useEmbeddedEventSystem: 1 31 | eventSystemPrefab: {fileID: 4391802490427358298, guid: fad178ee18eb2a0409ceda6610266cde, type: 3} 32 | enableInputNavigation: 1 33 | useInputSystemLayer: 0 34 | inputLayer: 35 | menuKey: 9 36 | inputSystemLayer: 37 | menuToggleAction: 38 | m_Name: Menu Toggle 39 | m_Type: 0 40 | m_ExpectedControlType: 41 | m_Id: 0106842d-8390-40f8-8c09-30e1e3546fd2 42 | m_Processors: 43 | m_Interactions: 44 | m_SingletonActionBindings: 45 | - m_Name: 46 | m_Id: 307fbc08-6216-4028-8a9a-683f39342543 47 | m_Path: /tab 48 | m_Interactions: 49 | m_Processors: 50 | m_Groups: 51 | m_Action: Menu Toggle 52 | m_Flags: 0 53 | - m_Name: Xbox 54 | m_Id: 1c94a1c4-9910-4a67-a997-65c4e527992b 55 | m_Path: ButtonWithOneModifier 56 | m_Interactions: 57 | m_Processors: 58 | m_Groups: 59 | m_Action: Menu Toggle 60 | m_Flags: 4 61 | - m_Name: modifier 62 | m_Id: 661cc122-e66b-4023-8bf9-d16d4b4a1291 63 | m_Path: /select 64 | m_Interactions: 65 | m_Processors: 66 | m_Groups: 67 | m_Action: Menu Toggle 68 | m_Flags: 8 69 | - m_Name: button 70 | m_Id: 77c5d750-a309-4281-bcae-9e425dd65d6c 71 | m_Path: /start 72 | m_Interactions: 73 | m_Processors: 74 | m_Groups: 75 | m_Action: Menu Toggle 76 | m_Flags: 8 77 | useInputActionFromInputModule: 1 78 | confirm: {fileID: 0} 79 | cancel: {fileID: 0} 80 | navigate: {fileID: 0} 81 | touchToggleMode: 0 82 | hideCursorOnStart: 0 83 | showTooltipOnKeyboardNavigation: 1 84 | showTooltipOnPointerHover: 1 85 | pointerHoverIgnoreMobile: 1 86 | selectionColorHighlight: 1 87 | selectionUnderlineHighlight: 1 88 | disableLogger: 0 89 | loggerMaxLine: 100 90 | addApplicationOptions: 1 91 | addQualityOptions: 1 92 | addSceneOptions: 1 93 | addThemeOptions: 1 94 | addLoggerOptions: 1 95 | -------------------------------------------------------------------------------- /Settings/RDASettings Default [DO NOT EDIT].asset.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cae61def01c611543beb3d6507df6e1e 3 | NativeFormatImporter: 4 | externalObjects: {} 5 | mainObjectFileID: 0 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Sprites.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 34ee18af4faabf24bb42f5b66a9aac15 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Sprites/arrow-backward-outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BennyKok/unity-runtime-debug-action/6b679eb58876ebddcfebb5d6e6a6d87bfca45f3d/Sprites/arrow-backward-outline.png -------------------------------------------------------------------------------- /Sprites/arrow-backward-outline.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2969fde076c227b40b278dced84c46a3 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: -1 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: -1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | applyGammaDecoding: 0 61 | platformSettings: 62 | - serializedVersion: 3 63 | buildTarget: DefaultTexturePlatform 64 | maxTextureSize: 128 65 | resizeAlgorithm: 0 66 | textureFormat: -1 67 | textureCompression: 1 68 | compressionQuality: 50 69 | crunchedCompression: 0 70 | allowsAlphaSplitting: 0 71 | overridden: 0 72 | androidETC2FallbackOverride: 0 73 | forceMaximumCompressionQuality_BC6H_BC7: 0 74 | - serializedVersion: 3 75 | buildTarget: Standalone 76 | maxTextureSize: 128 77 | resizeAlgorithm: 0 78 | textureFormat: -1 79 | textureCompression: 1 80 | compressionQuality: 50 81 | crunchedCompression: 0 82 | allowsAlphaSplitting: 0 83 | overridden: 0 84 | androidETC2FallbackOverride: 0 85 | forceMaximumCompressionQuality_BC6H_BC7: 0 86 | spriteSheet: 87 | serializedVersion: 2 88 | sprites: [] 89 | outline: [] 90 | physicsShape: [] 91 | bones: [] 92 | spriteID: 5e97eb03825dee720800000000000000 93 | internalID: 0 94 | vertices: [] 95 | indices: 96 | edges: [] 97 | weights: [] 98 | secondaryTextures: [] 99 | spritePackingTag: 100 | pSDRemoveMatte: 0 101 | pSDShowRemoveMatteOption: 0 102 | userData: 103 | assetBundleName: 104 | assetBundleVariant: 105 | -------------------------------------------------------------------------------- /Sprites/arrow-forward-outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BennyKok/unity-runtime-debug-action/6b679eb58876ebddcfebb5d6e6a6d87bfca45f3d/Sprites/arrow-forward-outline.png -------------------------------------------------------------------------------- /Sprites/arrow-forward-outline.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d63f21d01bbdc6044bfa80e2f9d39e17 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | grayScaleToAlpha: 0 28 | generateCubemap: 6 29 | cubemapConvolution: 0 30 | seamlessCubemap: 0 31 | textureFormat: 1 32 | maxTextureSize: 2048 33 | textureSettings: 34 | serializedVersion: 2 35 | filterMode: -1 36 | aniso: 2 37 | mipBias: -100 38 | wrapU: 1 39 | wrapV: 1 40 | wrapW: 0 41 | nPOTScale: 0 42 | lightmap: 0 43 | compressionQuality: 50 44 | spriteMode: 1 45 | spriteExtrude: 1 46 | spriteMeshType: 1 47 | alignment: 0 48 | spritePivot: {x: 0.5, y: 0.5} 49 | spritePixelsToUnits: 100 50 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 51 | spriteGenerateFallbackPhysicsShape: 1 52 | alphaUsage: 1 53 | alphaIsTransparency: 1 54 | spriteTessellationDetail: -1 55 | textureType: 8 56 | textureShape: 1 57 | singleChannelComponent: 0 58 | maxTextureSizeSet: 0 59 | compressionQualitySet: 0 60 | textureFormatSet: 0 61 | ignorePngGamma: 0 62 | applyGammaDecoding: 0 63 | platformSettings: 64 | - serializedVersion: 3 65 | buildTarget: DefaultTexturePlatform 66 | maxTextureSize: 8192 67 | resizeAlgorithm: 0 68 | textureFormat: -1 69 | textureCompression: 1 70 | compressionQuality: 50 71 | crunchedCompression: 0 72 | allowsAlphaSplitting: 0 73 | overridden: 0 74 | androidETC2FallbackOverride: 0 75 | forceMaximumCompressionQuality_BC6H_BC7: 0 76 | - serializedVersion: 3 77 | buildTarget: Standalone 78 | maxTextureSize: 8192 79 | resizeAlgorithm: 0 80 | textureFormat: -1 81 | textureCompression: 1 82 | compressionQuality: 50 83 | crunchedCompression: 0 84 | allowsAlphaSplitting: 0 85 | overridden: 0 86 | androidETC2FallbackOverride: 0 87 | forceMaximumCompressionQuality_BC6H_BC7: 0 88 | - serializedVersion: 3 89 | buildTarget: iPhone 90 | maxTextureSize: 8192 91 | resizeAlgorithm: 0 92 | textureFormat: -1 93 | textureCompression: 1 94 | compressionQuality: 50 95 | crunchedCompression: 0 96 | allowsAlphaSplitting: 0 97 | overridden: 0 98 | androidETC2FallbackOverride: 0 99 | forceMaximumCompressionQuality_BC6H_BC7: 0 100 | - serializedVersion: 3 101 | buildTarget: Android 102 | maxTextureSize: 8192 103 | resizeAlgorithm: 0 104 | textureFormat: -1 105 | textureCompression: 1 106 | compressionQuality: 50 107 | crunchedCompression: 0 108 | allowsAlphaSplitting: 0 109 | overridden: 0 110 | androidETC2FallbackOverride: 0 111 | forceMaximumCompressionQuality_BC6H_BC7: 0 112 | - serializedVersion: 3 113 | buildTarget: Windows Store Apps 114 | maxTextureSize: 8192 115 | resizeAlgorithm: 0 116 | textureFormat: -1 117 | textureCompression: 1 118 | compressionQuality: 50 119 | crunchedCompression: 0 120 | allowsAlphaSplitting: 0 121 | overridden: 0 122 | androidETC2FallbackOverride: 0 123 | forceMaximumCompressionQuality_BC6H_BC7: 0 124 | spriteSheet: 125 | serializedVersion: 2 126 | sprites: [] 127 | outline: [] 128 | physicsShape: [] 129 | bones: [] 130 | spriteID: 5e97eb03825dee720800000000000000 131 | internalID: 0 132 | vertices: [] 133 | indices: 134 | edges: [] 135 | weights: [] 136 | secondaryTextures: [] 137 | spritePackingTag: 138 | pSDRemoveMatte: 0 139 | pSDShowRemoveMatteOption: 0 140 | userData: 141 | assetBundleName: 142 | assetBundleVariant: 143 | -------------------------------------------------------------------------------- /Sprites/arrow-left-outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BennyKok/unity-runtime-debug-action/6b679eb58876ebddcfebb5d6e6a6d87bfca45f3d/Sprites/arrow-left-outline.png -------------------------------------------------------------------------------- /Sprites/arrow-left-outline.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 381c0542c39f27c40bfe93a3d07af34d 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: 2 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: 0 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | applyGammaDecoding: 0 61 | platformSettings: 62 | - serializedVersion: 3 63 | buildTarget: DefaultTexturePlatform 64 | maxTextureSize: 128 65 | resizeAlgorithm: 0 66 | textureFormat: -1 67 | textureCompression: 1 68 | compressionQuality: 50 69 | crunchedCompression: 0 70 | allowsAlphaSplitting: 0 71 | overridden: 0 72 | androidETC2FallbackOverride: 0 73 | forceMaximumCompressionQuality_BC6H_BC7: 0 74 | - serializedVersion: 3 75 | buildTarget: Standalone 76 | maxTextureSize: 128 77 | resizeAlgorithm: 0 78 | textureFormat: -1 79 | textureCompression: 1 80 | compressionQuality: 50 81 | crunchedCompression: 0 82 | allowsAlphaSplitting: 0 83 | overridden: 0 84 | androidETC2FallbackOverride: 0 85 | forceMaximumCompressionQuality_BC6H_BC7: 0 86 | - serializedVersion: 3 87 | buildTarget: iPhone 88 | maxTextureSize: 8192 89 | resizeAlgorithm: 0 90 | textureFormat: -1 91 | textureCompression: 1 92 | compressionQuality: 50 93 | crunchedCompression: 0 94 | allowsAlphaSplitting: 0 95 | overridden: 0 96 | androidETC2FallbackOverride: 0 97 | forceMaximumCompressionQuality_BC6H_BC7: 0 98 | - serializedVersion: 3 99 | buildTarget: Android 100 | maxTextureSize: 8192 101 | resizeAlgorithm: 0 102 | textureFormat: -1 103 | textureCompression: 1 104 | compressionQuality: 50 105 | crunchedCompression: 0 106 | allowsAlphaSplitting: 0 107 | overridden: 0 108 | androidETC2FallbackOverride: 0 109 | forceMaximumCompressionQuality_BC6H_BC7: 0 110 | - serializedVersion: 3 111 | buildTarget: Windows Store Apps 112 | maxTextureSize: 8192 113 | resizeAlgorithm: 0 114 | textureFormat: -1 115 | textureCompression: 1 116 | compressionQuality: 50 117 | crunchedCompression: 0 118 | allowsAlphaSplitting: 0 119 | overridden: 0 120 | androidETC2FallbackOverride: 0 121 | forceMaximumCompressionQuality_BC6H_BC7: 0 122 | spriteSheet: 123 | serializedVersion: 2 124 | sprites: [] 125 | outline: [] 126 | physicsShape: [] 127 | bones: [] 128 | spriteID: 5e97eb03825dee720800000000000000 129 | internalID: 0 130 | vertices: [] 131 | indices: 132 | edges: [] 133 | weights: [] 134 | secondaryTextures: [] 135 | spritePackingTag: 136 | pSDRemoveMatte: 0 137 | pSDShowRemoveMatteOption: 0 138 | userData: 139 | assetBundleName: 140 | assetBundleVariant: 141 | -------------------------------------------------------------------------------- /Sprites/arrow-right-outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BennyKok/unity-runtime-debug-action/6b679eb58876ebddcfebb5d6e6a6d87bfca45f3d/Sprites/arrow-right-outline.png -------------------------------------------------------------------------------- /Sprites/arrow-right-outline.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2955bf7a9a06f8f4ba73e2e8f7ce4baf 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: 2 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: 0 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | applyGammaDecoding: 0 61 | platformSettings: 62 | - serializedVersion: 3 63 | buildTarget: DefaultTexturePlatform 64 | maxTextureSize: 128 65 | resizeAlgorithm: 0 66 | textureFormat: -1 67 | textureCompression: 1 68 | compressionQuality: 50 69 | crunchedCompression: 0 70 | allowsAlphaSplitting: 0 71 | overridden: 0 72 | androidETC2FallbackOverride: 0 73 | forceMaximumCompressionQuality_BC6H_BC7: 0 74 | - serializedVersion: 3 75 | buildTarget: Standalone 76 | maxTextureSize: 128 77 | resizeAlgorithm: 0 78 | textureFormat: -1 79 | textureCompression: 1 80 | compressionQuality: 50 81 | crunchedCompression: 0 82 | allowsAlphaSplitting: 0 83 | overridden: 0 84 | androidETC2FallbackOverride: 0 85 | forceMaximumCompressionQuality_BC6H_BC7: 0 86 | - serializedVersion: 3 87 | buildTarget: iPhone 88 | maxTextureSize: 8192 89 | resizeAlgorithm: 0 90 | textureFormat: -1 91 | textureCompression: 1 92 | compressionQuality: 50 93 | crunchedCompression: 0 94 | allowsAlphaSplitting: 0 95 | overridden: 0 96 | androidETC2FallbackOverride: 0 97 | forceMaximumCompressionQuality_BC6H_BC7: 0 98 | - serializedVersion: 3 99 | buildTarget: Android 100 | maxTextureSize: 8192 101 | resizeAlgorithm: 0 102 | textureFormat: -1 103 | textureCompression: 1 104 | compressionQuality: 50 105 | crunchedCompression: 0 106 | allowsAlphaSplitting: 0 107 | overridden: 0 108 | androidETC2FallbackOverride: 0 109 | forceMaximumCompressionQuality_BC6H_BC7: 0 110 | - serializedVersion: 3 111 | buildTarget: Windows Store Apps 112 | maxTextureSize: 8192 113 | resizeAlgorithm: 0 114 | textureFormat: -1 115 | textureCompression: 1 116 | compressionQuality: 50 117 | crunchedCompression: 0 118 | allowsAlphaSplitting: 0 119 | overridden: 0 120 | androidETC2FallbackOverride: 0 121 | forceMaximumCompressionQuality_BC6H_BC7: 0 122 | spriteSheet: 123 | serializedVersion: 2 124 | sprites: [] 125 | outline: [] 126 | physicsShape: [] 127 | bones: [] 128 | spriteID: 5e97eb03825dee720800000000000000 129 | internalID: 0 130 | vertices: [] 131 | indices: 132 | edges: [] 133 | weights: [] 134 | secondaryTextures: [] 135 | spritePackingTag: 136 | pSDRemoveMatte: 0 137 | pSDShowRemoveMatteOption: 0 138 | userData: 139 | assetBundleName: 140 | assetBundleVariant: 141 | -------------------------------------------------------------------------------- /Sprites/close-outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BennyKok/unity-runtime-debug-action/6b679eb58876ebddcfebb5d6e6a6d87bfca45f3d/Sprites/close-outline.png -------------------------------------------------------------------------------- /Sprites/close-outline.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 11279e87d1cf41f4bb6d1999bca3ac0b 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: -1 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: -1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | applyGammaDecoding: 0 61 | platformSettings: 62 | - serializedVersion: 3 63 | buildTarget: DefaultTexturePlatform 64 | maxTextureSize: 128 65 | resizeAlgorithm: 0 66 | textureFormat: -1 67 | textureCompression: 1 68 | compressionQuality: 50 69 | crunchedCompression: 0 70 | allowsAlphaSplitting: 0 71 | overridden: 0 72 | androidETC2FallbackOverride: 0 73 | forceMaximumCompressionQuality_BC6H_BC7: 0 74 | - serializedVersion: 3 75 | buildTarget: Standalone 76 | maxTextureSize: 128 77 | resizeAlgorithm: 0 78 | textureFormat: -1 79 | textureCompression: 1 80 | compressionQuality: 50 81 | crunchedCompression: 0 82 | allowsAlphaSplitting: 0 83 | overridden: 0 84 | androidETC2FallbackOverride: 0 85 | forceMaximumCompressionQuality_BC6H_BC7: 0 86 | spriteSheet: 87 | serializedVersion: 2 88 | sprites: [] 89 | outline: [] 90 | physicsShape: [] 91 | bones: [] 92 | spriteID: 5e97eb03825dee720800000000000000 93 | internalID: 0 94 | vertices: [] 95 | indices: 96 | edges: [] 97 | weights: [] 98 | secondaryTextures: [] 99 | spritePackingTag: 100 | pSDRemoveMatte: 0 101 | pSDShowRemoveMatteOption: 0 102 | userData: 103 | assetBundleName: 104 | assetBundleVariant: 105 | -------------------------------------------------------------------------------- /Sprites/collapse-outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BennyKok/unity-runtime-debug-action/6b679eb58876ebddcfebb5d6e6a6d87bfca45f3d/Sprites/collapse-outline.png -------------------------------------------------------------------------------- /Sprites/collapse-outline.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 368eae34dd4466949b06d5086d5cfdd0 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: -1 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: -1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | applyGammaDecoding: 0 61 | platformSettings: 62 | - serializedVersion: 3 63 | buildTarget: DefaultTexturePlatform 64 | maxTextureSize: 2048 65 | resizeAlgorithm: 0 66 | textureFormat: -1 67 | textureCompression: 1 68 | compressionQuality: 50 69 | crunchedCompression: 0 70 | allowsAlphaSplitting: 0 71 | overridden: 0 72 | androidETC2FallbackOverride: 0 73 | forceMaximumCompressionQuality_BC6H_BC7: 0 74 | - serializedVersion: 3 75 | buildTarget: Standalone 76 | maxTextureSize: 2048 77 | resizeAlgorithm: 0 78 | textureFormat: -1 79 | textureCompression: 1 80 | compressionQuality: 50 81 | crunchedCompression: 0 82 | allowsAlphaSplitting: 0 83 | overridden: 0 84 | androidETC2FallbackOverride: 0 85 | forceMaximumCompressionQuality_BC6H_BC7: 0 86 | spriteSheet: 87 | serializedVersion: 2 88 | sprites: [] 89 | outline: [] 90 | physicsShape: [] 91 | bones: [] 92 | spriteID: 5e97eb03825dee720800000000000000 93 | internalID: 0 94 | vertices: [] 95 | indices: 96 | edges: [] 97 | weights: [] 98 | secondaryTextures: [] 99 | spritePackingTag: 100 | pSDRemoveMatte: 0 101 | pSDShowRemoveMatteOption: 0 102 | userData: 103 | assetBundleName: 104 | assetBundleVariant: 105 | -------------------------------------------------------------------------------- /Sprites/outline_folder_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BennyKok/unity-runtime-debug-action/6b679eb58876ebddcfebb5d6e6a6d87bfca45f3d/Sprites/outline_folder_white_48dp.png -------------------------------------------------------------------------------- /Sprites/outline_folder_white_48dp.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f32eebd1fa932754c8d9f70aeaf59c7e 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: 2 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: 0 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | applyGammaDecoding: 0 61 | platformSettings: 62 | - serializedVersion: 3 63 | buildTarget: DefaultTexturePlatform 64 | maxTextureSize: 128 65 | resizeAlgorithm: 0 66 | textureFormat: -1 67 | textureCompression: 1 68 | compressionQuality: 50 69 | crunchedCompression: 0 70 | allowsAlphaSplitting: 0 71 | overridden: 0 72 | androidETC2FallbackOverride: 0 73 | forceMaximumCompressionQuality_BC6H_BC7: 0 74 | - serializedVersion: 3 75 | buildTarget: Standalone 76 | maxTextureSize: 128 77 | resizeAlgorithm: 0 78 | textureFormat: -1 79 | textureCompression: 1 80 | compressionQuality: 50 81 | crunchedCompression: 0 82 | allowsAlphaSplitting: 0 83 | overridden: 0 84 | androidETC2FallbackOverride: 0 85 | forceMaximumCompressionQuality_BC6H_BC7: 0 86 | - serializedVersion: 3 87 | buildTarget: iPhone 88 | maxTextureSize: 8192 89 | resizeAlgorithm: 0 90 | textureFormat: -1 91 | textureCompression: 1 92 | compressionQuality: 50 93 | crunchedCompression: 0 94 | allowsAlphaSplitting: 0 95 | overridden: 0 96 | androidETC2FallbackOverride: 0 97 | forceMaximumCompressionQuality_BC6H_BC7: 0 98 | - serializedVersion: 3 99 | buildTarget: Android 100 | maxTextureSize: 8192 101 | resizeAlgorithm: 0 102 | textureFormat: -1 103 | textureCompression: 1 104 | compressionQuality: 50 105 | crunchedCompression: 0 106 | allowsAlphaSplitting: 0 107 | overridden: 0 108 | androidETC2FallbackOverride: 0 109 | forceMaximumCompressionQuality_BC6H_BC7: 0 110 | - serializedVersion: 3 111 | buildTarget: Windows Store Apps 112 | maxTextureSize: 8192 113 | resizeAlgorithm: 0 114 | textureFormat: -1 115 | textureCompression: 1 116 | compressionQuality: 50 117 | crunchedCompression: 0 118 | allowsAlphaSplitting: 0 119 | overridden: 0 120 | androidETC2FallbackOverride: 0 121 | forceMaximumCompressionQuality_BC6H_BC7: 0 122 | spriteSheet: 123 | serializedVersion: 2 124 | sprites: [] 125 | outline: [] 126 | physicsShape: [] 127 | bones: [] 128 | spriteID: 5e97eb03825dee720800000000000000 129 | internalID: 0 130 | vertices: [] 131 | indices: 132 | edges: [] 133 | weights: [] 134 | secondaryTextures: [] 135 | spritePackingTag: 136 | pSDRemoveMatte: 0 137 | pSDShowRemoveMatteOption: 0 138 | userData: 139 | assetBundleName: 140 | assetBundleVariant: 141 | -------------------------------------------------------------------------------- /Sprites/round_folder_white_48dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BennyKok/unity-runtime-debug-action/6b679eb58876ebddcfebb5d6e6a6d87bfca45f3d/Sprites/round_folder_white_48dp.png -------------------------------------------------------------------------------- /Sprites/round_folder_white_48dp.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 270d9f8390764a34fbad539d4708c532 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 0 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: 2 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: 0 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | applyGammaDecoding: 0 61 | platformSettings: 62 | - serializedVersion: 3 63 | buildTarget: DefaultTexturePlatform 64 | maxTextureSize: 128 65 | resizeAlgorithm: 0 66 | textureFormat: -1 67 | textureCompression: 1 68 | compressionQuality: 50 69 | crunchedCompression: 0 70 | allowsAlphaSplitting: 0 71 | overridden: 0 72 | androidETC2FallbackOverride: 0 73 | forceMaximumCompressionQuality_BC6H_BC7: 0 74 | - serializedVersion: 3 75 | buildTarget: Standalone 76 | maxTextureSize: 128 77 | resizeAlgorithm: 0 78 | textureFormat: -1 79 | textureCompression: 1 80 | compressionQuality: 50 81 | crunchedCompression: 0 82 | allowsAlphaSplitting: 0 83 | overridden: 0 84 | androidETC2FallbackOverride: 0 85 | forceMaximumCompressionQuality_BC6H_BC7: 0 86 | - serializedVersion: 3 87 | buildTarget: iPhone 88 | maxTextureSize: 8192 89 | resizeAlgorithm: 0 90 | textureFormat: -1 91 | textureCompression: 1 92 | compressionQuality: 50 93 | crunchedCompression: 0 94 | allowsAlphaSplitting: 0 95 | overridden: 0 96 | androidETC2FallbackOverride: 0 97 | forceMaximumCompressionQuality_BC6H_BC7: 0 98 | - serializedVersion: 3 99 | buildTarget: Android 100 | maxTextureSize: 8192 101 | resizeAlgorithm: 0 102 | textureFormat: -1 103 | textureCompression: 1 104 | compressionQuality: 50 105 | crunchedCompression: 0 106 | allowsAlphaSplitting: 0 107 | overridden: 0 108 | androidETC2FallbackOverride: 0 109 | forceMaximumCompressionQuality_BC6H_BC7: 0 110 | - serializedVersion: 3 111 | buildTarget: Windows Store Apps 112 | maxTextureSize: 8192 113 | resizeAlgorithm: 0 114 | textureFormat: -1 115 | textureCompression: 1 116 | compressionQuality: 50 117 | crunchedCompression: 0 118 | allowsAlphaSplitting: 0 119 | overridden: 0 120 | androidETC2FallbackOverride: 0 121 | forceMaximumCompressionQuality_BC6H_BC7: 0 122 | spriteSheet: 123 | serializedVersion: 2 124 | sprites: [] 125 | outline: [] 126 | physicsShape: [] 127 | bones: [] 128 | spriteID: 5e97eb03825dee720800000000000000 129 | internalID: 0 130 | vertices: [] 131 | indices: 132 | edges: [] 133 | weights: [] 134 | secondaryTextures: [] 135 | spritePackingTag: 136 | pSDRemoveMatte: 0 137 | pSDShowRemoveMatteOption: 0 138 | userData: 139 | assetBundleName: 140 | assetBundleVariant: 141 | -------------------------------------------------------------------------------- /Sprites/search-outline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BennyKok/unity-runtime-debug-action/6b679eb58876ebddcfebb5d6e6a6d87bfca45f3d/Sprites/search-outline.png -------------------------------------------------------------------------------- /Sprites/search-outline.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cc1ad0d10b7b17a4aa4953f61e5284b7 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: 2 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: 0 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | applyGammaDecoding: 0 61 | platformSettings: 62 | - serializedVersion: 3 63 | buildTarget: DefaultTexturePlatform 64 | maxTextureSize: 128 65 | resizeAlgorithm: 0 66 | textureFormat: -1 67 | textureCompression: 1 68 | compressionQuality: 50 69 | crunchedCompression: 0 70 | allowsAlphaSplitting: 0 71 | overridden: 0 72 | androidETC2FallbackOverride: 0 73 | forceMaximumCompressionQuality_BC6H_BC7: 0 74 | - serializedVersion: 3 75 | buildTarget: Standalone 76 | maxTextureSize: 128 77 | resizeAlgorithm: 0 78 | textureFormat: -1 79 | textureCompression: 1 80 | compressionQuality: 50 81 | crunchedCompression: 0 82 | allowsAlphaSplitting: 0 83 | overridden: 0 84 | androidETC2FallbackOverride: 0 85 | forceMaximumCompressionQuality_BC6H_BC7: 0 86 | - serializedVersion: 3 87 | buildTarget: iPhone 88 | maxTextureSize: 8192 89 | resizeAlgorithm: 0 90 | textureFormat: -1 91 | textureCompression: 1 92 | compressionQuality: 50 93 | crunchedCompression: 0 94 | allowsAlphaSplitting: 0 95 | overridden: 0 96 | androidETC2FallbackOverride: 0 97 | forceMaximumCompressionQuality_BC6H_BC7: 0 98 | - serializedVersion: 3 99 | buildTarget: Android 100 | maxTextureSize: 8192 101 | resizeAlgorithm: 0 102 | textureFormat: -1 103 | textureCompression: 1 104 | compressionQuality: 50 105 | crunchedCompression: 0 106 | allowsAlphaSplitting: 0 107 | overridden: 0 108 | androidETC2FallbackOverride: 0 109 | forceMaximumCompressionQuality_BC6H_BC7: 0 110 | - serializedVersion: 3 111 | buildTarget: Windows Store Apps 112 | maxTextureSize: 8192 113 | resizeAlgorithm: 0 114 | textureFormat: -1 115 | textureCompression: 1 116 | compressionQuality: 50 117 | crunchedCompression: 0 118 | allowsAlphaSplitting: 0 119 | overridden: 0 120 | androidETC2FallbackOverride: 0 121 | forceMaximumCompressionQuality_BC6H_BC7: 0 122 | spriteSheet: 123 | serializedVersion: 2 124 | sprites: [] 125 | outline: [] 126 | physicsShape: [] 127 | bones: [] 128 | spriteID: 5e97eb03825dee720800000000000000 129 | internalID: 0 130 | vertices: [] 131 | indices: 132 | edges: [] 133 | weights: [] 134 | secondaryTextures: [] 135 | spritePackingTag: 136 | pSDRemoveMatte: 0 137 | pSDShowRemoveMatteOption: 0 138 | userData: 139 | assetBundleName: 140 | assetBundleVariant: 141 | -------------------------------------------------------------------------------- /Sprites/two-arrow-vertical.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BennyKok/unity-runtime-debug-action/6b679eb58876ebddcfebb5d6e6a6d87bfca45f3d/Sprites/two-arrow-vertical.png -------------------------------------------------------------------------------- /Sprites/two-arrow-vertical.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fe6a015a303fe054fb29f684d7cf6a8c 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: -1 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: -1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | applyGammaDecoding: 0 61 | platformSettings: 62 | - serializedVersion: 3 63 | buildTarget: DefaultTexturePlatform 64 | maxTextureSize: 2048 65 | resizeAlgorithm: 0 66 | textureFormat: -1 67 | textureCompression: 1 68 | compressionQuality: 50 69 | crunchedCompression: 0 70 | allowsAlphaSplitting: 0 71 | overridden: 0 72 | androidETC2FallbackOverride: 0 73 | forceMaximumCompressionQuality_BC6H_BC7: 0 74 | - serializedVersion: 3 75 | buildTarget: Standalone 76 | maxTextureSize: 2048 77 | resizeAlgorithm: 0 78 | textureFormat: -1 79 | textureCompression: 1 80 | compressionQuality: 50 81 | crunchedCompression: 0 82 | allowsAlphaSplitting: 0 83 | overridden: 0 84 | androidETC2FallbackOverride: 0 85 | forceMaximumCompressionQuality_BC6H_BC7: 0 86 | spriteSheet: 87 | serializedVersion: 2 88 | sprites: [] 89 | outline: [] 90 | physicsShape: [] 91 | bones: [] 92 | spriteID: 5e97eb03825dee720800000000000000 93 | internalID: 0 94 | vertices: [] 95 | indices: 96 | edges: [] 97 | weights: [] 98 | secondaryTextures: [] 99 | spritePackingTag: 100 | pSDRemoveMatte: 0 101 | pSDShowRemoveMatteOption: 0 102 | userData: 103 | assetBundleName: 104 | assetBundleVariant: 105 | -------------------------------------------------------------------------------- /Sprites/two-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/BennyKok/unity-runtime-debug-action/6b679eb58876ebddcfebb5d6e6a6d87bfca45f3d/Sprites/two-arrow.png -------------------------------------------------------------------------------- /Sprites/two-arrow.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0cf5a1f7ec0b8454bb40e9930a792bb7 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | grayScaleToAlpha: 0 27 | generateCubemap: 6 28 | cubemapConvolution: 0 29 | seamlessCubemap: 0 30 | textureFormat: 1 31 | maxTextureSize: 2048 32 | textureSettings: 33 | serializedVersion: 2 34 | filterMode: -1 35 | aniso: -1 36 | mipBias: -100 37 | wrapU: 1 38 | wrapV: 1 39 | wrapW: -1 40 | nPOTScale: 0 41 | lightmap: 0 42 | compressionQuality: 50 43 | spriteMode: 1 44 | spriteExtrude: 1 45 | spriteMeshType: 1 46 | alignment: 0 47 | spritePivot: {x: 0.5, y: 0.5} 48 | spritePixelsToUnits: 100 49 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 50 | spriteGenerateFallbackPhysicsShape: 1 51 | alphaUsage: 1 52 | alphaIsTransparency: 1 53 | spriteTessellationDetail: -1 54 | textureType: 8 55 | textureShape: 1 56 | singleChannelComponent: 0 57 | maxTextureSizeSet: 0 58 | compressionQualitySet: 0 59 | textureFormatSet: 0 60 | applyGammaDecoding: 0 61 | platformSettings: 62 | - serializedVersion: 3 63 | buildTarget: DefaultTexturePlatform 64 | maxTextureSize: 128 65 | resizeAlgorithm: 0 66 | textureFormat: -1 67 | textureCompression: 1 68 | compressionQuality: 50 69 | crunchedCompression: 0 70 | allowsAlphaSplitting: 0 71 | overridden: 0 72 | androidETC2FallbackOverride: 0 73 | forceMaximumCompressionQuality_BC6H_BC7: 0 74 | - serializedVersion: 3 75 | buildTarget: Standalone 76 | maxTextureSize: 128 77 | resizeAlgorithm: 0 78 | textureFormat: -1 79 | textureCompression: 1 80 | compressionQuality: 50 81 | crunchedCompression: 0 82 | allowsAlphaSplitting: 0 83 | overridden: 0 84 | androidETC2FallbackOverride: 0 85 | forceMaximumCompressionQuality_BC6H_BC7: 0 86 | spriteSheet: 87 | serializedVersion: 2 88 | sprites: [] 89 | outline: [] 90 | physicsShape: [] 91 | bones: [] 92 | spriteID: 5e97eb03825dee720800000000000000 93 | internalID: 0 94 | vertices: [] 95 | indices: 96 | edges: [] 97 | weights: [] 98 | secondaryTextures: [] 99 | spritePackingTag: 100 | pSDRemoveMatte: 0 101 | pSDShowRemoveMatteOption: 0 102 | userData: 103 | assetBundleName: 104 | assetBundleVariant: 105 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "com.ennerfelt.runtime-debug", 3 | "displayName": "Runtime Debug Action", 4 | "version": "1.1.1", 5 | "description": "Runtime debug action with \"out of the box just works\" ui debug menu to speed up your game development cycle.", 6 | "author": "Alex Ennerfelt", 7 | "dependencies": { 8 | "com.unity.textmeshpro": "3.0.1" 9 | } 10 | } -------------------------------------------------------------------------------- /package.json.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6aa9fda6188f6e8489e35176fbf53003 3 | PackageManifestImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | --------------------------------------------------------------------------------