From 12e3b8577051978467c9fe0fbf066ff64c289ec8 Mon Sep 17 00:00:00 2001 From: Brajanowski Date: Thu, 17 Jul 2025 19:17:27 +0200 Subject: [PATCH] added hotreload --- .../Documentation.meta | 8 + .../Documentation/Documentation.pdf | Bin 0 -> 33649 bytes .../Documentation/Documentation.pdf.meta | 14 + .../Editor.meta | 8 + .../Editor/Attribution.meta | 3 + .../Editor/Attribution/Attribution.cs | 61 + .../Editor/Attribution/Attribution.cs.meta | 10 + .../Editor/Attribution/VSAttribution.cs | 149 + .../Editor/Attribution/VSAttribution.cs.meta | 10 + .../Editor/CLI.meta | 3 + .../Editor/CLI/CliUtils.cs | 128 + .../Editor/CLI/CliUtils.cs.meta | 10 + .../Editor/CLI/FallbackCliController.cs | 13 + .../Editor/CLI/FallbackCliController.cs.meta | 10 + .../Editor/CLI/HotReloadCli.cs | 244 + .../Editor/CLI/HotReloadCli.cs.meta | 10 + .../Editor/CLI/ICliController.cs | 13 + .../Editor/CLI/ICliController.cs.meta | 10 + .../Editor/CLI/LinuxCliController.cs | 73 + .../Editor/CLI/LinuxCliController.cs.meta | 10 + .../Editor/CLI/OsxCliController.cs | 189 + .../Editor/CLI/OsxCliController.cs.meta | 10 + .../Editor/CLI/StartArgs.cs | 12 + .../Editor/CLI/StartArgs.cs.meta | 18 + .../Editor/CLI/WindowsCliController.cs | 33 + .../Editor/CLI/WindowsCliController.cs.meta | 10 + .../Editor/CompileChecker.meta | 8 + .../CompileChecker/DefaultCompileChecker.cs | 70 + .../DefaultCompileChecker.cs.meta | 18 + .../Editor/CompileChecker/ICompileChecker.cs | 18 + .../CompileChecker/ICompileChecker.cs.meta | 18 + .../CompileChecker/LegacyCompileChecker.cs | 55 + .../LegacyCompileChecker.cs.meta | 18 + .../Editor/Constants.cs | 44 + .../Editor/Constants.cs.meta | 18 + .../Editor/Demo.meta | 8 + .../Editor/Demo/EditorDemo.cs | 26 + .../Editor/Demo/EditorDemo.cs.meta | 18 + .../Editor/EditorCodePatcher.cs | 1365 +++ .../Editor/EditorCodePatcher.cs.meta | 18 + .../Editor/EditorIndicationState.cs | 183 + .../Editor/EditorIndicationState.cs.meta | 10 + .../Editor/GitUtil.cs | 87 + .../Editor/GitUtil.cs.meta | 18 + .../Editor/Helpers.meta | 8 + .../Editor/Helpers/AssemblyOmission.cs | 188 + .../Editor/Helpers/AssemblyOmission.cs.meta | 10 + .../Editor/Helpers/BuildInfoHelper.cs | 144 + .../Editor/Helpers/BuildInfoHelper.cs.meta | 10 + .../Editor/Helpers/EditorWindowHelper.cs | 101 + .../Editor/Helpers/EditorWindowHelper.cs.meta | 18 + .../Editor/Helpers/GUIHelper.cs | 162 + .../Editor/Helpers/GUIHelper.cs.meta | 10 + .../Helpers/HotReloadSuggestionsHelper.cs | 544 + .../HotReloadSuggestionsHelper.cs.meta | 10 + .../Editor/Helpers/HotReloadTimelineHelper.cs | 606 ++ .../Helpers/HotReloadTimelineHelper.cs.meta | 10 + .../Editor/Helpers/Spinner.cs | 80 + .../Editor/Helpers/Spinner.cs.meta | 10 + .../Editor/Helpers/UnitySettingsHelper.cs | 95 + .../Helpers/UnitySettingsHelper.cs.meta | 10 + .../Editor/HotReloadAttributeProcessor.cs | 35 + .../HotReloadAttributeProcessor.cs.meta | 18 + .../Editor/HotReloadEventPopup.cs | 95 + .../Editor/HotReloadEventPopup.cs.meta | 10 + .../Editor/HotReloadOverlay.cs | 178 + .../Editor/HotReloadOverlay.cs.meta | 10 + .../Editor/HotReloadPrefs.cs | 478 + .../Editor/HotReloadPrefs.cs.meta | 18 + .../Editor/HotReloadSettingsEditor.cs | 70 + .../Editor/HotReloadSettingsEditor.cs.meta | 18 + .../Editor/HotReloadState.cs | 80 + .../Editor/HotReloadState.cs.meta | 10 + .../Editor/Icon_Player.png | Bin 0 -> 2407 bytes .../Editor/Icon_Player.png.meta | 154 + .../Editor/InspectorFreezeFix.cs | 117 + .../Editor/InspectorFreezeFix.cs.meta | 10 + .../Editor/Installation.meta | 3 + .../Editor/Installation/DownloadUtility.cs | 98 + .../Installation/DownloadUtility.cs.meta | 10 + .../Editor/Installation/ExponentialBackoff.cs | 18 + .../Installation/ExponentialBackoff.cs.meta | 10 + .../Editor/Installation/InstallUtility.cs | 66 + .../Installation/InstallUtility.cs.meta | 18 + .../Editor/Installation/ServerDownloader.cs | 190 + .../Installation/ServerDownloader.cs.meta | 10 + .../Editor/Installation/UpdateUtility.cs | 94 + .../Editor/Installation/UpdateUtility.cs.meta | 10 + .../Editor/PlayerBuild.meta | 3 + .../PlayerBuild/BuildGenerateBuildInfo.cs | 42 + .../BuildGenerateBuildInfo.cs.meta | 10 + .../PlayerBuild/HotReloadBuildHelper.cs | 111 + .../PlayerBuild/HotReloadBuildHelper.cs.meta | 10 + .../PostbuildModifyAndroidManifest.cs | 133 + .../PostbuildModifyAndroidManifest.cs.meta | 10 + .../PlayerBuild/PostbuildSendProjectState.cs | 26 + .../PostbuildSendProjectState.cs.meta | 18 + .../PlayerBuild/PrebuildIncludeResources.cs | 60 + .../PrebuildIncludeResources.cs.meta | 18 + .../Editor/ProjectGeneration.meta | 8 + .../ProjectGeneration/FileIOProvider.cs | 44 + .../ProjectGeneration/FileIOProvider.cs.meta | 18 + .../Editor/ProjectGeneration/GUIDProvider.cs | 9 + .../ProjectGeneration/GUIDProvider.cs.meta | 18 + .../Editor/ProjectGeneration/IFileIO.cs | 12 + .../Editor/ProjectGeneration/IFileIO.cs.meta | 10 + .../ProjectGeneration/IGUIDGenerator.cs | 7 + .../ProjectGeneration/IGUIDGenerator.cs.meta | 10 + ...HotReloadProjectGenerationPostProcessor.cs | 43 + ...loadProjectGenerationPostProcessor.cs.meta | 10 + .../ProjectGenenerationPostProcessor.cs | 14 + .../ProjectGenenerationPostProcessor.cs.meta | 10 + .../ProjectGeneration/ProjectGeneration.cs | 893 ++ .../ProjectGeneration.cs.meta | 18 + .../ProjectGenerationFlag.cs | 18 + .../ProjectGenerationFlag.cs.meta | 10 + .../Editor/ProjectGeneration/ProjectPart.cs | 85 + .../ProjectGeneration/ProjectPart.cs.meta | 10 + .../SolutionGuidGenerator.cs | 29 + .../SolutionGuidGenerator.cs.meta | 10 + .../Editor/ProjectGeneration/Util.meta | 8 + .../ProjectGeneration/Util/FileSystemUtil.cs | 37 + .../Util/FileSystemUtil.cs.meta | 18 + .../ProjectGeneration/Util/StringUtils.cs | 14 + .../Util/StringUtils.cs.meta | 10 + .../Editor/RequiredSettings.meta | 3 + .../RequiredSettingChecker.cs | 270 + .../RequiredSettingChecker.cs.meta | 10 + .../Editor/Resources.meta | 3 + .../Editor/Resources/Icn_Stop.png | Bin 0 -> 117 bytes .../Editor/Resources/Icn_Stop.png.meta | 123 + .../Editor/Resources/Icn_play.png | Bin 0 -> 270 bytes .../Editor/Resources/Icn_play.png.meta | 123 + .../Resources/Logo_HotReload_DarkMode.png | Bin 0 -> 3927 bytes .../Logo_HotReload_DarkMode.png.meta | 95 + .../Resources/Logo_HotReload_LightMode.png | Bin 0 -> 3879 bytes .../Logo_HotReload_LightMode.png.meta | 95 + .../Editor/Resources/alert_info.png | Bin 0 -> 862 bytes .../Editor/Resources/alert_info.png.meta | 134 + .../Editor/Resources/applied_patch.png | Bin 0 -> 5463 bytes .../Editor/Resources/applied_patch.png.meta | 134 + .../Editor/Resources/blue.png | Bin 0 -> 6101 bytes .../Editor/Resources/blue.png.meta | 99 + .../Editor/Resources/close.png | Bin 0 -> 252 bytes .../Editor/Resources/close.png.meta | 134 + .../Editor/Resources/error.png | Bin 0 -> 5489 bytes .../Editor/Resources/error.png.meta | 134 + .../Editor/Resources/events.png | Bin 0 -> 4309 bytes .../Editor/Resources/events.png.meta | 134 + .../Editor/Resources/foldout_closed.png | Bin 0 -> 4865 bytes .../Editor/Resources/foldout_closed.png.meta | 134 + .../Editor/Resources/foldout_open.png | Bin 0 -> 4861 bytes .../Editor/Resources/foldout_open.png.meta | 134 + .../Editor/Resources/green.png | Bin 0 -> 352 bytes .../Editor/Resources/green.png.meta | 131 + .../Editor/Resources/grey.png | Bin 0 -> 493 bytes .../Editor/Resources/grey.png.meta | 131 + .../Editor/Resources/icon_check_circle.png | Bin 0 -> 916 bytes .../Resources/icon_check_circle.png.meta | 95 + .../Editor/Resources/icon_circle_black.png | Bin 0 -> 648 bytes .../Resources/icon_circle_black.png.meta | 154 + .../Editor/Resources/icon_circle_gray.png | Bin 0 -> 743 bytes .../Resources/icon_circle_gray.png.meta | 154 + .../icon_loading_star_light_mode_96.png | Bin 0 -> 822 bytes .../icon_loading_star_light_mode_96.png.meta | 131 + .../Editor/Resources/icon_warning_circle.png | Bin 0 -> 941 bytes .../Resources/icon_warning_circle.png.meta | 95 + .../Editor/Resources/infos.png | Bin 0 -> 5947 bytes .../Editor/Resources/infos.png.meta | 134 + .../Editor/Resources/logo.png | Bin 0 -> 455 bytes .../Editor/Resources/logo.png.meta | 134 + .../Editor/Resources/red.png | Bin 0 -> 345 bytes .../Editor/Resources/red.png.meta | 131 + .../Editor/Resources/red_dot.png | Bin 0 -> 4838 bytes .../Editor/Resources/red_dot.png.meta | 134 + .../Editor/Resources/refresh.png | Bin 0 -> 287 bytes .../Editor/Resources/refresh.png.meta | 134 + .../Editor/Resources/report_bug.png | Bin 0 -> 763 bytes .../Editor/Resources/report_bug.png.meta | 134 + .../Editor/Resources/undetected.png | Bin 0 -> 720 bytes .../Editor/Resources/undetected.png.meta | 123 + .../Editor/Resources/warning.png | Bin 0 -> 5523 bytes .../Editor/Resources/warning.png.meta | 134 + .../Editor/Resources/yellow.png | Bin 0 -> 348 bytes .../Editor/Resources/yellow.png.meta | 131 + .../Editor/ServerHealthCheck.cs | 25 + .../Editor/ServerHealthCheck.cs.meta | 10 + .../SingularityGroup.HotReload.Editor.asmdef | 32 + ...gularityGroup.HotReload.Editor.asmdef.meta | 14 + ...rityGroup.HotReload.EditorDependencies.dll | Bin 0 -> 370688 bytes ...roup.HotReload.EditorDependencies.dll.meta | 40 + .../Editor/Versioning.meta | 8 + .../Editor/Versioning/PackageUpdateChecker.cs | 290 + .../Versioning/PackageUpdateChecker.cs.meta | 18 + .../Editor/Versioning/SemVer.cs | 536 + .../Editor/Versioning/SemVer.cs.meta | 18 + .../Editor/Window.meta | 8 + .../Editor/Window/GUI.meta | 8 + .../Editor/Window/GUI/Buttons.meta | 8 + .../Window/GUI/Buttons/OpenDialogueButton.cs | 42 + .../GUI/Buttons/OpenDialogueButton.cs.meta | 10 + .../Window/GUI/Buttons/OpenURLButton.cs | 29 + .../Window/GUI/Buttons/OpenURLButton.cs.meta | 18 + .../Editor/Window/GUI/EditorTextures.cs | 116 + .../Editor/Window/GUI/EditorTextures.cs.meta | 10 + .../Editor/Window/GUI/IGUIComponent.cs | 5 + .../Editor/Window/GUI/IGUIComponent.cs.meta | 18 + .../Editor/Window/GUI/Options.meta | 8 + ...AllowAndroidAppToMakeHttpRequestsOption.cs | 48 + ...AndroidAppToMakeHttpRequestsOption.cs.meta | 18 + .../Editor/Window/GUI/Options/Base.meta | 8 + .../GUI/Options/Base/HotReloadOptionBase.cs | 57 + .../Options/Base/HotReloadOptionBase.cs.meta | 18 + .../GUI/Options/Base/OptionInterfaces.cs | 34 + .../GUI/Options/Base/OptionInterfaces.cs.meta | 10 + .../Window/GUI/Options/ExposeServerOption.cs | 70 + .../GUI/Options/ExposeServerOption.cs.meta | 18 + .../GUI/Options/IncludeInBuildOption.cs | 24 + .../GUI/Options/IncludeInBuildOption.cs.meta | 18 + .../Editor/Window/GUI/Tabs.meta | 8 + .../Editor/Window/GUI/Tabs/Base.meta | 8 + .../Window/GUI/Tabs/Base/HotReloadTabBase.cs | 33 + .../GUI/Tabs/Base/HotReloadTabBase.cs.meta | 18 + .../Editor/Window/GUI/Tabs/Helpers.meta | 3 + .../GUI/Tabs/Helpers/RedeemLicenseHelper.cs | 308 + .../Tabs/Helpers/RedeemLicenseHelper.cs.meta | 10 + .../Window/GUI/Tabs/HotReloadAboutTab.cs | 310 + .../Window/GUI/Tabs/HotReloadAboutTab.cs.meta | 18 + .../GUI/Tabs/HotReloadOptionsSection.cs | 49 + .../GUI/Tabs/HotReloadOptionsSection.cs.meta | 18 + .../Editor/Window/GUI/Tabs/HotReloadRunTab.cs | 1389 +++ .../Window/GUI/Tabs/HotReloadRunTab.cs.meta | 18 + .../Window/GUI/Tabs/HotReloadSettingsTab.cs | 863 ++ .../GUI/Tabs/HotReloadSettingsTab.cs.meta | 10 + .../Editor/Window/HotReloadWindow.cs | 388 + .../Editor/Window/HotReloadWindow.cs.meta | 18 + .../Editor/Window/ShowOnStartupEnum.cs | 7 + .../Editor/Window/ShowOnStartupEnum.cs.meta | 18 + .../Editor/Window/Styles.meta | 8 + .../Window/Styles/HotReloadWindowStyles.cs | 777 ++ .../Styles/HotReloadWindowStyles.cs.meta | 18 + .../com.singularitygroup.hotreload/LICENSE.md | 45 + .../LICENSE.md.meta | 14 + .../com.singularitygroup.hotreload/README.md | 9 + .../README.md.meta | 10 + .../Runtime.meta | 8 + .../Runtime/AppCallbackListener.cs | 55 + .../Runtime/AppCallbackListener.cs.meta | 10 + .../Runtime/BuildInfo.cs | 171 + .../Runtime/BuildInfo.cs.meta | 10 + .../Runtime/Burst.meta | 3 + .../Runtime/Burst/JobHotReloadUtility.cs | 25 + .../Runtime/Burst/JobHotReloadUtility.cs.meta | 10 + .../Runtime/BurstChecker.cs | 41 + .../Runtime/BurstChecker.cs.meta | 10 + .../Runtime/CodePatcher.cs | 720 ++ .../Runtime/CodePatcher.cs.meta | 18 + .../Runtime/Demo.meta | 3 + .../Runtime/Demo/Scenes.meta | 8 + .../Demo/Scenes/HotReloadBasicDemo.unity | 1079 ++ .../Demo/Scenes/HotReloadBasicDemo.unity.meta | 14 + .../Demo/Scenes/HotReloadBurstDemo.unity | 9607 +++++++++++++++++ .../Demo/Scenes/HotReloadBurstDemo.unity.meta | 14 + .../HotReloadBurstDemoSettings.lighting | 66 + .../HotReloadBurstDemoSettings.lighting.meta | 15 + .../Runtime/Demo/Scripts.meta | 8 + .../Demo/Scripts/HotReloadBasicDemo.cs | 217 + .../Demo/Scripts/HotReloadBasicDemo.cs.meta | 18 + .../Demo/Scripts/HotReloadBurstJobsDemo.cs | 63 + .../Scripts/HotReloadBurstJobsDemo.cs.meta | 18 + .../Runtime/Demo/Scripts/IDemo.cs | 29 + .../Runtime/Demo/Scripts/IDemo.cs.meta | 10 + .../Runtime/HotReloadPrompts.prefab | 2942 +++++ .../Runtime/HotReloadPrompts.prefab.meta | 14 + .../Runtime/HotReloadSettingsObject.cs | 140 + .../Runtime/HotReloadSettingsObject.cs.meta | 20 + .../Runtime/HttpClientUtils.cs | 19 + .../Runtime/HttpClientUtils.cs.meta | 10 + .../Runtime/IServerHealthCheck.cs | 11 + .../Runtime/IServerHealthCheck.cs.meta | 10 + .../Runtime/InstallQRDialog.cs | 27 + .../Runtime/InstallQRDialog.cs.meta | 10 + .../Runtime/IpHelper.cs | 64 + .../Runtime/IpHelper.cs.meta | 10 + .../Runtime/Libs.meta | 8 + .../Runtime/Libs/EditorOnly.meta | 8 + ...ityGroup.HotReload.RuntimeDependencies.dll | Bin 0 -> 3046912 bytes ...oup.HotReload.RuntimeDependencies.dll.meta | 99 + ...roup.HotReload.RuntimeDependencies2019.dll | Bin 0 -> 40448 bytes ...HotReload.RuntimeDependencies2019.dll.meta | 95 + ...roup.HotReload.RuntimeDependencies2020.dll | Bin 0 -> 39424 bytes ...HotReload.RuntimeDependencies2020.dll.meta | 95 + ...roup.HotReload.RuntimeDependencies2022.dll | Bin 0 -> 480256 bytes ...HotReload.RuntimeDependencies2022.dll.meta | 95 + .../Runtime/Libs/OnDevice.meta | 8 + ...ityGroup.HotReload.RuntimeDependencies.dll | Bin 0 -> 3046912 bytes ...oup.HotReload.RuntimeDependencies.dll.meta | 95 + ...roup.HotReload.RuntimeDependencies2019.dll | Bin 0 -> 40448 bytes ...HotReload.RuntimeDependencies2019.dll.meta | 96 + ...roup.HotReload.RuntimeDependencies2020.dll | Bin 0 -> 39424 bytes ...HotReload.RuntimeDependencies2020.dll.meta | 96 + ...roup.HotReload.RuntimeDependencies2022.dll | Bin 0 -> 480256 bytes ...HotReload.RuntimeDependencies2022.dll.meta | 96 + .../Runtime/MethodCompatiblity.cs | 116 + .../Runtime/MethodCompatiblity.cs.meta | 18 + .../Runtime/MethodPatchResponsesConverter.cs | 716 ++ .../MethodPatchResponsesConverter.cs.meta | 10 + .../Runtime/MethodUtils.cs | 35 + .../Runtime/MethodUtils.cs.meta | 18 + .../Runtime/MonoBehaviours.meta | 3 + .../MonoBehaviours/ConnectionDialog.cs | 80 + .../MonoBehaviours/ConnectionDialog.cs.meta | 10 + .../Runtime/MonoBehaviours/Prompts.cs | 145 + .../Runtime/MonoBehaviours/Prompts.cs.meta | 10 + .../Runtime/MonoBehaviours/QuestionDialog.cs | 64 + .../MonoBehaviours/QuestionDialog.cs.meta | 10 + .../Runtime/MonoBehaviours/RetryDialog.cs | 104 + .../MonoBehaviours/RetryDialog.cs.meta | 10 + .../Runtime/MonoMethod.cs | 196 + .../Runtime/MonoMethod.cs.meta | 18 + .../Runtime/OSX.meta | 8 + .../Runtime/OSX/HotReloadNativeHelper.dylib | Bin 0 -> 152352 bytes .../OSX/HotReloadNativeHelper.dylib.meta | 87 + .../Runtime/OnHotReloadDispatch.cs | 194 + .../Runtime/OnHotReloadDispatch.cs.meta | 10 + .../Runtime/PackageConst.cs | 20 + .../Runtime/PackageConst.cs.meta | 18 + .../Runtime/PatchServerInfo.cs | 41 + .../Runtime/PatchServerInfo.cs.meta | 18 + .../Runtime/PersistencePaths.cs | 15 + .../Runtime/PersistencePaths.cs.meta | 18 + .../Runtime/PlayerCodePatcher.cs | 117 + .../Runtime/PlayerCodePatcher.cs.meta | 10 + .../Runtime/PlayerEntrypoint.cs | 161 + .../Runtime/PlayerEntrypoint.cs.meta | 10 + .../Runtime/Public.meta | 8 + .../Runtime/Public/HotReloadLogging.cs | 17 + .../Runtime/Public/HotReloadLogging.cs.meta | 18 + .../Runtime/Public/InvokeOnHotReload.cs | 32 + .../Runtime/Public/InvokeOnHotReload.cs.meta | 18 + .../Runtime/Public/InvokeOnHotReloadLocal.cs | 22 + .../Public/InvokeOnHotReloadLocal.cs.meta | 10 + .../Runtime/Public/Log.cs | 108 + .../Runtime/Public/Log.cs.meta | 10 + .../Runtime/Public/LogLevel.cs | 25 + .../Runtime/Public/LogLevel.cs.meta | 18 + ...arityGroup.HotReload.Runtime.Public.asmdef | 3 + ...Group.HotReload.Runtime.Public.asmdef.meta | 14 + .../Runtime/RequestHelper.cs | 445 + .../Runtime/RequestHelper.cs.meta | 18 + .../Runtime/ServerHandshake.cs | 245 + .../Runtime/ServerHandshake.cs.meta | 10 + .../Runtime/ServerHealthCheck.cs | 58 + .../Runtime/ServerHealthCheck.cs.meta | 10 + .../SingularityGroup.HotReload.Runtime.asmdef | 28 + ...ularityGroup.HotReload.Runtime.asmdef.meta | 14 + .../Runtime/SymbolResolver.cs | 99 + .../Runtime/SymbolResolver.cs.meta | 18 + .../Runtime/SymbolResolvingFailedException.cs | 17 + .../SymbolResolvingFailedException.cs.meta | 18 + .../Runtime/TaskExtensions.cs | 48 + .../Runtime/TaskExtensions.cs.meta | 18 + .../Runtime/ThreadUtility.cs | 226 + .../Runtime/ThreadUtility.cs.meta | 10 + .../Runtime/UnityHelper.cs | 42 + .../Runtime/UnityHelper.cs.meta | 10 + .../Server.meta | 8 + .../Server/hot-reload-config.graphql | 99 + .../Server/hot-reload-config.graphql.meta | 14 + .../Server/linux-x64.meta | 8 + .../linux-x64/hotreload-start-script.sh | 83 + .../linux-x64/hotreload-start-script.sh.meta | 14 + .../Server/linux-x64/terminal-run.sh | 39 + .../Server/linux-x64/terminal-run.sh.meta | 14 + .../Third Party Notices.md | 327 + .../Third Party Notices.md.meta | 14 + .../package.json | 20 + .../package.json.meta | 14 + Packages/packages-lock.json | 9 + ProjectSettings/ProjectSettings.asset | 1 + 380 files changed, 39434 insertions(+) create mode 100644 Packages/com.singularitygroup.hotreload/Documentation.meta create mode 100644 Packages/com.singularitygroup.hotreload/Documentation/Documentation.pdf create mode 100644 Packages/com.singularitygroup.hotreload/Documentation/Documentation.pdf.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Attribution.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Attribution/Attribution.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Attribution/Attribution.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Attribution/VSAttribution.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Attribution/VSAttribution.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/CliUtils.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/CliUtils.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/FallbackCliController.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/FallbackCliController.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/HotReloadCli.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/HotReloadCli.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/ICliController.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/ICliController.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/LinuxCliController.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/LinuxCliController.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/OsxCliController.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/OsxCliController.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/StartArgs.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/StartArgs.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/WindowsCliController.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CLI/WindowsCliController.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CompileChecker.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CompileChecker/DefaultCompileChecker.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CompileChecker/DefaultCompileChecker.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CompileChecker/ICompileChecker.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CompileChecker/ICompileChecker.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CompileChecker/LegacyCompileChecker.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/CompileChecker/LegacyCompileChecker.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Constants.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Constants.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Demo.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Demo/EditorDemo.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Demo/EditorDemo.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/EditorCodePatcher.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/EditorCodePatcher.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/EditorIndicationState.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/EditorIndicationState.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/GitUtil.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/GitUtil.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/AssemblyOmission.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/AssemblyOmission.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/BuildInfoHelper.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/BuildInfoHelper.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/EditorWindowHelper.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/EditorWindowHelper.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/GUIHelper.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/GUIHelper.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadSuggestionsHelper.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadSuggestionsHelper.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadTimelineHelper.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadTimelineHelper.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/Spinner.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/Spinner.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/UnitySettingsHelper.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Helpers/UnitySettingsHelper.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/HotReloadAttributeProcessor.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/HotReloadAttributeProcessor.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/HotReloadEventPopup.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/HotReloadEventPopup.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/HotReloadOverlay.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/HotReloadOverlay.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/HotReloadPrefs.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/HotReloadPrefs.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/HotReloadSettingsEditor.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/HotReloadSettingsEditor.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/HotReloadState.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/HotReloadState.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Icon_Player.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Icon_Player.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/InspectorFreezeFix.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/InspectorFreezeFix.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Installation.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Installation/DownloadUtility.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Installation/DownloadUtility.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Installation/ExponentialBackoff.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Installation/ExponentialBackoff.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Installation/InstallUtility.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Installation/InstallUtility.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Installation/ServerDownloader.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Installation/ServerDownloader.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Installation/UpdateUtility.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Installation/UpdateUtility.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/PlayerBuild.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/BuildGenerateBuildInfo.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/BuildGenerateBuildInfo.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/HotReloadBuildHelper.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/HotReloadBuildHelper.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildModifyAndroidManifest.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildModifyAndroidManifest.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildSendProjectState.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildSendProjectState.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PrebuildIncludeResources.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PrebuildIncludeResources.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/FileIOProvider.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/FileIOProvider.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/GUIDProvider.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/GUIDProvider.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IFileIO.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IFileIO.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IGUIDGenerator.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IGUIDGenerator.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IHotReloadProjectGenerationPostProcessor.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IHotReloadProjectGenerationPostProcessor.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenenerationPostProcessor.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenenerationPostProcessor.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGeneration.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGeneration.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenerationFlag.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenerationFlag.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectPart.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectPart.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/SolutionGuidGenerator.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/SolutionGuidGenerator.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/FileSystemUtil.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/FileSystemUtil.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/StringUtils.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/StringUtils.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/RequiredSettings.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/RequiredSettings/RequiredSettingChecker.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/RequiredSettings/RequiredSettingChecker.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_Stop.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_Stop.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_play.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_play.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_DarkMode.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_DarkMode.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_LightMode.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_LightMode.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/alert_info.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/alert_info.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/applied_patch.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/applied_patch.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/blue.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/blue.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/close.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/close.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/error.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/error.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/events.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/events.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/foldout_closed.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/foldout_closed.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/foldout_open.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/foldout_open.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/green.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/green.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/grey.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/grey.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/icon_check_circle.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/icon_check_circle.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/icon_circle_black.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/icon_circle_black.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/icon_circle_gray.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/icon_circle_gray.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/icon_loading_star_light_mode_96.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/icon_loading_star_light_mode_96.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/icon_warning_circle.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/icon_warning_circle.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/infos.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/infos.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/logo.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/logo.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/red.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/red.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/red_dot.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/red_dot.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/refresh.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/refresh.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/report_bug.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/report_bug.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/undetected.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/undetected.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/warning.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/warning.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/yellow.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/yellow.png.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ServerHealthCheck.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/ServerHealthCheck.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.Editor.asmdef create mode 100644 Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.Editor.asmdef.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.EditorDependencies.dll create mode 100644 Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.EditorDependencies.dll.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Versioning.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Versioning/PackageUpdateChecker.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Versioning/PackageUpdateChecker.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Versioning/SemVer.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Versioning/SemVer.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenDialogueButton.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenDialogueButton.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenURLButton.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenURLButton.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/EditorTextures.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/EditorTextures.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/IGUIComponent.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/IGUIComponent.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/AllowAndroidAppToMakeHttpRequestsOption.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/AllowAndroidAppToMakeHttpRequestsOption.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/HotReloadOptionBase.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/HotReloadOptionBase.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/OptionInterfaces.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/OptionInterfaces.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/ExposeServerOption.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/ExposeServerOption.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/IncludeInBuildOption.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/IncludeInBuildOption.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Base.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Base/HotReloadTabBase.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Base/HotReloadTabBase.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Helpers.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Helpers/RedeemLicenseHelper.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Helpers/RedeemLicenseHelper.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadAboutTab.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadAboutTab.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadOptionsSection.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadOptionsSection.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadRunTab.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadRunTab.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadSettingsTab.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadSettingsTab.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/HotReloadWindow.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/HotReloadWindow.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/ShowOnStartupEnum.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/ShowOnStartupEnum.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/Styles.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/Styles/HotReloadWindowStyles.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Window/Styles/HotReloadWindowStyles.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/LICENSE.md create mode 100644 Packages/com.singularitygroup.hotreload/LICENSE.md.meta create mode 100644 Packages/com.singularitygroup.hotreload/README.md create mode 100644 Packages/com.singularitygroup.hotreload/README.md.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/AppCallbackListener.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/AppCallbackListener.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/BuildInfo.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/BuildInfo.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Burst.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Burst/JobHotReloadUtility.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Burst/JobHotReloadUtility.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/BurstChecker.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/BurstChecker.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/CodePatcher.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/CodePatcher.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBasicDemo.unity create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBasicDemo.unity.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemo.unity create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemo.unity.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemoSettings.lighting create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemoSettings.lighting.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBasicDemo.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBasicDemo.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBurstJobsDemo.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBurstJobsDemo.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/IDemo.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/IDemo.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/HotReloadPrompts.prefab create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/HotReloadPrompts.prefab.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/HotReloadSettingsObject.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/HotReloadSettingsObject.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/HttpClientUtils.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/HttpClientUtils.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/IServerHealthCheck.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/IServerHealthCheck.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/InstallQRDialog.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/InstallQRDialog.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/IpHelper.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/IpHelper.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly/SingularityGroup.HotReload.RuntimeDependencies.dll create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly/SingularityGroup.HotReload.RuntimeDependencies.dll.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly/SingularityGroup.HotReload.RuntimeDependencies2019.dll create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly/SingularityGroup.HotReload.RuntimeDependencies2019.dll.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly/SingularityGroup.HotReload.RuntimeDependencies2020.dll create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly/SingularityGroup.HotReload.RuntimeDependencies2020.dll.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly/SingularityGroup.HotReload.RuntimeDependencies2022.dll create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly/SingularityGroup.HotReload.RuntimeDependencies2022.dll.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/OnDevice.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/OnDevice/SingularityGroup.HotReload.RuntimeDependencies.dll create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/OnDevice/SingularityGroup.HotReload.RuntimeDependencies.dll.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/OnDevice/SingularityGroup.HotReload.RuntimeDependencies2019.dll create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/OnDevice/SingularityGroup.HotReload.RuntimeDependencies2019.dll.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/OnDevice/SingularityGroup.HotReload.RuntimeDependencies2020.dll create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/OnDevice/SingularityGroup.HotReload.RuntimeDependencies2020.dll.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/OnDevice/SingularityGroup.HotReload.RuntimeDependencies2022.dll create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Libs/OnDevice/SingularityGroup.HotReload.RuntimeDependencies2022.dll.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MethodCompatiblity.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MethodCompatiblity.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MethodPatchResponsesConverter.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MethodPatchResponsesConverter.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MethodUtils.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MethodUtils.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MonoBehaviours.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MonoBehaviours/ConnectionDialog.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MonoBehaviours/ConnectionDialog.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MonoBehaviours/Prompts.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MonoBehaviours/Prompts.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MonoBehaviours/QuestionDialog.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MonoBehaviours/QuestionDialog.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MonoBehaviours/RetryDialog.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MonoBehaviours/RetryDialog.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MonoMethod.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/MonoMethod.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/OSX.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/OSX/HotReloadNativeHelper.dylib create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/OSX/HotReloadNativeHelper.dylib.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/OnHotReloadDispatch.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/OnHotReloadDispatch.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/PackageConst.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/PackageConst.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/PatchServerInfo.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/PatchServerInfo.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/PersistencePaths.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/PersistencePaths.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/PlayerCodePatcher.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/PlayerCodePatcher.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/PlayerEntrypoint.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/PlayerEntrypoint.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Public.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Public/HotReloadLogging.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Public/HotReloadLogging.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Public/InvokeOnHotReload.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Public/InvokeOnHotReload.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Public/InvokeOnHotReloadLocal.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Public/InvokeOnHotReloadLocal.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Public/Log.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Public/Log.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Public/LogLevel.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Public/LogLevel.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Public/SingularityGroup.HotReload.Runtime.Public.asmdef create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/Public/SingularityGroup.HotReload.Runtime.Public.asmdef.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/RequestHelper.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/RequestHelper.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/ServerHandshake.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/ServerHandshake.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/ServerHealthCheck.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/ServerHealthCheck.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/SingularityGroup.HotReload.Runtime.asmdef create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/SingularityGroup.HotReload.Runtime.asmdef.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/SymbolResolver.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/SymbolResolver.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/SymbolResolvingFailedException.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/SymbolResolvingFailedException.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/TaskExtensions.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/TaskExtensions.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/ThreadUtility.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/ThreadUtility.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/UnityHelper.cs create mode 100644 Packages/com.singularitygroup.hotreload/Runtime/UnityHelper.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Server.meta create mode 100644 Packages/com.singularitygroup.hotreload/Server/hot-reload-config.graphql create mode 100644 Packages/com.singularitygroup.hotreload/Server/hot-reload-config.graphql.meta create mode 100644 Packages/com.singularitygroup.hotreload/Server/linux-x64.meta create mode 100644 Packages/com.singularitygroup.hotreload/Server/linux-x64/hotreload-start-script.sh create mode 100644 Packages/com.singularitygroup.hotreload/Server/linux-x64/hotreload-start-script.sh.meta create mode 100644 Packages/com.singularitygroup.hotreload/Server/linux-x64/terminal-run.sh create mode 100644 Packages/com.singularitygroup.hotreload/Server/linux-x64/terminal-run.sh.meta create mode 100644 Packages/com.singularitygroup.hotreload/Third Party Notices.md create mode 100644 Packages/com.singularitygroup.hotreload/Third Party Notices.md.meta create mode 100644 Packages/com.singularitygroup.hotreload/package.json create mode 100644 Packages/com.singularitygroup.hotreload/package.json.meta diff --git a/Packages/com.singularitygroup.hotreload/Documentation.meta b/Packages/com.singularitygroup.hotreload/Documentation.meta new file mode 100644 index 0000000..3268408 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Documentation.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7a025eec5cd1851429c24e953a58d48b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Documentation/Documentation.pdf b/Packages/com.singularitygroup.hotreload/Documentation/Documentation.pdf new file mode 100644 index 0000000000000000000000000000000000000000..27968728e01cb565a9f1ea4cb3899c9904aa46b7 GIT binary patch literal 33649 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 Yot%xHIRDz9A^cz@KQ=3?q>|MC01=Q({Qv*} literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Documentation/Documentation.pdf.meta b/Packages/com.singularitygroup.hotreload/Documentation/Documentation.pdf.meta new file mode 100644 index 0000000..d794865 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Documentation/Documentation.pdf.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 8999c2c2d9cadcb44a617a5df023bfa1 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Documentation/Documentation.pdf + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor.meta b/Packages/com.singularitygroup.hotreload/Editor.meta new file mode 100644 index 0000000..74ca4b0 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f5dfa6492e8e7ce4f937aa75ef4e86fd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Editor/Attribution.meta b/Packages/com.singularitygroup.hotreload/Editor/Attribution.meta new file mode 100644 index 0000000..944cb63 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Attribution.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 7ae8b0adf00c450d9e80e11ffa1d2cf7 +timeCreated: 1678721517 \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Attribution/Attribution.cs b/Packages/com.singularitygroup.hotreload/Editor/Attribution/Attribution.cs new file mode 100644 index 0000000..1d0ab63 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Attribution/Attribution.cs @@ -0,0 +1,61 @@ +using System; +using System.Globalization; +using SingularityGroup.HotReload.DTO; +using UnityEditor; +using UnityEditor.VSAttribution.HotReload; +using UnityEngine; +using UnityEngine.Analytics; + +namespace SingularityGroup.HotReload.Editor { + internal static class Attribution { + internal const string LastLoginKey = "HotReload.Attribution.LastAttributionEventAt"; + + //Resend attribution event every 12 hours to be safe + static readonly TimeSpan resendPeriod = TimeSpan.FromHours(12); + + //The last time the attribution event was sent. + //Returns unix epoch in case it has never been sent before. + static DateTime LastAttributionEventAt { + get { + if(EditorPrefs.HasKey(LastLoginKey)) { + return DateTime.ParseExact(EditorPrefs.GetString(LastLoginKey), "o", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal); + } + return DateTimeOffset.FromUnixTimeSeconds(0).UtcDateTime; + } + set { + EditorPrefs.SetString(LastLoginKey, value.ToUniversalTime().ToString("o")); + } + } + + + const string actionName = "Login"; + const string partnerName = "The Naughty Cult Ltd."; + + public static void RegisterLogin(LoginStatusResponse response) { + //Licensing might not be initialized yet. + //The hwId should be set eventually. + if(response?.hardwareId == null) { + return; + } + //Only forward attribution if this is an asset store build. + //We will still distribute this package outside of the asset store (i.e via our website). + if (!PackageConst.IsAssetStoreBuild) { + return; + } + + var now = DateTime.UtcNow; + //If we sent an attribution event in the last 12 hours we should already be good. + if (now - LastAttributionEventAt < resendPeriod) { + return; + } + + var result = VSAttribution.SendAttributionEvent(actionName, partnerName, response.hardwareId); + + //Retry on transient errors + if (result == AnalyticsResult.NotInitialized) { + return; + } + LastAttributionEventAt = now; + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Attribution/Attribution.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Attribution/Attribution.cs.meta new file mode 100644 index 0000000..e579bbf --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Attribution/Attribution.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 67658aafb8404f0eb9496812ba4bb8a4 +timeCreated: 1678721795 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Attribution/Attribution.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Attribution/VSAttribution.cs b/Packages/com.singularitygroup.hotreload/Editor/Attribution/VSAttribution.cs new file mode 100644 index 0000000..1cd7459 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Attribution/VSAttribution.cs @@ -0,0 +1,149 @@ +using System; +using UnityEngine.Analytics; + +#if UNITY_6000_0_OR_NEWER +namespace UnityEditor.VSAttribution.HotReload +{ + internal static class VSAttribution + { + + const int k_VersionId = 4; + const int k_MaxEventsPerHour = 10; + const int k_MaxNumberOfElements = 1000; + + const string k_VendorKey = "unity.vsp-attribution"; + const string k_EventName = "vspAttribution"; + + [Serializable] + private class VSAttributionData : IAnalytic.IData { + public string actionName; + public string partnerName; + public string customerUid; + public string extra; + } + + [AnalyticInfo(k_EventName, k_VendorKey, k_VersionId, k_MaxEventsPerHour, k_MaxNumberOfElements)] + class VSAttributionAnalytics : IAnalytic { + private VSAttributionData m_Data; + + private VSAttributionAnalytics( + string actionName, + string partnerName, + string customerUid, + string extra + ) { + this.m_Data = new VSAttributionData { + actionName = actionName, + partnerName = partnerName, + customerUid = customerUid, + extra = extra + }; + } + + public bool TryGatherData(out IAnalytic.IData data, out Exception error) { + data = this.m_Data; + error = null; + return this.m_Data != null; + } + + public static AnalyticsResult SendEvent( + string actionName, + string partnerName, + string customerUid, + string extra + ) { + return EditorAnalytics.SendAnalytic(new VSAttributionAnalytics(actionName, + partnerName, + customerUid, + extra + )); + } + } + + /// + /// Registers and attempts to send a Verified Solutions Attribution event. + /// + /// Name of the action, identifying a place this event was called from. + /// Identifiable Verified Solutions Partner's name. + /// Unique identifier of the customer using Partner's Verified Solution. + public static AnalyticsResult SendAttributionEvent(string actionName, string partnerName, string customerUid) + { + try + { + return VSAttributionAnalytics.SendEvent(actionName, partnerName, customerUid, "{}"); + } + catch + { + // Fail silently + return AnalyticsResult.AnalyticsDisabled; + } + } + } +} +#else +namespace UnityEditor.VSAttribution.HotReload +{ + internal static class VSAttribution + { + const int k_VersionId = 4; + const int k_MaxEventsPerHour = 10; + const int k_MaxNumberOfElements = 1000; + + const string k_VendorKey = "unity.vsp-attribution"; + const string k_EventName = "vspAttribution"; + + static bool RegisterEvent() + { + AnalyticsResult result = EditorAnalytics.RegisterEventWithLimit(k_EventName, k_MaxEventsPerHour, + k_MaxNumberOfElements, k_VendorKey, k_VersionId); + + var isResultOk = result == AnalyticsResult.Ok; + return isResultOk; + } + + [Serializable] + struct VSAttributionData + { + public string actionName; + public string partnerName; + public string customerUid; + public string extra; + } + + /// + /// Registers and attempts to send a Verified Solutions Attribution event. + /// + /// Name of the action, identifying a place this event was called from. + /// Identifiable Verified Solutions Partner's name. + /// Unique identifier of the customer using Partner's Verified Solution. + public static AnalyticsResult SendAttributionEvent(string actionName, string partnerName, string customerUid) + { + try + { + // Are Editor Analytics enabled ? (Preferences) + if (!EditorAnalytics.enabled) + return AnalyticsResult.AnalyticsDisabled; + + if (!RegisterEvent()) + return AnalyticsResult.InvalidData; + + // Create an expected data object + var eventData = new VSAttributionData + { + actionName = actionName, + partnerName = partnerName, + customerUid = customerUid, + extra = "{}" + }; + + return EditorAnalytics.SendEventWithLimit(k_EventName, eventData, k_VersionId); + } + catch + { + // Fail silently + return AnalyticsResult.AnalyticsDisabled; + } + } + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Editor/Attribution/VSAttribution.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Attribution/VSAttribution.cs.meta new file mode 100644 index 0000000..a63c4e1 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Attribution/VSAttribution.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d7493a30e78d4ec783ead20baea2c4d2 +timeCreated: 1678721534 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Attribution/VSAttribution.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI.meta b/Packages/com.singularitygroup.hotreload/Editor/CLI.meta new file mode 100644 index 0000000..7ce99ac --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a100625513d043c7bb875461043f4f86 +timeCreated: 1673820086 \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/CliUtils.cs b/Packages/com.singularitygroup.hotreload/Editor/CLI/CliUtils.cs new file mode 100644 index 0000000..6c3833b --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/CliUtils.cs @@ -0,0 +1,128 @@ +using System.Diagnostics; +using System.IO; +using System.Security.Cryptography; +using System.Text; +using SingularityGroup.HotReload.Newtonsoft.Json; +using UnityEngine; +using System; + +namespace SingularityGroup.HotReload.Editor.Cli { + internal static class CliUtils { + static readonly string projectIdentifier = GetProjectIdentifier(); + + class Config { + public bool singleInstance; + } + + public static string GetProjectIdentifier() { + if (File.Exists(PackageConst.ConfigFileName)) { + var config = JsonConvert.DeserializeObject(File.ReadAllText(PackageConst.ConfigFileName)); + if (config.singleInstance) { + return null; + } + } + var path = Path.GetDirectoryName(UnityHelper.DataPath); + var name = new DirectoryInfo(path).Name; + using (SHA256 sha256 = SHA256.Create()) { + byte[] inputBytes = Encoding.UTF8.GetBytes(path); + byte[] hashBytes = sha256.ComputeHash(inputBytes); + var hash = BitConverter.ToString(hashBytes).Replace("-", "").Substring(0, 6).ToUpper(); + return $"{name}-{hash}"; + } + } + + public static string GetTempDownloadFilePath(string osxFileName) { + if (UnityHelper.Platform == RuntimePlatform.OSXEditor) { + // project specific temp directory that is writeable on MacOS (Path.GetTempPath() wasn't when run through HotReload.app) + return Path.GetFullPath(PackageConst.LibraryCachePath + $"/HotReloadServerTemp/{osxFileName}"); + } else { + return Path.GetTempFileName(); + } + } + + public static string GetHotReloadTempDir() { + if (UnityHelper.Platform == RuntimePlatform.OSXEditor) { + // project specific temp directory that is writeable on MacOS (Path.GetTempPath() wasn't when run through HotReload.app) + return Path.GetFullPath(PackageConst.LibraryCachePath + "/HotReloadServerTemp"); + } else { + if (projectIdentifier != null) { + return Path.Combine(Path.GetTempPath(), "HotReloadTemp", projectIdentifier); + } else { + return Path.Combine(Path.GetTempPath(), "HotReloadTemp"); + } + } + } + + public static string GetAppDataPath() { +# if (UNITY_EDITOR_OSX) + var baseDir = "/Users/Shared"; +# elif (UNITY_EDITOR_LINUX) + var baseDir = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); +# else + var baseDir = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); +#endif + return Path.Combine(baseDir, "singularitygroup-hotreload"); + } + + public static string GetExecutableTargetDir() { + if (PackageConst.IsAssetStoreBuild) { + return Path.Combine(GetAppDataPath(), "asset-store", $"executables_{PackageConst.ServerVersion.Replace('.', '-')}"); + } + return Path.Combine(GetAppDataPath(), $"executables_{PackageConst.ServerVersion.Replace('.', '-')}"); + } + + public static string GetCliTempDir() { + return Path.Combine(GetHotReloadTempDir(), "MethodPatches"); + } + + public static void Chmod(string targetFile, string flags = "+x") { + // ReSharper disable once PossibleNullReferenceException + Process.Start(new ProcessStartInfo("chmod", $"{flags} \"{targetFile}\"") { + UseShellExecute = false, + }).WaitForExit(2000); + } + + public static bool TryFindServerDir(out string path) { + const string serverBasePath = "Packages/com.singularitygroup.hotreload/Server"; + if(Directory.Exists(serverBasePath)) { + path = Path.GetFullPath(serverBasePath); + return true; + } + + //Not found in packages. Try to find in assets folder. + //fast path - this is the expected folder + const string alternativeExecutablePath = "Assets/HotReload/Server"; + if(Directory.Exists(alternativeExecutablePath)) { + path = Path.GetFullPath(alternativeExecutablePath); + return true; + } + //slow path - try to find the server directory somewhere in the assets folder + var candidates = Directory.GetDirectories("Assets", "HotReload", SearchOption.AllDirectories); + foreach(var candidate in candidates) { + var serverDir = Path.Combine(candidate, "Server"); + if(Directory.Exists(serverDir)) { + path = Path.GetFullPath(serverDir); + return true; + } + } + path = null; + return false; + } + + public static string GetPidFilePath(string hotreloadTempDir) { + return Path.GetFullPath(Path.Combine(hotreloadTempDir, "server.pid")); + } + + public static void KillLastKnownHotReloadProcess() { + var pidPath = GetPidFilePath(GetHotReloadTempDir()); + try { + var pid = int.Parse(File.ReadAllText(pidPath)); + Process.GetProcessById(pid).Kill(); + } + catch { + //ignore + } + File.Delete(pidPath); + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/CliUtils.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/CLI/CliUtils.cs.meta new file mode 100644 index 0000000..3058f9c --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/CliUtils.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b0243b348dec4a308dc7b98e09842d2c +timeCreated: 1673820875 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/CLI/CliUtils.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/FallbackCliController.cs b/Packages/com.singularitygroup.hotreload/Editor/CLI/FallbackCliController.cs new file mode 100644 index 0000000..6601490 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/FallbackCliController.cs @@ -0,0 +1,13 @@ + +using System.Threading.Tasks; + +namespace SingularityGroup.HotReload.Editor.Cli { + class FallbackCliController : ICliController { + public string BinaryFileName => ""; + public string PlatformName => ""; + public bool CanOpenInBackground => false; + public Task Start(StartArgs args) => Task.CompletedTask; + + public Task Stop() => Task.CompletedTask; + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/FallbackCliController.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/CLI/FallbackCliController.cs.meta new file mode 100644 index 0000000..6360970 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/FallbackCliController.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 090ed5d45f294f0d8799879206139bd6 +timeCreated: 1673824275 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/CLI/FallbackCliController.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/HotReloadCli.cs b/Packages/com.singularitygroup.hotreload/Editor/CLI/HotReloadCli.cs new file mode 100644 index 0000000..2f24aff --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/HotReloadCli.cs @@ -0,0 +1,244 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Net; +#if UNITY_EDITOR_WIN +using System.Net.NetworkInformation; +#else +using System.Net.Sockets; +#endif +using System.Threading.Tasks; +using SingularityGroup.HotReload.Newtonsoft.Json; +using UnityEditor; + +namespace SingularityGroup.HotReload.Editor.Cli { + [InitializeOnLoad] + public static class HotReloadCli { + internal static readonly ICliController controller; + + //InitializeOnLoad ensures controller gets initialized on unity thread + static HotReloadCli() { + controller = + #if UNITY_EDITOR_OSX + new OsxCliController(); + #elif UNITY_EDITOR_LINUX + new LinuxCliController(); + #elif UNITY_EDITOR_WIN + new WindowsCliController(); + #else + new FallbackCliController(); + #endif + } + + public static bool CanOpenInBackground => controller.CanOpenInBackground; + + /// + /// Public API: Starts the Hot Reload server. Must be on the main thread + /// + public static Task StartAsync() { + return StartAsync( + isReleaseMode: RequestHelper.IsReleaseMode(), + exposeServerToNetwork: HotReloadPrefs.ExposeServerToLocalNetwork, + allAssetChanges: HotReloadPrefs.AllAssetChanges, + createNoWindow: HotReloadPrefs.DisableConsoleWindow, + detailedErrorReporting: !HotReloadPrefs.DisableDetailedErrorReporting + ); + } + + internal static async Task StartAsync(bool exposeServerToNetwork, bool allAssetChanges, bool createNoWindow, bool isReleaseMode, bool detailedErrorReporting, LoginData loginData = null) { + var port = await Prepare().ConfigureAwait(false); + await ThreadUtility.SwitchToThreadPool(); + StartArgs args; + if (TryGetStartArgs(UnityHelper.DataPath, exposeServerToNetwork, allAssetChanges, createNoWindow, isReleaseMode, detailedErrorReporting, loginData, port, out args)) { + await controller.Start(args); + } + } + + /// + /// Public API: Stops the Hot Reload server + /// + /// + /// This is a no-op in case the server is not running + /// + public static Task StopAsync() { + return controller.Stop(); + } + + class Config { +#pragma warning disable CS0649 + public bool useBuiltInProjectGeneration; +#pragma warning restore CS0649 + } + + static bool TryGetStartArgs(string dataPath, bool exposeServerToNetwork, bool allAssetChanges, bool createNoWindow, bool isReleaseMode, bool detailedErrorReporting, LoginData loginData, int port, out StartArgs args) { + string serverDir; + if(!CliUtils.TryFindServerDir(out serverDir)) { + Log.Warning($"Failed to start the Hot Reload Server. " + + $"Unable to locate the 'Server' directory. " + + $"Make sure the 'Server' directory is " + + $"somewhere in the Assets folder inside a 'HotReload' folder or in the HotReload package"); + args = null; + return false; + } + + Config config; + if (File.Exists(PackageConst.ConfigFileName)) { + config = JsonConvert.DeserializeObject(File.ReadAllText(PackageConst.ConfigFileName)); + } else { + config = new Config(); + } + var hotReloadTmpDir = CliUtils.GetHotReloadTempDir(); + var cliTempDir = CliUtils.GetCliTempDir(); + // Versioned path so that we only need to extract the binary once. User can have multiple projects + // on their machine using different HotReload versions. + var executableTargetDir = CliUtils.GetExecutableTargetDir(); + Directory.CreateDirectory(executableTargetDir); // ensure exists + var executableSourceDir = Path.Combine(serverDir, controller.PlatformName); + var unityProjDir = Path.GetDirectoryName(dataPath); + string slnPath; + if (config.useBuiltInProjectGeneration) { + var info = new DirectoryInfo(Path.GetFullPath(".")); + slnPath = Path.Combine(Path.GetFullPath("."), info.Name + ".sln"); + if (!File.Exists(slnPath)) { + Log.Warning($"Failed to start the Hot Reload Server. Cannot find solution file. Please disable \"useBuiltInProjectGeneration\" in settings to enable custom project generation."); + args = null; + return false; + } + Log.Info("Using default project generation. If you encounter any problem with Unity's default project generation consider disabling it to use custom project generation."); + try { + Directory.Delete(ProjectGeneration.ProjectGeneration.tempDir, true); + } catch(Exception ex) { + Log.Exception(ex); + } + } else { + slnPath = ProjectGeneration.ProjectGeneration.GetSolutionFilePath(dataPath); + } + + if (!File.Exists(slnPath)) { + Log.Warning($"No .sln file found. Open any c# file to generate it so Hot Reload can work properly"); + } + + var searchAssemblies = string.Join(";", CodePatcher.I.GetAssemblySearchPaths()); + var cliArguments = $@"-u ""{unityProjDir}"" -s ""{slnPath}"" -t ""{cliTempDir}"" -a ""{searchAssemblies}"" -ver ""{PackageConst.Version}"" -proc ""{Process.GetCurrentProcess().Id}"" -assets ""{allAssetChanges}"" -p ""{port}"" -r {isReleaseMode} -detailed-error-reporting {detailedErrorReporting}"; + if (loginData != null) { + cliArguments += $@" -email ""{loginData.email}"" -pass ""{loginData.password}"""; + } + if (exposeServerToNetwork) { + // server will listen on local network interface (default is localhost only) + cliArguments += " -e true"; + } + args = new StartArgs { + hotreloadTempDir = hotReloadTmpDir, + cliTempDir = cliTempDir, + executableTargetDir = executableTargetDir, + executableSourceDir = executableSourceDir, + cliArguments = cliArguments, + unityProjDir = unityProjDir, + createNoWindow = createNoWindow, + }; + return true; + } + + private static int DiscoverFreePort() { + var maxAttempts = 10; + for (int attempt = 0; attempt < maxAttempts; attempt++) { + var port = RequestHelper.defaultPort + attempt; + if (IsPortInUse(port)) { + continue; + } + return port; + } + // we give up at this point + return RequestHelper.defaultPort + maxAttempts; + } + + public static bool IsPortInUse(int port) { + // Note that there is a racecondition that a port gets occupied after checking. + // However, it will very rare someone will run into this. +#if UNITY_EDITOR_WIN + IPGlobalProperties ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties(); + IPEndPoint[] activeTcpListeners = ipGlobalProperties.GetActiveTcpListeners(); + + foreach (IPEndPoint endPoint in activeTcpListeners) { + if (endPoint.Port == port) { + return true; + } + } + + return false; +#else + try { + using (TcpClient tcpClient = new TcpClient()) { + tcpClient.Connect(IPAddress.Loopback, port); // Try to connect to the specified port + return true; + } + } catch (SocketException) { + return false; + } catch (Exception e) { + Log.Exception(e); + // act as if the port is allocated + return true; + } +#endif + } + + + static async Task Prepare() { + await ThreadUtility.SwitchToMainThread(); + + var dataPath = UnityHelper.DataPath; + await ProjectGeneration.ProjectGeneration.EnsureSlnAndCsprojFiles(dataPath); + await PrepareBuildInfoAsync(); + PrepareSystemPathsFile(); + + var port = DiscoverFreePort(); + HotReloadState.ServerPort = port; + RequestHelper.SetServerPort(port); + return port; + } + + static bool didLogWarning; + internal static async Task PrepareBuildInfoAsync() { + await ThreadUtility.SwitchToMainThread(); + var buildInfoInput = await BuildInfoHelper.GetGenerateBuildInfoInput(); + await Task.Run(() => { + try { + var buildInfo = BuildInfoHelper.GenerateBuildInfoThreaded(buildInfoInput); + PrepareBuildInfo(buildInfo); + } catch (Exception e) { + if (!didLogWarning) { + Log.Warning($"Preparing build info failed! On-device functionality might not work. Exception: {e}"); + didLogWarning = true; + } else { + Log.Debug($"Preparing build info failed! On-device functionality might not work. Exception: {e}"); + } + } + }); + } + + internal static void PrepareBuildInfo(BuildInfo buildInfo) { + // When starting server make sure it starts with correct player data state. + // (this fixes issue where Unity is in background and not sending files state). + // Always write player data because you can be on any build target and want to connect with a downloaded android build. + var json = buildInfo.ToJson(); + var cliTempDir = CliUtils.GetCliTempDir(); + Directory.CreateDirectory(cliTempDir); + File.WriteAllText(Path.Combine(cliTempDir, "playerdata.json"), json); + } + + static void PrepareSystemPathsFile() { +#pragma warning disable CS0618 // obsolete since 2023 + var lvl = PlayerSettings.GetApiCompatibilityLevel(EditorUserBuildSettings.selectedBuildTargetGroup); +#pragma warning restore CS0618 +#if UNITY_2020_3_OR_NEWER + var dirs = UnityEditor.Compilation.CompilationPipeline.GetSystemAssemblyDirectories(lvl); +#else + var t = typeof(UnityEditor.Editor).Assembly.GetType("UnityEditor.Scripting.ScriptCompilation.MonoLibraryHelpers"); + var m = t.GetMethod("GetSystemReferenceDirectories"); + var dirs = m.Invoke(null, new object[] { lvl }); +#endif + Directory.CreateDirectory(PackageConst.LibraryCachePath); + File.WriteAllText(PackageConst.LibraryCachePath + "/systemAssemblies.json", JsonConvert.SerializeObject(dirs)); + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/HotReloadCli.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/CLI/HotReloadCli.cs.meta new file mode 100644 index 0000000..3fa5634 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/HotReloadCli.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9f756ed6b78d428b8b9f83a6544317fe +timeCreated: 1673820326 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/CLI/HotReloadCli.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/ICliController.cs b/Packages/com.singularitygroup.hotreload/Editor/CLI/ICliController.cs new file mode 100644 index 0000000..93d8826 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/ICliController.cs @@ -0,0 +1,13 @@ +using System.Threading.Tasks; + +namespace SingularityGroup.HotReload.Editor.Cli { + interface ICliController { + string BinaryFileName {get;} + string PlatformName {get;} + bool CanOpenInBackground {get;} + + Task Start(StartArgs args); + + Task Stop(); + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/ICliController.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/CLI/ICliController.cs.meta new file mode 100644 index 0000000..bc22a31 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/ICliController.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 8cba48e21f76483da3ba615915e731fd +timeCreated: 1673820542 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/CLI/ICliController.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/LinuxCliController.cs b/Packages/com.singularitygroup.hotreload/Editor/CLI/LinuxCliController.cs new file mode 100644 index 0000000..9bb68ee --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/LinuxCliController.cs @@ -0,0 +1,73 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Threading.Tasks; +using Debug = UnityEngine.Debug; + +namespace SingularityGroup.HotReload.Editor.Cli { + + class LinuxCliController : ICliController { + Process process; + + public string BinaryFileName => "CodePatcherCLI"; + public string PlatformName => "linux-x64"; + public bool CanOpenInBackground => true; + + public Task Start(StartArgs args) { + var startScript = Path.Combine(args.executableSourceDir, "hotreload-start-script.sh"); + if (!File.Exists(startScript)) { + throw new FileNotFoundException(startScript); + } + File.WriteAllText(startScript, File.ReadAllText(startScript).Replace("\r\n", "\n")); + CliUtils.Chmod(startScript); + + var title = CodePatcher.TAG + "Server " + new DirectoryInfo(args.unityProjDir).Name; + title = title.Replace(" ", "-"); + title = title.Replace("'", ""); + + var cliargsfile = Path.GetTempFileName(); + File.WriteAllText(cliargsfile,args.cliArguments); + var codePatcherProc = Process.Start(new ProcessStartInfo { + FileName = startScript, + Arguments = + $"--title \"{title}\"" + + $" --executables-source-dir \"{args.executableSourceDir}\" " + + $" --executable-taget-dir \"{args.executableTargetDir}\"" + + $" --pidfile \"{CliUtils.GetPidFilePath(args.hotreloadTempDir)}\"" + + $" --cli-arguments-file \"{cliargsfile}\"" + + $" --method-patch-dir \"{args.cliTempDir}\"" + + $" --create-no-window \"{args.createNoWindow}\"", + UseShellExecute = false, + RedirectStandardOutput = true, + RedirectStandardError = true + }); + if (codePatcherProc == null) { + if (File.Exists(cliargsfile)) { + File.Delete(cliargsfile); + } + throw new Exception("Could not start code patcher process."); + } + codePatcherProc.BeginErrorReadLine(); + codePatcherProc.BeginOutputReadLine(); + codePatcherProc.OutputDataReceived += (_, a) => { + }; + // error data can also mean we kill the proc beningly + codePatcherProc.ErrorDataReceived += (_, a) => { + }; + process = codePatcherProc; + return Task.CompletedTask; + } + + public async Task Stop() { + await RequestHelper.KillServer(); + try { + // process.CloseMainWindow throws if proc already exited. + // also we just rely on the pid file it is fine + CliUtils.KillLastKnownHotReloadProcess(); + } catch { + //ignored + } + process = null; + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/LinuxCliController.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/CLI/LinuxCliController.cs.meta new file mode 100644 index 0000000..c4bce26 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/LinuxCliController.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c894a69d595d4ada8cfa4afe23c68ab9 +timeCreated: 1673820131 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/CLI/LinuxCliController.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/OsxCliController.cs b/Packages/com.singularitygroup.hotreload/Editor/CLI/OsxCliController.cs new file mode 100644 index 0000000..d7034e5 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/OsxCliController.cs @@ -0,0 +1,189 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Threading.Tasks; +using SingularityGroup.HotReload.Editor.Semver; +using Debug = UnityEngine.Debug; + +namespace SingularityGroup.HotReload.Editor.Cli { + class OsxCliController : ICliController { + Process process; + + public string BinaryFileName => "HotReload.app.zip"; + public string PlatformName => "osx-x64"; + public bool CanOpenInBackground => false; + + /// In MacOS 13 Ventura, our app cannot launch a terminal window. + /// We use a custom app that launches HotReload server and shows it's output (just like a terminal would). + // Including MacOS 12 Monterey as well so I can dogfood it -Troy + private static bool UseCustomConsoleApp() => MacOSVersion.Value.Major >= 12; + + // dont use static because null comparison on SemVersion is broken + private static readonly Lazy MacOSVersion = new Lazy(() => { + //UnityHelper.OperatingSystem; // in Unity 2018 it returns 10.16 on monterey (no idea why) + //Environment.OSVersion returns unix version like 21.x + var startinfo = new ProcessStartInfo { + FileName = "/usr/bin/sw_vers", + Arguments = "-productVersion", + UseShellExecute = false, + RedirectStandardOutput = true, + CreateNoWindow = true, + }; + var process = Process.Start(startinfo); + + string osVersion = process.StandardOutput.ReadToEnd().Trim(); + + SemVersion macosVersion; + if (SemVersion.TryParse(osVersion, out macosVersion)) { + return macosVersion; + } + // should never happen + Log.Warning("Failed to detect MacOS version, if Hot Reload fails to start, please contact support."); + return SemVersion.None; + }); + + public async Task Start(StartArgs args) { + // Unzip the .app.zip to temp folder .app + var appExecutablePath = $"{args.executableTargetDir}/HotReload.app/Contents/MacOS/HotReload"; + var cliExecutablePath = $"{args.executableTargetDir}/HotReload.app/Contents/Resources/CodePatcherCLI"; + + // ensure running on threadpool + await ThreadUtility.SwitchToThreadPool(); + + // executableTargetDir is versioned, so only need to extract once. + if (!File.Exists(appExecutablePath)) { + try { + // delete only the extracted app folder (must not delete downloaded zip which is in same folder) + Directory.Delete(args.executableTargetDir + "/HotReload.app", true); + } catch (IOException) { + // ignore directory not found + } + Directory.CreateDirectory(args.executableTargetDir); + UnzipMacOsPackage($"{args.executableTargetDir}/{BinaryFileName}", args.executableTargetDir + "/"); + } + + try { + // Always stop first because rarely it has happened that the server process was still running after custom console closed. + // Note: this will also stop Hot Reload started by other Unity projects. + await Stop(); + } catch { + // ignored + } + + if (UseCustomConsoleApp()) { + await StartCustomConsole(args, appExecutablePath); + } else { + await StartTerminal(args, cliExecutablePath); + } + } + + public Task StartCustomConsole(StartArgs args, string executablePath) { + process = Process.Start(new ProcessStartInfo { + // Path to the HotReload.app + FileName = executablePath, + Arguments = args.cliArguments, + UseShellExecute = false, + }); + return Task.CompletedTask; + } + + public Task StartTerminal(StartArgs args, string executablePath) { + var pidFilePath = CliUtils.GetPidFilePath(args.hotreloadTempDir); + // To run in a Terminal window (so you can see compiler logs), we must put the arguments into a script file + // and run the script in Terminal. Terminal.app does not forward the arguments passed to it via `open --args`. + // *.command files are opened with the user's default terminal app. + var executableScriptPath = Path.Combine(Path.GetTempPath(), "Start_HotReloadServer.command"); + // You don't need to copy the cli executable on mac + // omit hashbang line, let shell use the default interpreter (easier than detecting your default shell beforehand) + File.WriteAllText(executableScriptPath, $"echo $$ > \"{pidFilePath}\"" + + $"\ncd \"{Environment.CurrentDirectory}\"" + // set cwd because 'open' launches script with $HOME as cwd. + $"\n\"{executablePath}\" {args.cliArguments} || read"); + + CliUtils.Chmod(executableScriptPath); // make it executable + CliUtils.Chmod(executablePath); // make it executable + + Directory.CreateDirectory(args.hotreloadTempDir); + Directory.CreateDirectory(args.executableTargetDir); + Directory.CreateDirectory(args.cliTempDir); + + process = Process.Start(new ProcessStartInfo { + FileName = "open", + Arguments = $"{(args.createNoWindow ? "-gj" : "")} '{executableScriptPath}'", + UseShellExecute = true, + }); + + if (process.WaitForExit(1000)) { + if (process.ExitCode != 0) { + Log.Warning("Failed to the run the start server command. ExitCode={0}\nFilepath: {1}", process.ExitCode, executableScriptPath); + } + } + else { + process.EnableRaisingEvents = true; + process.Exited += (_, __) => { + if (process.ExitCode != 0) { + Log.Warning("Failed to the run the start server command. ExitCode={0}\nFilepath: {1}", process.ExitCode, executableScriptPath); + } + }; + } + return Task.CompletedTask; + } + + public async Task Stop() { + // kill HotReload server process (on mac it has different pid to the window which started it) + await RequestHelper.KillServer(); + + // process.CloseMainWindow throws if proc already exited. + // We rely on the pid file for killing the trampoline script (in-case script is just starting and HotReload server not running yet) + process = null; + CliUtils.KillLastKnownHotReloadProcess(); + } + + static void UnzipMacOsPackage(string zipPath, string unzippedFolderPath) { + //Log.Info("UnzipMacOsPackage called with {0}\n workingDirectory = {1}", zipPath, unzippedFolderPath); + if (!zipPath.EndsWith(".zip")) { + throw new ArgumentException($"Expected to end with .zip, but it was: {zipPath}", nameof(zipPath)); + } + + if (!File.Exists(zipPath)) { + throw new ArgumentException($"zip file not found {zipPath}", nameof(zipPath)); + } + var processStartInfo = new ProcessStartInfo { + FileName = "unzip", + Arguments = $"-o \"{zipPath}\"", + WorkingDirectory = unzippedFolderPath, // unzip extracts to working directory by default + UseShellExecute = true, + CreateNoWindow = true + }; + + Process process = Process.Start(processStartInfo); + process.WaitForExit(); + if (process.ExitCode != 0) { + throw new Exception($"unzip failed with ExitCode {process.ExitCode}"); + } + //Log.Info($"did unzip to {unzippedFolderPath}"); + // Move the .app folder to unzippedFolderPath + + // find the .app directory which is now inside unzippedFolderPath directory + var foundDirs = Directory.GetDirectories(unzippedFolderPath, "*.app", SearchOption.AllDirectories); + var done = false; + var destDir = unzippedFolderPath + "HotReload.app"; + foreach (var dir in foundDirs) { + if (dir.EndsWith(".app")) { + done = true; + if (dir == destDir) { + // already in the right place + break; + } + Directory.Move(dir, destDir); + //Log.Info("Moved to " + destDir); + break; + } + } + + if (!done) { + throw new Exception("Failed to find .app directory and move it to " + destDir); + } + //Log.Info($"did unzip to {unzippedFolderPath}"); + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/OsxCliController.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/CLI/OsxCliController.cs.meta new file mode 100644 index 0000000..23a9425 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/OsxCliController.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5ebeed1c29454bc78e5a9ee64f2c9def +timeCreated: 1673821666 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/CLI/OsxCliController.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/StartArgs.cs b/Packages/com.singularitygroup.hotreload/Editor/CLI/StartArgs.cs new file mode 100644 index 0000000..7d6b2a5 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/StartArgs.cs @@ -0,0 +1,12 @@ +namespace SingularityGroup.HotReload.Editor.Cli { + class StartArgs { + public string hotreloadTempDir; + // aka method patch temp dir + public string cliTempDir; + public string executableTargetDir; + public string executableSourceDir; + public string cliArguments; + public string unityProjDir; + public bool createNoWindow; + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/StartArgs.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/CLI/StartArgs.cs.meta new file mode 100644 index 0000000..53605c9 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/StartArgs.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 43d69eb7ae8aef4428da83562105bfaa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/CLI/StartArgs.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/WindowsCliController.cs b/Packages/com.singularitygroup.hotreload/Editor/CLI/WindowsCliController.cs new file mode 100644 index 0000000..d623fda --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/WindowsCliController.cs @@ -0,0 +1,33 @@ +using System.Diagnostics; +using System.IO; +using System.Threading.Tasks; + +namespace SingularityGroup.HotReload.Editor.Cli { + class WindowsCliController : ICliController { + Process process; + + public string BinaryFileName => "CodePatcherCLI.exe"; + public string PlatformName => "win-x64"; + public bool CanOpenInBackground => true; + + public Task Start(StartArgs args) { + process = Process.Start(new ProcessStartInfo { + FileName = Path.GetFullPath(Path.Combine(args.executableTargetDir, "CodePatcherCLI.exe")), + Arguments = args.cliArguments, + UseShellExecute = !args.createNoWindow, + CreateNoWindow = args.createNoWindow, + }); + return Task.CompletedTask; + } + + public async Task Stop() { + await RequestHelper.KillServer(); + try { + process?.CloseMainWindow(); + } catch { + //ignored + } + process = null; + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/CLI/WindowsCliController.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/CLI/WindowsCliController.cs.meta new file mode 100644 index 0000000..03150d5 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CLI/WindowsCliController.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: e5644af69ec7404a8039ff2833610d48 +timeCreated: 1673822169 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/CLI/WindowsCliController.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/CompileChecker.meta b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker.meta new file mode 100644 index 0000000..855fa44 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 80c2056f805745542a2c295385b25479 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/DefaultCompileChecker.cs b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/DefaultCompileChecker.cs new file mode 100644 index 0000000..fc22607 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/DefaultCompileChecker.cs @@ -0,0 +1,70 @@ +#if UNITY_2019_1_OR_NEWER +using System; +using System.IO; +using System.Threading.Tasks; +using UnityEditor; +using UnityEditor.Compilation; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor { + class DefaultCompileChecker : ICompileChecker { + const string recompileFilePath = PackageConst.LibraryCachePath + "/recompile.txt"; + public bool hasCompileErrors { get; private set; } + bool recompile; + public DefaultCompileChecker() { + CompilationPipeline.assemblyCompilationFinished += DetectCompileErrors; + CompilationPipeline.compilationFinished += OnCompilationFinished; + var currentSessionId = EditorAnalyticsSessionInfo.id; + Task.Run(() => { + try { + var compileSessionId = File.ReadAllText(recompileFilePath); + if(compileSessionId == currentSessionId.ToString()) { + ThreadUtility.RunOnMainThread(() => { + recompile = true; + _onCompilationFinished?.Invoke(); + }); + } + File.Delete(recompileFilePath); + } catch(DirectoryNotFoundException) { + //dir doesn't exist -> no recompile required + } catch(FileNotFoundException) { + //file doesn't exist -> no recompile required + } catch(Exception ex) { + Log.Warning("compile checker encountered issue: {0} {1}", ex.GetType().Name, ex.Message); + } + }); + } + + void DetectCompileErrors(string _, CompilerMessage[] messages) { + for (int i = 0; i < messages.Length; i++) { + if (messages[i].type == CompilerMessageType.Error) { + hasCompileErrors = true; + return; + } + } + hasCompileErrors = false; + } + + void OnCompilationFinished(object _) { + //Don't recompile on compile errors + if(!hasCompileErrors) { + Directory.CreateDirectory(Path.GetDirectoryName(recompileFilePath)); + File.WriteAllText(recompileFilePath, EditorAnalyticsSessionInfo.id.ToString()); + } + } + + Action _onCompilationFinished; + public event Action onCompilationFinished { + add { + if(recompile && value != null) { + value(); + } + _onCompilationFinished += value; + } + remove { + _onCompilationFinished -= value; + } + } + } +} +#endif \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/DefaultCompileChecker.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/DefaultCompileChecker.cs.meta new file mode 100644 index 0000000..c20fd73 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/DefaultCompileChecker.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: ab09f7c657e6ecb44b65dd9f8cfc3d9f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/CompileChecker/DefaultCompileChecker.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/ICompileChecker.cs b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/ICompileChecker.cs new file mode 100644 index 0000000..8569d65 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/ICompileChecker.cs @@ -0,0 +1,18 @@ +using System; + +namespace SingularityGroup.HotReload.Editor { + interface ICompileChecker { + event Action onCompilationFinished; + bool hasCompileErrors { get; } + } + + static class CompileChecker { + internal static ICompileChecker Create() { + #if UNITY_2019_1_OR_NEWER + return new DefaultCompileChecker(); + #else + return new LegacyCompileChecker(); + #endif + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/ICompileChecker.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/ICompileChecker.cs.meta new file mode 100644 index 0000000..97eb735 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/ICompileChecker.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 82bf36f2126bbd1498d4964272426e0f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/CompileChecker/ICompileChecker.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/LegacyCompileChecker.cs b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/LegacyCompileChecker.cs new file mode 100644 index 0000000..a7d9c77 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/LegacyCompileChecker.cs @@ -0,0 +1,55 @@ +#if !UNITY_2019_1_OR_NEWER +using System; +using System.Globalization; +using System.IO; +using System.Threading.Tasks; + +namespace SingularityGroup.HotReload.Editor { + class LegacyCompileChecker : ICompileChecker { + const string timestampFilePath = PackageConst.LibraryCachePath + "/lastCompileTimestamp.txt"; + public bool hasCompileErrors { get; } + const string assemblyPath = "Library/ScriptAssemblies"; + bool recompile; + public LegacyCompileChecker() { + Task.Run(() => { + var info = new DirectoryInfo(assemblyPath); + if(!info.Exists) { + return; + } + var currentCompileTimestamp = default(DateTime); + foreach (var file in info.GetFiles("*.dll")) { + var fileWriteDate = file.LastWriteTimeUtc; + if(fileWriteDate > currentCompileTimestamp) { + currentCompileTimestamp = fileWriteDate; + } + } + if(File.Exists(timestampFilePath)) { + var lastTimestampStr = File.ReadAllText(timestampFilePath); + var lastTimestamp = DateTime.ParseExact(lastTimestampStr, "o", CultureInfo.CurrentCulture).ToUniversalTime(); + if(currentCompileTimestamp > lastTimestamp) { + ThreadUtility.RunOnMainThread(() => { + recompile = true; + _onCompilationFinished?.Invoke(); + }); + } + } + Directory.CreateDirectory(Path.GetDirectoryName(timestampFilePath)); + File.WriteAllText(timestampFilePath, currentCompileTimestamp.ToString("o")); + }); + } + + Action _onCompilationFinished; + public event Action onCompilationFinished { + add { + if(recompile && value != null) { + value(); + } + _onCompilationFinished += value; + } + remove { + _onCompilationFinished -= value; + } + } + } +} +#endif \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/LegacyCompileChecker.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/LegacyCompileChecker.cs.meta new file mode 100644 index 0000000..7d9eda9 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/CompileChecker/LegacyCompileChecker.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: f56ec68ce4b1fcc4b9c8ba5962d890f1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/CompileChecker/LegacyCompileChecker.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Constants.cs b/Packages/com.singularitygroup.hotreload/Editor/Constants.cs new file mode 100644 index 0000000..3b90ef4 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Constants.cs @@ -0,0 +1,44 @@ + +namespace SingularityGroup.HotReload.Editor { + internal static class Constants { + public const string WebsiteURL = "https://hotreload.net"; + + public const string ProductPurchaseURL = WebsiteURL + "/pricing"; + public const string ProductPurchaseBusinessURL = ProductPurchaseURL + "?tab=business"; + public const string DocumentationURL = WebsiteURL + "/documentation"; + public const string AdditionalContentURL = DocumentationURL + "/getting-started#downloading-additional-content"; + public const string DownloadUrl = WebsiteURL + "/download"; + public const string ContactURL = WebsiteURL + "/contact"; + public const string ForumURL = "https://forum.unity.com/threads/hot-reload-edit-code-without-compiling.1389969/"; + public const string ManageLicenseURL = "https://billing.stripe.com/p/login/28odTObUQ0CU0Za3cc"; + public const string ManageAccountURL = "https://users.licensespring.com/login"; + public const string ForgotPasswordURL = "https://users.licensespring.com/reset-password"; + public const string ReportIssueURL = "https://gitlab.com/singularitygroup/hot-reload-for-unity/-/issues/new"; + public const string TroubleshootingURL = "https://hotreload.net/documentation/troubleshooting"; + public const string RecompileTroubleshootingURL = TroubleshootingURL + "#unity-recompiles-every-time-i-enterexit-playmode"; + public const string FeaturesDocumentationURL = DocumentationURL + "/features"; + public const string MultipleEditorsURL = DocumentationURL + "/multiple-editors"; + public const string DebuggerURL = DocumentationURL + "/debugger"; + public const string UndetectedChangesURL = DocumentationURL + "/getting-started#undetected-changes"; + public const string VoteForAwardURL = "https://awards.unity.com/#best-development-tool"; + public const string UnityStoreRateAppURL = "https://assetstore.unity.com/packages/slug/254358#reviews"; + public const string ChangelogURL = WebsiteURL + "/changelog"; + public const string DiscordInviteUrl = "https://discord.com/invite/kgxAS4Bqxr"; + + public const int DaysToRateApp = 5; + public const int RecompileButtonTextHideWidth = 460; + public const int IndicationTextHideWidth = 360; + public const int StartButtonTextHideWidth = 400; + public const int EventsListHideHeight = 360; + public const int EventsListHideWidth = 425; + public const int UpgradeLicenseNoteHideWidth = 325; + public const int UpgradeLicenseNoteHideHeight = 150; + public const int RateAppHideHeight = 325; + public const int RateAppHideWidth = 300; + public const int EventFiltersShownHideWidth = 275; + public const int ConsumptionsHideWidth = 300; + public const int ConsumptionsHideHeight = 360; + + public const string Only40EntriesShown = "Only last 40 entries are shown"; + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Constants.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Constants.cs.meta new file mode 100644 index 0000000..993aaba --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Constants.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: ce502822e7fa34844bcb385f44091eb9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Constants.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Demo.meta b/Packages/com.singularitygroup.hotreload/Editor/Demo.meta new file mode 100644 index 0000000..1c88280 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Demo.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7c5c2596a7a469c42a1a6b35017d8a49 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Editor/Demo/EditorDemo.cs b/Packages/com.singularitygroup.hotreload/Editor/Demo/EditorDemo.cs new file mode 100644 index 0000000..895c685 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Demo/EditorDemo.cs @@ -0,0 +1,26 @@ +using System.Collections; +using System.IO; +using SingularityGroup.HotReload.Demo; +using UnityEditor; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor.Demo { + class EditorDemo : IDemo { + public bool IsServerRunning() { + return ServerHealthCheck.I.IsServerHealthy; + } + + public void OpenHotReloadWindow() { + HotReloadWindow.Open(); + } + + public void OpenScriptFile(TextAsset textAsset, int line, int column) { + var path = Path.GetFullPath(AssetDatabase.GetAssetPath(textAsset)); +#if UNITY_2019_4_OR_NEWER + Unity.CodeEditor.CodeEditor.CurrentEditor.OpenProject(path, line, column); +#else + EditorUtility.OpenWithDefaultApp(path); +#endif + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Demo/EditorDemo.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Demo/EditorDemo.cs.meta new file mode 100644 index 0000000..794c75c --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Demo/EditorDemo.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: fde6b5b57a3aeba4888a7bdaa16b3074 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Demo/EditorDemo.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/EditorCodePatcher.cs b/Packages/com.singularitygroup.hotreload/Editor/EditorCodePatcher.cs new file mode 100644 index 0000000..93734b6 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/EditorCodePatcher.cs @@ -0,0 +1,1365 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using JetBrains.Annotations; +using SingularityGroup.HotReload.DTO; +using SingularityGroup.HotReload.Editor.Cli; +using SingularityGroup.HotReload.Editor.Demo; +using SingularityGroup.HotReload.EditorDependencies; +using SingularityGroup.HotReload.RuntimeDependencies; +using UnityEditor; +using UnityEngine; +using Debug = UnityEngine.Debug; +using Task = System.Threading.Tasks.Task; +using System.Reflection; +using System.Runtime.CompilerServices; +using SingularityGroup.HotReload.Newtonsoft.Json; +using SingularityGroup.HotReload.ZXing; +using UnityEditor.Compilation; +using UnityEditor.UIElements; +using UnityEditorInternal; +using UnityEngine.UIElements; + +[assembly: InternalsVisibleTo("SingularityGroup.HotReload.IntegrationTests")] + +namespace SingularityGroup.HotReload.Editor { + internal class Config { + public bool patchEditModeOnlyOnEditorFocus; + public string[] assetBlacklist; + public bool changePlaymodeTint; + public bool disableCompilingFromEditorScripts; + public bool enableInspectorFreezeFix; + } + + [InitializeOnLoad] + internal static class EditorCodePatcher { + const string sessionFilePath = PackageConst.LibraryCachePath + "/sessionId.txt"; + const string patchesFilePath = PackageConst.LibraryCachePath + "/patches.json"; + + internal static readonly ServerDownloader serverDownloader; + internal static bool _compileError; + internal static bool _applyingFailed; + internal static bool _appliedPartially; + internal static bool _appliedUndetected; + + static Timer timer; + static bool init; + + internal static UnityLicenseType licenseType { get; private set; } + internal static bool LoginNotRequired => PackageConst.IsAssetStoreBuild && licenseType != UnityLicenseType.UnityPro; + internal static bool compileError => _compileError; + + internal static PatchStatus patchStatus = PatchStatus.None; + + internal static event Action<(MethodPatchResponse, RegisterPatchesResult)> OnPatchHandled; + + + internal static Config config; + + + #if ODIN_INSPECTOR + internal static bool DrawPrefix(Sirenix.OdinInspector.Editor.InspectorProperty __instance) { + return !UnityFieldHelper.IsFieldHidden(__instance.ParentType, __instance.Name); + } + internal static MethodInfo OdinPropertyDrawPrefixInfo = typeof(EditorCodePatcher).GetMethod("DrawPrefix", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public); + #if UNITY_2021_1_OR_NEWER + internal static MethodInfo OdinPropertyDrawInfo = typeof(Sirenix.OdinInspector.Editor.InspectorProperty)?.GetMethod("Draw", 0, BindingFlags.Instance | BindingFlags.Public, null, new Type[]{}, null); + #else + internal static MethodInfo OdinPropertyDrawInfo = typeof(Sirenix.OdinInspector.Editor.InspectorProperty)?.GetMethod("Draw", BindingFlags.Instance | BindingFlags.Public, null, new Type[]{}, null); + #endif + internal static MethodInfo DrawOdinInspectorInfo = typeof(Sirenix.OdinInspector.Editor.OdinEditor)?.GetMethod("DrawOdinInspector", BindingFlags.NonPublic | BindingFlags.Instance); + #else + internal static MethodInfo OdinPropertyDrawPrefixInfo = null; + internal static MethodInfo OdinPropertyDrawInfo = null; + internal static MethodInfo DrawOdinInspectorInfo = null; + #endif + + internal static MethodInfo GetDrawVInspectorInfo() { + // performance optimization + if (!Directory.Exists("Assets/vInspector")) { + return null; + } + try { + var t = Type.GetType("VInspector.AbstractEditor, VInspector"); + return t?.GetMethod("OnInspectorGUI", BindingFlags.Public | BindingFlags.Instance); + } catch { + // ignore + } + return null; + } + + internal static ICompileChecker compileChecker; + static bool quitting; + static EditorCodePatcher() { + if(init) { + //Avoid infinite recursion in case the static constructor gets accessed via `InitPatchesBlocked` below + return; + } + if (File.Exists(PackageConst.ConfigFileName)) { + config = JsonConvert.DeserializeObject(File.ReadAllText(PackageConst.ConfigFileName)); + } else { + config = new Config(); + } + init = true; + UnityHelper.Init(); + //Use synchonization context if possible because it's more reliable. + ThreadUtility.InitEditor(); + if (!EditorWindowHelper.IsHumanControllingUs()) { + return; + } + + serverDownloader = new ServerDownloader(); + serverDownloader.CheckIfDownloaded(HotReloadCli.controller); + SingularityGroup.HotReload.Demo.Demo.I = new EditorDemo(); + if (HotReloadPrefs.DeactivateHotReload || new DirectoryInfo(Path.GetFullPath("..")).Name == "VP") { + ResetSettings(); + return; + } + + // ReSharper disable ExpressionIsAlwaysNull + UnityFieldHelper.Init(Log.Warning, HotReloadRunTab.Recompile, DrawOdinInspectorInfo, OdinPropertyDrawInfo, OdinPropertyDrawPrefixInfo, GetDrawVInspectorInfo(), typeof(UnityFieldDrawerPatchHelper)); + + timer = new Timer(OnIntervalThreaded, (Action) OnIntervalMainThread, 500, 500); + + UpdateHost(); + licenseType = UnityLicenseHelper.GetLicenseType(); + compileChecker = CompileChecker.Create(); + compileChecker.onCompilationFinished += OnCompilationFinished; + EditorApplication.delayCall += InstallUtility.CheckForNewInstall; + AddEditorFocusChangedHandler(OnEditorFocusChanged); + // When domain reloads, this is a good time to ensure server has up-to-date project information + if (ServerHealthCheck.I.IsServerHealthy) { + EditorApplication.delayCall += TryPrepareBuildInfo; + } + HotReloadSuggestionsHelper.Init(); + // reset in case last session didn't shut down properly + CheckEditorSettings(); + EditorApplication.quitting += ResetSettingsOnQuit; + + AssemblyReloadEvents.beforeAssemblyReload += () => { + HotReloadTimelineHelper.PersistTimeline(); + }; + + CompilationPipeline.compilationFinished += obj => { + // reset in case package got removed + // if it got removed, it will not be enabled again + // if it wasn't removed, settings will get handled by OnIntervalMainThread + AutoRefreshSettingChecker.Reset(); + ScriptCompilationSettingChecker.Reset(); + PlaymodeTintSettingChecker.Reset(); + HotReloadRunTab.recompiling = false; + CompileMethodDetourer.Reset(); + }; + DetectEditorStart(); + DetectVersionUpdate(); + CodePatcher.I.fieldHandler = new FieldHandler(FieldDrawerUtil.StoreField, UnityFieldHelper.HideField, UnityFieldHelper.RegisterInspectorFieldAttributes); + if (EditorApplication.isPlayingOrWillChangePlaymode) { + CodePatcher.I.InitPatchesBlocked(patchesFilePath); + HotReloadTimelineHelper.InitPersistedEvents(); + } + +#pragma warning disable CS0612 // Type or member is obsolete + if (HotReloadPrefs.RateAppShownLegacy) { + HotReloadPrefs.RateAppShown = true; + } + if (!File.Exists(HotReloadPrefs.showOnStartupPath)) { + var showOnStartupLegacy = HotReloadPrefs.GetShowOnStartupEnum(); + HotReloadPrefs.ShowOnStartup = showOnStartupLegacy; + } +#pragma warning restore CS0612 // Type or member is obsolete + + HotReloadState.ShowingRedDot = false; + + if (DateTime.Now < new DateTime(2023, 11, 1)) { + HotReloadSuggestionsHelper.SetSuggestionsShown(HotReloadSuggestionKind.UnityBestDevelopmentToolAward2023); + } else { + HotReloadSuggestionsHelper.SetSuggestionInactive(HotReloadSuggestionKind.UnityBestDevelopmentToolAward2023); + } + + EditorApplication.playModeStateChanged += state => { + if (state == PlayModeStateChange.EnteredEditMode && HotReloadPrefs.AutoRecompileUnsupportedChangesOnExitPlayMode) { + if (TryRecompileUnsupportedChanges()) { + HotReloadState.RecompiledUnsupportedChangesOnExitPlaymode = true; + } + } + }; + if (HotReloadState.RecompiledUnsupportedChangesInPlaymode) { + HotReloadState.RecompiledUnsupportedChangesInPlaymode = false; + EditorApplication.isPlaying = true; + } +#if UNITY_2020_1_OR_NEWER + if (CompilationPipeline.codeOptimization != CodeOptimization.Release) { + HotReloadSuggestionsHelper.SetSuggestionInactive(HotReloadSuggestionKind.SwitchToDebugModeForInlinedMethods); + } +#endif + if (!HotReloadState.EditorCodePatcherInit) { + ClearPersistence(); + HotReloadState.EditorCodePatcherInit = true; + } + + CodePatcher.I.debuggerCompatibilityEnabled = !HotReloadPrefs.AutoDisableHotReloadWithDebugger; + } + + static void ResetSettingsOnQuit() { + quitting = true; + ResetSettings(); + } + + static void ResetSettings() { + AutoRefreshSettingChecker.Reset(); + ScriptCompilationSettingChecker.Reset(); + PlaymodeTintSettingChecker.Reset(); + HotReloadCli.StopAsync().Forget(); + CompileMethodDetourer.Reset(); + } + + public static bool autoRecompileUnsupportedChangesSupported; + static void AddEditorFocusChangedHandler(Action handler) { + var eventInfo = typeof(EditorApplication).GetEvent("focusChanged", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public); + var addMethod = eventInfo?.GetAddMethod(true) ?? eventInfo?.GetAddMethod(false); + if (addMethod != null) { + addMethod.Invoke(null, new object[]{ handler }); + } + autoRecompileUnsupportedChangesSupported = addMethod != null; + } + + private static void OnEditorFocusChanged(bool hasFocus) { + if (hasFocus && !HotReloadPrefs.AutoRecompileUnsupportedChangesImmediately) { + TryRecompileUnsupportedChanges(); + } + } + + public static bool TryRecompileUnsupportedChanges() { + var isPlaying = EditorApplication.isPlaying; + if (!HotReloadPrefs.AutoRecompileUnsupportedChanges + || HotReloadTimelineHelper.UnsupportedChangesCount == 0 + && (!HotReloadPrefs.AutoRecompilePartiallyUnsupportedChanges || HotReloadTimelineHelper.PartiallySupportedChangesCount == 0) + || _compileError + || isPlaying && !HotReloadPrefs.AutoRecompileUnsupportedChangesInPlayMode + ) { + return false; + } + + if (HotReloadPrefs.ShowCompilingUnsupportedNotifications) { + EditorWindowHelper.ShowNotification(EditorWindowHelper.NotificationStatus.NeedsRecompile); + } + if (isPlaying) { + HotReloadState.RecompiledUnsupportedChangesInPlaymode = true; + } + HotReloadRunTab.Recompile(); + return true; + } + + private static DateTime lastPrepareBuildInfo = DateTime.UtcNow; + + /// Post state for player builds. + /// Only check build target because user can change build settings whenever. + internal static void TryPrepareBuildInfo() { + // Note: we post files state even when build target is wrong + // because you might connect with a build downloaded onto the device. + if ((DateTime.UtcNow - lastPrepareBuildInfo).TotalSeconds > 5) { + lastPrepareBuildInfo = DateTime.UtcNow; + HotReloadCli.PrepareBuildInfoAsync().Forget(); + } + } + + internal static void RecordActiveDaysForRateApp() { + var unixDay = (int)(DateTimeOffset.UtcNow.ToUnixTimeSeconds() / 86400); + var activeDays = GetActiveDaysForRateApp(); + if (activeDays.Count < Constants.DaysToRateApp && activeDays.Add(unixDay.ToString())) { + HotReloadPrefs.ActiveDays = string.Join(",", activeDays); + } + } + + internal static HashSet GetActiveDaysForRateApp() { + if (string.IsNullOrEmpty(HotReloadPrefs.ActiveDays)) { + return new HashSet(); + } + return new HashSet(HotReloadPrefs.ActiveDays.Split(',')); + } + + // CheckEditorStart distinguishes between domain reload and first editor open + // We have some separate logic on editor start (InstallUtility.HandleEditorStart) + private static void DetectEditorStart() { + var editorId = EditorAnalyticsSessionInfo.id; + var currVersion = PackageConst.Version; + Task.Run(() => { + try { + var lines = File.Exists(sessionFilePath) ? File.ReadAllLines(sessionFilePath) : Array.Empty(); + + long prevSessionId = -1; + string prevVersion = null; + if (lines.Length >= 2) { + long.TryParse(lines[1], out prevSessionId); + } + if (lines.Length >= 3) { + prevVersion = lines[2].Trim(); + } + var updatedFromVersion = (prevSessionId != -1 && currVersion != prevVersion) ? prevVersion : null; + + if (prevSessionId != editorId && prevSessionId != 0) { + // back to mainthread + ThreadUtility.RunOnMainThread(() => { + InstallUtility.HandleEditorStart(updatedFromVersion); + + var newEditorId = EditorAnalyticsSessionInfo.id; + if (newEditorId != 0) { + Task.Run(() => { + try { + // editorId isn't available on first domain reload, must do it here + File.WriteAllLines(sessionFilePath, new[] { + "1", // serialization version + newEditorId.ToString(), + currVersion, + }); + + } catch (IOException) { + // ignore + } + }); + } + }); + } + + } catch (IOException) { + // ignore + } catch (Exception e) { + ThreadUtility.LogException(e); + } + }); + } + + private static void DetectVersionUpdate() { + if (serverDownloader.CheckIfDownloaded(HotReloadCli.controller)) { + return; + } + ServerHealthCheck.instance.CheckHealth(); + if (!ServerHealthCheck.I.IsServerHealthy) { + return; + } + var restartServer = EditorUtility.DisplayDialog("Hot Reload", + $"When updating Hot Reload, the server must be restarted for the update to take effect." + + "\nDo you want to restart it now?", + "Restart server", "Don't restart"); + if (restartServer) { + RestartCodePatcher().Forget(); + } + } + + private static void UpdateHost() { + RequestHelper.SetServerInfo(new PatchServerInfo(RequestHelper.defaultServerHost, HotReloadState.ServerPort, null, Path.GetFullPath("."))); + } + + static void OnIntervalThreaded(object o) { + ServerHealthCheck.instance.CheckHealth(); + ThreadUtility.RunOnMainThread((Action)o); + if (serverDownloader.Progress >= 1f) { + serverDownloader.CheckIfDownloaded(HotReloadCli.controller); + } + } + + private static bool _requestingFlushErrors; + private static long _lastErrorFlush; + private static async Task RequestFlushErrors() { + _requestingFlushErrors = true; + try { + await RequestFlushErrorsCore(); + } finally { + _requestingFlushErrors = false; + } + } + + private static async Task RequestFlushErrorsCore() { + var pollFrequency = 500; + // Delay until we've hit the poll request frequency + var waitMs = (int)Mathf.Clamp(pollFrequency - ((DateTime.Now.Ticks / (float)TimeSpan.TicksPerMillisecond) - _lastErrorFlush), 0, pollFrequency); + await Task.Delay(waitMs); + await FlushErrors(); + _lastErrorFlush = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; + } + + public static bool disableServerLogs; + public static string lastCompileErrorLog; + static async Task FlushErrors() { + var response = await RequestHelper.RequestFlushErrors(); + if (response == null || disableServerLogs) { + return; + } + foreach (var responseWarning in response.warnings) { + if (responseWarning.Contains("Scripts have compile errors")) { + if (compileError) { + Log.Error(responseWarning); + } else { + lastCompileErrorLog = responseWarning; + } + } else { + Log.Warning(responseWarning); + } + + if (responseWarning.Contains("Multidimensional arrays are not supported")) { + await ThreadUtility.SwitchToMainThread(); + HotReloadSuggestionsHelper.SetSuggestionsShown(HotReloadSuggestionKind.MultidimensionalArrays); + } + } + foreach (var responseError in response.errors) { + Log.Error(responseError); + } + } + + internal static bool firstPatchAttempted; + internal static bool loggedDebuggerRecompile; + static void OnIntervalMainThread() { + HotReloadSuggestionsHelper.Check(); + + // Moved from RequestServerInfo to avoid GC allocations when HR is not active + + // Repaint if the running Status has changed since the layout changes quite a bit + if (running != ServerHealthCheck.I.IsServerHealthy) { + if (HotReloadWindow.Current) { + HotReloadRunTab.RepaintInstant(); + } + running = ServerHealthCheck.I.IsServerHealthy; + } + if (!running) { + startupCompletedAt = null; + } + if (!running && !StartedServerRecently()) { + // Reset startup progress + startupProgress = null; + } + + if (HotReloadPrefs.AutoDisableHotReloadWithDebugger && Debugger.IsAttached) { + if (!HotReloadState.ShowedDebuggerCompatibility) { + HotReloadSuggestionsHelper.SetSuggestionActive(HotReloadSuggestionKind.HotReloadWhileDebuggerIsAttached); + HotReloadState.ShowedDebuggerCompatibility = true; + } + if (CodePatcher.I.OriginalPatchMethods.Count() > 0) { + if (!Application.isPlaying) { + if (!loggedDebuggerRecompile) { + Log.Info("Debugger was attached. Hot Reload may interfere with your debugger session. Recompiling in order to get full debugger experience."); + loggedDebuggerRecompile = true; + } + HotReloadRunTab.Recompile(); + HotReloadSuggestionsHelper.SetSuggestionInactive(HotReloadSuggestionKind.HotReloadedMethodsWhenDebuggerIsAttached); + } else { + HotReloadSuggestionsHelper.SetSuggestionActive(HotReloadSuggestionKind.HotReloadedMethodsWhenDebuggerIsAttached); + } + } + } else if (HotReloadSuggestionsHelper.CheckSuggestionActive(HotReloadSuggestionKind.HotReloadedMethodsWhenDebuggerIsAttached)) { + HotReloadSuggestionsHelper.SetSuggestionInactive(HotReloadSuggestionKind.HotReloadedMethodsWhenDebuggerIsAttached); + } + + if(ServerHealthCheck.I.IsServerHealthy) { + // NOTE: avoid calling this method when HR is not running to avoid allocations + RequestServerInfo(); + TryPrepareBuildInfo(); + if (!requestingCompile && (!config.patchEditModeOnlyOnEditorFocus || Application.isPlaying || UnityEditorInternal.InternalEditorUtility.isApplicationActive)) { + RequestHelper.PollMethodPatches(HotReloadState.LastPatchId, resp => HandleResponseReceived(resp)); + } + RequestHelper.PollPatchStatus(resp => { + patchStatus = resp.patchStatus; + if (patchStatus == PatchStatus.Compiling) { + startWaitingForCompile = null; + } + if (patchStatus == PatchStatus.Patching) { + firstPatchAttempted = true; + if (HotReloadPrefs.ShowPatchingNotifications) { + EditorWindowHelper.ShowNotification(EditorWindowHelper.NotificationStatus.Patching, maxDuration: 10); + } + } else if (HotReloadPrefs.ShowPatchingNotifications) { + EditorWindowHelper.RemoveNotification(); + } + }, patchStatus); + if (HotReloadPrefs.AllAssetChanges) { + RequestHelper.PollAssetChanges(HandleAssetChange); + } +#if UNITY_2020_1_OR_NEWER + if (!disableInlineChecks) { + CheckInlinedMethods(); + } +#endif + } + if (!ServerHealthCheck.I.IsServerHealthy) { + stopping = false; + } + if (startupProgress?.Item1 == 1) { + starting = false; + } + if (!_requestingFlushErrors && Running) { + RequestFlushErrors().Forget(); + } + CheckEditorSettings(); + } + +#if UNITY_2020_1_OR_NEWER + //only disabled for integration tests + internal static bool disableInlineChecks = false; + internal static HashSet inlinedMethodsFound = new HashSet(); + internal static void CheckInlinedMethods() { + if (CompilationPipeline.codeOptimization != CodeOptimization.Release) { + return; + } + HashSet newInlinedMethods = null; + try { + foreach (var method in CodePatcher.I.OriginalPatchMethods) { + if (inlinedMethodsFound.Contains(method)) { + continue; + } + var isMethodSynthesized = method.Name.Contains("<") || method.DeclaringType?.Name.Contains("<") == true && method.Name == ".ctor"; + if (!(method is ConstructorInfo) && !isMethodSynthesized && MethodUtils.IsMethodInlined(method)) { + if (newInlinedMethods == null) { + newInlinedMethods = new HashSet(); + } + newInlinedMethods.Add(method); + } + } + if (newInlinedMethods?.Count > 0) { + if (!HotReloadPrefs.LoggedInlinedMethodsDialogue) { + Log.Warning("Unity Editor inlines simple methods when it's in \"Release\" mode, which Hot Reload cannot patch.\n\nSwitch to Debug mode to avoid this problem, or let Hot Reload fully recompile Unity when this issue occurs."); + HotReloadPrefs.LoggedInlinedMethodsDialogue = true; + } + HotReloadTimelineHelper.CreateInlinedMethodsEntry(entryType: EntryType.Foldout, patchedMethodsDisplayNames: newInlinedMethods.Select(mb => $"{mb.DeclaringType?.Name}::{mb.Name}").ToArray()); + if (HotReloadPrefs.AutoRecompileUnsupportedChangesImmediately || UnityEditorInternal.InternalEditorUtility.isApplicationActive) { + TryRecompileUnsupportedChanges(); + } + HotReloadSuggestionsHelper.SetSuggestionActive(HotReloadSuggestionKind.SwitchToDebugModeForInlinedMethods); + foreach (var newInlinedMethod in newInlinedMethods) { + inlinedMethodsFound.Add(newInlinedMethod); + } + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Debug, StatFeature.Patching, StatEventType.Inlined)).Forget(); + } + } catch (Exception e) { + Log.Warning($"Inline method checker ran into an exception. Please contact support with the exception message to investigate the problem. Exception: {e.Message}"); + } + } +#endif + + static void CheckEditorSettings() { + if (quitting) { + return; + } + CheckAutoRefresh(); + CheckScriptCompilation(); + CheckPlaymodeTint(); + CheckAssetDatabaseRefresh(); + } + + static void CheckAutoRefresh() { + if (HotReloadPrefs.AllowDisableUnityAutoRefresh && ServerHealthCheck.I.IsServerHealthy) { + AutoRefreshSettingChecker.Apply(); + AutoRefreshSettingChecker.Check(); + } else { + AutoRefreshSettingChecker.Reset(); + } + } + + static void CheckScriptCompilation() { + if (HotReloadPrefs.AllowDisableUnityAutoRefresh && ServerHealthCheck.I.IsServerHealthy) { + ScriptCompilationSettingChecker.Apply(); + ScriptCompilationSettingChecker.Check(); + } else { + ScriptCompilationSettingChecker.Reset(); + } + } + + static string[] assetExtensionBlacklist = new[] { + ".cs", + // we can add setting to allow scenes to get hot reloaded for users who collaborate (their scenes change externally) + ".unity", + // safer to ignore meta files completely until there's a use-case + ".meta", + // debug files + ".mdb", + ".pdb", + ".compute", + // ".shader", //use assetBlacklist instead + }; + + public static string[] compileFiles = new[] { + ".asmdef", + ".asmref", + ".rsp", + }; + + public static string[] plugins = new[] { + // native plugins + ".dll", + ".bundle", + ".dylib", + ".so", + // plugin scripts + ".cpp", + ".h", + ".aar", + ".jar", + ".a", + ".java" + }; + + static void HandleAssetChange(string assetPath) { + // ignore directories + if (Directory.Exists(assetPath)) { + return; + } + // ignore temp compile files + if (assetPath.Contains("UnityDirMonSyncFile") || assetPath.EndsWith("~", StringComparison.Ordinal)) { + return; + } + foreach (var compileFile in compileFiles) { + if (assetPath.EndsWith(compileFile, StringComparison.Ordinal)) { + HotReloadTimelineHelper.CreateErrorEventEntry($"errors: AssemblyFileEdit: Editing assembly files requires recompiling in Unity. in {assetPath}", entryType: EntryType.Foldout); + _applyingFailed = true; + if (HotReloadPrefs.AutoRecompileUnsupportedChangesImmediately || UnityEditorInternal.InternalEditorUtility.isApplicationActive) { + TryRecompileUnsupportedChanges(); + } + return; + } + } + // Add plugin changes to unsupported changes list + foreach (var plugin in plugins) { + if (assetPath.EndsWith(plugin, StringComparison.Ordinal)) { + HotReloadTimelineHelper.CreateErrorEventEntry($"errors: NativePluginEdit: Editing native plugins requires recompiling in Unity. in {assetPath}", entryType: EntryType.Foldout); + _applyingFailed = true; + if (HotReloadPrefs.AutoRecompileUnsupportedChangesImmediately || UnityEditorInternal.InternalEditorUtility.isApplicationActive) { + TryRecompileUnsupportedChanges(); + } + return; + } + } + + // ignore file extensions that trigger domain reload + if (!HotReloadPrefs.IncludeShaderChanges) { + if (assetPath.EndsWith(".shader", StringComparison.Ordinal)) { + return; + } + } + foreach (var blacklisted in assetExtensionBlacklist) { + if (assetPath.EndsWith(blacklisted, StringComparison.Ordinal)) { + return; + } + } + if (config?.assetBlacklist != null) { + foreach (var blacklisted in config.assetBlacklist) { + if (assetPath.EndsWith(blacklisted, StringComparison.Ordinal)) { + return; + } + } + } + var path = ToPath(assetPath); + if (path == null) { + return; + } + try { + if (!File.Exists(assetPath)) { + AssetDatabase.DeleteAsset(path); + } else { + AssetDatabase.ImportAsset(path, ImportAssetOptions.ForceUpdate); + } + } catch (Exception e){ + Log.Warning($"Refreshing asset at path: {assetPath} failed due to exception: {e}"); + } + } + + static string ToPath(string assetPath) { + var relativePath = GetRelativePath(assetPath, Path.GetFullPath("Assets")); + var relativePathPackages = GetRelativePath(assetPath, Path.GetFullPath("Packages")); + // ignore files outside assets and packages folders + if (relativePath.StartsWith("..", StringComparison.Ordinal)) { + relativePath = null; + } + if (relativePathPackages.StartsWith("..", StringComparison.Ordinal)) { + relativePathPackages = null; + #if UNITY_2021_1_OR_NEWER + // Might be inside a package "file:" + try { + foreach (var package in UnityEditor.PackageManager.PackageInfo.GetAllRegisteredPackages()) { + if (assetPath.StartsWith(package.resolvedPath.Replace("\\", "/"), StringComparison.Ordinal)) { + relativePathPackages = $"Packages/{package.name}/{assetPath.Substring(package.resolvedPath.Length)}"; + break; + } + } + } catch { + // ignore + } + #endif + } + return relativePath ?? relativePathPackages; + } + + public static string GetRelativePath(string filespec, string folder) { + Uri pathUri = new Uri(filespec); + Uri folderUri = new Uri(folder); + return Uri.UnescapeDataString(folderUri.MakeRelativeUri(pathUri).ToString().Replace('/', Path.DirectorySeparatorChar)); + } + + static void CheckPlaymodeTint() { + if (config.changePlaymodeTint && ServerHealthCheck.I.IsServerHealthy && Application.isPlaying) { + PlaymodeTintSettingChecker.Apply(); + PlaymodeTintSettingChecker.Check(); + } else { + PlaymodeTintSettingChecker.Reset(); + } + } + + static void CheckAssetDatabaseRefresh() { + if (config.disableCompilingFromEditorScripts && ServerHealthCheck.I.IsServerHealthy) { + CompileMethodDetourer.Apply(); + } else { + CompileMethodDetourer.Reset(); + } + } + + static void HandleResponseReceived(MethodPatchResponse response) { + RegisterPatchesResult patchResult = null; + if (response.patches?.Length > 0 + || response.alteredFields.Length > 0 + || response.removedFieldInitializers.Length > 0 + || response.addedFieldInitializerInitializers.Length > 0 + || response.addedFieldInitializerFields.Length > 0 + ) { + LogBurstHint(response); + patchResult = CodePatcher.I.RegisterPatches(response, persist: true); + CodePatcher.I.SaveAppliedPatches(patchesFilePath).Forget(); + } + + if (patchResult?.inspectorModified == true) { + // repaint all views calls all gui callbacks but doesn't rebuild the visual tree + // which is needed to hide removed fields + UnityFieldDrawerPatchHelper.repaintVisualTree = true; + InternalEditorUtility.RepaintAllViews(); + } + + var partiallySupportedChangesFiltered = new List(response.partiallySupportedChanges ?? Array.Empty()); + partiallySupportedChangesFiltered.RemoveAll(x => !HotReloadTimelineHelper.GetPartiallySupportedChangePref(x)); + if (!HotReloadPrefs.DisplayNewMonobehaviourMethodsAsPartiallySupported && partiallySupportedChangesFiltered.Remove(PartiallySupportedChange.AddMonobehaviourMethod)) { + if (HotReloadSuggestionsHelper.CanShowServerSuggestion(HotReloadSuggestionKind.AddMonobehaviourMethod)) { + HotReloadSuggestionsHelper.SetServerSuggestionShown(HotReloadSuggestionKind.AddMonobehaviourMethod); + } + } + var failuresDeduplicated = new HashSet(response.failures ?? Array.Empty()); + + foreach (var hotReloadSuggestionKind in response.suggestions) { + if (HotReloadSuggestionsHelper.CanShowServerSuggestion(hotReloadSuggestionKind)) { + HotReloadSuggestionsHelper.SetServerSuggestionShown(hotReloadSuggestionKind); + } + } + + var allMethods = patchResult?.patchedSMethods.Select(m => GetExtendedMethodName(m)); + if (allMethods == null) { + allMethods = response.removedMethod?.Select(m => GetExtendedMethodName(m)).Distinct(StringComparer.OrdinalIgnoreCase) ?? Array.Empty(); + } else { + allMethods = allMethods.Concat(response.removedMethod?.Select(m => GetExtendedMethodName(m)) ?? Array.Empty()).Distinct(StringComparer.OrdinalIgnoreCase); + } + + var allFields = (patchResult?.addedFields.Select(f => GetExtendedFieldName(f)) ?? Array.Empty()) + .Concat(response.alteredFields?.Select(f => GetExtendedFieldName(f)).Distinct(StringComparer.OrdinalIgnoreCase) ?? Array.Empty()) + .Concat(response.patches?.SelectMany(p => p?.propertyAttributesFieldUpdated ?? Array.Empty()).Select(f => GetExtendedFieldName(f)).Distinct(StringComparer.OrdinalIgnoreCase) ?? Array.Empty()) + .Distinct(StringComparer.OrdinalIgnoreCase); + + var patchedMembersDisplayNames = allMethods.Concat(allFields).ToArray(); + + _compileError = response.failures?.Any(failure => failure.Contains("error CS")) ?? false; + _applyingFailed = response.failures?.Length > 0 || patchResult?.patchFailures.Count > 0 || patchResult?.patchExceptions.Count > 0; + _appliedPartially = !_applyingFailed && partiallySupportedChangesFiltered.Count > 0; + _appliedUndetected = patchedMembersDisplayNames.Length == 0; + + if (!_compileError) { + lastCompileErrorLog = null; + } + + var autoRecompiled = false; + if (_compileError) { + HotReloadTimelineHelper.EventsTimeline.RemoveAll(e => e.alertType == AlertType.CompileError); + foreach (var failure in failuresDeduplicated) { + if (failure.Contains("error CS")) { + HotReloadTimelineHelper.CreateErrorEventEntry(failure); + } + } + if (lastCompileErrorLog != null) { + Log.Error(lastCompileErrorLog); + lastCompileErrorLog = null; + } + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Debug, StatFeature.Reload, StatEventType.CompileError), new EditorExtraData { + { StatKey.PatchId, response.id }, + }).Forget(); + } else if (_applyingFailed) { + if (partiallySupportedChangesFiltered.Count > 0) { + foreach (var responsePartiallySupportedChange in partiallySupportedChangesFiltered) { + HotReloadTimelineHelper.CreatePartiallyAppliedEventEntry(responsePartiallySupportedChange, entryType: EntryType.Child); + } + } + foreach (var failure in failuresDeduplicated) { + HotReloadTimelineHelper.CreateErrorEventEntry(failure, entryType: EntryType.Child); + } + if (patchResult?.patchFailures.Count > 0) { + foreach (var failure in patchResult.patchFailures) { + SMethod method = failure.Item1; + string error = failure.Item2; + HotReloadTimelineHelper.CreatePatchFailureEventEntry(error, methodName: GetMethodName(method), methodSimpleName: method.simpleName, entryType: EntryType.Child); + } + } + if (patchResult?.patchExceptions.Count > 0) { + foreach (var error in patchResult.patchExceptions) { + HotReloadTimelineHelper.CreateErrorEventEntry(error, entryType: EntryType.Child); + } + } + HotReloadTimelineHelper.CreateReloadFinishedWithWarningsEventEntry(patchedMembersDisplayNames: patchedMembersDisplayNames); + HotReloadSuggestionsHelper.SetSuggestionsShown(HotReloadSuggestionKind.UnsupportedChanges); + if (HotReloadPrefs.AutoRecompileUnsupportedChangesImmediately || UnityEditorInternal.InternalEditorUtility.isApplicationActive) { + autoRecompiled = TryRecompileUnsupportedChanges(); + } + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Debug, StatFeature.Reload, StatEventType.Failure), new EditorExtraData { + { StatKey.PatchId, response.id }, + }).Forget(); + } else if (_appliedPartially) { + foreach (var responsePartiallySupportedChange in partiallySupportedChangesFiltered) { + HotReloadTimelineHelper.CreatePartiallyAppliedEventEntry(responsePartiallySupportedChange, entryType: EntryType.Child, detailed: false); + } + HotReloadTimelineHelper.CreateReloadPartiallyAppliedEventEntry(patchedMethodsDisplayNames: patchedMembersDisplayNames); + + if (HotReloadPrefs.AutoRecompileUnsupportedChangesImmediately || UnityEditorInternal.InternalEditorUtility.isApplicationActive) { + autoRecompiled = TryRecompileUnsupportedChanges(); + } + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Debug, StatFeature.Reload, StatEventType.Partial), new EditorExtraData { + { StatKey.PatchId, response.id }, + }).Forget(); + } else if (_appliedUndetected) { + HotReloadTimelineHelper.CreateReloadUndetectedChangeEventEntry(); + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Debug, StatFeature.Reload, StatEventType.Undetected), new EditorExtraData { + { StatKey.PatchId, response.id }, + }).Forget(); + } else { + HotReloadTimelineHelper.CreateReloadFinishedEventEntry(patchedMethodsDisplayNames: patchedMembersDisplayNames); + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Debug, StatFeature.Reload, StatEventType.Finished), new EditorExtraData { + { StatKey.PatchId, response.id }, + }).Forget(); + } + + // When patching different assembly, compile error will get removed, even though it's still there + // It's a shortcut we take for simplicity + if (!_compileError) { + HotReloadTimelineHelper.EventsTimeline.RemoveAll(x => x.alertType == AlertType.CompileError); + } + + foreach (string responseFailure in response.failures) { + if (responseFailure.Contains("error CS")) { + Log.Error(responseFailure); + } else if (autoRecompiled) { + Log.Info(responseFailure); + } else { + Log.Warning(responseFailure); + } + } + if (patchResult?.patchFailures.Count > 0) { + foreach (var patchResultPatchFailure in patchResult.patchFailures) { + if (autoRecompiled) { + Log.Info(patchResultPatchFailure.Item2); + } else { + Log.Warning(patchResultPatchFailure.Item2); + } + } + } + if (patchResult?.patchExceptions.Count > 0) { + foreach (var patchResultPatchException in patchResult.patchExceptions) { + if (autoRecompiled) { + Log.Info(patchResultPatchException); + } else { + Log.Warning(patchResultPatchException); + } + } + } + + // attempt to recompile if previous Unity compilation had compilation errors + // because new changes might've fixed those errors + if (compileChecker.hasCompileErrors) { + HotReloadRunTab.Recompile(); + } + + if (HotReloadWindow.Current) { + HotReloadWindow.Current.Repaint(); + } + HotReloadState.LastPatchId = response.id; + OnPatchHandled?.Invoke((response, patchResult)); + } + + static string GetExtendedMethodName(SMethod method) { + var colonIndex = method.displayName.IndexOf("::", StringComparison.Ordinal); + if (colonIndex > 0) { + var beforeColon = method.displayName.Substring(0, colonIndex); + var spaceIndex = beforeColon.LastIndexOf(".", StringComparison.Ordinal); + if (spaceIndex > 0) { + var className = beforeColon.Substring(spaceIndex + 1); + return className + "::" + method.simpleName; + } + } + return method.simpleName; + } + + static string GetExtendedFieldName(SField field) { + string typeName = field.declaringType.typeName; + var simpleTypeIndex = typeName.LastIndexOf(".", StringComparison.Ordinal); + if (simpleTypeIndex > 0) { + typeName = typeName.Substring(simpleTypeIndex + 1); + } + return $"{typeName}::{field.fieldName}"; + } + + static string GetMethodName(SMethod method) { + var spaceIndex = method.displayName.IndexOf(" ", StringComparison.Ordinal); + if (spaceIndex > 0) { + return method.displayName.Substring(spaceIndex); + } + return method.displayName; + } + + + [Conditional("UNITY_2022_2_OR_NEWER")] + static void LogBurstHint(MethodPatchResponse response) { + if(HotReloadPrefs.LoggedBurstHint) { + return; + } + foreach (var patch in response.patches) { + if(patch.unityJobs.Length > 0) { + Debug.LogWarning("A unity job was hot reloaded. " + + "This will cause a harmless warning that can be ignored. " + + $"More info about this can be found here: {Constants.TroubleshootingURL}"); + HotReloadPrefs.LoggedBurstHint = true; + break; + } + } + } + + private static DateTime? startWaitingForCompile; + static void OnCompilationFinished() { + ServerHealthCheck.instance.CheckHealth(); + if(ServerHealthCheck.I.IsServerHealthy) { + startWaitingForCompile = DateTime.UtcNow; + firstPatchAttempted = false; + RequestCompile().Forget(); + } + ClearPersistence(); + } + + static void ClearPersistence() { + Task.Run(() => File.Delete(patchesFilePath)); + HotReloadTimelineHelper.ClearPersistance(); + } + + static bool requestingCompile; + static async Task RequestCompile() { + requestingCompile = true; + try { + await RequestHelper.RequestClearPatches(); + await ProjectGeneration.ProjectGeneration.GenerateSlnAndCsprojFiles(Application.dataPath); + await RequestHelper.RequestCompile(scenePath => { + var path = ToPath(scenePath); + if (File.Exists(scenePath) && path != null) { + AssetDatabase.ImportAsset(path, ImportAssetOptions.Default); + } + }); + } finally { + requestingCompile = false; + } + } + + private static bool stopping; + private static bool starting; + private static DateTime? startupCompletedAt; + private static Tuple startupProgress; + + internal static bool Started => ServerHealthCheck.I.IsServerHealthy && DownloadProgress == 1 && StartupProgress?.Item1 == 1; + internal static bool Starting => (StartedServerRecently() || ServerHealthCheck.I.IsServerHealthy) && !Started && starting && patchStatus != PatchStatus.CompileError; + internal static bool Stopping => stopping && Running; + internal static bool Compiling => DateTime.UtcNow - startWaitingForCompile < TimeSpan.FromSeconds(5) || patchStatus == PatchStatus.Compiling || HotReloadRunTab.recompiling; + internal static Tuple StartupProgress => startupProgress; + + + /// + /// We have a button to stop the Hot Reload server.
+ /// Store task to ensure only one stop attempt at a time. + ///
+ private static DateTime? serverStartedAt; + private static DateTime? serverStoppedAt; + private static DateTime? serverRestartedAt; + private static bool StartedServerRecently() { + return DateTime.UtcNow - serverStartedAt < ServerHealthCheck.HeartBeatTimeout; + } + + internal static bool StoppedServerRecently() { + return DateTime.UtcNow - serverStoppedAt < ServerHealthCheck.HeartBeatTimeout || (!StartedServerRecently() && (startupProgress?.Item1 ?? 0) == 0); + } + + internal static bool RestartedServerRecently() { + return DateTime.UtcNow - serverRestartedAt < ServerHealthCheck.HeartBeatTimeout; + } + + private static bool requestingStart; + private static async Task StartCodePatcher(LoginData loginData = null) { + if (requestingStart || StartedServerRecently()) { + return; + } + stopping = false; + starting = true; + var exposeToNetwork = HotReloadPrefs.ExposeServerToLocalNetwork; + var allAssetChanges = HotReloadPrefs.AllAssetChanges; + var disableConsoleWindow = HotReloadPrefs.DisableConsoleWindow; + var isReleaseMode = RequestHelper.IsReleaseMode(); + var detailedErrorReporting = !HotReloadPrefs.DisableDetailedErrorReporting; + CodePatcher.I.ClearPatchedMethods(); + RecordActiveDaysForRateApp(); + try { + requestingStart = true; + startupProgress = Tuple.Create(0f, "Starting Hot Reload"); + serverStartedAt = DateTime.UtcNow; + await HotReloadCli.StartAsync(exposeToNetwork, allAssetChanges, disableConsoleWindow, isReleaseMode, detailedErrorReporting, loginData).ConfigureAwait(false); + } + catch (Exception ex) { + ThreadUtility.LogException(ex); + } + finally { + requestingStart = false; + } + } + + private static bool requestingStop; + internal static async Task StopCodePatcher(bool recompileOnDone = false) { + stopping = true; + starting = false; + if (requestingStop) { + if (recompileOnDone) { + await ThreadUtility.SwitchToMainThread(); + HotReloadRunTab.Recompile(); + } + return; + } + CodePatcher.I.ClearPatchedMethods(); + HotReloadSuggestionsHelper.SetSuggestionInactive(HotReloadSuggestionKind.EditorsWithoutHRRunning); + try { + requestingStop = true; + await HotReloadCli.StopAsync().ConfigureAwait(false); + serverStoppedAt = DateTime.UtcNow; + await ThreadUtility.SwitchToMainThread(); + if (recompileOnDone) { + HotReloadRunTab.Recompile(); + } + startupProgress = null; + } + catch (Exception ex) { + ThreadUtility.LogException(ex); + } + finally { + requestingStop = false; + } + } + + private static bool requestingRestart; + internal static async Task RestartCodePatcher() { + if (requestingRestart) { + return; + } + try { + requestingRestart = true; + await StopCodePatcher(); + await DownloadAndRun(); + serverRestartedAt = DateTime.UtcNow; + } + finally { + requestingRestart = false; + } + } + + + private static bool requestingDownloadAndRun; + internal static float DownloadProgress => serverDownloader.Progress; + internal static bool DownloadRequired => DownloadProgress < 1f; + internal static bool DownloadStarted => serverDownloader.Started; + internal static bool RequestingDownloadAndRun => requestingDownloadAndRun; + internal static async Task DownloadAndRun(LoginData loginData = null, bool recompileOnDone = false) { + if (requestingDownloadAndRun) { + return false; + } + stopping = false; + requestingDownloadAndRun = true; + try { + if (DownloadRequired) { + var ok = await serverDownloader.PromptForDownload(); + if (!ok) { + return false; + } + } + await StartCodePatcher(loginData); + await ThreadUtility.SwitchToMainThread(); + if (HotReloadPrefs.DeactivateHotReload) { + HotReloadPrefs.DeactivateHotReload = false; + HotReloadRunTab.Recompile(); + } + return true; + } finally { + requestingDownloadAndRun = false; + } + } + + private const int SERVER_POLL_FREQUENCY_ON_STARTUP_MS = 500; + private const int SERVER_POLL_FREQUENCY_AFTER_STARTUP_MS = 2000; + private static int GetPollFrequency() { + return (startupProgress != null && startupProgress.Item1 < 1) || StartedServerRecently() + ? SERVER_POLL_FREQUENCY_ON_STARTUP_MS + : SERVER_POLL_FREQUENCY_AFTER_STARTUP_MS; + } + + internal static bool RequestingLoginInfo { get; set; } + + [CanBeNull] internal static LoginStatusResponse Status { get; private set; } + internal static void HandleStatus(LoginStatusResponse resp) { + if (resp == null) { + return; + } + Attribution.RegisterLogin(resp); + + bool consumptionsChanged = Status?.freeSessionRunning != resp.freeSessionRunning || Status?.freeSessionEndTime != resp.freeSessionEndTime; + bool expiresAtChanged = Status?.licenseExpiresAt != resp.licenseExpiresAt; + if (!EditorCodePatcher.LoginNotRequired + && resp.consumptionsUnavailableReason == ConsumptionsUnavailableReason.UnrecoverableError + && Status?.consumptionsUnavailableReason != ConsumptionsUnavailableReason.UnrecoverableError + ) { + Log.Error("Free charges unavailabe. Please contact support if the issue persists."); + } + if (!RequestingLoginInfo && resp.requestError == null) { + Status = resp; + } + if (resp.lastLicenseError == null) { + // If we got success, we should always show an error next time it comes up + HotReloadPrefs.ErrorHidden = false; + } + + var oldStartupProgress = startupProgress; + var newStartupProgress = Tuple.Create( + resp.startupProgress, + string.IsNullOrEmpty(resp.startupStatus) ? "Starting Hot Reload" : resp.startupStatus); + + startupProgress = newStartupProgress; + // ReSharper disable once CompareOfFloatsByEqualityOperator + if (startupCompletedAt == null && newStartupProgress.Item1 == 1f) { + startupCompletedAt = DateTime.UtcNow; + } + + if (oldStartupProgress == null + || Math.Abs(oldStartupProgress.Item1 - newStartupProgress.Item1) > 0 + || oldStartupProgress.Item2 != newStartupProgress.Item2 + || consumptionsChanged + || expiresAtChanged + ) { + // Send project files state now that server can receive requests (only needed for player builds) + TryPrepareBuildInfo(); + } + } + + internal static async Task RequestLogin(string email, string password) { + RequestingLoginInfo = true; + try { + int i = 0; + while (!Running && i < 100) { + await Task.Delay(100); + i++; + } + + Status = await RequestHelper.RequestLogin(email, password, 10); + + // set to false so new error is shown + HotReloadPrefs.ErrorHidden = false; + if (Status?.isLicensed == true) { + HotReloadPrefs.LicenseEmail = email; + HotReloadPrefs.LicensePassword = Status.initialPassword ?? password; + } + } finally { + RequestingLoginInfo = false; + } + } + private static bool requestingServerInfo; + private static long lastServerPoll; + private static bool running; + internal static bool Running => ServerHealthCheck.I.IsServerHealthy; + + internal static void RequestServerInfo() { + if (requestingServerInfo) { + return; + } + RequestServerInfoAsync().Forget(); + } + + private static async Task RequestServerInfoAsync() { + requestingServerInfo = true; + try { + await RequestServerInfoCore(); + } finally { + requestingServerInfo = false; + } + } + + private static async Task RequestServerInfoCore() { + var pollFrequency = GetPollFrequency(); + // Delay until we've hit the poll request frequency + var waitMs = (int)Mathf.Clamp(pollFrequency - ((DateTime.Now.Ticks / (float)TimeSpan.TicksPerMillisecond) - lastServerPoll), 0, pollFrequency); + await Task.Delay(waitMs); + + if (!ServerHealthCheck.I.IsServerHealthy) { + return; + } + + + var resp = await RequestHelper.GetLoginStatus(30); + HandleStatus(resp); + + lastServerPoll = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; + } + } + + // IMPORTANT: don't change the names of the methods + internal static class UnityFieldDrawerPatchHelper { + internal static void PatchCustom(Rect contentRect, UnityEditor.Editor __instance) { + if (__instance.target) { + FieldDrawerUtil.DrawFromObject(__instance.target); + } + } + + internal static void PatchDefault(UnityEditor.Editor __instance) { + if (__instance.target) { + FieldDrawerUtil.DrawFromObject(__instance.target); + } + } + + internal static bool repaintVisualTree; + internal static void PatchFillDefaultInspector(VisualElement container, SerializedObject serializedObject, UnityEditor.Editor editor) { + HideChildren(container, serializedObject); + if (editor.target) { + var child = new IMGUIContainer((() => + { + FieldDrawerUtil.DrawFromObject(editor.target); + if (repaintVisualTree) { + HideChildren(container, serializedObject); + ResetInvalidatedInspectorFields(container, serializedObject); + // Mark dirty to repaint the visual tree + container.MarkDirtyRepaint(); + repaintVisualTree = false; + } + })); + child.name = "SingularityGroup.HotReload.FieldDrawer"; + container.Add(child); + } + } + + static List childrenToRemove = new List(); + static void HideChildren(VisualElement container, SerializedObject serializedObject) { + if (container == null) { + return; + } + childrenToRemove.Clear(); + foreach (var child in container.Children()) { + if (!(child is PropertyField propertyField)) { + continue; + } + try { + if (serializedObject != null && serializedObject.targetObject && UnityFieldHelper.IsFieldHidden(serializedObject.targetObject.GetType(), serializedObject.FindProperty(propertyField.bindingPath)?.name ?? "")) { + childrenToRemove.Add(child); + } + } catch (NullReferenceException) { + // serializedObject.targetObject throws nullref in cases where e.g. exising playmode + } + } + foreach (var child in childrenToRemove) { + container.Remove(child); + } + childrenToRemove.Clear(); + } + + static void ResetInvalidatedInspectorFields(VisualElement container, SerializedObject serializedObject) { + if (container == null || serializedObject == null) { + return; + } + foreach (var child in container.Children()) { + if (!(child is PropertyField propertyField)) { + continue; + } + try { + var prop = serializedObject.FindProperty(propertyField.bindingPath); + if (prop != null && serializedObject.targetObject && UnityFieldHelper.HasFieldInspectorCacheInvalidation(serializedObject.targetObject.GetType(), prop.name ?? "")) { + child.GetType().GetMethod("Reset", BindingFlags.NonPublic | BindingFlags.Instance, null, new[] { typeof(SerializedProperty) }, null)?.Invoke(child, new object[] { prop }); + } + } catch (NullReferenceException) { + // serializedObject.targetObject throws nullref in cases where e.g. exising playmode + } + } + } + + internal static bool GetHandlerPrefix( + SerializedProperty property, + ref object __result + ) { + if (property == null || property.serializedObject == null || !property.serializedObject.targetObject) { + // do nothing + return true; + } + if (UnityFieldHelper.TryInvalidateFieldInspectorCache(property.serializedObject.targetObject.GetType(), property.name)) { + __result = null; + return false; + } + return true; + } + + internal static bool GetFieldAttributesPrefix( + FieldInfo field, + ref List __result + ) { + if (field == null) { + // do nothing + return true; + } + List result; + if (UnityFieldHelper.TryGetInspectorFieldAttributes(field, out result)) { + __result = result; + return false; + } + return true; + } + + internal static bool PropertyFieldPrefix( + Rect position, + UnityEditor.SerializedProperty property, + GUIContent label, + bool includeChildren, + Rect visibleArea, + ref bool __result + ) { + if (property == null || property.serializedObject == null || !property.serializedObject.targetObject) { + // do nothing + return true; + } + if (UnityFieldHelper.IsFieldHidden(property.serializedObject.targetObject.GetType(), property.name)) { + // make sure field doesn't take any space + __result = false; + return false; // Skip original method + } + return true; // Continue with original method + } + + internal static bool GetHightPrefix( + UnityEditor.SerializedProperty property, GUIContent label, bool includeChildren, + ref float __result + ) { + if (property == null || property.serializedObject == null || !property.serializedObject.targetObject) { + // do nothing + return true; + } + if (UnityFieldHelper.IsFieldHidden(property.serializedObject.targetObject.GetType(), property.name)) { + // make sure field doesn't take any space + __result = 0.0f; + return false; // Skip original method + } + return true; // Continue with original method + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/EditorCodePatcher.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/EditorCodePatcher.cs.meta new file mode 100644 index 0000000..5854f9a --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/EditorCodePatcher.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: ac7b192276a4a9d4f9098377d317cb2e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/EditorCodePatcher.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/EditorIndicationState.cs b/Packages/com.singularitygroup.hotreload/Editor/EditorIndicationState.cs new file mode 100644 index 0000000..3a3f5b6 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/EditorIndicationState.cs @@ -0,0 +1,183 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using SingularityGroup.HotReload.DTO; + +namespace SingularityGroup.HotReload.Editor { + internal static class EditorIndicationState { + internal enum IndicationStatus { + Stopped, + Started, + Stopping, + Installing, + Starting, + Reloaded, + PartiallySupported, + Unsupported, + Patching, + Loading, + Compiling, + CompileErrors, + ActivationFailed, + FinishRegistration, + Undetected, + } + + internal static readonly string greyIconPath = "grey"; + internal static readonly string greenIconPath = "green"; + internal static readonly string redIconPath = "red"; + private static readonly Dictionary IndicationIcon = new Dictionary { + // grey icon: + { IndicationStatus.FinishRegistration, greyIconPath }, + { IndicationStatus.Stopped, greyIconPath }, + // green icon: + { IndicationStatus.Started, greenIconPath }, + // log icons: + { IndicationStatus.Reloaded, HotReloadTimelineHelper.alertIconString[AlertType.AppliedChange] }, + { IndicationStatus.Unsupported, HotReloadTimelineHelper.alertIconString[AlertType.UnsupportedChange] }, + { IndicationStatus.Undetected, HotReloadTimelineHelper.alertIconString[AlertType.UndetectedChange] }, + { IndicationStatus.PartiallySupported, HotReloadTimelineHelper.alertIconString[AlertType.PartiallySupportedChange] }, + { IndicationStatus.CompileErrors, HotReloadTimelineHelper.alertIconString[AlertType.CompileError] }, + // spinner: + { IndicationStatus.Stopping, Spinner.SpinnerIconPath }, + { IndicationStatus.Starting, Spinner.SpinnerIconPath }, + { IndicationStatus.Patching, Spinner.SpinnerIconPath }, + { IndicationStatus.Loading, Spinner.SpinnerIconPath }, + { IndicationStatus.Compiling, Spinner.SpinnerIconPath }, + { IndicationStatus.Installing, Spinner.SpinnerIconPath }, + // red icon: + { IndicationStatus.ActivationFailed, redIconPath }, + }; + + private static readonly IndicationStatus[] SpinnerIndications = IndicationIcon + .Where(kvp => kvp.Value == Spinner.SpinnerIconPath) + .Select(kvp => kvp.Key) + .ToArray(); + + // NOTE: if you add longer text, make sure UI is wide enough for it + public static readonly Dictionary IndicationText = new Dictionary { + { IndicationStatus.FinishRegistration, "Finish Registration" }, + { IndicationStatus.Started, "Waiting for code changes" }, + { IndicationStatus.Stopping, "Stopping Hot Reload" }, + { IndicationStatus.Stopped, "Hot Reload inactive" }, + { IndicationStatus.Installing, "Installing" }, + { IndicationStatus.Starting, "Starting Hot Reload" }, + { IndicationStatus.Reloaded, "Reload finished" }, + { IndicationStatus.PartiallySupported, "Changes partially applied" }, + { IndicationStatus.Unsupported, "Finished with warnings" }, + { IndicationStatus.Patching, "Reloading" }, + { IndicationStatus.Compiling, "Compiling" }, + { IndicationStatus.CompileErrors, "Scripts have compile errors" }, + { IndicationStatus.ActivationFailed, "Activation failed" }, + { IndicationStatus.Loading, "Loading" }, + { IndicationStatus.Undetected, "No changes applied"}, + }; + + private const int MinSpinnerDuration = 200; + private static DateTime spinnerStartedAt; + private static IndicationStatus latestStatus; + private static bool SpinnerCompletedMinDuration => DateTime.UtcNow - spinnerStartedAt > TimeSpan.FromMilliseconds(MinSpinnerDuration); + private static IndicationStatus GetIndicationStatus() { + var status = GetIndicationStatusCore(); + + // Note: performance sensitive code, don't use Link + bool newStatusIsSpinner = false; + for (var i = 0; i < SpinnerIndications.Length; i++) { + if (SpinnerIndications[i] == status) { + newStatusIsSpinner = true; + } + } + bool latestStatusIsSpinner = false; + for (var i = 0; i < SpinnerIndications.Length; i++) { + if (SpinnerIndications[i] == latestStatus) { + newStatusIsSpinner = true; + } + } + + if (status == latestStatus) { + return status; + } else if (latestStatusIsSpinner) { + if (newStatusIsSpinner) { + return status; + } else if (SpinnerCompletedMinDuration) { + latestStatus = status; + return status; + } else { + return latestStatus; + } + } else if (newStatusIsSpinner) { + spinnerStartedAt = DateTime.UtcNow; + latestStatus = status; + return status; + } else { + spinnerStartedAt = DateTime.UtcNow; + latestStatus = IndicationStatus.Loading; + return status; + } + } + + private static IndicationStatus GetIndicationStatusCore() { + if (RedeemLicenseHelper.I.RegistrationRequired) + return IndicationStatus.FinishRegistration; + if (EditorCodePatcher.DownloadRequired && EditorCodePatcher.DownloadStarted || EditorCodePatcher.RequestingDownloadAndRun && !EditorCodePatcher.Starting && !EditorCodePatcher.Stopping) + return IndicationStatus.Installing; + if (EditorCodePatcher.Stopping) + return IndicationStatus.Stopping; + if (EditorCodePatcher.Compiling && !EditorCodePatcher.Stopping && !EditorCodePatcher.Starting && EditorCodePatcher.Running) + return IndicationStatus.Compiling; + if (EditorCodePatcher.Starting && !EditorCodePatcher.Stopping) + return IndicationStatus.Starting; + if (!EditorCodePatcher.Running) + return IndicationStatus.Stopped; + if (EditorCodePatcher.Status?.isLicensed != true && EditorCodePatcher.Status?.isFree != true && EditorCodePatcher.Status?.freeSessionFinished == true) + return IndicationStatus.ActivationFailed; + if (EditorCodePatcher.compileError) + return IndicationStatus.CompileErrors; + + // fallback on patch status + if (!EditorCodePatcher.Started && !EditorCodePatcher.Running) { + return IndicationStatus.Stopped; + } + switch (EditorCodePatcher.patchStatus) { + case PatchStatus.Idle: + if (!EditorCodePatcher.Compiling && !EditorCodePatcher.firstPatchAttempted && !EditorCodePatcher.compileError) { + return IndicationStatus.Started; + } + if (EditorCodePatcher._applyingFailed) { + return IndicationStatus.Unsupported; + } + if (EditorCodePatcher._appliedPartially) { + return IndicationStatus.PartiallySupported; + } + if (EditorCodePatcher._appliedUndetected) { + return IndicationStatus.Undetected; + } + return IndicationStatus.Reloaded; + case PatchStatus.Patching: return IndicationStatus.Patching; + case PatchStatus.Unsupported: return IndicationStatus.Unsupported; + case PatchStatus.Compiling: return IndicationStatus.Compiling; + case PatchStatus.CompileError: return IndicationStatus.CompileErrors; + case PatchStatus.None: + default: return IndicationStatus.Reloaded; + } + } + + internal static IndicationStatus CurrentIndicationStatus => GetIndicationStatus(); + internal static bool SpinnerActive => SpinnerIndications.Contains(CurrentIndicationStatus); + internal static string IndicationIconPath => IndicationIcon[CurrentIndicationStatus]; + internal static string IndicationStatusText { + get { + var indicationStatus = CurrentIndicationStatus; + string txt; + if (indicationStatus == IndicationStatus.Starting && EditorCodePatcher.StartupProgress != null) { + txt = EditorCodePatcher.StartupProgress.Item2; + } else if (!IndicationText.TryGetValue(indicationStatus, out txt)) { + Log.Warning($"Indication text not found for status {indicationStatus}"); + } else { + txt = IndicationText[indicationStatus]; + } + return txt; + } + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/EditorIndicationState.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/EditorIndicationState.cs.meta new file mode 100644 index 0000000..6d80b7a --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/EditorIndicationState.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ee342ddb17e444c7a8927be3bd792ae2 +timeCreated: 1686087206 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/EditorIndicationState.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/GitUtil.cs b/Packages/com.singularitygroup.hotreload/Editor/GitUtil.cs new file mode 100644 index 0000000..875381d --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/GitUtil.cs @@ -0,0 +1,87 @@ + +using System; +using System.ComponentModel; +using System.Diagnostics; +using Debug = UnityEngine.Debug; + +namespace SingularityGroup.HotReload.Editor { + internal static class GitUtil { + /// + /// Fallback is PatchServerInfo.UnknownCommitHash + /// + public static string GetShortCommitHashOrFallback(int timeoutAfterMillis = 5000) { + var shortCommitHash = PatchServerInfo.UnknownCommitHash; + + var commitHash = GetShortCommitHashSafe(timeoutAfterMillis); + // On MacOS GetShortCommitHash() returns 7 characters, on Windows it returns 8 characters. + // When git command produced an unexpected result, use a fallback string + if (commitHash != null && commitHash.Length >= 6) { + shortCommitHash = commitHash.Length < 8 ? commitHash : commitHash.Substring(0, 8); + } + + return shortCommitHash; + } + + // only log exception once per domain reload, to prevent spamming the console + private static bool loggedExceptionInGetShortCommitHashSafe = false; + + /// + /// Get the git commit hash, returning null if it takes too long. + /// + /// + /// + /// + /// This method is 'better safe than sorry' because we must not break the user's build.
+ /// It is better to not know the commit hash than to fail the build. + ///
+ private static string GetShortCommitHashSafe(int timeoutAfterMillis) { + Process process = null; + // Note: don't use ReadToEndAsync because waiting on that task blocks forever. + try { + process = StartGitCommand("log", " -n 1 --pretty=format:%h"); + var stdout = process.StandardOutput; + if (process.WaitForExit(timeoutAfterMillis)) { + return stdout.ReadToEnd(); + } else { + // In a git repo with git lfs, git log can be blocked by waiting for switch branches / download lfs objects + // For that reason I disabled this warning log until a better solution is implemented (e.g. cache the commit and use cached if timeout). + // Log.Warning( + // $"[{CodePatcher.TAG}] Timed out trying to get the git commit hash, HotReload will not warn you about" + + // " a build connecting to a server running on a different commit (which is not supported)"); + return null; + } + } catch (Win32Exception ex) { + if (ex.NativeErrorCode == 2) { + // git not found, ignore because user doesn't use git for version control + return null; + } else if (!loggedExceptionInGetShortCommitHashSafe) { + loggedExceptionInGetShortCommitHashSafe = true; + Debug.LogException(ex); + } + } catch (Exception ex) { + if (!loggedExceptionInGetShortCommitHashSafe) { + loggedExceptionInGetShortCommitHashSafe = true; + Log.Exception(ex); + } + } finally { + if (process != null) { + process.Dispose(); + } + } + return null; + } + + static Process StartGitCommand(string command, string arguments, Action modifySettings = null) { + var startInfo = new ProcessStartInfo("git", command + " " + arguments) { + RedirectStandardOutput = true, + RedirectStandardError = true, + UseShellExecute = false, + CreateNoWindow = true, + }; + if (modifySettings != null) { + modifySettings(startInfo); + } + return Process.Start(startInfo); + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/GitUtil.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/GitUtil.cs.meta new file mode 100644 index 0000000..b1d3d7c --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/GitUtil.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: f994bd5bb9f33f740ae37f8c79048a10 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/GitUtil.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers.meta b/Packages/com.singularitygroup.hotreload/Editor/Helpers.meta new file mode 100644 index 0000000..9a003a6 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 387b31d7da35b27428629a83bb4ac589 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/AssemblyOmission.cs b/Packages/com.singularitygroup.hotreload/Editor/Helpers/AssemblyOmission.cs new file mode 100644 index 0000000..89cc545 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/AssemblyOmission.cs @@ -0,0 +1,188 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.IO; +using UnityEditor; +using System.Linq; +using System.Runtime.CompilerServices; +using SingularityGroup.HotReload.Newtonsoft.Json; +using UnityEditor.Compilation; + +[assembly: InternalsVisibleTo("SingularityGroup.HotReload.EditorTests")] + +namespace SingularityGroup.HotReload.Editor { + internal static class AssemblyOmission { + // [MenuItem("Window/Hot Reload Dev/List omitted projects")] + private static void Check() { + Log.Info("To compile C# files same as a Player build, we must omit projects which aren't part of the selected Player build."); + var omitted = GetOmittedProjects(EditorUserBuildSettings.activeScriptCompilationDefines); + Log.Info("---------"); + + foreach (var name in omitted) { + Log.Info("omitted editor/other project named: {0}", name); + } + } + + [JsonObject(MemberSerialization.Fields)] + private class AssemblyDefinitionJson { + public string name; + public string[] defineConstraints; + } + + // scripts in Assets/ (with no asmdef) are always compiled into Assembly-CSharp + private static readonly string alwaysIncluded = "Assembly-CSharp"; + + private class Cache : AssetPostprocessor { + public static string[] ommitedProjects; + + private static void OnPostprocessAllAssets(string[] importedAssets, + string[] deletedAssets, + string[] movedAssets, + string[] movedFromAssetPaths) { + ommitedProjects = null; + } + } + + // main thread only + public static string[] GetOmittedProjects(string allDefineSymbols, bool verboseLogs = false) { + if (Cache.ommitedProjects != null) { + return Cache.ommitedProjects; + } + var arr = allDefineSymbols.Split(';'); + var omitted = GetOmittedProjects(arr, verboseLogs); + Cache.ommitedProjects = omitted; + return omitted; + } + + // must be deterministic (return projects in same order each time) + private static string[] GetOmittedProjects(string[] allDefineSymbols, bool verboseLogs = false) { + // HotReload uses names of assemblies. + var editorAssemblies = GetEditorAssemblies(); + + editorAssemblies.Remove(alwaysIncluded); + var omittedByConstraint = DefineConstraints.GetOmittedAssemblies(allDefineSymbols); + editorAssemblies.AddRange(omittedByConstraint); + + // Note: other platform player assemblies are also returned here, but I haven't seen it cause issues + // when using Hot Reload with IdleGame Android build. + var playerAssemblies = GetPlayerAssemblies().ToArray(); + + if (verboseLogs) { + foreach (var name in editorAssemblies) { + Log.Info("found project named {0}", name); + } + foreach (var playerAssemblyName in playerAssemblies) { + Log.Debug("player assembly named {0}", playerAssemblyName); + } + } + // leaves the editor assemblies that are not built into player assemblies (e.g. editor and test assemblies) + var toOmit = editorAssemblies.Except(playerAssemblies.Select(asm => asm.name)); + var unique = new HashSet(toOmit); + return unique.OrderBy(s => s).ToArray(); + } + + // main thread only + public static List GetEditorAssemblies() { + return CompilationPipeline + .GetAssemblies(AssembliesType.Editor) + .Select(asm => asm.name) + .ToList(); + } + + public static Assembly[] GetPlayerAssemblies() { + var playerAssemblyNames = CompilationPipeline + #if UNITY_2019_3_OR_NEWER + .GetAssemblies(AssembliesType.PlayerWithoutTestAssemblies) // since Unity 2019.3 + #else + .GetAssemblies(AssembliesType.Player) + #endif + .ToArray(); + + + return playerAssemblyNames; + } + + internal static class DefineConstraints { + /// + /// When define constraints evaluate to false, we need + /// + /// + /// + /// + /// Not aware of a Unity api to read defineConstraints, so we do it ourselves.
+ /// Find any asmdef files where the define constraints evaluate to false. + ///
+ public static string[] GetOmittedAssemblies(string[] defineSymbols) { + var guids = AssetDatabase.FindAssets("t:asmdef"); + var asmdefFiles = guids.Select(AssetDatabase.GUIDToAssetPath); + var shouldOmit = new List(); + foreach (var asmdefFile in asmdefFiles) { + var asmdef = ReadDefineConstraints(asmdefFile); + if (asmdef == null) continue; + if (asmdef.defineConstraints == null || asmdef.defineConstraints.Length == 0) { + // Hot Reload already handles assemblies correctly if they have no define symbols. + continue; + } + + var allPass = asmdef.defineConstraints.All(constraint => EvaluateDefineConstraint(constraint, defineSymbols)); + if (!allPass) { + shouldOmit.Add(asmdef.name); + } + } + + return shouldOmit.ToArray(); + } + + static AssemblyDefinitionJson ReadDefineConstraints(string path) { + try { + var json = File.ReadAllText(path); + var asmdef = JsonConvert.DeserializeObject(json); + return asmdef; + } catch (Exception) { + // ignore malformed asmdef + return null; + } + } + + // Unity Define Constraints syntax is described in the docs https://docs.unity3d.com/Manual/class-AssemblyDefinitionImporter.html + static readonly Dictionary syntaxMap = new Dictionary { + { "OR", "||" }, + { "AND", "&&" }, + { "NOT", "!" } + }; + + + /// + /// Evaluate a define constraint like 'UNITY_ANDROID || UNITY_IOS' + /// + /// + /// + /// + public static bool EvaluateDefineConstraint(string input, string[] defineSymbols) { + // map Unity defineConstraints syntax to DataTable syntax (unity supports both) + foreach (var item in syntaxMap) { + // surround with space because || may not have spaces around it + input = input.Replace(item.Value, $" {item.Key} "); + } + + // remove any extra spaces we just created + input = input.Replace(" ", " "); + + var tokens = input.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); + + foreach (var token in tokens) { + if (!syntaxMap.ContainsKey(token) && token != "false" && token != "true") { + var index = input.IndexOf(token, StringComparison.Ordinal); + + // replace symbols with true or false depending if they are in the array or not. + input = input.Substring(0, index) + defineSymbols.Contains(token) + input.Substring(index + token.Length); + } + } + + var dt = new DataTable(); + return (bool)dt.Compute(input, ""); + } + } + } + +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/AssemblyOmission.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Helpers/AssemblyOmission.cs.meta new file mode 100644 index 0000000..a579218 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/AssemblyOmission.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0b94f2314a044b109de488be1ccd5640 +timeCreated: 1674233674 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Helpers/AssemblyOmission.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/BuildInfoHelper.cs b/Packages/com.singularitygroup.hotreload/Editor/Helpers/BuildInfoHelper.cs new file mode 100644 index 0000000..d0f9130 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/BuildInfoHelper.cs @@ -0,0 +1,144 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using UnityEditor; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor { + struct BuildInfoInput { + public readonly string allDefineSymbols; + public readonly BuildTarget activeBuildTarget; + public readonly string[] omittedProjects; + public readonly bool batchMode; + + public BuildInfoInput(string allDefineSymbols, BuildTarget activeBuildTarget, string[] omittedProjects, bool batchMode) { + this.allDefineSymbols = allDefineSymbols; + this.activeBuildTarget = activeBuildTarget; + this.omittedProjects = omittedProjects; + this.batchMode = batchMode; + } + } + + static class BuildInfoHelper { + public static async Task GetGenerateBuildInfoInput() { + var buildTarget = EditorUserBuildSettings.activeBuildTarget; + var activeDefineSymbols = EditorUserBuildSettings.activeScriptCompilationDefines; + var batchMode = Application.isBatchMode; + var allDefineSymbols = await Task.Run(() => { + return GetAllAndroidMonoBuildDefineSymbolsThreaded(activeDefineSymbols); + }); + // cached so unexpensive most of the time + var omittedProjects = AssemblyOmission.GetOmittedProjects(allDefineSymbols); + + return new BuildInfoInput( + allDefineSymbols: allDefineSymbols, + activeBuildTarget: buildTarget, + omittedProjects: omittedProjects, + batchMode: batchMode + ); + } + + public static BuildInfo GenerateBuildInfoMainThread() { + return GenerateBuildInfoMainThread(EditorUserBuildSettings.activeBuildTarget); + } + + public static BuildInfo GenerateBuildInfoMainThread(BuildTarget buildTarget) { + var allDefineSymbols = GetAllAndroidMonoBuildDefineSymbolsThreaded(EditorUserBuildSettings.activeScriptCompilationDefines); + return GenerateBuildInfoThreaded(new BuildInfoInput( + allDefineSymbols: allDefineSymbols, + activeBuildTarget: buildTarget, + omittedProjects: AssemblyOmission.GetOmittedProjects(allDefineSymbols), + batchMode: Application.isBatchMode + )); + } + + public static BuildInfo GenerateBuildInfoThreaded(BuildInfoInput input) { + var omittedProjectRegex = String.Join("|", input.omittedProjects.Select(name => Regex.Escape(name))); + var shortCommitHash = GitUtil.GetShortCommitHashOrFallback(); + var hostname = IsHumanControllingUs(input.batchMode) ? IpHelper.GetIpAddress() : null; + + // Note: add a string to uniquely identify the Unity project. Could use filepath to /MyProject/Assets/ (editor Application.dataPath) + // or application identifier (com.company.appname). + // Do this when supporting multiple projects: SG-28807 + // The matching code is in Runtime assembly which compares server response with built BuildInfo. + return new BuildInfo { + projectIdentifier = "SG-29580", + commitHash = shortCommitHash, + defineSymbols = input.allDefineSymbols, + projectOmissionRegex = omittedProjectRegex, + buildMachineHostName = hostname, + buildMachinePort = RequestHelper.port, + activeBuildTarget = input.activeBuildTarget.ToString(), + buildMachineRequestOrigin = RequestHelper.origin, + }; + } + + public static bool IsHumanControllingUs(bool batchMode) { + if (batchMode) { + return false; + } + + var isCI = !string.IsNullOrEmpty(Environment.GetEnvironmentVariable("CI")); + return !isCI; + } + + private static readonly string[] editorSymbolsToRemove = { + "PLATFORM_ARCH_64", + "UNITY_64", + "UNITY_INCLUDE_TESTS", + "UNITY_EDITOR", + "UNITY_EDITOR_64", + "UNITY_EDITOR_WIN", + "ENABLE_UNITY_COLLECTIONS_CHECKS", + "ENABLE_BURST_AOT", + "RENDER_SOFTWARE_CURSOR", + "PLATFORM_STANDALONE_WIN", + "PLATFORM_STANDALONE", + "UNITY_STANDALONE_WIN", + "UNITY_STANDALONE", + "ENABLE_MOVIES", + "ENABLE_OUT_OF_PROCESS_CRASH_HANDLER", + "ENABLE_WEBSOCKET_HOST", + "ENABLE_CLUSTER_SYNC", + "ENABLE_CLUSTERINPUT", + }; + + private static readonly string[] androidSymbolsToAdd = { + "CSHARP_7_OR_LATER", + "CSHARP_7_3_OR_NEWER", + "PLATFORM_ANDROID", + "UNITY_ANDROID", + "UNITY_ANDROID_API", + "ENABLE_EGL", + "DEVELOPMENT_BUILD", + "ENABLE_CLOUD_SERVICES_NATIVE_CRASH_REPORTING", + "PLATFORM_SUPPORTS_ADS_ID", + "UNITY_CAN_SHOW_SPLASH_SCREEN", + "UNITY_HAS_GOOGLEVR", + "UNITY_HAS_TANGO", + "ENABLE_SPATIALTRACKING", + "ENABLE_RUNTIME_PERMISSIONS", + "ENABLE_ENGINE_CODE_STRIPPING", + "UNITY_ASTC_ONLY_DECOMPRESS", + "ANDROID_USE_SWAPPY", + "ENABLE_ONSCREEN_KEYBOARD", + "ENABLE_UNITYADS_RUNTIME", + "UNITY_UNITYADS_API", + }; + + // Currently there is no better way. Alternatively we could hook into unity's call to csc.exe and parse the /define: arguments. + // Hardcoding the differences was less effort and is less error prone. + // I also looked into it and tried all the Build interfaces like this one https://docs.unity3d.com/ScriptReference/Build.IPostBuildPlayerScriptDLLs.html + // and logging EditorUserBuildSettings.activeScriptCompilationDefines in the callbacks - result: all same like editor, so I agree that hardcode is best. + public static string GetAllAndroidMonoBuildDefineSymbolsThreaded(string[] defineSymbols) { + var defines = new HashSet(defineSymbols); + defines.ExceptWith(editorSymbolsToRemove); + defines.UnionWith(androidSymbolsToAdd); + // sort for consistency, must be deterministic + var definesArray = defines.OrderBy(def => def).ToArray(); + return String.Join(";", definesArray); + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/BuildInfoHelper.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Helpers/BuildInfoHelper.cs.meta new file mode 100644 index 0000000..805a4dc --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/BuildInfoHelper.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f41ad09ae4f04088bf6c9ad9a4fc0885 +timeCreated: 1674220023 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Helpers/BuildInfoHelper.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/EditorWindowHelper.cs b/Packages/com.singularitygroup.hotreload/Editor/Helpers/EditorWindowHelper.cs new file mode 100644 index 0000000..92553a3 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/EditorWindowHelper.cs @@ -0,0 +1,101 @@ +using System; +using System.Text.RegularExpressions; +using UnityEngine; +using System.Threading.Tasks; +using UnityEditor; +using System.Collections.Generic; +using System.Linq; + +namespace SingularityGroup.HotReload.Editor { + internal static class EditorWindowHelper { + #if UNITY_2020_1_OR_NEWER + public static bool supportsNotifications = true; + #else + public static bool supportsNotifications = false; + #endif + + private static readonly Regex ValidEmailRegex = new Regex(@"^(?!\.)(""([^""\r\\]|\\[""\r\\])*""|" + + @"([-a-z0-9!#$%&'*+/=?^_`{|}~]|(? notificationContent = new Dictionary { + { NotificationStatus.Patching, new GUIContent("[Hot Reload] Applying patches...")}, + { NotificationStatus.NeedsRecompile, new GUIContent("[Hot Reload] Unsupported Changes detected! Recompiling...")}, + }; + + static Type gameViewT; + private static EditorWindow[] gameViewWindows { + get { + gameViewT = gameViewT ?? typeof(EditorWindow).Assembly.GetType("UnityEditor.GameView"); + return Resources.FindObjectsOfTypeAll(gameViewT).Cast().ToArray(); + } + } + + private static EditorWindow[] sceneWindows { + get { + return Resources.FindObjectsOfTypeAll(typeof(SceneView)).Cast().ToArray(); + } + } + + private static EditorWindow[] notificationWindows { + get { + return gameViewWindows.Concat(sceneWindows).ToArray(); + } + } + + static NotificationStatus lastNotificationStatus; + private static DateTime? latestNotificationStartedAt; + private static bool notificationShownRecently => latestNotificationStartedAt != null && DateTime.UtcNow - latestNotificationStartedAt < TimeSpan.FromSeconds(1); + internal static void ShowNotification(NotificationStatus notificationType, float maxDuration = 3) { + // Patch status goes from Unsupported changes to patching rapidly when making unsupported change + // patching also shows right before unsupported changes sometimes + // so we don't override NeedsRecompile notification ever + bool willOverrideNeedsCompileNotification = notificationType != NotificationStatus.NeedsRecompile && notificationShownRecently || lastNotificationStatus == NotificationStatus.NeedsRecompile && notificationShownRecently; + if (!supportsNotifications || willOverrideNeedsCompileNotification) { + return; + } + + foreach (EditorWindow notificationWindow in notificationWindows) { + notificationWindow.ShowNotification(notificationContent[notificationType], maxDuration); + notificationWindow.Repaint(); + } + latestNotificationStartedAt = DateTime.UtcNow; + lastNotificationStatus = notificationType; + } + + internal static void RemoveNotification() { + if (!supportsNotifications) { + return; + } + // only patching notifications should be removed after showing less than 1 second + if (notificationShownRecently && lastNotificationStatus != NotificationStatus.Patching) { + return; + } + foreach (EditorWindow notificationWindow in notificationWindows) { + notificationWindow.RemoveNotification(); + notificationWindow.Repaint(); + } + latestNotificationStartedAt = null; + lastNotificationStatus = NotificationStatus.None; + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/EditorWindowHelper.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Helpers/EditorWindowHelper.cs.meta new file mode 100644 index 0000000..84ed215 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/EditorWindowHelper.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: fd463b1f0bfddf34caa662ebe375e5fe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Helpers/EditorWindowHelper.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/GUIHelper.cs b/Packages/com.singularitygroup.hotreload/Editor/Helpers/GUIHelper.cs new file mode 100644 index 0000000..fab85d7 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/GUIHelper.cs @@ -0,0 +1,162 @@ +using UnityEngine; +using System.Collections.Generic; + +namespace SingularityGroup.HotReload.Editor { + internal enum InvertibleIcon { + BugReport, + Events, + EventsNew, + Recompile, + Logo, + Close, + FoldoutOpen, + FoldoutClosed, + Spinner, + Stop, + Start, + } + + internal static class GUIHelper { + private static readonly Dictionary supportedInvertibleIcons = new Dictionary { + { InvertibleIcon.BugReport, "report_bug" }, + { InvertibleIcon.Events, "events" }, + { InvertibleIcon.Recompile, "refresh" }, + { InvertibleIcon.Logo, "logo" }, + { InvertibleIcon.Close, "close" }, + { InvertibleIcon.FoldoutOpen, "foldout_open" }, + { InvertibleIcon.FoldoutClosed, "foldout_closed" }, + { InvertibleIcon.Spinner, "icon_loading_star_light_mode_96" }, + { InvertibleIcon.Stop, "Icn_Stop" }, + { InvertibleIcon.Start, "Icn_play" }, + }; + + private static readonly Dictionary invertibleIconCache = new Dictionary(); + private static readonly Dictionary invertibleIconInvertedCache = new Dictionary(); + private static readonly Dictionary iconCache = new Dictionary(); + + internal static Texture2D InvertTextureColor(Texture2D originalTexture) { + if (!originalTexture) { + return originalTexture; + } + // Get the original pixels from the texture + Color[] originalPixels = originalTexture.GetPixels(); + + // Create a new array for the inverted colors + Color[] invertedPixels = new Color[originalPixels.Length]; + + // Iterate through the pixels and invert the colors while preserving the alpha channel + for (int i = 0; i < originalPixels.Length; i++) { + Color originalColor = originalPixels[i]; + Color invertedColor = new Color(1 - originalColor.r, 1 - originalColor.g, 1 - originalColor.b, originalColor.a); + invertedPixels[i] = invertedColor; + } + + // Create a new texture and set its pixels + Texture2D invertedTexture = new Texture2D(originalTexture.width, originalTexture.height); + invertedTexture.SetPixels(invertedPixels); + + // Apply the changes to the texture + invertedTexture.Apply(); + + return invertedTexture; + } + + internal static Texture2D GetInvertibleIcon(InvertibleIcon invertibleIcon) { + Texture2D iconTexture; + var cache = HotReloadWindowStyles.IsDarkMode ? invertibleIconInvertedCache : invertibleIconCache; + + if (!cache.TryGetValue(invertibleIcon, out iconTexture) || !iconTexture) { + var type = invertibleIcon == InvertibleIcon.EventsNew ? InvertibleIcon.Events : invertibleIcon; + iconTexture = Resources.Load(supportedInvertibleIcons[type]); + + // we assume icons are for light mode by default + // therefore if its dark mode we should invert them + if (HotReloadWindowStyles.IsDarkMode) { + iconTexture = InvertTextureColor(iconTexture); + } + + cache[type] = iconTexture; + + // we combine dot image with Events icon to create a new alert version + if (invertibleIcon == InvertibleIcon.EventsNew) { + var redDot = Resources.Load("red_dot"); + iconTexture = CombineImages(iconTexture, redDot); + cache[InvertibleIcon.EventsNew] = iconTexture; + } + } + return cache[invertibleIcon]; + } + + internal static Texture2D GetLocalIcon(string iconName) { + Texture2D iconTexture; + if (!iconCache.TryGetValue(iconName, out iconTexture) || !iconTexture) { + iconTexture = Resources.Load(iconName); + iconCache[iconName] = iconTexture; + } + return iconTexture; + } + + static Texture2D CombineImages(Texture2D image1, Texture2D image2) { + if (!image1 || !image2) { + return image1; + } + var combinedImage = new Texture2D(Mathf.Max(image1.width, image2.width), Mathf.Max(image1.height, image2.height)); + + for (int y = 0; y < combinedImage.height; y++) { + for (int x = 0; x < combinedImage.width; x++) { + Color color1 = x < image1.width && y < image1.height ? image1.GetPixel(x, y) : Color.clear; + Color color2 = x < image2.width && y < image2.height ? image2.GetPixel(x, y) : Color.clear; + combinedImage.SetPixel(x, y, Color.Lerp(color1, color2, color2.a)); + } + } + combinedImage.Apply(); + return combinedImage; + } + + private static readonly Dictionary textureColorCache = new Dictionary(); + internal static Texture2D ConvertTextureToColor(Color color) { + Texture2D texture; + if (!textureColorCache.TryGetValue(color, out texture) || !texture) { + texture = new Texture2D(1, 1); + texture.SetPixel(0, 0, color); + texture.Apply(); + textureColorCache[color] = texture; + } + return texture; + } + + private static readonly Dictionary grayTextureCache = new Dictionary(); + private static readonly Dictionary colorFactor = new Dictionary { + { "error", new Color(0.6f, 0.587f, 0.114f) }, + }; + + internal static Texture2D ConvertToGrayscale(string localIcon) { + Texture2D _texture; + if (!grayTextureCache.TryGetValue(localIcon, out _texture) || !_texture) { + var icon = GUIHelper.GetLocalIcon(localIcon); + // Create a copy of the texture + Texture2D copiedTexture = new Texture2D(icon.width, icon.height, TextureFormat.RGBA32, false); + + // Convert the copied texture to grayscale + Color[] pixels = icon.GetPixels(); + for (int i = 0; i < pixels.Length; i++) { + Color pixel = pixels[i]; + Color factor; + if (!colorFactor.TryGetValue(localIcon, out factor)) { + factor = new Color(0.299f, 0.587f, 0.114f); + } + float grayscale = factor.r * pixel.r + factor.g * pixel.g + factor.b * pixel.b; + pixels[i] = new Color(grayscale, grayscale, grayscale, pixel.a); // Preserve alpha channel + } + copiedTexture.SetPixels(pixels); + copiedTexture.Apply(); + + // Store the grayscale texture in the cache + grayTextureCache[localIcon] = copiedTexture; + + return copiedTexture; + } + return _texture; + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/GUIHelper.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Helpers/GUIHelper.cs.meta new file mode 100644 index 0000000..1b66fc0 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/GUIHelper.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b4be912211814333ab61898b6440dc8e +timeCreated: 1694518358 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Helpers/GUIHelper.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadSuggestionsHelper.cs b/Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadSuggestionsHelper.cs new file mode 100644 index 0000000..56f739e --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadSuggestionsHelper.cs @@ -0,0 +1,544 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Threading.Tasks; +using SingularityGroup.HotReload.DTO; +using UnityEditor; +using UnityEditor.Compilation; +using UnityEditor.PackageManager; +using UnityEditor.PackageManager.Requests; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor { + + internal static class HotReloadSuggestionsHelper { + internal static void SetSuggestionsShown(HotReloadSuggestionKind hotReloadSuggestionKind) { + if (EditorPrefs.GetBool($"HotReloadWindow.SuggestionsShown.{hotReloadSuggestionKind}")) { + return; + } + EditorPrefs.SetBool($"HotReloadWindow.SuggestionsActive.{hotReloadSuggestionKind}", true); + EditorPrefs.SetBool($"HotReloadWindow.SuggestionsShown.{hotReloadSuggestionKind}", true); + AlertEntry entry; + if (suggestionMap.TryGetValue(hotReloadSuggestionKind, out entry) && !HotReloadTimelineHelper.Suggestions.Contains(entry)) { + HotReloadTimelineHelper.Suggestions.Insert(0, entry); + HotReloadState.ShowingRedDot = true; + } + } + + internal static bool CheckSuggestionActive(HotReloadSuggestionKind hotReloadSuggestionKind) { + return EditorPrefs.GetBool($"HotReloadWindow.SuggestionsActive.{hotReloadSuggestionKind}"); + } + + internal static bool CheckSuggestionShown(HotReloadSuggestionKind hotReloadSuggestionKind) { + return EditorPrefs.GetBool($"HotReloadWindow.SuggestionsShown.{hotReloadSuggestionKind}"); + } + + internal static bool CanShowServerSuggestion(HotReloadSuggestionKind hotReloadSuggestionKind) { + if (hotReloadSuggestionKind == HotReloadSuggestionKind.FieldInitializerWithSideEffects) { + return !HotReloadState.ShowedFieldInitializerWithSideEffects; + } else if (hotReloadSuggestionKind == HotReloadSuggestionKind.FieldInitializerExistingInstancesEdited) { + return !HotReloadState.ShowedFieldInitializerExistingInstancesEdited; + } else if (hotReloadSuggestionKind == HotReloadSuggestionKind.FieldInitializerExistingInstancesUnedited) { + return !HotReloadState.ShowedFieldInitializerExistingInstancesUnedited; + } else if (hotReloadSuggestionKind == HotReloadSuggestionKind.AddMonobehaviourMethod) { + return !HotReloadState.ShowedAddMonobehaviourMethods; + } else if (hotReloadSuggestionKind == HotReloadSuggestionKind.DetailedErrorReportingIsEnabled) { + return !CheckSuggestionShown(HotReloadSuggestionKind.DetailedErrorReportingIsEnabled); + } + return false; + } + + internal static void SetServerSuggestionShown(HotReloadSuggestionKind hotReloadSuggestionKind) { + if (hotReloadSuggestionKind == HotReloadSuggestionKind.DetailedErrorReportingIsEnabled) { + HotReloadSuggestionsHelper.SetSuggestionsShown(hotReloadSuggestionKind); + return; + } + if (hotReloadSuggestionKind == HotReloadSuggestionKind.FieldInitializerWithSideEffects) { + HotReloadState.ShowedFieldInitializerWithSideEffects = true; + } else if (hotReloadSuggestionKind == HotReloadSuggestionKind.FieldInitializerExistingInstancesEdited) { + HotReloadState.ShowedFieldInitializerExistingInstancesEdited = true; + } else if (hotReloadSuggestionKind == HotReloadSuggestionKind.FieldInitializerExistingInstancesUnedited) { + HotReloadState.ShowedFieldInitializerExistingInstancesUnedited = true; + } else if (hotReloadSuggestionKind == HotReloadSuggestionKind.AddMonobehaviourMethod) { + HotReloadState.ShowedAddMonobehaviourMethods = true; + } else { + return; + } + HotReloadSuggestionsHelper.SetSuggestionActive(hotReloadSuggestionKind); + } + + // used for cases where suggestion might need to be shown more than once + internal static void SetSuggestionActive(HotReloadSuggestionKind hotReloadSuggestionKind) { + if (EditorPrefs.GetBool($"HotReloadWindow.SuggestionsShown.{hotReloadSuggestionKind}")) { + return; + } + EditorPrefs.SetBool($"HotReloadWindow.SuggestionsActive.{hotReloadSuggestionKind}", true); + + AlertEntry entry; + if (suggestionMap.TryGetValue(hotReloadSuggestionKind, out entry) && !HotReloadTimelineHelper.Suggestions.Contains(entry)) { + HotReloadTimelineHelper.Suggestions.Insert(0, entry); + HotReloadState.ShowingRedDot = true; + } + } + + internal static void SetSuggestionInactive(HotReloadSuggestionKind hotReloadSuggestionKind) { + EditorPrefs.SetBool($"HotReloadWindow.SuggestionsActive.{hotReloadSuggestionKind}", false); + AlertEntry entry; + if (suggestionMap.TryGetValue(hotReloadSuggestionKind, out entry)) { + HotReloadTimelineHelper.Suggestions.Remove(entry); + } + } + + internal static void InitSuggestions() { + foreach (HotReloadSuggestionKind value in Enum.GetValues(typeof(HotReloadSuggestionKind))) { + if (!CheckSuggestionActive(value)) { + continue; + } + AlertEntry entry; + if (suggestionMap.TryGetValue(value, out entry) && !HotReloadTimelineHelper.Suggestions.Contains(entry)) { + HotReloadTimelineHelper.Suggestions.Insert(0, entry); + } + } + } + + internal static HotReloadSuggestionKind? FindSuggestionKind(AlertEntry targetEntry) { + foreach (KeyValuePair pair in suggestionMap) { + if (pair.Value.Equals(targetEntry)) { + return pair.Key; + } + } + return null; + } + + internal static readonly OpenURLButton recompileTroubleshootingButton = new OpenURLButton("Docs", Constants.RecompileTroubleshootingURL); + internal static readonly OpenURLButton featuresDocumentationButton = new OpenURLButton("Docs", Constants.FeaturesDocumentationURL); + internal static readonly OpenURLButton multipleEditorsDocumentationButton = new OpenURLButton("Docs", Constants.MultipleEditorsURL); + internal static readonly OpenURLButton debuggerDocumentationButton = new OpenURLButton("More Info", Constants.DebuggerURL); + public static Dictionary suggestionMap = new Dictionary { + { HotReloadSuggestionKind.UnityBestDevelopmentToolAward2023, new AlertEntry( + AlertType.Suggestion, + "Vote for the \"Best Development Tool\" Award!", + "Hot Reload was nominated for the \"Best Development Tool\" Award. Please consider voting. Thank you!", + actionData: () => { + GUILayout.Space(6f); + using (new EditorGUILayout.HorizontalScope()) { + if (GUILayout.Button(" Vote ")) { + Application.OpenURL(Constants.VoteForAwardURL); + SetSuggestionInactive(HotReloadSuggestionKind.UnityBestDevelopmentToolAward2023); + } + GUILayout.FlexibleSpace(); + } + }, + timestamp: DateTime.Now, + entryType: EntryType.Foldout + )}, + { HotReloadSuggestionKind.UnsupportedChanges, new AlertEntry( + AlertType.Suggestion, + "Which changes does Hot Reload support?", + "Hot Reload supports most code changes, but there are some limitations. Generally, changes to methods and fields are supported. Things like adding new types is not (yet) supported. See the documentation for the list of current features and our current roadmap", + actionData: () => { + GUILayout.Space(10f); + using (new EditorGUILayout.HorizontalScope()) { + featuresDocumentationButton.OnGUI(); + GUILayout.FlexibleSpace(); + } + }, + timestamp: DateTime.Now, + entryType: EntryType.Foldout + )}, + { HotReloadSuggestionKind.UnsupportedPackages, new AlertEntry( + AlertType.Suggestion, + "Unsupported package detected", + "The following packages are only partially supported: ECS, Mirror, Fishnet, and Photon. Hot Reload will work in the project, but changes specific to those packages might not hot-reload", + iconType: AlertType.UnsupportedChange, + actionData: () => { + GUILayout.Space(10f); + using (new EditorGUILayout.HorizontalScope()) { + HotReloadAboutTab.contactButton.OnGUI(); + GUILayout.FlexibleSpace(); + } + }, + timestamp: DateTime.Now, + entryType: EntryType.Foldout + )}, + { HotReloadSuggestionKind.AutoRecompiledWhenPlaymodeStateChanges, new AlertEntry( + AlertType.Suggestion, + "Unity recompiles on enter/exit play mode?", + "If you have an issue with the Unity Editor recompiling when the Play Mode state changes, more info is available in the docs. Feel free to reach out if you require assistance. We'll be glad to help.", + actionData: () => { + GUILayout.Space(10f); + using (new EditorGUILayout.HorizontalScope()) { + recompileTroubleshootingButton.OnGUI(); + GUILayout.Space(5f); + HotReloadAboutTab.discordButton.OnGUI(); + GUILayout.Space(5f); + HotReloadAboutTab.contactButton.OnGUI(); + GUILayout.FlexibleSpace(); + } + }, + timestamp: DateTime.Now, + entryType: EntryType.Foldout + )}, +#if UNITY_2022_1_OR_NEWER + { HotReloadSuggestionKind.AutoRecompiledWhenPlaymodeStateChanges2022, new AlertEntry( + AlertType.Suggestion, + "Unsupported setting detected", + "The 'Sprite Packer Mode' setting can cause unintended recompilations if set to 'Sprite Atlas V1 - Always Enabled'", + iconType: AlertType.UnsupportedChange, + actionData: () => { + GUILayout.Space(10f); + using (new EditorGUILayout.HorizontalScope()) { + if (GUILayout.Button(" Use \"Build Time Only Atlas\" ")) { + if (EditorSettings.spritePackerMode == SpritePackerMode.SpriteAtlasV2) { + EditorSettings.spritePackerMode = SpritePackerMode.SpriteAtlasV2Build; + } else { + EditorSettings.spritePackerMode = SpritePackerMode.BuildTimeOnlyAtlas; + } + } + if (GUILayout.Button(" Open Settings ")) { + SettingsService.OpenProjectSettings("Project/Editor"); + } + if (GUILayout.Button(" Ignore suggestion ")) { + SetSuggestionInactive(HotReloadSuggestionKind.AutoRecompiledWhenPlaymodeStateChanges2022); + } + + GUILayout.FlexibleSpace(); + } + }, + timestamp: DateTime.Now, + entryType: EntryType.Foldout, + hasExitButton: false + )}, +#endif + { HotReloadSuggestionKind.MultidimensionalArrays, new AlertEntry( + AlertType.Suggestion, + "Use jagged instead of multidimensional arrays", + "Hot Reload doesn't support methods with multidimensional arrays ([,]). You can work around this by using jagged arrays ([][])", + iconType: AlertType.UnsupportedChange, + actionData: () => { + GUILayout.Space(10f); + using (new EditorGUILayout.HorizontalScope()) { + if (GUILayout.Button(" Learn more ")) { + Application.OpenURL("https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca1814"); + } + GUILayout.FlexibleSpace(); + } + }, + timestamp: DateTime.Now, + entryType: EntryType.Foldout + )}, + { HotReloadSuggestionKind.EditorsWithoutHRRunning, new AlertEntry( + AlertType.Suggestion, + "Some Unity instances don't have Hot Reload running.", + "Make sure that either: \n1) Hot Reload is installed and running on all Editor instances, or \n2) Hot Reload is stopped in all Editor instances where it is installed.", + actionData: () => { + GUILayout.Space(10f); + using (new EditorGUILayout.HorizontalScope()) { + if (GUILayout.Button(" Stop Hot Reload ")) { + EditorCodePatcher.StopCodePatcher().Forget(); + } + GUILayout.Space(5f); + + multipleEditorsDocumentationButton.OnGUI(); + GUILayout.Space(5f); + + if (GUILayout.Button(" Don't show again ")) { + HotReloadSuggestionsHelper.SetSuggestionsShown(HotReloadSuggestionKind.EditorsWithoutHRRunning); + HotReloadSuggestionsHelper.SetSuggestionInactive(HotReloadSuggestionKind.EditorsWithoutHRRunning); + } + GUILayout.FlexibleSpace(); + GUILayout.FlexibleSpace(); + } + }, + timestamp: DateTime.Now, + entryType: EntryType.Foldout, + iconType: AlertType.UnsupportedChange + )}, + // Not in use (never reported from the server) + { HotReloadSuggestionKind.FieldInitializerWithSideEffects, new AlertEntry( + AlertType.Suggestion, + "Field initializer with side-effects detected", + "A field initializer update might have side effects, e.g. calling a method or creating an object.\n\nWhile Hot Reload does support this, it can sometimes be confusing when the initializer logic runs at 'unexpected times'.", + actionData: () => { + GUILayout.Space(10f); + using (new EditorGUILayout.HorizontalScope()) { + if (GUILayout.Button(" OK ")) { + SetSuggestionInactive(HotReloadSuggestionKind.FieldInitializerWithSideEffects); + } + GUILayout.FlexibleSpace(); + if (GUILayout.Button(" Don't show again ")) { + SetSuggestionsShown(HotReloadSuggestionKind.FieldInitializerWithSideEffects); + SetSuggestionInactive(HotReloadSuggestionKind.FieldInitializerWithSideEffects); + } + } + }, + timestamp: DateTime.Now, + entryType: EntryType.Foldout, + iconType: AlertType.Suggestion + )}, + { HotReloadSuggestionKind.DetailedErrorReportingIsEnabled, new AlertEntry( + AlertType.Suggestion, + "Detailed error reporting is enabled", + "When an error happens in Hot Reload, the exception stacktrace is sent as telemetry to help diagnose and fix the issue.\nThe exception stack trace is only included if it originated from the Hot Reload package or binary. Stacktraces from your own code are not sent.\nYou can disable detailed error reporting to prevent telemetry from including any information about your project.", + actionData: () => { + GUILayout.Space(10f); + using (new EditorGUILayout.HorizontalScope()) { + GUILayout.Space(4f); + if (GUILayout.Button(" OK ")) { + SetSuggestionInactive(HotReloadSuggestionKind.DetailedErrorReportingIsEnabled); + } + GUILayout.FlexibleSpace(); + if (GUILayout.Button(" Disable ")) { + HotReloadSettingsTab.DisableDetailedErrorReportingInner(true); + SetSuggestionInactive(HotReloadSuggestionKind.DetailedErrorReportingIsEnabled); + } + GUILayout.Space(10f); + } + }, + timestamp: DateTime.Now, + entryType: EntryType.Foldout, + iconType: AlertType.Suggestion + )}, + // Not in use (never reported from the server) + { HotReloadSuggestionKind.FieldInitializerExistingInstancesEdited, new AlertEntry( + AlertType.Suggestion, + "Field initializer edit updated the value of existing class instances", + "By default, Hot Reload updates field values of existing object instances when new field initializer has constant value.\n\nIf you want to change this behavior, disable the \"Apply field initializer edits to existing class instances\" option in Settings or click the button below.", + actionData: () => { + GUILayout.Space(10f); + using (new EditorGUILayout.HorizontalScope()) { + if (GUILayout.Button(" Turn off ")) { + #pragma warning disable CS0618 + HotReloadSettingsTab.ApplyApplyFieldInitializerEditsToExistingClassInstances(false); + #pragma warning restore CS0618 + SetSuggestionInactive(HotReloadSuggestionKind.FieldInitializerExistingInstancesEdited); + } + if (GUILayout.Button(" Open Settings ")) { + HotReloadWindow.Current.SelectTab(typeof(HotReloadSettingsTab)); + } + GUILayout.FlexibleSpace(); + if (GUILayout.Button(" Don't show again ")) { + SetSuggestionsShown(HotReloadSuggestionKind.FieldInitializerExistingInstancesEdited); + SetSuggestionInactive(HotReloadSuggestionKind.FieldInitializerExistingInstancesEdited); + } + } + }, + timestamp: DateTime.Now, + entryType: EntryType.Foldout, + iconType: AlertType.Suggestion + )}, + { HotReloadSuggestionKind.FieldInitializerExistingInstancesUnedited, new AlertEntry( + AlertType.Suggestion, + "Field initializer edits don't apply to existing objects", + "By default, Hot Reload applies field initializer edits of existing fields only to new objects (newly instantiated classes), just like normal C#.\n\nFor rapid prototyping, you can use static fields which will update across all instances.", + actionData: () => { + GUILayout.Space(8f); + using (new EditorGUILayout.HorizontalScope()) { + if (GUILayout.Button(" OK ")) { + SetSuggestionsShown(HotReloadSuggestionKind.FieldInitializerExistingInstancesUnedited); + SetSuggestionInactive(HotReloadSuggestionKind.FieldInitializerExistingInstancesUnedited); + } + GUILayout.FlexibleSpace(); + } + }, + timestamp: DateTime.Now, + entryType: EntryType.Foldout, + iconType: AlertType.Suggestion + )}, + { HotReloadSuggestionKind.AddMonobehaviourMethod, new AlertEntry( + AlertType.Suggestion, + "New MonoBehaviour methods are not shown in the inspector", + "New methods in MonoBehaviours are not shown in the inspector until the script is recompiled. This is a limitation of Hot Reload handling of Unity's serialization system.\n\nYou can use the button below to auto recompile partially supported changes such as this one.", + actionData: () => { + GUILayout.Space(8f); + using (new EditorGUILayout.HorizontalScope()) { + if (GUILayout.Button(" OK ")) { + SetSuggestionInactive(HotReloadSuggestionKind.AddMonobehaviourMethod); + } + if (GUILayout.Button(" Auto Recompile ")) { + SetSuggestionInactive(HotReloadSuggestionKind.AddMonobehaviourMethod); + HotReloadPrefs.AutoRecompilePartiallyUnsupportedChanges = true; + HotReloadPrefs.DisplayNewMonobehaviourMethodsAsPartiallySupported = true; + HotReloadRunTab.RecompileWithChecks(); + } + GUILayout.FlexibleSpace(); + if (GUILayout.Button(" Don't show again ")) { + SetSuggestionsShown(HotReloadSuggestionKind.AddMonobehaviourMethod); + SetSuggestionInactive(HotReloadSuggestionKind.AddMonobehaviourMethod); + } + } + }, + timestamp: DateTime.Now, + entryType: EntryType.Foldout, + iconType: AlertType.Suggestion + )}, +#if UNITY_2020_1_OR_NEWER + { HotReloadSuggestionKind.SwitchToDebugModeForInlinedMethods, new AlertEntry( + AlertType.Suggestion, + "Switch code optimization to Debug Mode", + "In Release Mode some methods are inlined, which prevents Hot Reload from applying changes. A clear warning is always shown when this happens, but you can use Debug Mode to avoid the issue altogether", + actionData: () => { + GUILayout.Space(10f); + using (new EditorGUILayout.HorizontalScope()) { + if (GUILayout.Button(" Switch to Debug mode ") && HotReloadRunTab.ConfirmExitPlaymode("Switching code optimization will stop Play Mode.\n\nDo you wish to proceed?")) { + HotReloadRunTab.SwitchToDebugMode(); + } + GUILayout.FlexibleSpace(); + } + }, + timestamp: DateTime.Now, + entryType: EntryType.Foldout, + iconType: AlertType.UnsupportedChange + )}, +#endif + { HotReloadSuggestionKind.HotReloadWhileDebuggerIsAttached, new AlertEntry( + AlertType.Suggestion, + "Hot Reload is disabled while a debugger is attached", + "Hot Reload automatically disables itself while a debugger is attached, as it can otherwise interfere with certain debugger features.\nWhile disabled, every code change will trigger a full Unity recompilation.\n\nYou can choose to keep Hot Reload enabled while a debugger is attached, though some features like debugger variable inspection might not always work as expected.", + actionData: () => { + GUILayout.Space(8f); + using (new EditorGUILayout.HorizontalScope()) { + if (GUILayout.Button(" Keep enabled during debugging ")) { + SetSuggestionInactive(HotReloadSuggestionKind.HotReloadWhileDebuggerIsAttached); + HotReloadPrefs.AutoDisableHotReloadWithDebugger = false; + } + GUILayout.FlexibleSpace(); + debuggerDocumentationButton.OnGUI(); + if (GUILayout.Button(" Don't show again ")) { + SetSuggestionsShown(HotReloadSuggestionKind.HotReloadWhileDebuggerIsAttached); + SetSuggestionInactive(HotReloadSuggestionKind.HotReloadWhileDebuggerIsAttached); + } + } + }, + timestamp: DateTime.Now, + entryType: EntryType.Foldout, + iconType: AlertType.Suggestion + )}, + { HotReloadSuggestionKind.HotReloadedMethodsWhenDebuggerIsAttached, new AlertEntry( + AlertType.Suggestion, + "Hot Reload may interfere with your debugger session", + "Some debugger features, like variable inspection, might not work as expected for methods patched during the Hot Reload session. A full Unity recompile is required to get the full debugger experience.", + actionData: () => { + GUILayout.Space(8f); + using (new EditorGUILayout.HorizontalScope()) { + if (GUILayout.Button(" Recompile ")) { + SetSuggestionInactive(HotReloadSuggestionKind.HotReloadedMethodsWhenDebuggerIsAttached); + if (HotReloadRunTab.ConfirmExitPlaymode("Using the Recompile button will stop Play Mode.\n\nDo you wish to proceed?")) { + HotReloadRunTab.Recompile(); + } + } + GUILayout.FlexibleSpace(); + debuggerDocumentationButton.OnGUI(); + GUILayout.Space(8f); + } + }, + timestamp: DateTime.Now, + entryType: EntryType.Foldout, + iconType: AlertType.UnsupportedChange, + hasExitButton: false + )}, + + }; + + static ListRequest listRequest; + static string[] unsupportedPackages = new[] { + "com.unity.entities", + "com.firstgeargames.fishnet", + }; + static List unsupportedPackagesList; + static DateTime lastPlaymodeChange; + + public static void Init() { + listRequest = Client.List(offlineMode: false, includeIndirectDependencies: true); + + EditorApplication.playModeStateChanged += state => { + lastPlaymodeChange = DateTime.UtcNow; + }; + CompilationPipeline.compilationStarted += obj => { + if (DateTime.UtcNow - lastPlaymodeChange < TimeSpan.FromSeconds(1) && !HotReloadState.RecompiledUnsupportedChangesOnExitPlaymode) { + +#if UNITY_2022_1_OR_NEWER + SetSuggestionsShown(HotReloadSuggestionKind.AutoRecompiledWhenPlaymodeStateChanges2022); +#else + SetSuggestionsShown(HotReloadSuggestionKind.AutoRecompiledWhenPlaymodeStateChanges); +#endif + } + HotReloadState.RecompiledUnsupportedChangesOnExitPlaymode = false; + }; + InitSuggestions(); + } + + private static DateTime lastCheckedUnityInstances = DateTime.UtcNow; + public static void Check() { + if (listRequest.IsCompleted && + unsupportedPackagesList == null) + { + unsupportedPackagesList = new List(); + if (listRequest.Result != null) { + foreach (var packageInfo in listRequest.Result) { + if (unsupportedPackages.Contains(packageInfo.name)) { + unsupportedPackagesList.Add(packageInfo.name); + } + } + } + if (unsupportedPackagesList.Count > 0) { + SetSuggestionsShown(HotReloadSuggestionKind.UnsupportedPackages); + } + } + + CheckEditorsWithoutHR(); + +#if UNITY_2022_1_OR_NEWER + if (EditorSettings.spritePackerMode == SpritePackerMode.AlwaysOnAtlas || EditorSettings.spritePackerMode == SpritePackerMode.SpriteAtlasV2) { + SetSuggestionsShown(HotReloadSuggestionKind.AutoRecompiledWhenPlaymodeStateChanges2022); + } else if (CheckSuggestionActive(HotReloadSuggestionKind.AutoRecompiledWhenPlaymodeStateChanges2022)) { + SetSuggestionInactive(HotReloadSuggestionKind.AutoRecompiledWhenPlaymodeStateChanges2022); + EditorPrefs.SetBool($"HotReloadWindow.SuggestionsShown.{HotReloadSuggestionKind.AutoRecompiledWhenPlaymodeStateChanges2022}", false); + } +#endif + } + + private static void CheckEditorsWithoutHR() { + if (!ServerHealthCheck.I.IsServerHealthy) { + HotReloadSuggestionsHelper.SetSuggestionInactive(HotReloadSuggestionKind.EditorsWithoutHRRunning); + return; + } + if (checkingEditorsWihtoutHR || + (DateTime.UtcNow - lastCheckedUnityInstances).TotalSeconds < 5) + { + return; + } + CheckEditorsWithoutHRAsync().Forget(); + } + + static bool checkingEditorsWihtoutHR; + private static async Task CheckEditorsWithoutHRAsync() { + try { + checkingEditorsWihtoutHR = true; + var showSuggestion = await Task.Run(() => { + try { + var runningUnities = Process.GetProcessesByName("Unity Editor").Length; + var runningPatchers = Process.GetProcessesByName("CodePatcherCLI").Length; + return runningPatchers > 0 && runningUnities > runningPatchers; + } catch (ArgumentException) { + // On some devices GetProcessesByName throws ArgumentException for no good reason. + // it happens rarely and the feature is not the most important so proper solution is not required + return false; + } + }); + if (!showSuggestion) { + HotReloadSuggestionsHelper.SetSuggestionInactive(HotReloadSuggestionKind.EditorsWithoutHRRunning); + return; + } + if (!HotReloadState.ShowedEditorsWithoutHR && ServerHealthCheck.I.IsServerHealthy) { + HotReloadSuggestionsHelper.SetSuggestionActive(HotReloadSuggestionKind.EditorsWithoutHRRunning); + HotReloadState.ShowedEditorsWithoutHR = true; + } + } finally { + checkingEditorsWihtoutHR = false; + lastCheckedUnityInstances = DateTime.UtcNow; + } + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadSuggestionsHelper.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadSuggestionsHelper.cs.meta new file mode 100644 index 0000000..aa9bbd6 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadSuggestionsHelper.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9cc471e812b143599ef5dde1d7ec022a +timeCreated: 1694632601 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadSuggestionsHelper.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadTimelineHelper.cs b/Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadTimelineHelper.cs new file mode 100644 index 0000000..84c13d8 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadTimelineHelper.cs @@ -0,0 +1,606 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using JetBrains.Annotations; +using SingularityGroup.HotReload.DTO; +using SingularityGroup.HotReload.Newtonsoft.Json; +using UnityEditor; +using UnityEngine; + + +namespace SingularityGroup.HotReload.Editor { + internal enum TimelineType { + Suggestions, + Timeline, + } + + internal enum AlertType { + Suggestion, + UnsupportedChange, + CompileError, + PartiallySupportedChange, + AppliedChange, + UndetectedChange, + } + + internal enum AlertEntryType { + Error, + Failure, + InlinedMethod, + PatchApplied, + PartiallySupportedChange, + UndetectedChange, + } + + internal enum EntryType { + Parent, + Child, + Standalone, + Foldout, + } + + internal class PersistedAlertData { + public readonly AlertData[] alertDatas; + + public PersistedAlertData(AlertData[] alertDatas) { + this.alertDatas = alertDatas; + } + } + + internal class AlertData { + public readonly AlertEntryType alertEntryType; + public readonly string errorString; + public readonly string methodName; + public readonly string methodSimpleName; + public readonly PartiallySupportedChange partiallySupportedChange; + public readonly EntryType entryType; + public readonly bool detiled; + public readonly DateTime createdAt; + public readonly string[] patchedMembersDisplayNames; + + public AlertData(AlertEntryType alertEntryType, DateTime createdAt, bool detiled = false, EntryType entryType = EntryType.Standalone, string errorString = null, string methodName = null, string methodSimpleName = null, PartiallySupportedChange partiallySupportedChange = default(PartiallySupportedChange), string[] patchedMembersDisplayNames = null) { + this.alertEntryType = alertEntryType; + this.createdAt = createdAt; + this.detiled = detiled; + this.entryType = entryType; + this.errorString = errorString; + this.methodName = methodName; + this.methodSimpleName = methodSimpleName; + this.partiallySupportedChange = partiallySupportedChange; + this.patchedMembersDisplayNames = patchedMembersDisplayNames; + } + } + + internal class AlertEntry { + internal readonly AlertType alertType; + internal readonly string title; + internal readonly DateTime timestamp; + internal readonly string description; + [CanBeNull] internal readonly Action actionData; + internal readonly AlertType iconType; + internal readonly string shortDescription; + internal readonly EntryType entryType; + internal readonly AlertData alertData; + internal readonly bool hasExitButton; + + internal AlertEntry(AlertType alertType, string title, string description, DateTime timestamp, string shortDescription = null, Action actionData = null, AlertType? iconType = null, EntryType entryType = EntryType.Standalone, AlertData alertData = default(AlertData), bool hasExitButton = true) { + this.alertType = alertType; + this.title = title; + this.description = description; + this.shortDescription = shortDescription; + this.actionData = actionData; + this.iconType = iconType ?? alertType; + this.timestamp = timestamp; + this.entryType = entryType; + this.alertData = alertData; + this.hasExitButton = hasExitButton; + } + } + + internal static class HotReloadTimelineHelper { + internal const int maxVisibleEntries = 40; + + private static List eventsTimeline = new List(); + internal static List EventsTimeline => eventsTimeline; + + static readonly string filePath = Path.Combine(PackageConst.LibraryCachePath, "eventEntries.json"); + + public static void InitPersistedEvents() { + if (!File.Exists(filePath)) { + return; + } + var redDotShown = HotReloadState.ShowingRedDot; + try { + var persistedAlertData = JsonConvert.DeserializeObject(File.ReadAllText(filePath)); + eventsTimeline = new List(persistedAlertData.alertDatas.Length); + for (int i = persistedAlertData.alertDatas.Length - 1; i >= 0; i--) { + AlertData alertData = persistedAlertData.alertDatas[i]; + switch (alertData.alertEntryType) { + case AlertEntryType.Error: + CreateErrorEventEntry(errorString: alertData.errorString, entryType: alertData.entryType, createdAt: alertData.createdAt); + break; +#if UNITY_2020_1_OR_NEWER + case AlertEntryType.InlinedMethod: + CreateInlinedMethodsEntry(alertData.patchedMembersDisplayNames, alertData.entryType, alertData.createdAt); + break; +#endif + case AlertEntryType.Failure: + if (alertData.entryType == EntryType.Parent) { + CreateReloadFinishedWithWarningsEventEntry(createdAt: alertData.createdAt, patchedMembersDisplayNames: alertData.patchedMembersDisplayNames); + } else { + CreatePatchFailureEventEntry(errorString: alertData.errorString, methodName: alertData.methodName, methodSimpleName: alertData.methodSimpleName, entryType: alertData.entryType, createdAt: alertData.createdAt); + } + break; + case AlertEntryType.PatchApplied: + CreateReloadFinishedEventEntry( + createdAt: alertData.createdAt, + patchedMethodsDisplayNames: alertData.patchedMembersDisplayNames + ); + break; + case AlertEntryType.PartiallySupportedChange: + if (alertData.entryType == EntryType.Parent) { + CreateReloadPartiallyAppliedEventEntry(createdAt: alertData.createdAt, patchedMethodsDisplayNames: alertData.patchedMembersDisplayNames); + } else { + CreatePartiallyAppliedEventEntry(alertData.partiallySupportedChange, entryType: alertData.entryType, detailed: alertData.detiled, createdAt: alertData.createdAt); + } + break; + case AlertEntryType.UndetectedChange: + CreateReloadUndetectedChangeEventEntry(createdAt: alertData.createdAt); + break; + } + } + } catch (Exception e) { + Log.Warning($"Failed initializing Hot Reload event entries on start: {e}"); + } finally { + // Ensure red dot is not triggered for existing entries + HotReloadState.ShowingRedDot = redDotShown; + } + } + + internal static void PersistTimeline() { + var alertDatas = new AlertData[eventsTimeline.Count]; + for (var i = 0; i < eventsTimeline.Count; i++) { + alertDatas[i] = eventsTimeline[i].alertData; + } + var persistedData = new PersistedAlertData(alertDatas); + try { + File.WriteAllText(path: filePath, contents: JsonConvert.SerializeObject(persistedData)); + } catch (Exception e) { + Log.Warning($"Failed persisting Hot Reload event entries: {e}"); + } + } + + internal static void ClearPersistance() { + try { + File.Delete(filePath); + } catch { + // ignore + } + eventsTimeline = new List(); + } + + internal static readonly Dictionary alertIconString = new Dictionary { + { AlertType.Suggestion, "alert_info" }, + { AlertType.UnsupportedChange, "warning" }, + { AlertType.CompileError, "error" }, + { AlertType.PartiallySupportedChange, "infos" }, + { AlertType.AppliedChange, "applied_patch" }, + { AlertType.UndetectedChange, "undetected" }, + }; + +#pragma warning disable CS0612 // obsolete + public static Dictionary partiallySupportedChangeDescriptions = new Dictionary { + {PartiallySupportedChange.LambdaClosure, "A lambda closure was edited (captured variable was added or removed). Changes to it will only be visible to the next created lambda(s)."}, + {PartiallySupportedChange.EditAsyncMethod, "An async method was edited. Changes to it will only be visible the next time this method is called."}, + {PartiallySupportedChange.AddMonobehaviourMethod, "A new method was added. It will not show up in the Inspector until the next full recompilation."}, + {PartiallySupportedChange.EditMonobehaviourField, "A field in a MonoBehaviour was removed or reordered. The inspector will not notice this change until the next full recompilation."}, + {PartiallySupportedChange.EditCoroutine, "An IEnumerator/IEnumerable was edited. When used as a coroutine, changes to it will only be visible the next time the coroutine is created."}, + {PartiallySupportedChange.EditGenericFieldInitializer, "A field initializer inside generic class was edited. Field initializer will not have any effect until the next full recompilation."}, + {PartiallySupportedChange.AddEnumMember, "An enum member was added. ToString and other reflection methods work only after the next full recompilation. Additionally, changes to the enum order may not apply until you patch usages in other places of the code."}, + {PartiallySupportedChange.EditFieldInitializer, "A field initializer was edited. Changes will only apply to new instances of that type, since the initializer for an object only runs when it is created."}, + {PartiallySupportedChange.AddMethodWithAttributes, "A method with attributes was added. Method attributes will not have any effect until the next full recompilation."}, + {PartiallySupportedChange.AddFieldWithAttributes, "A field with attributes was added. Field attributes will not have any effect until the next full recompilation."}, + {PartiallySupportedChange.GenericMethodInGenericClass, "A generic method was edited. Usages in non-generic classes applied, but usages in the generic classes are not supported."}, + {PartiallySupportedChange.NewCustomSerializableField, "A new custom serializable field was added. The inspector will not notice this change until the next full recompilation."}, + {PartiallySupportedChange.MultipleFieldsEditedInTheSameType, "Multiple fields modified in the same type during a single patch. Their values have been reset."}, + }; +#pragma warning restore CS0612 + + internal static List Suggestions = new List(); + internal static int UnsupportedChangesCount => EventsTimeline.Count(alert => alert.alertType == AlertType.UnsupportedChange && alert.entryType != EntryType.Child); + internal static int PartiallySupportedChangesCount => EventsTimeline.Count(alert => alert.alertType == AlertType.PartiallySupportedChange && alert.entryType != EntryType.Child); + internal static int UndetectedChangesCount => EventsTimeline.Count(alert => alert.alertType == AlertType.UndetectedChange && alert.entryType != EntryType.Child); + internal static int CompileErrorsCount => EventsTimeline.Count(alert => alert.alertType == AlertType.CompileError); + internal static int AppliedChangesCount => EventsTimeline.Count(alert => alert.alertType == AlertType.AppliedChange); + + static Regex shortDescriptionRegex = new Regex(@"^(\w+)\s(\w+)(?=:)", RegexOptions.Compiled); + + internal static int GetRunTabTimelineEventCount() { + int total = 0; + if (HotReloadPrefs.RunTabUnsupportedChangesFilter) { + total += UnsupportedChangesCount; + } + if (HotReloadPrefs.RunTabPartiallyAppliedPatchesFilter) { + total += PartiallySupportedChangesCount; + } + if (HotReloadPrefs.RunTabUndetectedPatchesFilter) { + total += UndetectedChangesCount; + } + if (HotReloadPrefs.RunTabCompileErrorFilter) { + total += CompileErrorsCount; + } + if (HotReloadPrefs.RunTabAppliedPatchesFilter) { + total += AppliedChangesCount; + } + return total; + } + + internal static List expandedEntries = new List(); + + internal static void RenderCompileButton() { + if (GUILayout.Button("Recompile", GUILayout.Width(80))) { + HotReloadRunTab.RecompileWithChecks(); + } + } + + private static float maxScrollPos; + internal static void RenderErrorEventActions(string description, ErrorData errorData) { + int maxLen = 2400; + string text = errorData.stacktrace; + if (text.Length > maxLen) { + text = text.Substring(0, maxLen) + "..."; + } + + GUILayout.TextArea(text, HotReloadWindowStyles.StacktraceTextAreaStyle); + + if (errorData.file || !errorData.stacktrace.Contains("error CS")) { + GUILayout.Space(10f); + } + + using (new EditorGUILayout.HorizontalScope()) { + if (!errorData.stacktrace.Contains("error CS")) { + RenderCompileButton(); + } + + // Link + if (errorData.file) { + GUILayout.FlexibleSpace(); + if (GUILayout.Button(errorData.linkString, HotReloadWindowStyles.LinkStyle)) { + AssetDatabase.OpenAsset(errorData.file, Math.Max(errorData.lineNumber, 1)); + } + } + } + } + + private static Texture2D GetFilterIcon(int count, AlertType alertType) { + if (count == 0) { + return GUIHelper.ConvertToGrayscale(alertIconString[alertType]); + } + return GUIHelper.GetLocalIcon(alertIconString[alertType]); + } + + internal static void RenderAlertFilters() { + using (new EditorGUILayout.HorizontalScope()) { + var text = AppliedChangesCount > 999 ? "999+" : " " + AppliedChangesCount; + + HotReloadPrefs.RunTabAppliedPatchesFilter = GUILayout.Toggle( + HotReloadPrefs.RunTabAppliedPatchesFilter, + new GUIContent(text, GetFilterIcon(AppliedChangesCount, AlertType.AppliedChange)), + HotReloadWindowStyles.EventFiltersStyle); + + GUILayout.Space(-1f); + + text = UndetectedChangesCount > 999 ? "999+" : " " + UndetectedChangesCount; + HotReloadPrefs.RunTabUndetectedPatchesFilter = GUILayout.Toggle( + HotReloadPrefs.RunTabUndetectedPatchesFilter, + new GUIContent(text, GetFilterIcon(UnsupportedChangesCount, AlertType.UndetectedChange)), + HotReloadWindowStyles.EventFiltersStyle); + + GUILayout.Space(-1f); + + text = PartiallySupportedChangesCount > 999 ? "999+" : " " + PartiallySupportedChangesCount; + HotReloadPrefs.RunTabPartiallyAppliedPatchesFilter = GUILayout.Toggle( + HotReloadPrefs.RunTabPartiallyAppliedPatchesFilter, + new GUIContent(text, GetFilterIcon(PartiallySupportedChangesCount, AlertType.PartiallySupportedChange)), + HotReloadWindowStyles.EventFiltersStyle); + + GUILayout.Space(-1f); + + text = UnsupportedChangesCount > 999 ? "999+" : " " + UnsupportedChangesCount; + HotReloadPrefs.RunTabUnsupportedChangesFilter = GUILayout.Toggle( + HotReloadPrefs.RunTabUnsupportedChangesFilter, + new GUIContent(text, GetFilterIcon(UnsupportedChangesCount, AlertType.UnsupportedChange)), + HotReloadWindowStyles.EventFiltersStyle); + + GUILayout.Space(-1f); + + text = CompileErrorsCount > 999 ? "999+" : " " + CompileErrorsCount; + HotReloadPrefs.RunTabCompileErrorFilter = GUILayout.Toggle( + HotReloadPrefs.RunTabCompileErrorFilter, + new GUIContent(text, GetFilterIcon(CompileErrorsCount, AlertType.CompileError)), + HotReloadWindowStyles.EventFiltersStyle); + } + } + + internal static void CreateErrorEventEntry(string errorString, EntryType entryType = EntryType.Standalone, DateTime? createdAt = null) { + var timestamp = createdAt ?? DateTime.Now; + var alertType = errorString.Contains("error CS") + ? AlertType.CompileError + : AlertType.UnsupportedChange; + var title = errorString.Contains("error CS") + ? "Compile error" + : "Unsupported change"; + ErrorData errorData = ErrorData.GetErrorData(errorString); + var description = errorData.error; + string shortDescription = null; + if (alertType != AlertType.CompileError) { + shortDescription = shortDescriptionRegex.Match(description).Value; + } + Action actionData = () => RenderErrorEventActions(description, errorData); + InsertEntry(new AlertEntry( + timestamp: timestamp, + alertType: alertType, + title: title, + description: description, + shortDescription: shortDescription, + actionData: actionData, + entryType: entryType, + alertData: new AlertData(AlertEntryType.Error, createdAt: timestamp, errorString: errorString, entryType: entryType) + )); + } + +#if UNITY_2020_1_OR_NEWER + internal static void CreateInlinedMethodsEntry(string[] patchedMethodsDisplayNames, EntryType entryType = EntryType.Standalone, DateTime? createdAt = null) { + var truncated = false; + if (patchedMethodsDisplayNames?.Length > 25) { + patchedMethodsDisplayNames = TruncateList(patchedMethodsDisplayNames, 25); + truncated = true; + } + var patchesList = patchedMethodsDisplayNames?.Length > 0 ? string.Join("\n• ", patchedMethodsDisplayNames) : ""; + var timestamp = createdAt ?? DateTime.Now; + var entry = new AlertEntry( + timestamp: timestamp, + alertType : AlertType.UnsupportedChange, + title: "Failed applying patch to method", + description: $"Some methods got inlined by the Unity compiler and cannot be patched by Hot Reload. Switch to Debug mode to avoid this problem.\n\n• {(truncated ? patchesList + "\n..." : patchesList)}", + entryType: EntryType.Parent, + actionData: () => { + GUILayout.Space(10f); + using (new EditorGUILayout.HorizontalScope()) { + RenderCompileButton(); + var suggestion = HotReloadSuggestionsHelper.suggestionMap[HotReloadSuggestionKind.SwitchToDebugModeForInlinedMethods]; + if (suggestion?.actionData != null) { + suggestion.actionData(); + } + } + }, + alertData: new AlertData(AlertEntryType.InlinedMethod, createdAt: timestamp, patchedMembersDisplayNames: patchedMethodsDisplayNames, entryType: EntryType.Parent) + ); + InsertEntry(entry); + if (patchedMethodsDisplayNames?.Length > 0) { + expandedEntries.Add(entry); + } + } +#endif + + internal static void CreatePatchFailureEventEntry(string errorString, string methodName, string methodSimpleName = null, EntryType entryType = EntryType.Standalone, DateTime? createdAt = null) { + var timestamp = createdAt ?? DateTime.Now; + ErrorData errorData = ErrorData.GetErrorData(errorString); + var title = $"Failed applying patch to method"; + Action actionData = () => RenderErrorEventActions(errorData.error, errorData); + InsertEntry(new AlertEntry( + timestamp: timestamp, + alertType : AlertType.UnsupportedChange, + title: title, + description: $"{title}: {methodName}, tap here to see more.", + shortDescription: methodSimpleName, + actionData: actionData, + entryType: entryType, + alertData: new AlertData(AlertEntryType.Failure, createdAt: timestamp, errorString: errorString, methodName: methodName, methodSimpleName: methodSimpleName, entryType: entryType) + )); + } + + public static T[] TruncateList(T[] originalList, int len) { + if (originalList.Length <= len) { + return originalList; + } + // Create a new list with a maximum of 25 items + T[] truncatedList = new T[len]; + + for (int i = 0; i < originalList.Length && i < len; i++) { + truncatedList[i] = originalList[i]; + } + + return truncatedList; + } + + internal static void CreateReloadFinishedEventEntry(DateTime? createdAt = null, string[] patchedMethodsDisplayNames = null) { + var truncated = false; + if (patchedMethodsDisplayNames?.Length > 25) { + patchedMethodsDisplayNames = TruncateList(patchedMethodsDisplayNames, 25); + truncated = true; + } + var patchesList = patchedMethodsDisplayNames?.Length > 0 ? string.Join("\n• ", patchedMethodsDisplayNames) : ""; + var timestamp = createdAt ?? DateTime.Now; + var entry = new AlertEntry( + timestamp: timestamp, + alertType: AlertType.AppliedChange, + title: EditorIndicationState.IndicationText[EditorIndicationState.IndicationStatus.Reloaded], + description: patchedMethodsDisplayNames?.Length > 0 + ? $"• {(truncated ? patchesList + "\n..." : patchesList)}" + : "No issues found", + entryType: patchedMethodsDisplayNames?.Length > 0 ? EntryType.Parent : EntryType.Standalone, + alertData: new AlertData( + AlertEntryType.PatchApplied, + createdAt: timestamp, + entryType: EntryType.Standalone, + patchedMembersDisplayNames: patchedMethodsDisplayNames) + ); + + InsertEntry(entry); + if (patchedMethodsDisplayNames?.Length > 0) { + expandedEntries.Add(entry); + } + } + + internal static void CreateReloadFinishedWithWarningsEventEntry(DateTime? createdAt = null, string[] patchedMembersDisplayNames = null) { + var truncated = false; + if (patchedMembersDisplayNames?.Length > 25) { + patchedMembersDisplayNames = TruncateList(patchedMembersDisplayNames, 25); + truncated = true; + } + var patchesList = patchedMembersDisplayNames?.Length > 0 ? string.Join("\n• ", patchedMembersDisplayNames) : ""; + var timestamp = createdAt ?? DateTime.Now; + var entry = new AlertEntry( + timestamp: timestamp, + alertType: AlertType.UnsupportedChange, + title: EditorIndicationState.IndicationText[EditorIndicationState.IndicationStatus.Unsupported], + description: patchedMembersDisplayNames?.Length > 0 ? $"• {(truncated ? patchesList + "\n...\n\nSee unsupported changes below" : patchesList + "\n\nSee unsupported changes below")}" : "See detailed entries below", + entryType: EntryType.Parent, + alertData: new AlertData(AlertEntryType.Failure, createdAt: timestamp, entryType: EntryType.Parent, patchedMembersDisplayNames: patchedMembersDisplayNames) + ); + InsertEntry(entry); + if (patchedMembersDisplayNames?.Length > 0) { + expandedEntries.Add(entry); + } + } + + internal static void CreateReloadPartiallyAppliedEventEntry(DateTime? createdAt = null, string[] patchedMethodsDisplayNames = null) { + var truncated = false; + if (patchedMethodsDisplayNames?.Length > 25) { + patchedMethodsDisplayNames = TruncateList(patchedMethodsDisplayNames, 25); + truncated = true; + } + var patchesList = patchedMethodsDisplayNames?.Length > 0 ? string.Join("\n• ", patchedMethodsDisplayNames) : ""; + var timestamp = createdAt ?? DateTime.Now; + var entry = new AlertEntry( + timestamp: timestamp, + alertType: AlertType.PartiallySupportedChange, + title: EditorIndicationState.IndicationText[EditorIndicationState.IndicationStatus.PartiallySupported], + description: patchedMethodsDisplayNames?.Length > 0 ? $"• {(truncated ? patchesList + "\n...\n\nSee partially applied changes below" : patchesList + "\n\nSee partially applied changes below")}" : "See detailed entries below", + entryType: EntryType.Parent, + alertData: new AlertData(AlertEntryType.PartiallySupportedChange, createdAt: timestamp, entryType: EntryType.Parent, patchedMembersDisplayNames: patchedMethodsDisplayNames) + ); + InsertEntry(entry); + if (patchedMethodsDisplayNames?.Length > 0) { + expandedEntries.Add(entry); + } + } + + internal static void CreateReloadUndetectedChangeEventEntry(DateTime? createdAt = null) { + var timestamp = createdAt ?? DateTime.Now; + InsertEntry(new AlertEntry( + timestamp: timestamp, + alertType : AlertType.UndetectedChange, + title: EditorIndicationState.IndicationText[EditorIndicationState.IndicationStatus.Undetected], + description: "Code semantics didn't change (e.g. whitespace) or the change requires manual recompile.\n\n" + + "Recompile to force-apply changes.", + actionData: () => { + GUILayout.Space(10f); + using (new EditorGUILayout.HorizontalScope()) { + RenderCompileButton(); + GUILayout.FlexibleSpace(); + OpenURLButton.Render("Docs", Constants.UndetectedChangesURL); + GUILayout.Space(10f); + } + }, + entryType: EntryType.Foldout, + alertData: new AlertData(AlertEntryType.UndetectedChange, createdAt: timestamp, entryType: EntryType.Parent) + )); + } + + internal static void CreatePartiallyAppliedEventEntry(PartiallySupportedChange partiallySupportedChange, EntryType entryType = EntryType.Standalone, bool detailed = true, DateTime? createdAt = null) { + var timestamp = createdAt ?? DateTime.Now; + string description; + if (!partiallySupportedChangeDescriptions.TryGetValue(partiallySupportedChange, out description)) { + return; + } + InsertEntry(new AlertEntry( + timestamp: timestamp, + alertType : AlertType.PartiallySupportedChange, + title : detailed ? "Change partially applied" : ToString(partiallySupportedChange), + description : description, + shortDescription: detailed ? ToString(partiallySupportedChange) : null, + actionData: () => { + GUILayout.Space(10f); + using (new EditorGUILayout.HorizontalScope()) { + RenderCompileButton(); + GUILayout.FlexibleSpace(); + if (GetPartiallySupportedChangePref(partiallySupportedChange)) { + if (GUILayout.Button("Ignore this event type ", HotReloadWindowStyles.LinkStyle)) { + HidePartiallySupportedChange(partiallySupportedChange); + HotReloadRunTab.RepaintInstant(); + } + } + } + }, + entryType: entryType, + alertData: new AlertData(AlertEntryType.PartiallySupportedChange, createdAt: timestamp, partiallySupportedChange: partiallySupportedChange, entryType: entryType, detiled: detailed) + )); + } + + internal static void InsertEntry(AlertEntry entry) { + eventsTimeline.Insert(0, entry); + if (entry.alertType != AlertType.AppliedChange) { + HotReloadState.ShowingRedDot = true; + } + } + + internal static void ClearEntries() { + eventsTimeline.Clear(); + } + + internal static bool GetPartiallySupportedChangePref(PartiallySupportedChange key) { + return EditorPrefs.GetBool($"HotReloadWindow.ShowPartiallySupportedChangeType.{key}", true); + } + + internal static void HidePartiallySupportedChange(PartiallySupportedChange key) { + EditorPrefs.SetBool($"HotReloadWindow.ShowPartiallySupportedChangeType.{key}", false); + // loop over scroll entries to remove hidden entries + for (var i = EventsTimeline.Count - 1; i >= 0; i--) { + var eventEntry = EventsTimeline[i]; + if (eventEntry.alertData.partiallySupportedChange == key) { + EventsTimeline.Remove(eventEntry); + } + } + } + + // performance optimization (Enum.ToString uses reflection) + internal static string ToString(this PartiallySupportedChange change) { +#pragma warning disable CS0612 // obsolete + switch (change) { + case PartiallySupportedChange.LambdaClosure: + return nameof(PartiallySupportedChange.LambdaClosure); + case PartiallySupportedChange.EditAsyncMethod: + return nameof(PartiallySupportedChange.EditAsyncMethod); + case PartiallySupportedChange.AddMonobehaviourMethod: + return nameof(PartiallySupportedChange.AddMonobehaviourMethod); + case PartiallySupportedChange.EditMonobehaviourField: + return nameof(PartiallySupportedChange.EditMonobehaviourField); + case PartiallySupportedChange.EditCoroutine: + return nameof(PartiallySupportedChange.EditCoroutine); + case PartiallySupportedChange.EditGenericFieldInitializer: + return nameof(PartiallySupportedChange.EditGenericFieldInitializer); + case PartiallySupportedChange.AddEnumMember: + return nameof(PartiallySupportedChange.AddEnumMember); + case PartiallySupportedChange.EditFieldInitializer: + return nameof(PartiallySupportedChange.EditFieldInitializer); + case PartiallySupportedChange.AddMethodWithAttributes: + return nameof(PartiallySupportedChange.AddMethodWithAttributes); + case PartiallySupportedChange.GenericMethodInGenericClass: + return nameof(PartiallySupportedChange.GenericMethodInGenericClass); + case PartiallySupportedChange.AddFieldWithAttributes: + return nameof(PartiallySupportedChange.AddFieldWithAttributes); + case PartiallySupportedChange.NewCustomSerializableField: + return nameof(PartiallySupportedChange.NewCustomSerializableField); + case PartiallySupportedChange.MultipleFieldsEditedInTheSameType: + return nameof(PartiallySupportedChange.MultipleFieldsEditedInTheSameType); +#pragma warning restore CS0612 + default: + throw new ArgumentOutOfRangeException(nameof(change), change, null); + } + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadTimelineHelper.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadTimelineHelper.cs.meta new file mode 100644 index 0000000..2e62427 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadTimelineHelper.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ffb65be71b8b4d14800f8b28bf68d0ab +timeCreated: 1695210350 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Helpers/HotReloadTimelineHelper.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/Spinner.cs b/Packages/com.singularitygroup.hotreload/Editor/Helpers/Spinner.cs new file mode 100644 index 0000000..5755fdb --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/Spinner.cs @@ -0,0 +1,80 @@ +using System; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor { + internal class Spinner { + internal static string SpinnerIconPath => "icon_loading_star_light_mode_96"; + internal static Texture2D spinnerTexture => GUIHelper.GetInvertibleIcon(InvertibleIcon.Spinner); + private Texture2D _rotatedTextureLight; + private Texture2D _rotatedTextureDark; + private Texture2D rotatedTextureLight => _rotatedTextureLight ? _rotatedTextureLight : _rotatedTextureLight = GetCopy(spinnerTexture); + private Texture2D rotatedTextureDark => _rotatedTextureDark ? _rotatedTextureDark : _rotatedTextureDark = GetCopy(spinnerTexture); + internal Texture2D rotatedTexture => HotReloadWindowStyles.IsDarkMode ? rotatedTextureDark : rotatedTextureLight; + + private float _rotationAngle; + private DateTime _lastRotation; + private int _rotationPeriod; + + internal Spinner(int rotationPeriodInMilliseconds) { + _rotationPeriod = rotationPeriodInMilliseconds; + } + + internal Texture2D GetIcon() { + if (DateTime.UtcNow - _lastRotation > TimeSpan.FromMilliseconds(_rotationPeriod)) { + _lastRotation = DateTime.UtcNow; + _rotationAngle += 45; + if (_rotationAngle >= 360f) + _rotationAngle -= 360f; + return RotateImage(spinnerTexture, _rotationAngle); + } + return rotatedTexture; + } + + private Texture2D RotateImage(Texture2D originalTexture, float angle) { + int w = originalTexture.width; + int h = originalTexture.height; + + int x, y; + float centerX = w / 2f; + float centerY = h / 2f; + + for (x = 0; x < w; x++) { + for (y = 0; y < h; y++) { + float dx = x - centerX; + float dy = y - centerY; + float distance = Mathf.Sqrt(dx * dx + dy * dy); + float oldAngle = Mathf.Atan2(dy, dx) * Mathf.Rad2Deg; + float newAngle = oldAngle + angle; + + float newX = centerX + distance * Mathf.Cos(newAngle * Mathf.Deg2Rad); + float newY = centerY + distance * Mathf.Sin(newAngle * Mathf.Deg2Rad); + + if (newX >= 0 && newX < w && newY >= 0 && newY < h) { + rotatedTexture.SetPixel(x, y, originalTexture.GetPixel((int)newX, (int)newY)); + } else { + rotatedTexture.SetPixel(x, y, Color.clear); + } + } + } + + rotatedTexture.Apply(); + return rotatedTexture; + } + + public static Texture2D GetCopy(Texture2D tex, TextureFormat format = TextureFormat.RGBA32, bool mipChain = false) { + var tmp = RenderTexture.GetTemporary(tex.width, tex.height, 0, RenderTextureFormat.Default, RenderTextureReadWrite.Linear); + Graphics.Blit(tex, tmp); + + RenderTexture.active = tmp; + try { + var copy = new Texture2D(tex.width, tex.height, format, mipChain: mipChain); + copy.ReadPixels(new Rect(0, 0, tmp.width, tmp.height), 0, 0); + copy.Apply(); + return copy; + } finally { + RenderTexture.active = null; + RenderTexture.ReleaseTemporary(tmp); + } + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/Spinner.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Helpers/Spinner.cs.meta new file mode 100644 index 0000000..1066424 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/Spinner.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 8bd77f0465824c5da3e1454f75c6e93c +timeCreated: 1685871830 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Helpers/Spinner.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/UnitySettingsHelper.cs b/Packages/com.singularitygroup.hotreload/Editor/Helpers/UnitySettingsHelper.cs new file mode 100644 index 0000000..b158a67 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/UnitySettingsHelper.cs @@ -0,0 +1,95 @@ +using UnityEngine; +using System.Reflection; +using System; +using System.Collections; +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("SingularityGroup.HotReload.Demo")] + +namespace SingularityGroup.HotReload.Editor { + internal class UnitySettingsHelper { + public static UnitySettingsHelper I = new UnitySettingsHelper(); + + private bool initialized; + private object pref; + private PropertyInfo prefColorProp; + private MethodInfo setMethod; + private Type settingsType; + private Type prefColorType; + const string currentPlaymodeTintPrefKey = "Playmode tint"; + + internal bool playmodeTintSupported => EditorCodePatcher.config.changePlaymodeTint && EnsureInitialized(); + + private UnitySettingsHelper() { + EnsureInitialized(); + } + + + private bool EnsureInitialized() { + if (initialized) { + return true; + } + try { + // cache members for performance + settingsType = settingsType ?? (settingsType = typeof(UnityEditor.Editor).Assembly.GetType($"UnityEditor.PrefSettings")); + prefColorType = prefColorType ?? (prefColorType = typeof(UnityEditor.Editor).Assembly.GetType($"UnityEditor.PrefColor")); + prefColorProp = prefColorProp ?? (prefColorProp = prefColorType?.GetProperty("Color", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)); + pref = pref ?? (pref = GetPref(settingsType: settingsType, prefColorType: prefColorType)); + setMethod = setMethod ?? (setMethod = GetSetMethod(settingsType: settingsType, prefColorType: prefColorType)); + + if (prefColorProp == null + || pref == null + || setMethod == null + ) { + return false; + } + + // clear cache for performance + settingsType = null; + prefColorType = null; + + initialized = true; + return true; + } catch { + return false; + } + } + + private static MethodInfo GetSetMethod(Type settingsType, Type prefColorType) { + var setMethodBase = settingsType?.GetMethod("Set", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static); + return setMethodBase?.MakeGenericMethod(prefColorType); + } + + private static object GetPref(Type settingsType, Type prefColorType) { + var prefsMethodBase = settingsType?.GetMethod("Prefs", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static); + var prefsMethod = prefsMethodBase?.MakeGenericMethod(prefColorType); + var prefs = (IEnumerable)prefsMethod?.Invoke(null, Array.Empty()); + if (prefs != null) { + foreach (object kvp in prefs) { + var key = kvp.GetType().GetProperty("Key", BindingFlags.Instance | BindingFlags.Public)?.GetMethod.Invoke(kvp, Array.Empty()); + if (key?.ToString() == currentPlaymodeTintPrefKey) { + return kvp.GetType().GetProperty("Value", BindingFlags.Instance | BindingFlags.Public)?.GetMethod.Invoke(kvp, Array.Empty()); + } + + } + } + return null; + } + + public Color? GetCurrentPlaymodeColor() { + if (!playmodeTintSupported) { + return null; + } + return (Color)prefColorProp.GetValue(pref); + } + + public void SetPlaymodeTint(Color color) { + if (!playmodeTintSupported) { + return; + } + prefColorProp.SetValue(pref, color); + setMethod.Invoke(null, new object[] { currentPlaymodeTintPrefKey, pref }); + } + } +} + diff --git a/Packages/com.singularitygroup.hotreload/Editor/Helpers/UnitySettingsHelper.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Helpers/UnitySettingsHelper.cs.meta new file mode 100644 index 0000000..cca2b4e --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Helpers/UnitySettingsHelper.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 34fb1222dc00466ab4e3db7383bd00ee +timeCreated: 1694279476 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Helpers/UnitySettingsHelper.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/HotReloadAttributeProcessor.cs b/Packages/com.singularitygroup.hotreload/Editor/HotReloadAttributeProcessor.cs new file mode 100644 index 0000000..b99e2a6 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/HotReloadAttributeProcessor.cs @@ -0,0 +1,35 @@ +#if ODIN_INSPECTOR +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using SingularityGroup.HotReload.EditorDependencies; +using Sirenix.OdinInspector; +using Sirenix.OdinInspector.Editor; + +namespace SingularityGroup.HotReload.Editor { + public class HotReloadAttributeProcessor : OdinAttributeProcessor { + public override bool CanProcessChildMemberAttributes(InspectorProperty parentProperty, MemberInfo member) { + return member is FieldInfo; + } + + static object nullObject = new object(); + public override void ProcessChildMemberAttributes(InspectorProperty property, MemberInfo member, List attributes) { + var field = member as FieldInfo; + if (field?.DeclaringType == null) { + return; + } + if (UnityFieldHelper.TryGetFieldAttributes(field, out var fieldAttributes)) { + attributes.Clear(); + attributes.AddRange(fieldAttributes); + } + if (UnityFieldHelper.IsFieldHidden(field.DeclaringType, field.Name)) { + attributes.Add(new HideIfAttribute("@true")); + } + // we assume this is always not null. Most of the times it will not be. If it is the side effect is some memory footprint which hopefully gets cleared when enough objects + var key = property.ParentValues.FirstOrDefault() ?? nullObject; + UnityFieldHelper.CacheFieldInvalidation(key, field, property.RefreshSetup); + } + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Editor/HotReloadAttributeProcessor.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/HotReloadAttributeProcessor.cs.meta new file mode 100644 index 0000000..4ad7f0b --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/HotReloadAttributeProcessor.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: c63452dd912fe4c46909c1c5ce844e69 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/HotReloadAttributeProcessor.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/HotReloadEventPopup.cs b/Packages/com.singularitygroup.hotreload/Editor/HotReloadEventPopup.cs new file mode 100644 index 0000000..5a85540 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/HotReloadEventPopup.cs @@ -0,0 +1,95 @@ +using UnityEngine; +using UnityEditor; + + +namespace SingularityGroup.HotReload.Editor { + public enum PopupSource { + Window, + Overlay, + } + public class HotReloadEventPopup : PopupWindowContent { + public static HotReloadEventPopup I = new HotReloadEventPopup(); + private Vector2 _PopupScrollPos; + public bool open { get; private set; } + private PopupSource source; + private HotReloadRunTabState currentState; + + public static void Open(PopupSource source, Vector2 pos) { + I.source = source; + PopupWindow.Show(new Rect(pos.x, pos.y, 0, 0), I); + } + + public override Vector2 GetWindowSize() { + if (HotReloadRunTab.ShouldRenderConsumption(currentState) + && (HotReloadWindowStyles.windowScreenWidth <= Constants.ConsumptionsHideWidth + || HotReloadWindowStyles.windowScreenHeight <= Constants.ConsumptionsHideHeight + || source == PopupSource.Overlay) + ) { + return new Vector2(600, 450); + } else { + return new Vector2(500, 375); + } + } + + public void Repaint() { + if (open) { + PopupWindow.GetWindow().Repaint(); + } + } + + public override void OnGUI(Rect rect) { + if (Event.current.type == EventType.Layout) { + currentState = HotReloadRunTabState.Current; + } + if (HotReloadWindowStyles.windowScreenWidth <= Constants.UpgradeLicenseNoteHideWidth + || HotReloadWindowStyles.windowScreenHeight <= Constants.UpgradeLicenseNoteHideHeight + || source == PopupSource.Overlay + ) { + HotReloadRunTab.RenderUpgradeLicenseNote(currentState, HotReloadWindowStyles.UpgradeLicenseButtonOverlayStyle); + } + using (new EditorGUILayout.HorizontalScope(EditorStyles.helpBox)) { + using (var scope = new EditorGUILayout.ScrollViewScope(_PopupScrollPos, GUIStyle.none, GUI.skin.verticalScrollbar, GUILayout.MaxHeight(495))) { + _PopupScrollPos.x = scope.scrollPosition.x; + _PopupScrollPos.y = scope.scrollPosition.y; + + if (HotReloadWindowStyles.windowScreenWidth <= Constants.ConsumptionsHideWidth + || HotReloadWindowStyles.windowScreenHeight <= Constants.ConsumptionsHideHeight + || source == PopupSource.Overlay + ) { + HotReloadRunTab.RenderLicenseInfo(currentState); + } + + HotReloadRunTab.RenderBars(currentState); + } + } + + bool rateAppShown = HotReloadWindow.ShouldShowRateApp(); + if ((HotReloadWindowStyles.windowScreenWidth <= Constants.RateAppHideWidth + || HotReloadWindowStyles.windowScreenHeight <= Constants.RateAppHideHeight + || source == PopupSource.Overlay) + && rateAppShown + ) { + HotReloadWindow.RenderRateApp(); + } + + if (HotReloadWindowStyles.windowScreenWidth <= Constants.EventFiltersShownHideWidth + || source == PopupSource.Overlay + ) { + using (new EditorGUILayout.HorizontalScope()) { + GUILayout.Space(21); + HotReloadTimelineHelper.RenderAlertFilters(); + } + } + HotReloadState.ShowingRedDot = false; + } + + public override void OnOpen() { + open = true; + } + + public override void OnClose() { + _PopupScrollPos = Vector2.zero; + open = false; + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/HotReloadEventPopup.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/HotReloadEventPopup.cs.meta new file mode 100644 index 0000000..d6b80f9 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/HotReloadEventPopup.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 00ec214cde074cf298acef73bb09a4fc +timeCreated: 1696574416 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/HotReloadEventPopup.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/HotReloadOverlay.cs b/Packages/com.singularitygroup.hotreload/Editor/HotReloadOverlay.cs new file mode 100644 index 0000000..19202fe --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/HotReloadOverlay.cs @@ -0,0 +1,178 @@ +#if UNITY_2021_2_OR_NEWER +using System; +using System.Collections.Generic; +using UnityEditor.Overlays; +using UnityEngine.UIElements; +using UnityEditor; +using UnityEngine; +using UnityEditor.Toolbars; + +namespace SingularityGroup.HotReload.Editor { + [Overlay(typeof(SceneView), "Hot Reload", true)] + [Icon("Assets/HotReload/Editor/Resources/Icon_DarkMode.png")] + internal class HotReloadOverlay : ToolbarOverlay { + HotReloadOverlay() : base(HotReloadToolbarIndicationButton.id, HotReloadToolbarEventsButton.id, HotReloadToolbarRecompileButton.id) { + EditorApplication.update += Update; + } + + EditorIndicationState.IndicationStatus lastIndicationStatus; + + [EditorToolbarElement(id, typeof(SceneView))] + class HotReloadToolbarIndicationButton : EditorToolbarButton, IAccessContainerWindow { + internal const string id = "HotReloadOverlay/LogoButton"; + public EditorWindow containerWindow { get; set; } + + EditorIndicationState.IndicationStatus lastIndicationStatus; + + internal HotReloadToolbarIndicationButton() { + icon = GetIndicationIcon(); + tooltip = EditorIndicationState.IndicationStatusText; + clicked += OnClick; + EditorApplication.update += Update; + } + + void OnClick() { + EditorWindow.GetWindow().Show(); + EditorWindow.GetWindow().SelectTab(typeof(HotReloadRunTab)); + } + + void Update() { + if (lastIndicationStatus != EditorIndicationState.CurrentIndicationStatus) { + icon = GetIndicationIcon(); + tooltip = EditorIndicationState.IndicationStatusText; + lastIndicationStatus = EditorIndicationState.CurrentIndicationStatus; + } + } + + ~HotReloadToolbarIndicationButton() { + clicked -= OnClick; + EditorApplication.update -= Update; + } + } + + [EditorToolbarElement(id, typeof(SceneView))] + class HotReloadToolbarEventsButton : EditorToolbarButton, IAccessContainerWindow { + internal const string id = "HotReloadOverlay/EventsButton"; + public EditorWindow containerWindow { get; set; } + + bool lastShowingRedDot; + + internal HotReloadToolbarEventsButton() { + icon = HotReloadState.ShowingRedDot ? GUIHelper.GetInvertibleIcon(InvertibleIcon.EventsNew) : GUIHelper.GetInvertibleIcon(InvertibleIcon.Events); + tooltip = "Events"; + clicked += OnClick; + EditorApplication.update += Update; + } + + void OnClick() { + HotReloadEventPopup.Open(PopupSource.Overlay, Event.current.mousePosition); + } + + void Update() { + if (lastShowingRedDot != HotReloadState.ShowingRedDot) { + icon = HotReloadState.ShowingRedDot ? GUIHelper.GetInvertibleIcon(InvertibleIcon.EventsNew) : GUIHelper.GetInvertibleIcon(InvertibleIcon.Events); + lastShowingRedDot = HotReloadState.ShowingRedDot; + } + } + + ~HotReloadToolbarEventsButton() { + clicked -= OnClick; + EditorApplication.update -= Update; + } + } + + + [EditorToolbarElement(id, typeof(SceneView))] + class HotReloadToolbarRecompileButton : EditorToolbarButton, IAccessContainerWindow { + internal const string id = "HotReloadOverlay/RecompileButton"; + + public EditorWindow containerWindow { get; set; } + + private Texture2D refreshIcon => GUIHelper.GetInvertibleIcon(InvertibleIcon.Recompile); + internal HotReloadToolbarRecompileButton() { + icon = refreshIcon; + tooltip = "Recompile"; + clicked += HotReloadRunTab.RecompileWithChecks; + } + } + + private static Texture2D latestIcon; + private static Dictionary iconTextures = new Dictionary(); + private static Spinner spinner = new Spinner(100); + private static Texture2D GetIndicationIcon() { + if (EditorIndicationState.IndicationIconPath == null || EditorIndicationState.SpinnerActive) { + latestIcon = spinner.GetIcon(); + } else { + latestIcon = GUIHelper.GetLocalIcon(EditorIndicationState.IndicationIconPath); + } + return latestIcon; + } + + private static Image indicationIcon; + private static Label indicationText; + + bool initialized; + /// + /// Create Hot Reload overlay panel. + /// + public override VisualElement CreatePanelContent() { + var root = new VisualElement() { name = "Hot Reload Indication" }; + root.style.flexDirection = FlexDirection.Row; + + indicationIcon = new Image() { image = GUIHelper.GetLocalIcon(EditorIndicationState.greyIconPath) }; + indicationIcon.style.height = 30; + indicationIcon.style.width = 30; + indicationIcon.style.marginLeft = 2; + indicationIcon.style.marginTop = 1; + indicationIcon.style.marginRight = 5; + + indicationText = new Label(){text = EditorIndicationState.IndicationStatusText}; + indicationText.style.paddingTop = 9; + indicationText.style.marginLeft = new StyleLength(StyleKeyword.Auto); + indicationText.style.marginRight = new StyleLength(StyleKeyword.Auto); + + root.Add(indicationIcon); + root.Add(indicationText); + root.style.width = 190; + root.style.height = 32; + initialized = true; + return root; + } + + static bool _repaint; + static bool _instantRepaint; + static DateTime _lastRepaint; + private void Update() { + if (!initialized) { + return; + } + if (lastIndicationStatus != EditorIndicationState.CurrentIndicationStatus) { + indicationIcon.image = GetIndicationIcon(); + indicationText.text = EditorIndicationState.IndicationStatusText; + lastIndicationStatus = EditorIndicationState.CurrentIndicationStatus; + } + try { + if (HotReloadEventPopup.I.open + && EditorWindow.mouseOverWindow + && EditorWindow.mouseOverWindow?.GetType() == typeof(UnityEditor.PopupWindow) + ) { + _repaint = true; + } + } catch (NullReferenceException) { + // Unity randomly throws nullrefs when EditorWindow.mouseOverWindow gets accessed + } + if (_repaint && DateTime.UtcNow - _lastRepaint > TimeSpan.FromMilliseconds(33)) { + _repaint = false; + _instantRepaint = true; + } + if (_instantRepaint) { + HotReloadEventPopup.I.Repaint(); + } + } + + ~HotReloadOverlay() { + EditorApplication.update -= Update; + } + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Editor/HotReloadOverlay.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/HotReloadOverlay.cs.meta new file mode 100644 index 0000000..c04af83 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/HotReloadOverlay.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 91650b4b0d054bdf9c1e922305e6a61a +timeCreated: 1685130321 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/HotReloadOverlay.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/HotReloadPrefs.cs b/Packages/com.singularitygroup.hotreload/Editor/HotReloadPrefs.cs new file mode 100644 index 0000000..4b18af3 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/HotReloadPrefs.cs @@ -0,0 +1,478 @@ +using System; +using System.Globalization; +using System.IO; +using JetBrains.Annotations; +using SingularityGroup.HotReload.Editor.Cli; +using UnityEditor; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor { + internal static class HotReloadPrefs { + private const string RemoteServerKey = "HotReloadWindow.RemoteServer"; + private const string RemoteServerHostKey = "HotReloadWindow.RemoteServerHost"; + private const string LicenseEmailKey = "HotReloadWindow.LicenseEmail"; + private const string RenderAuthLoginKey = "HotReloadWindow.RenderAuthLogin"; + private const string FirstLoginCachedKey = "HotReloadWindow.FirstLoginCachedKey"; + [Obsolete] + private const string ShowOnStartupKey = "HotReloadWindow.ShowOnStartup"; + private const string PasswordCachedKey = "HotReloadWindow.PasswordCached"; + private const string ExposeServerToLocalNetworkKey = "HotReloadWindow.ExposeServerToLocalNetwork"; + private const string ErrorHiddenCachedKey = "HotReloadWindow.ErrorHiddenCachedKey"; + private const string RefreshManuallyTipCachedKey = "HotReloadWindow.RefreshManuallyTipCachedKey"; + private const string ShowLoginCachedKey = "HotReloadWindow.ShowLoginCachedKey"; + private const string ConfigurationKey = "HotReloadWindow.Configuration"; + private const string AvdancedKey = "HotReloadWindow.Avdanced"; + private const string ShowPromoCodesCachedKey = "HotReloadWindow.ShowPromoCodesCached"; + private const string ShowOnDeviceKey = "HotReloadWindow.ShowOnDevice"; + private const string ShowChangelogKey = "HotReloadWindow.ShowChangelog"; + private const string UnsupportedChangesKey = "HotReloadWindow.ShowUnsupportedChanges"; + private const string LoggedBurstHintKey = "HotReloadWindow.LoggedBurstHint"; + private const string ShouldDoAutoRefreshFixupKey = "HotReloadWindow.ShouldDoAutoRefreshFixup"; + private const string ActiveDaysKey = "HotReloadWindow.ActiveDays"; + [Obsolete] + private const string RateAppShownKey = "HotReloadWindow.RateAppShown"; + private const string PatchesCollapseKey = "HotReloadWindow.PatchesCollapse"; + private const string PatchesGroupAllKey = "HotReloadWindow.PatchesGroupAll"; + private const string LaunchOnEditorStartKey = "HotReloadWindow.LaunchOnEditorStart"; + private const string AutoRecompileUnsupportedChangesKey = "HotReloadWindow.AutoRecompileUnsupportedChanges"; + private const string AutoRecompilePartiallyUnsupportedChangesKey = "HotReloadWindow.AutoRecompilePartiallyUnsupportedChanges"; + private const string DisplayNewMonobehaviourMethodsAsPartiallySupportedKey = "HotReloadWindow.DisplayNewMonobehaviourMethodsAsPartiallySupported"; + private const string ShowNotificationsKey = "HotReloadWindow.ShowNotifications"; + private const string ShowPatchingNotificationsKey = "HotReloadWindow.ShowPatchingNotifications"; + private const string ShowCompilingUnsupportedNotificationsKey = "HotReloadWindow.ShowCompilingUnsupportedNotifications"; + private const string AutoRecompileUnsupportedChangesImmediatelyKey = "HotReloadWindow.AutoRecompileUnsupportedChangesImmediately"; + private const string AutoRecompileUnsupportedChangesOnExitPlayModeKey = "HotReloadWindow.AutoRecompileUnsupportedChangesOnExitPlayMode"; + private const string AutoRecompileUnsupportedChangesInPlayModeKey = "HotReloadWindow.AutoRecompileUnsupportedChangesInPlayMode"; + private const string AllowDisableUnityAutoRefreshKey = "HotReloadWindow.AllowDisableUnityAutoRefresh"; + private const string DefaultAutoRefreshKey = "HotReloadWindow.DefaultAutoRefresh"; + private const string DefaultAutoRefreshModeKey = "HotReloadWindow.DefaultAutoRefreshMode"; + private const string DefaultScriptCompilationKeyKey = "HotReloadWindow.DefaultScriptCompilationKey"; + private const string DefaultEditorTintKey = "HotReloadWindow.DefaultEditorTint"; + private const string AppliedAutoRefreshKey = "HotReloadWindow.AppliedAutoRefresh"; + private const string AppliedScriptCompilationKey = "HotReloadWindow.AppliedScriptCompilation"; + private const string AppliedEditorTintKey = "HotReloadWindow.AppliedEditorTint"; + private const string AllAssetChangesKey = "HotReloadWindow.AllAssetChanges"; + private const string IncludeShaderChangesKey = "HotReloadWindow.IncludeShaderChanges"; + private const string DisableConsoleWindowKey = "HotReloadWindow.DisableConsoleWindow"; + private const string DisableDetailedErrorReportingKey = "HotReloadWindow.DisableDetailedErrorReporting"; + private const string DebuggerCompatibilityEnabledKey = "HotReloadWindow.DebuggerCompatibilityEnabled"; + private const string RedeemLicenseEmailKey = "HotReloadWindow.RedeemLicenseEmail"; + private const string RedeemLicenseInvoiceKey = "HotReloadWindow.RedeemLicenseInvoice"; + private const string RunTabEventsSuggestionsFoldoutKey = "HotReloadWindow.RunTabEventsSuggestionsFoldout"; + private const string RunTabEventsTimelineFoldoutKey = "HotReloadWindow.RunTabEventsTimelineFoldout"; + private const string RunTabUnsupportedChangesFilterKey = "HotReloadWindow.RunTabUnsupportedChangesFilter"; + private const string RunTabCompileErrorFilterKey = "HotReloadWindow.RunTabCompileErrorFilter"; + private const string RunTabPartiallyAppliedPatchesFilterKey = "HotReloadWindow.RunTabPartiallyAppliedPatchesFilter"; + private const string RunTabUndetectedPatchesFilterKey = "HotReloadWindow.RunTabUndetectedPatchesFilter"; + private const string RunTabAppliedPatchesFilterKey = "HotReloadWindow.RunTabAppliedPatchesFilter"; + private const string RecompileDialogueShownKey = "HotReloadWindow.RecompileDialogueShown"; + private const string ApplyFieldInitiailzerEditsToExistingClassInstancesKey = "HotReloadWindow.ApplyFieldInitiailzerEditsToExistingClassInstances"; + private const string LoggedInlinedMethodsDialogueKey = "HotReloadWindow.LoggedInlinedMethodsDialogue"; + private const string OpenedWindowAtLeastOnceKey = "HotReloadWindow.OpenedWindowAtLeastOnce"; + private const string DeactivateHotReloadKey = "HotReloadWindow.DeactivateHotReload"; + + public const string DontShowPromptForDownloadKey = "ServerDownloader.DontShowPromptForDownload"; + + [Obsolete] public const string AllowHttpSettingCacheKey = "HotReloadWindow.AllowHttpSettingCacheKey"; + [Obsolete] public const string AutoRefreshSettingCacheKey = "HotReloadWindow.AutoRefreshSettingCacheKey"; + [Obsolete] public const string ScriptCompilationSettingCacheKey = "HotReloadWindow.ScriptCompilationSettingCacheKey"; + [Obsolete] public const string ProjectGenerationSettingCacheKey = "HotReloadWindow.ProjectGenerationSettingCacheKey"; + + + [Obsolete] + public static bool RemoteServer { + get { return EditorPrefs.GetBool(RemoteServerKey, false); } + set { EditorPrefs.SetBool(RemoteServerKey, value); } + } + + public static bool DontShowPromptForDownload { + get { return EditorPrefs.GetBool(DontShowPromptForDownloadKey, false); } + set { EditorPrefs.SetBool(DontShowPromptForDownloadKey, value); } + } + + [Obsolete] + public static string RemoteServerHost { + get { return EditorPrefs.GetString(RemoteServerHostKey); } + set { EditorPrefs.SetString(RemoteServerHostKey, value); } + } + + public static string LicenseEmail { + get { return EditorPrefs.GetString(LicenseEmailKey); } + set { EditorPrefs.SetString(LicenseEmailKey, value); } + } + + public static string LicensePassword { + get { return EditorPrefs.GetString(PasswordCachedKey); } + set { EditorPrefs.SetString(PasswordCachedKey, value); } + } + + [Obsolete] + public static bool RenderAuthLogin { // false = render free trial + get { return EditorPrefs.GetBool(RenderAuthLoginKey); } + set { EditorPrefs.SetBool(RenderAuthLoginKey, value); } + } + + [Obsolete] + public static bool FirstLogin { + get { return EditorPrefs.GetBool(FirstLoginCachedKey, true); } + set { EditorPrefs.SetBool(FirstLoginCachedKey, value); } + } + + [Obsolete] + public static string ShowOnStartupLegacy { // WindowAutoOpen + get { return EditorPrefs.GetString(ShowOnStartupKey); } + set { EditorPrefs.SetString(ShowOnStartupKey, value); } + } + + public static string showOnStartupPath { get; }= Path.Combine(CliUtils.GetAppDataPath(), "showOnStartup.txt"); + static ShowOnStartupEnum? showOnStartup; + public static ShowOnStartupEnum ShowOnStartup { + get { + if (showOnStartup != null) { + return showOnStartup.Value; + } + if (!File.Exists(showOnStartupPath)) { + showOnStartup = ShowOnStartupEnum.Always; + return showOnStartup.Value; + } + var text = File.ReadAllText(showOnStartupPath); + ShowOnStartupEnum _showOnStartup; + if (Enum.TryParse(text, true, out _showOnStartup)) { + showOnStartup = _showOnStartup; + return showOnStartup.Value; + } + showOnStartup = ShowOnStartupEnum.Always; + return showOnStartup.Value; + } + set { + // ReSharper disable once AssignNullToNotNullAttribute + Directory.CreateDirectory(Path.GetDirectoryName(showOnStartupPath)); + File.WriteAllText(showOnStartupPath, value.ToString()); + showOnStartup = value; + } + } + + + public static bool ErrorHidden { + get { return EditorPrefs.GetBool(ErrorHiddenCachedKey); } + set { EditorPrefs.SetBool(ErrorHiddenCachedKey, value); } + } + + public static bool ShowLogin { + get { return EditorPrefs.GetBool(ShowLoginCachedKey, true); } + set { EditorPrefs.SetBool(ShowLoginCachedKey, value); } + } + + public static bool ShowConfiguration { + get { return EditorPrefs.GetBool(ConfigurationKey, true); } + set { EditorPrefs.SetBool(ConfigurationKey, value); } + } + + public static bool ShowAdvanced { + get { return EditorPrefs.GetBool(AvdancedKey, false); } + set { EditorPrefs.SetBool(AvdancedKey, value); } + } + + public static bool ShowPromoCodes { + get { return EditorPrefs.GetBool(ShowPromoCodesCachedKey, true); } + set { EditorPrefs.SetBool(ShowPromoCodesCachedKey, value); } + } + + public static bool ShowOnDevice { + get { return EditorPrefs.GetBool(ShowOnDeviceKey, true); } + set { EditorPrefs.SetBool(ShowOnDeviceKey, value); } + } + + public static bool ShowChangeLog { + get { return EditorPrefs.GetBool(ShowChangelogKey, true); } + set { EditorPrefs.SetBool(ShowChangelogKey, value); } + } + + public static bool ShowUnsupportedChanges { + get { return EditorPrefs.GetBool(UnsupportedChangesKey, true); } + set { EditorPrefs.SetBool(UnsupportedChangesKey, value); } + } + + [Obsolete] + public static bool RefreshManuallyTip { + get { return EditorPrefs.GetBool(RefreshManuallyTipCachedKey); } + set { EditorPrefs.SetBool(RefreshManuallyTipCachedKey, value); } + } + + public static bool LoggedBurstHint { + get { return EditorPrefs.GetBool(LoggedBurstHintKey); } + set { EditorPrefs.SetBool(LoggedBurstHintKey, value); } + } + + [Obsolete] + public static bool ShouldDoAutoRefreshFixup { + get { return EditorPrefs.GetBool(ShouldDoAutoRefreshFixupKey, true); } + set { EditorPrefs.SetBool(ShouldDoAutoRefreshFixupKey, value); } + } + + public static string ActiveDays { + get { return EditorPrefs.GetString(ActiveDaysKey, string.Empty); } + set { EditorPrefs.SetString(ActiveDaysKey, value); } + } + + [Obsolete] + public static bool RateAppShownLegacy { + get { return EditorPrefs.GetBool(RateAppShownKey, false); } + set { EditorPrefs.SetBool(RateAppShownKey, value); } + } + + static string rateAppPath = Path.Combine(CliUtils.GetAppDataPath(), "ratedApp.txt"); + static bool? rateAppShown; + public static bool RateAppShown { + get { + if (rateAppShown != null) { + return rateAppShown.Value; + } + rateAppShown = File.Exists(rateAppPath); + return rateAppShown.Value; + } + set { + // ReSharper disable once AssignNullToNotNullAttribute + Directory.CreateDirectory(Path.GetDirectoryName(rateAppPath)); + if (value && !File.Exists(rateAppPath)) { + using (File.Create(rateAppPath)) { } + } else if (!value && File.Exists(rateAppPath)) { + File.Delete(rateAppPath); + } + rateAppShown = value; + } + } + + [Obsolete] + public static bool PatchesGroupAll { + get { return EditorPrefs.GetBool(PatchesGroupAllKey, false); } + set { EditorPrefs.SetBool(PatchesGroupAllKey, value); } + } + + [Obsolete] + public static bool PatchesCollapse { + get { return EditorPrefs.GetBool(PatchesCollapseKey, true); } + set { EditorPrefs.SetBool(PatchesCollapseKey, value); } + } + + [Obsolete] + public static ShowOnStartupEnum GetShowOnStartupEnum() { + ShowOnStartupEnum showOnStartupEnum; + if (Enum.TryParse(HotReloadPrefs.ShowOnStartupLegacy, true, out showOnStartupEnum)) { + return showOnStartupEnum; + } + return ShowOnStartupEnum.Always; + } + + public static bool ExposeServerToLocalNetwork { + get { return EditorPrefs.GetBool(ExposeServerToLocalNetworkKey, false); } + set { EditorPrefs.SetBool(ExposeServerToLocalNetworkKey, value); } + } + + public static bool LaunchOnEditorStart { + get { return EditorPrefs.GetBool(LaunchOnEditorStartKey, false); } + set { EditorPrefs.SetBool(LaunchOnEditorStartKey, value); } + } + + public static bool AutoRecompileUnsupportedChanges { + get { return EditorPrefs.GetBool(AutoRecompileUnsupportedChangesKey, false); } + set { EditorPrefs.SetBool(AutoRecompileUnsupportedChangesKey, value); } + } + + public static bool AutoRecompilePartiallyUnsupportedChanges { + get { return EditorPrefs.GetBool(AutoRecompilePartiallyUnsupportedChangesKey, false); } + set { EditorPrefs.SetBool(AutoRecompilePartiallyUnsupportedChangesKey, value); } + } + + public static bool DisplayNewMonobehaviourMethodsAsPartiallySupported { + get { return EditorPrefs.GetBool(DisplayNewMonobehaviourMethodsAsPartiallySupportedKey, false); } + set { EditorPrefs.SetBool(DisplayNewMonobehaviourMethodsAsPartiallySupportedKey, value); } + } + + public static bool ShowNotifications { + get { return EditorPrefs.GetBool(ShowNotificationsKey, true); } + set { EditorPrefs.SetBool(ShowNotificationsKey, value); } + } + + public static bool ShowPatchingNotifications { + get { return EditorPrefs.GetBool(ShowPatchingNotificationsKey, true); } + set { EditorPrefs.SetBool(ShowPatchingNotificationsKey, value); } + } + + public static bool ShowCompilingUnsupportedNotifications { + get { return EditorPrefs.GetBool(ShowCompilingUnsupportedNotificationsKey, true); } + set { EditorPrefs.SetBool(ShowCompilingUnsupportedNotificationsKey, value); } + } + + public static bool AutoRecompileUnsupportedChangesImmediately { + get { return EditorPrefs.GetBool(AutoRecompileUnsupportedChangesImmediatelyKey, false); } + set { EditorPrefs.SetBool(AutoRecompileUnsupportedChangesImmediatelyKey, value); } + } + + public static bool AutoRecompileUnsupportedChangesOnExitPlayMode { + get { return EditorPrefs.GetBool(AutoRecompileUnsupportedChangesOnExitPlayModeKey, false); } + set { EditorPrefs.SetBool(AutoRecompileUnsupportedChangesOnExitPlayModeKey, value); } + } + + public static bool AutoRecompileUnsupportedChangesInPlayMode { + get { return EditorPrefs.GetBool(AutoRecompileUnsupportedChangesInPlayModeKey, false); } + set { EditorPrefs.SetBool(AutoRecompileUnsupportedChangesInPlayModeKey, value); } + } + + public static bool AllowDisableUnityAutoRefresh { + get { return EditorPrefs.GetBool(AllowDisableUnityAutoRefreshKey, false); } + set { EditorPrefs.SetBool(AllowDisableUnityAutoRefreshKey, value); } + } + + public static int DefaultAutoRefresh { + get { return EditorPrefs.GetInt(DefaultAutoRefreshKey, -1); } + set { EditorPrefs.SetInt(DefaultAutoRefreshKey, value); } + } + + [UsedImplicitly] + public static int DefaultAutoRefreshMode { + get { return EditorPrefs.GetInt(DefaultAutoRefreshModeKey, -1); } + set { EditorPrefs.SetInt(DefaultAutoRefreshModeKey, value); } + } + + public static int DefaultScriptCompilation { + get { return EditorPrefs.GetInt(DefaultScriptCompilationKeyKey, -1); } + set { EditorPrefs.SetInt(DefaultScriptCompilationKeyKey, value); } + } + + public static Color? DefaultEditorTint { + get { return ColorFromString(EditorPrefs.GetString(DefaultEditorTintKey, string.Empty)); } + set { EditorPrefs.SetString(DefaultEditorTintKey, ColorToString(value)); } + } + + public static bool AppliedAutoRefresh { + get { return EditorPrefs.GetBool(AppliedAutoRefreshKey); } + set { EditorPrefs.SetBool(AppliedAutoRefreshKey, value); } + } + + public static bool AppliedScriptCompilation { + get { return EditorPrefs.GetBool(AppliedScriptCompilationKey); } + set { EditorPrefs.SetBool(AppliedScriptCompilationKey, value); } + } + + public static Color? AppliedEditorTint { + get { return ColorFromString(EditorPrefs.GetString(AppliedEditorTintKey, string.Empty)); } + set { EditorPrefs.SetString(AppliedEditorTintKey, ColorToString(value)); } + } + + public static bool AllAssetChanges { + get { return EditorPrefs.GetBool(AllAssetChangesKey, false); } + set { EditorPrefs.SetBool(AllAssetChangesKey, value); } + } + + public static bool IncludeShaderChanges { + get { return EditorPrefs.GetBool(IncludeShaderChangesKey, false); } + set { EditorPrefs.SetBool(IncludeShaderChangesKey, value); } + } + + public static bool DisableConsoleWindow { + get { return EditorPrefs.GetBool(DisableConsoleWindowKey, false); } + set { EditorPrefs.SetBool(DisableConsoleWindowKey, value); } + } + + public static string RedeemLicenseEmail { + get { return EditorPrefs.GetString(RedeemLicenseEmailKey); } + set { EditorPrefs.SetString(RedeemLicenseEmailKey, value); } + } + + public static string RedeemLicenseInvoice { + get { return EditorPrefs.GetString(RedeemLicenseInvoiceKey); } + set { EditorPrefs.SetString(RedeemLicenseInvoiceKey, value); } + } + + public static bool RunTabEventsTimelineFoldout { + get { return EditorPrefs.GetBool(RunTabEventsTimelineFoldoutKey, true); } + set { EditorPrefs.SetBool(RunTabEventsTimelineFoldoutKey, value); } + } + + public static bool RunTabEventsSuggestionsFoldout { + get { return EditorPrefs.GetBool(RunTabEventsSuggestionsFoldoutKey, true); } + set { EditorPrefs.SetBool(RunTabEventsSuggestionsFoldoutKey, value); } + } + + public static bool RunTabUnsupportedChangesFilter { + get { return EditorPrefs.GetBool(RunTabUnsupportedChangesFilterKey, true); } + set { EditorPrefs.SetBool(RunTabUnsupportedChangesFilterKey, value); } + } + + public static bool RunTabCompileErrorFilter { + get { return EditorPrefs.GetBool(RunTabCompileErrorFilterKey, true); } + set { EditorPrefs.SetBool(RunTabCompileErrorFilterKey, value); } + } + + public static bool RunTabPartiallyAppliedPatchesFilter { + get { return EditorPrefs.GetBool(RunTabPartiallyAppliedPatchesFilterKey, true); } + set { EditorPrefs.SetBool(RunTabPartiallyAppliedPatchesFilterKey, value); } + } + + public static bool RunTabUndetectedPatchesFilter { + get { return EditorPrefs.GetBool(RunTabUndetectedPatchesFilterKey, true); } + set { EditorPrefs.SetBool(RunTabUndetectedPatchesFilterKey, value); } + } + + public static bool RunTabAppliedPatchesFilter { + get { return EditorPrefs.GetBool(RunTabAppliedPatchesFilterKey, true); } + set { EditorPrefs.SetBool(RunTabAppliedPatchesFilterKey, value); } + } + + public static bool RecompileDialogueShown { + get { return EditorPrefs.GetBool(RecompileDialogueShownKey); } + set { EditorPrefs.SetBool(RecompileDialogueShownKey, value); } + } + + public static bool OpenedWindowAtLeastOnce { + get { return EditorPrefs.GetBool(OpenedWindowAtLeastOnceKey); } + set { EditorPrefs.SetBool(OpenedWindowAtLeastOnceKey, value); } + } + + private const string rgbaDelimiter = ";"; + public static string ColorToString(Color? _color) { + if (_color == null) { + return null; + } + var color = _color.Value; + var cultInfo = CultureInfo.InvariantCulture; + string[] rgbaList = { color.r.ToString(cultInfo), color.g.ToString(cultInfo), color.b.ToString(cultInfo), color.a.ToString(cultInfo)}; + return String.Join(rgbaDelimiter, rgbaList); + } + + public static Color? ColorFromString(string ser) { + if (string.IsNullOrEmpty(ser)) { + return null; + } + string[] rgbaParts = ser.Split(rgbaDelimiter.ToCharArray()); + return new Color(float.Parse(rgbaParts[0]), float.Parse(rgbaParts[1]),float.Parse(rgbaParts[2]),float.Parse(rgbaParts[3])); + } + + [Obsolete("was not implemented")] + public static bool ApplyFieldInitiailzerEditsToExistingClassInstances { + get { return EditorPrefs.GetBool(ApplyFieldInitiailzerEditsToExistingClassInstancesKey); } + set { EditorPrefs.SetBool(ApplyFieldInitiailzerEditsToExistingClassInstancesKey, value); } + } + + public static bool LoggedInlinedMethodsDialogue { + get { return EditorPrefs.GetBool(LoggedInlinedMethodsDialogueKey); } + set { EditorPrefs.SetBool(LoggedInlinedMethodsDialogueKey, value); } + } + + public static bool DeactivateHotReload { + get { return EditorPrefs.GetBool(DeactivateHotReloadKey); } + set { EditorPrefs.SetBool(DeactivateHotReloadKey, value); } + } + + public static bool DisableDetailedErrorReporting { + get { return EditorPrefs.GetBool(DisableDetailedErrorReportingKey, false); } + set { EditorPrefs.SetBool(DisableDetailedErrorReportingKey, value); } + } + + public static bool AutoDisableHotReloadWithDebugger { + get { return EditorPrefs.GetBool(DebuggerCompatibilityEnabledKey, true); } + set { EditorPrefs.SetBool(DebuggerCompatibilityEnabledKey, value); } + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/HotReloadPrefs.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/HotReloadPrefs.cs.meta new file mode 100644 index 0000000..08a5afa --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/HotReloadPrefs.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 96451431b50143944b85d4fbdde5f104 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/HotReloadPrefs.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/HotReloadSettingsEditor.cs b/Packages/com.singularitygroup.hotreload/Editor/HotReloadSettingsEditor.cs new file mode 100644 index 0000000..fdb536d --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/HotReloadSettingsEditor.cs @@ -0,0 +1,70 @@ +using System.IO; +using UnityEditor; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor { + static class HotReloadSettingsEditor { + /// Ensure settings asset file is created and saved + public static void EnsureSettingsCreated(HotReloadSettingsObject asset) { + if (!SettingsExists()) { + CreateNewSettingsFile(asset, HotReloadSettingsObject.editorAssetPath); + } + } + + /// Load existing settings asset or return the default settings + public static HotReloadSettingsObject LoadSettingsOrDefault() { + if (SettingsExists()) { + return AssetDatabase.LoadAssetAtPath(HotReloadSettingsObject.editorAssetPath); + } else { + // create an instance with default values + return ScriptableObject.CreateInstance(); + } + } + + /// + /// Create settings asset file + /// + /// Assume that settings asset doesn't exist yet + /// The settings asset + static void CreateNewSettingsFile(HotReloadSettingsObject asset, string editorAssetPath) { + // create new settings asset + // ReSharper disable once AssignNullToNotNullAttribute + Directory.CreateDirectory(Path.GetDirectoryName(editorAssetPath)); + if (asset == null) { + asset = ScriptableObject.CreateInstance(); + } + AssetDatabase.CreateAsset(asset, editorAssetPath); + // Saving the asset isn't needed right after you created it. Unity will save it at the appropriate time. + // Troy: I tested in Unity 2018 LTS, first Android build creates the asset file and asset is included in the build. + } + + #region include/exclude in build + + private static bool SettingsExists() { + return AssetExists(HotReloadSettingsObject.editorAssetPath); + } + + private static bool AssetExists(string assetPath) { + return AssetDatabase.GetMainAssetTypeAtPath(assetPath) != null; + } + + public static void AddOrRemoveFromBuild(bool includeSettingsInBuild) { + AssetDatabase.StartAssetEditing(); + var so = LoadSettingsOrDefault(); + try { + if (includeSettingsInBuild) { + // Note: don't need to force create settings because we know the defaults in player. + so.EnsurePrefabSetCorrectly(); + EnsureSettingsCreated(so); + } else { + // this block shouldn't create the asset file, but it's also fine if it does + so.EnsurePrefabNotInBuild(); + } + } finally { + AssetDatabase.StopAssetEditing(); + } + } + + #endregion + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/HotReloadSettingsEditor.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/HotReloadSettingsEditor.cs.meta new file mode 100644 index 0000000..7d5c602 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/HotReloadSettingsEditor.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: a0f4231ca4f63e54da0ecf87ab62c381 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/HotReloadSettingsEditor.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/HotReloadState.cs b/Packages/com.singularitygroup.hotreload/Editor/HotReloadState.cs new file mode 100644 index 0000000..e72257f --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/HotReloadState.cs @@ -0,0 +1,80 @@ +using UnityEditor; + +namespace SingularityGroup.HotReload.Editor { + internal static class HotReloadState { + private const string ServerPortKey = "HotReloadWindow.ServerPort"; + private const string LastPatchIdKey = "HotReloadWindow.LastPatchId"; + private const string ShowingRedDotKey = "HotReloadWindow.ShowingRedDot"; + private const string ShowedEditorsWithoutHRKey = "HotReloadWindow.ShowedEditorWithoutHR"; + private const string ShowedFieldInitializerWithSideEffectsKey = "HotReloadWindow.ShowedFieldInitializerWithSideEffects"; + private const string ShowedAddMonobehaviourMethodsKey = "HotReloadWindow.ShowedAddMonobehaviourMethods"; + private const string ShowedFieldInitializerExistingInstancesEditedKey = "HotReloadWindow.ShowedFieldInitializerExistingInstancesEdited"; + private const string ShowedFieldInitializerExistingInstancesUneditedKey = "HotReloadWindow.ShowedFieldInitializerExistingInstancesUnedited"; + private const string RecompiledUnsupportedChangesOnExitPlaymodeKey = "HotReloadWindow.RecompiledUnsupportedChangesOnExitPlaymode"; + private const string RecompiledUnsupportedChangesInPlaymodeKey = "HotReloadWindow.RecompiledUnsupportedChangesInPlaymode"; + private const string EditorCodePatcherInitKey = "HotReloadWindow.EditorCodePatcherInit"; + private const string ShowedDebuggerCompatibilityKey = "HotReloadWindow.ShowedDebuggerCompatibility"; + + + public static int ServerPort { + get { return SessionState.GetInt(ServerPortKey, RequestHelper.defaultPort); } + set { SessionState.SetInt(ServerPortKey, value); } + } + + public static string LastPatchId { + get { return SessionState.GetString(LastPatchIdKey, string.Empty); } + set { SessionState.SetString(LastPatchIdKey, value); } + } + + public static bool ShowingRedDot { + get { return SessionState.GetBool(ShowingRedDotKey, false); } + set { SessionState.SetBool(ShowingRedDotKey, value); } + } + + public static bool ShowedEditorsWithoutHR { + get { return SessionState.GetBool(ShowedEditorsWithoutHRKey, false); } + set { SessionState.SetBool(ShowedEditorsWithoutHRKey, value); } + } + + public static bool ShowedFieldInitializerWithSideEffects { + get { return SessionState.GetBool(ShowedFieldInitializerWithSideEffectsKey, false); } + set { SessionState.SetBool(ShowedFieldInitializerWithSideEffectsKey, value); } + } + + public static bool ShowedAddMonobehaviourMethods { + get { return SessionState.GetBool(ShowedAddMonobehaviourMethodsKey, false); } + set { SessionState.SetBool(ShowedAddMonobehaviourMethodsKey, value); } + } + + public static bool ShowedFieldInitializerExistingInstancesEdited { + get { return SessionState.GetBool(ShowedFieldInitializerExistingInstancesEditedKey, false); } + set { SessionState.SetBool(ShowedFieldInitializerExistingInstancesEditedKey, value); } + } + + public static bool ShowedFieldInitializerExistingInstancesUnedited { + get { return SessionState.GetBool(ShowedFieldInitializerExistingInstancesUneditedKey, false); } + set { SessionState.SetBool(ShowedFieldInitializerExistingInstancesUneditedKey, value); } + } + + public static bool RecompiledUnsupportedChangesOnExitPlaymode { + get { return SessionState.GetBool(RecompiledUnsupportedChangesOnExitPlaymodeKey, false); } + set { SessionState.SetBool(RecompiledUnsupportedChangesOnExitPlaymodeKey, value); } + } + + public static bool RecompiledUnsupportedChangesInPlaymode { + get { return SessionState.GetBool(RecompiledUnsupportedChangesInPlaymodeKey, false); } + set { SessionState.SetBool(RecompiledUnsupportedChangesInPlaymodeKey, value); } + } + + public static bool EditorCodePatcherInit { + get { return SessionState.GetBool(EditorCodePatcherInitKey, false); } + set { SessionState.SetBool(EditorCodePatcherInitKey, value); } + } + + public static bool ShowedDebuggerCompatibility { + get { return SessionState.GetBool(ShowedDebuggerCompatibilityKey, false); } + set { SessionState.SetBool(ShowedDebuggerCompatibilityKey, value); } + } + } + +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/HotReloadState.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/HotReloadState.cs.meta new file mode 100644 index 0000000..ca93f3d --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/HotReloadState.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 803347281bcf46b6b37d48231b8882be +timeCreated: 1694458889 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/HotReloadState.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Icon_Player.png b/Packages/com.singularitygroup.hotreload/Editor/Icon_Player.png new file mode 100644 index 0000000000000000000000000000000000000000..ef9a138171276b45333e20d1b9398e37790f673b GIT binary patch literal 2407 zcmZ`*4Lp;38-6fllU5E>ylF;0M%#><%`9daX*HwHHWFhrvCTHkN5$)_h~_=1?Bp|2 zqfg~jny4H}oa5CY>a9fOsMt;6D7P#Ah%g$f{_#It1vKHJR(OwKM0JxwqoC?q1`|-RFGmUhi(9ly=dj~q3lPlYv;CqN3;+$r27tbf zF`x%VI^YM;F$c63U<7Q?vG@|RbnIt2x&W|G06=CrTyWQ3zTnboW_G=DowzN{d)uHjF5fXt|CJ+gc+PdL9 zQG(0^h0+>*xn}y538LnlgwoluzyYz^4AvQg!~UI&pD6f0GHqr?Ha*vj9a&q9#9{HJ zqSyp&TNDDGJnis5;9P$*f;s*cp+H9YOY#-`wTeBLpR<_{el6H65%9qua=I_)*|z3m z^Z457NK8Q@KbB1s#PNkv?JO>CWbEH2z7~3mVnvcbad-ru0{To#=0RVxr)@a%Y>4x1 z<|Sr@WUTgC&wKVW2WuJyPZkA6#(p`a6j-%?Sv3IYC;8F5g4pykMbVp0wwc_9*QUv; zeq4}QJrNpu$KpgLf_e(NGVM*v!Zfo?%rdG0q)MLG4Q+H_G^A;oQr_U*^Esu%M`NR2 zEBi}aPCluh9EaoEoWKaV*{c^Y&Plfvc-)*W<^Q9;ts6KUOE*qF}dQ zw@FD!(Y$+Z=&?sr*xlXz@zDmn=+xV{1)SQ(#uAddyK;2+=Q39!(eM5H z_m{3;|0(hZ9=qb@OF@lFRgsmYkGXogr|0mBZ6P6j@u{h04<0-?Rau#FP@zzE*u&A6 z8X7hvBqX@vaGv+?-w%ml&}b0%_Qs~VI%<7=y(=D1y?ps{NR6VJiu(-O^e-IdHj^k6 z%IMV8RPl=Ec?yNge}C%ijL%sM%L>zXcXy96Wz!8K%{|42C~NDNcMjR@=6Ck@FHexm z1Eo@zSEHk1m2s`pq~^V2%CQ3n3^4(^`Yaa9-rjz{W^(dQf4_2YXz2GX;~8{1U9fA{ z5&vJ3KD=JB%FZr$aC5T>)n^eLeowJ--4!;po9N(hXXI&eGtArDyP-F2&Db$06dLkw zb46)s>AELPsl)yW1F+podzleDUb&5Y_w<1)f!1VlG1}4b%xUDpH4JvQ%?B&7Tz(S1lEMrPwftS9 zk*K~CJ-L1XE|y4m^fgPWRVr1`)~!A_ZrlioF+zJVBb6B$dWQ=OnLBpaA3c@Pkp94i z9UMFq{U9+pndRfN;NtfPSk@BtM>52C;KhsVa~;cLOb7(R-fCJ!*P}-z!Y!s7n$NJh zh6`T%eEc*?SQmJlqpEjvb1Oe`1QBH=2!OOzZ*ST=)-!aTV^#H{w->Rqlywx^_35)= zw#j$ZuK3nSd@7^U+&A2$UApKpYSP7br}uGJ*>jpAE!mbP@+cA<+Uv8)|Q zNy>u<4}NSnPeMoFg1Ov5$DzKeCEQFze0+Q^Cpji2x6EN5VYLZNz{onE_t-6$lx6b6M>+`LKk z=lTciyyu*52*D zU(V+7Q0@!&>*dvz*VMGvZNJvgz@sA@w*!VRhKI)wFK@$*G`k#8HmFoNuP{~l@Q24H zCS=#~_xk$Uri|_e1qGciU;iH{WsjyM*N*4l;&RBp6B$nPv<~G42P;jTA+RFqDRoaz zPlycO%E~(z5D*Z;D_!uG35kx6cTP%48FzfqY2$Q&ojIv*5Y-00M-C*?_xZPqPA
|z{%J+hw%qkrRjBl394n)ZL|-YyvE%I4a|4JV zS>r4C{``EtbMEM2UVy=*c&dcO<+krVeeT?5c^{P-QE7%iwDw*xLwIG6=r|6gNY+CT zS+pFpS{{e?Tf7tma8kn%~#plW?!YBQO1mwXFUtMruS`4LcEu!Cr~>$C^BF34C@4**tA?j zLi-2a{#7kG>Y;}>D@}}>_q1)y`=;-j#iwYR#qp;6cUNq86&=5-{rljzeiQ91H7xy4 DCQGpx literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Icon_Player.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Icon_Player.png.meta new file mode 100644 index 0000000..26f9e1e --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Icon_Player.png.meta @@ -0,0 +1,154 @@ +fileFormatVersion: 2 +guid: 90cf8e542151548c6aa3cba26467e144 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Icon_Player.png + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/InspectorFreezeFix.cs b/Packages/com.singularitygroup.hotreload/Editor/InspectorFreezeFix.cs new file mode 100644 index 0000000..330fbc1 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/InspectorFreezeFix.cs @@ -0,0 +1,117 @@ +using System.Reflection; +using SingularityGroup.HotReload.Editor; +using UnityEditor; +using UnityEngine; + +[InitializeOnLoad] +public class InspectorFreezeFix +{ + // Inspector window getting stuck is fixed by calling UnityEditor.InspectorWindow.RefreshInspectors() + // Below code subscribes to selection changed callback and calls the method if the inspector is actually stuck + + static InspectorFreezeFix() + { + Selection.selectionChanged += OnSelectionChanged; + } + + private static int _lastInitialEditorId; + + private static void OnSelectionChanged() { + if (!EditorCodePatcher.config.enableInspectorFreezeFix) { + return; + } + try { + // Most of stuff is internal so we use reflection here + var inspectorType = typeof(Editor).Assembly.GetType("UnityEditor.InspectorWindow"); + + foreach (var inspector in Resources.FindObjectsOfTypeAll(inspectorType)) { + + object isLockedValue = inspectorType.GetProperty("isLocked")?.GetValue(inspector); + if (isLockedValue == null) { + continue; + } + + // If inspector window is locked deliberately by user (via the lock icon on top-right), we don't need to refresh + var isLocked = (bool)isLockedValue; + if (isLocked) { + continue; + } + + // Inspector getting stuck is due to ActiveEditorTracker of that window getting stuck internally. + // The tracker starts returning same values from m_Tracker.activeEditors property. + // (Root of cause of this is out of my reach as the tracker code is mainly native code) + + // We detect that by checking first element of activeEditors array + // We do the check because we don't want to RefreshInspectors every selection change, RefreshInspectors is expensive + var tracker = inspectorType.GetField("m_Tracker", BindingFlags.NonPublic | BindingFlags.Instance)?.GetValue(inspector); + if (tracker == null) { + continue; + } + var activeEditors = tracker.GetType().GetProperty("activeEditors"); + if (activeEditors == null) { + continue; + } + var editors = (Editor[])activeEditors.GetValue(tracker); + if (editors.Length == 0) { + continue; + } + + var first = editors[0].GetInstanceID(); + if (_lastInitialEditorId == first) { + // This forces the tracker to be rebuilt + var m = inspectorType.GetMethod("RefreshInspectors", BindingFlags.Static | BindingFlags.NonPublic); + if (m == null) { + // support for older versions + RefreshInspectors(inspectorType); + } else { + m.Invoke(null, null); + } + } + _lastInitialEditorId = first; + // Calling RefreshInspectors once refreshes all the editors + break; + } + } catch { + // ignore, we don't want to make user experience worse by displaying a warning in this case + } + } + + static void RefreshInspectors(System.Type inspectorType) { + var allInspectorsField = inspectorType.GetField("m_AllInspectors", BindingFlags.NonPublic | BindingFlags.Static); + + if (allInspectorsField == null) { + return; + } + var allInspectors = allInspectorsField.GetValue(null) as System.Collections.IEnumerable; + if (allInspectors == null) { + return; + } + + foreach (var inspector in allInspectors) { + var trackerField = FindFieldInHierarchy(inspector.GetType(), "tracker"); + + if (trackerField == null) { + continue; + } + var tracker = trackerField.GetValue(inspector); + var forceRebuildMethod = tracker.GetType().GetMethod("ForceRebuild", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); + if (forceRebuildMethod == null) { + + continue; + } + forceRebuildMethod.Invoke(tracker, null); + } + } + + static PropertyInfo FindFieldInHierarchy(System.Type type, string fieldName) { + PropertyInfo field = null; + + while (type != null && field == null) { + field = type.GetProperty(fieldName, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); + type = type.BaseType; + } + + return field; + } +} + diff --git a/Packages/com.singularitygroup.hotreload/Editor/InspectorFreezeFix.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/InspectorFreezeFix.cs.meta new file mode 100644 index 0000000..5c63896 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/InspectorFreezeFix.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 235343744f6348acb629d549ccafff0b +timeCreated: 1708187279 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/InspectorFreezeFix.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Installation.meta b/Packages/com.singularitygroup.hotreload/Editor/Installation.meta new file mode 100644 index 0000000..09a0fe3 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Installation.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 12e88a0f97924d18859867b0cc957d03 +timeCreated: 1676802469 \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Installation/DownloadUtility.cs b/Packages/com.singularitygroup.hotreload/Editor/Installation/DownloadUtility.cs new file mode 100644 index 0000000..2575d7b --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Installation/DownloadUtility.cs @@ -0,0 +1,98 @@ +using System; +using System.IO; +using System.Net; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using SingularityGroup.HotReload.Editor.Cli; + +namespace SingularityGroup.HotReload.Editor { + static class DownloadUtility { + const string baseUrl = "https://cdn.hotreload.net"; + + public static async Task DownloadFile(string url, string targetFilePath, IProgress progress, CancellationToken cancellationToken) { + var tmpDir = Path.GetDirectoryName(targetFilePath); + Directory.CreateDirectory(tmpDir); + using(var client = HttpClientUtils.CreateHttpClient()) { + client.Timeout = TimeSpan.FromMinutes(10); + return await client.DownloadAsync(url, targetFilePath, progress, cancellationToken).ConfigureAwait(false); + } + } + + public static string GetPackagePrefix(string version) { + if (PackageConst.IsAssetStoreBuild) { + return $"releases/asset-store/{version.Replace('.', '-')}"; + } + return $"releases/{version.Replace('.', '-')}"; + } + + public static string GetDownloadUrl(string key) { + return $"{baseUrl}/{key}"; + } + + public static async Task DownloadAsync(this HttpClient client, string requestUri, string destinationFilePath, IProgress progress, CancellationToken cancellationToken = default(CancellationToken)) { + // Get the http headers first to examine the content length + using (var response = await client.GetAsync(requestUri, HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false)) { + if (response.StatusCode != HttpStatusCode.OK) { + throw new DownloadException($"Download failed with status code {response.StatusCode} and reason {response.ReasonPhrase}"); + } + var contentLength = response.Content.Headers.ContentLength; + if (!contentLength.HasValue) { + throw new DownloadException("Download failed: Content length unknown"); + } + + using (var fs = new FileStream(destinationFilePath, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None)) + using (var download = await response.Content.ReadAsStreamAsync().ConfigureAwait(false)) { + + // Ignore progress reporting when no progress reporter was + if (progress == null) { + await download.CopyToAsync(fs).ConfigureAwait(false); + } else { + // Convert absolute progress (bytes downloaded) into relative progress (0% - 99.9%) + var relativeProgress = new Progress(totalBytes => progress.Report(Math.Min(99.9f, (float)totalBytes / contentLength.Value))); + // Use extension method to report progress while downloading + await download.CopyToAsync(fs, 81920, relativeProgress, cancellationToken).ConfigureAwait(false); + } + await fs.FlushAsync().ConfigureAwait(false); + if (fs.Length != contentLength.Value) { + throw new DownloadException("Download failed: download file is corrupted"); + } + return new DownloadResult(HttpStatusCode.OK, null); + } + } + } + + static async Task CopyToAsync(this Stream source, Stream destination, int bufferSize, IProgress progress, CancellationToken cancellationToken) { + if (source == null) + throw new ArgumentNullException(nameof(source)); + if (!source.CanRead) + throw new ArgumentException("Has to be readable", nameof(source)); + if (destination == null) + throw new ArgumentNullException(nameof(destination)); + if (!destination.CanWrite) + throw new ArgumentException("Has to be writable", nameof(destination)); + if (bufferSize < 0) + throw new ArgumentOutOfRangeException(nameof(bufferSize)); + + var buffer = new byte[bufferSize]; + long totalBytesRead = 0; + int bytesRead; + while ((bytesRead = await source.ReadAsync(buffer, 0, buffer.Length, cancellationToken).ConfigureAwait(false)) != 0) { + await destination.WriteAsync(buffer, 0, bytesRead, cancellationToken).ConfigureAwait(false); + totalBytesRead += bytesRead; + progress?.Report(totalBytesRead); + } + } + + [Serializable] + public class DownloadException : ApplicationException { + public DownloadException(string message) + : base(message) { + } + + public DownloadException(string message, Exception innerException) + : base(message, innerException) { + } + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Installation/DownloadUtility.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Installation/DownloadUtility.cs.meta new file mode 100644 index 0000000..dec0602 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Installation/DownloadUtility.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 2a7a39befa1f455cb21fcad46513b6e5 +timeCreated: 1676973096 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Installation/DownloadUtility.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Installation/ExponentialBackoff.cs b/Packages/com.singularitygroup.hotreload/Editor/Installation/ExponentialBackoff.cs new file mode 100644 index 0000000..9591972 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Installation/ExponentialBackoff.cs @@ -0,0 +1,18 @@ +using System; + +namespace SingularityGroup.HotReload.Editor { + static class ExponentialBackoff { + + public static TimeSpan GetTimeout(int attempt, int minBackoff = 250, int maxBackoff = 60000, int deltaBackoff = 400) { + attempt = Math.Min(25, attempt); // safety to avoid overflow below + + var delta = (uint)( + (Math.Pow(2.0, attempt) - 1.0) + * deltaBackoff + ); + + var interval = Math.Min(checked(minBackoff + delta), maxBackoff); + return TimeSpan.FromMilliseconds(interval); + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Installation/ExponentialBackoff.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Installation/ExponentialBackoff.cs.meta new file mode 100644 index 0000000..2333f6c --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Installation/ExponentialBackoff.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5329de48151140eb871721ae80f925cd +timeCreated: 1676908147 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Installation/ExponentialBackoff.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Installation/InstallUtility.cs b/Packages/com.singularitygroup.hotreload/Editor/Installation/InstallUtility.cs new file mode 100644 index 0000000..dcabdd2 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Installation/InstallUtility.cs @@ -0,0 +1,66 @@ +using System; +using System.IO; +using SingularityGroup.HotReload.DTO; +using SingularityGroup.HotReload.Editor.Cli; +using SingularityGroup.HotReload.EditorDependencies; +using UnityEditor; +using UnityEngine; +#if UNITY_2019_4_OR_NEWER +using System.Reflection; +using Unity.CodeEditor; +#endif + +namespace SingularityGroup.HotReload.Editor { + static class InstallUtility { + const string installFlagPath = PackageConst.LibraryCachePath + "/installFlag.txt"; + + public static void DebugClearInstallState() { + File.Delete(installFlagPath); + } + + // HandleEditorStart is only called on editor start, not on domain reload + public static void HandleEditorStart(string updatedFromVersion) { + var showOnStartup = HotReloadPrefs.ShowOnStartup; + if (showOnStartup == ShowOnStartupEnum.Always || (showOnStartup == ShowOnStartupEnum.OnNewVersion && !String.IsNullOrEmpty(updatedFromVersion))) { + // Don't open Hot Reload window inside Virtual Player folder + // This is a heuristic since user might have the main player inside VP user-created folder, but that will be rare + if (new DirectoryInfo(Path.GetFullPath("..")).Name != "VP" && !HotReloadPrefs.DeactivateHotReload) { + HotReloadWindow.Open(); + } + } + if (HotReloadPrefs.LaunchOnEditorStart && !HotReloadPrefs.DeactivateHotReload) { + EditorCodePatcher.DownloadAndRun().Forget(); + } + + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Debug, StatFeature.Editor, StatEventType.Start)).Forget(); + } + + public static void CheckForNewInstall() { + if(File.Exists(installFlagPath)) { + return; + } + Directory.CreateDirectory(Path.GetDirectoryName(installFlagPath)); + using(File.Create(installFlagPath)) { } + //Avoid opening the window on domain reload + EditorApplication.delayCall += HandleNewInstall; + } + + static void HandleNewInstall() { + if (EditorCodePatcher.licenseType == UnityLicenseType.UnityPro) { + RedeemLicenseHelper.I.StartRegistration(); + } + // Don't open Hot Reload window inside Virtual Player folder + // This is a heuristic since user might have the main player inside VP user-created folder, but that will be rare + if (new DirectoryInfo(Path.GetFullPath("..")).Name != "VP") { + HotReloadWindow.Open(); + } + HotReloadPrefs.AllowDisableUnityAutoRefresh = true; + HotReloadPrefs.AllAssetChanges = true; + HotReloadPrefs.AutoRecompileUnsupportedChanges = true; + HotReloadPrefs.AutoRecompileUnsupportedChangesOnExitPlayMode = true; + if (HotReloadCli.CanOpenInBackground) { + HotReloadPrefs.DisableConsoleWindow = true; + } + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Installation/InstallUtility.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Installation/InstallUtility.cs.meta new file mode 100644 index 0000000..ab21fbe --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Installation/InstallUtility.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: ee93b2c98bc7d8f4bb38bbbd5961d354 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Installation/InstallUtility.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Installation/ServerDownloader.cs b/Packages/com.singularitygroup.hotreload/Editor/Installation/ServerDownloader.cs new file mode 100644 index 0000000..1bd6315 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Installation/ServerDownloader.cs @@ -0,0 +1,190 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Net; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using SingularityGroup.HotReload.DTO; +using SingularityGroup.HotReload.Editor.Cli; +using SingularityGroup.HotReload.Newtonsoft.Json; +using UnityEditor; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor { + internal class ServerDownloader : IProgress { + public float Progress {get; private set;} + public bool Started {get; private set;} + + class Config { + public Dictionary customServerExecutables; + } + + public string GetExecutablePath(ICliController cliController) { + var targetDir = CliUtils.GetExecutableTargetDir(); + var targetPath = Path.Combine(targetDir, cliController.BinaryFileName); + return targetPath; + } + + public bool IsDownloaded(ICliController cliController) { + return File.Exists(GetExecutablePath(cliController)); + } + + public bool CheckIfDownloaded(ICliController cliController) { + if(TryUseUserDefinedBinaryPath(cliController, GetExecutablePath(cliController))) { + Started = true; + Progress = 1f; + return true; + } else if(IsDownloaded(cliController)) { + Started = true; + Progress = 1f; + return true; + } else { + Started = false; + Progress = 0f; + return false; + } + } + + public async Task EnsureDownloaded(ICliController cliController, CancellationToken cancellationToken) { + var targetDir = CliUtils.GetExecutableTargetDir(); + var targetPath = Path.Combine(targetDir, cliController.BinaryFileName); + Started = true; + if(File.Exists(targetPath)) { + Progress = 1f; + return true; + } + Progress = 0f; + await ThreadUtility.SwitchToThreadPool(cancellationToken); + + Directory.CreateDirectory(targetDir); + if(TryUseUserDefinedBinaryPath(cliController, targetPath)) { + Progress = 1f; + return true; + } + + var tmpPath = CliUtils.GetTempDownloadFilePath("Server.tmp"); + var attempt = 0; + bool sucess = false; + HashSet errors = null; + while(!sucess) { + try { + if (File.Exists(targetPath)) { + Progress = 1f; + return true; + } + // Note: we are writing to temp file so if downloaded file is corrupted it will not cause issues until it's copied to target location + var result = await DownloadUtility.DownloadFile(GetDownloadUrl(cliController), tmpPath, this, cancellationToken).ConfigureAwait(false); + sucess = result.statusCode == HttpStatusCode.OK; + } catch (Exception e) { + var error = $"{e.GetType().Name}: {e.Message}"; + errors = (errors ?? new HashSet()); + if (errors.Add(error)) { + Log.Warning($"Download attempt failed. If the issue persists please reach out to customer support for assistance. Exception: {error}"); + } + } + if (!sucess) { + await Task.Delay(ExponentialBackoff.GetTimeout(attempt), cancellationToken).ConfigureAwait(false); + } + Progress = 0; + attempt++; + } + + if (errors?.Count > 0) { + var data = new EditorExtraData { + { StatKey.Errors, new List(errors) }, + }; + // sending telemetry requires server to be running so we only attempt after server is downloaded + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Error, StatFeature.Editor, StatEventType.Download), data).Forget(); + Log.Info("Download succeeded!"); + } + + const int ERROR_ALREADY_EXISTS = 0xB7; + try { + File.Move(tmpPath, targetPath); + } catch(IOException ex) when((ex.HResult & 0x0000FFFF) == ERROR_ALREADY_EXISTS) { + //another downloader came first + try { + File.Delete(tmpPath); + } catch { + //ignored + } + } + Progress = 1f; + return true; + } + + static bool TryUseUserDefinedBinaryPath(ICliController cliController, string targetPath) { + if (!File.Exists(PackageConst.ConfigFileName)) { + return false; + } + + var config = JsonConvert.DeserializeObject(File.ReadAllText(PackageConst.ConfigFileName)); + var customExecutables = config?.customServerExecutables; + if (customExecutables == null) { + return false; + } + + string customBinaryPath; + if(!customExecutables.TryGetValue(cliController.PlatformName, out customBinaryPath)) { + return false; + } + + if (!File.Exists(customBinaryPath)) { + Log.Warning($"unable to find server binary for platform '{cliController.PlatformName}' at '{customBinaryPath}'. " + + $"Will proceed with downloading the binary (default behavior)"); + return false; + } + + try { + var targetFile = new FileInfo(targetPath); + bool copy = true; + if (targetFile.Exists) { + copy = File.GetLastWriteTimeUtc(customBinaryPath) > targetFile.LastWriteTimeUtc; + } + if (copy) { + Directory.CreateDirectory(Path.GetDirectoryName(targetPath)); + File.Copy(customBinaryPath, targetPath, true); + } + return true; + } catch(IOException ex) { + Log.Warning("encountered exception when copying server binary in the specified custom executable path '{0}':\n{1}", customBinaryPath, ex); + return false; + } + } + + static string GetDownloadUrl(ICliController cliController) { + const string version = PackageConst.ServerVersion; + var key = $"{DownloadUtility.GetPackagePrefix(version)}/server/{cliController.PlatformName}/{cliController.BinaryFileName}"; + return DownloadUtility.GetDownloadUrl(key); + } + + void IProgress.Report(float value) { + Progress = value; + } + + public Task PromptForDownload() { + if (EditorUtility.DisplayDialog( + title: "Install platform specific components", + message: InstallDescription, + ok: "Install", + cancel: "More Info") + ) { + return EnsureDownloaded(HotReloadCli.controller, CancellationToken.None); + } + Application.OpenURL(Constants.AdditionalContentURL); + return Task.FromResult(false); + } + + public const string InstallDescription = "For Hot Reload to work, additional components specific to your operating system have to be installed"; + } + + class DownloadResult { + public readonly HttpStatusCode statusCode; + public readonly string error; + public DownloadResult(HttpStatusCode statusCode, string error) { + this.statusCode = statusCode; + this.error = error; + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Installation/ServerDownloader.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Installation/ServerDownloader.cs.meta new file mode 100644 index 0000000..f6a80dc --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Installation/ServerDownloader.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f076514e142a4915ab2676a9ca6d884a +timeCreated: 1676802482 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Installation/ServerDownloader.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Installation/UpdateUtility.cs b/Packages/com.singularitygroup.hotreload/Editor/Installation/UpdateUtility.cs new file mode 100644 index 0000000..fbf393d --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Installation/UpdateUtility.cs @@ -0,0 +1,94 @@ +using System; +using System.IO; +using System.Threading; +using System.Threading.Tasks; +using SingularityGroup.HotReload.Editor.Cli; +using SingularityGroup.HotReload.RuntimeDependencies; +using UnityEditor; +#if UNITY_EDITOR_WIN +using System.Diagnostics; +using Debug = UnityEngine.Debug; +#endif + +namespace SingularityGroup.HotReload.Editor { + static class UpdateUtility { + public static async Task Update(string version, IProgress progress, CancellationToken cancellationToken) { + await ThreadUtility.SwitchToThreadPool(); + + string serverDir; + if(!CliUtils.TryFindServerDir(out serverDir)) { + progress?.Report(1); + return "unable to locate hot reload package"; + } + var packageDir = Path.GetDirectoryName(Path.GetFullPath(serverDir)); + var cacheDir = Path.GetFullPath(PackageConst.LibraryCachePath); + if(Path.GetPathRoot(packageDir) != Path.GetPathRoot(cacheDir)) { + progress?.Report(1); + return "unable to update package because it is located on a different drive than the unity project"; + } + var updatedPackageCopy = BackupPackage(packageDir, version); + + var key = $"{DownloadUtility.GetPackagePrefix(version)}/HotReload.zip"; + var url = DownloadUtility.GetDownloadUrl(key); + var targetFileName = $"HotReload{version.Replace('.', '-')}.zip"; + var targetFilePath = CliUtils.GetTempDownloadFilePath(targetFileName); + var proxy = new Progress(f => progress?.Report(f * 0.7f)); + var result = await DownloadUtility.DownloadFile(url, targetFilePath, proxy, cancellationToken).ConfigureAwait(false); + if(result.error != null) { + progress?.Report(1); + return result.error; + } + + PackageUpdater.UpdatePackage(targetFilePath, updatedPackageCopy); + progress?.Report(0.8f); + + var packageRecycleBinDir = PackageConst.LibraryCachePath + $"/PackageArchived-{version}-{Guid.NewGuid():N}"; + try { + Directory.Move(packageDir, packageRecycleBinDir); + Directory.Move(updatedPackageCopy, packageDir); + } catch { + // fallback to replacing files individually if access to the folder is denied + PackageUpdater.UpdatePackage(targetFilePath, packageDir); + } + try { + Directory.Delete(packageRecycleBinDir, true); + } catch (IOException) { + //ignored + } + + progress?.Report(1); + return null; + } + + static string BackupPackage(string packageDir, string version) { + var backupPath = PackageConst.LibraryCachePath + $"/PackageBackup-{version}"; + if(Directory.Exists(backupPath)) { + Directory.Delete(backupPath, true); + } + DirectoryCopy(packageDir, backupPath); + return backupPath; + } + + static void DirectoryCopy(string sourceDirPath, string destDirPath) { + var rootSource = new DirectoryInfo(sourceDirPath); + + var sourceDirs = rootSource.GetDirectories(); + // ensure destination directory exists + Directory.CreateDirectory(destDirPath); + + // Get the files in the directory and copy them to the new destination + var files = rootSource.GetFiles(); + foreach (var file in files) { + string temppath = Path.Combine(destDirPath, file.Name); + var copy = file.CopyTo(temppath); + copy.LastWriteTimeUtc = file.LastWriteTimeUtc; + } + + // copying subdirectories, and their contents to destination + foreach (var subdir in sourceDirs) { + string subDirDestPath = Path.Combine(destDirPath, subdir.Name); + DirectoryCopy(subdir.FullName, subDirDestPath); + } + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Installation/UpdateUtility.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Installation/UpdateUtility.cs.meta new file mode 100644 index 0000000..efb884a --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Installation/UpdateUtility.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d8485ce38122465e9e70d5992d9ae7ed +timeCreated: 1676966641 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Installation/UpdateUtility.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild.meta b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild.meta new file mode 100644 index 0000000..d600ba4 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0fe483b6b7ad4be79b58901d03e35511 +timeCreated: 1674041345 \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/BuildGenerateBuildInfo.cs b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/BuildGenerateBuildInfo.cs new file mode 100644 index 0000000..573ef1b --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/BuildGenerateBuildInfo.cs @@ -0,0 +1,42 @@ +using System; +using System.IO; +using UnityEditor; +using UnityEditor.Build; + +#pragma warning disable CS0618 +namespace SingularityGroup.HotReload.Editor { + public class BuildGenerateBuildInfo : IPreprocessBuild, IPostprocessBuild { + public int callbackOrder => 10; + + public void OnPreprocessBuild(BuildTarget target, string path) { + try { + if (!HotReloadBuildHelper.IncludeInThisBuild()) { + return; + } + // write BuildInfo json into the StreamingAssets directory + GenerateBuildInfo(BuildInfo.GetStoredPath(), target); + } catch (BuildFailedException) { + throw; + } catch (Exception e) { + throw new BuildFailedException(e); + } + } + + private static void GenerateBuildInfo(string buildFilePath, BuildTarget buildTarget) { + var buildInfo = BuildInfoHelper.GenerateBuildInfoMainThread(buildTarget); + // write to StreamingAssets + // create StreamingAssets folder if not exists (in-case project has no StreamingAssets files) + // ReSharper disable once AssignNullToNotNullAttribute + Directory.CreateDirectory(Path.GetDirectoryName(buildFilePath)); + File.WriteAllText(buildFilePath, buildInfo.ToJson()); + } + + public void OnPostprocessBuild(BuildTarget target, string path) { + try { + File.Delete(BuildInfo.GetStoredPath()); + } catch { + // ignore + } + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/BuildGenerateBuildInfo.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/BuildGenerateBuildInfo.cs.meta new file mode 100644 index 0000000..5989d32 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/BuildGenerateBuildInfo.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 178df48ca88b4cddac448a49196b49bf +timeCreated: 1682338738 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/BuildGenerateBuildInfo.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/HotReloadBuildHelper.cs b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/HotReloadBuildHelper.cs new file mode 100644 index 0000000..c767fd8 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/HotReloadBuildHelper.cs @@ -0,0 +1,111 @@ +using System; +using System.IO; +using UnityEditor; +using UnityEditor.Build; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor { + internal static class HotReloadBuildHelper { + /// + /// Should HotReload runtime be included in the current build? + /// + public static bool IncludeInThisBuild() { + return IsAllBuildSettingsSupported(); + } + + /// + /// Get scripting backend for the current platform. + /// + /// Scripting backend + public static ScriptingImplementation GetCurrentScriptingBackend() { +#pragma warning disable CS0618 + return PlayerSettings.GetScriptingBackend(BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget)); +#pragma warning restore CS0618 + } + + public static ManagedStrippingLevel GetCurrentStrippingLevel() { +#pragma warning disable CS0618 + return PlayerSettings.GetManagedStrippingLevel(BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget)); +#pragma warning restore CS0618 + } + + public static void SetCurrentScriptingBackend(ScriptingImplementation to) { +#pragma warning disable CS0618 + // only set it if default is not correct (avoid changing ProjectSettings when not needed) + if (GetCurrentScriptingBackend() != to) { + PlayerSettings.SetScriptingBackend(EditorUserBuildSettings.selectedBuildTargetGroup, to); + } +#pragma warning restore CS0618 + } + + public static void SetCurrentStrippingLevel(ManagedStrippingLevel to) { +#pragma warning disable CS0618 + // only set it if default is not correct (avoid changing ProjectSettings when not needed) + if (GetCurrentStrippingLevel() != to) { + PlayerSettings.SetManagedStrippingLevel(EditorUserBuildSettings.selectedBuildTargetGroup, to); + } +#pragma warning restore CS0618 + } + + /// Is the current build target supported? + /// main thread only + public static bool IsBuildTargetSupported() { + var buildTarget = EditorUserBuildSettings.selectedBuildTargetGroup; + return Array.IndexOf(unsupportedBuildTargets, buildTarget) == -1; + } + + /// Are all the settings supported? + /// main thread only + static bool IsAllBuildSettingsSupported() { + if (!IsBuildTargetSupported()) { + return false; + } + + // need way to give it settings object, dont want to give serializedobject + var options = HotReloadSettingsEditor.LoadSettingsOrDefault(); + var so = new SerializedObject(options); + + // check all projeect options + foreach (var option in HotReloadSettingsTab.allOptions) { + var projectOption = option as ProjectOptionBase; + if (projectOption != null) { + // if option is required, build can't use hot reload + if (projectOption.IsRequiredForBuild() && !projectOption.GetValue(so)) { + return false; + } + } + } + + return GetCurrentScriptingBackend() == ScriptingImplementation.Mono2x + && GetCurrentStrippingLevel() == ManagedStrippingLevel.Disabled + && EditorUserBuildSettings.development; + } + + /// + /// Some platforms are not supported because they don't have Mono scripting backend. + /// + /// + /// Only list the platforms that definately don't have Mono scripting. + /// + private static readonly BuildTargetGroup[] unsupportedBuildTargets = new [] { + BuildTargetGroup.iOS, // mono support was removed many years ago + BuildTargetGroup.WebGL, // has never had mono + }; + +#pragma warning disable CS0618 + public static bool IsMonoSupported(BuildTargetGroup buildTarget) { + var backend = PlayerSettings.GetScriptingBackend(buildTarget); + try { + // GetDefaultScriptingBackend returns IL2CPP for Unity 6 which goes against Unity documentation. + // Have to use a workaround approach instead + PlayerSettings.SetScriptingBackend(buildTarget, ScriptingImplementation.Mono2x); + return PlayerSettings.GetScriptingBackend(buildTarget) == ScriptingImplementation.Mono2x; + } catch { + return false; + } finally { + PlayerSettings.SetScriptingBackend(buildTarget, backend); + } + } +#pragma warning restore CS0618 + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/HotReloadBuildHelper.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/HotReloadBuildHelper.cs.meta new file mode 100644 index 0000000..c00d985 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/HotReloadBuildHelper.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b9aa611f02544b609c5b29f9d1409d6e +timeCreated: 1674041425 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/HotReloadBuildHelper.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildModifyAndroidManifest.cs b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildModifyAndroidManifest.cs new file mode 100644 index 0000000..17e03c6 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildModifyAndroidManifest.cs @@ -0,0 +1,133 @@ +using System; +using System.IO; +using System.Text.RegularExpressions; +using UnityEditor.Android; +using UnityEditor.Build; + +namespace SingularityGroup.HotReload.Editor { +#pragma warning disable CS0618 + /// + /// + /// This class sets option in the AndroidManifest that you choose in HotReload build settings. + /// + /// + /// - To connect to the HotReload server through the local network, we need to permit access to http://192...
+ /// - Starting with Android 9, insecure http requests are not allowed by default and must be whitelisted + ///
+ ///
+ internal class PostbuildModifyAndroidManifest : IPostGenerateGradleAndroidProject { +#pragma warning restore CS0618 + public int callbackOrder => 10; + + private const string manifestFileName = "AndroidManifest.xml"; + + public void OnPostGenerateGradleAndroidProject(string path) { + try { + if (!HotReloadBuildHelper.IncludeInThisBuild()) { + return; + } + // Note: in future we may support users with custom configuration for usesCleartextTraffic + #if UNITY_2022_1_OR_NEWER + // Unity 2022 or newer → do nothing, we rely on Unity option to control the flag + #else + // Unity 2021 or older → put manifest flag in if Unity is making a Development Build + var manifestFilePath = FindAndroidManifest(path); + if (manifestFilePath == null) { + throw new BuildFailedException($"[{CodePatcher.TAG}] Unable to find {manifestFileName}"); + } + SetUsesCleartextTraffic(manifestFilePath); + #endif + } catch (BuildFailedException) { + throw; + } catch (Exception e) { + throw new BuildFailedException(e); + } + } + + /// identifier that is used in the deeplink uri scheme + /// (initially tried Application.identifier, but that was giving unexpected results based on PlayerSettings) + // SG-29580 + // Something to uniqly identify the application, but it must be something which is highly likely + // to be the same at build time (studio might have logic to set e.g. product name to MyGameProd or MyGameTest) + public static string ApplicationIdentiferSlug => "app"; +/* + public static string ApplicationIdentiferSlug => Regex.Replace(ApplicationIdentifer, @"[^a-zA-Z0-9\.\-]", "") + .Replace("..", ".") // happens if your companyname in Unity ends with a dot + .ToLowerInvariant(); + + private static void AddDeeplinkForwarder(string manifestFilePath) { + // add the hotreload-${identifier} uri scheme to the AndroidManifest.xml file + // it should be added as part of an intent-filter for the activity "com.singularitygroup.deeplinkforwarder.DeepLinkForwarderActivity" + var contents = File.ReadAllText(manifestFilePath); + if (contents.Contains("android:name=\"com.singularitygroup.deeplinkforwarder.DeepLinkForwarderActivity\"")) { + // user has already set this themselves, don't replace it + return; + } + + //note: not using android:host or any other data attr because android still shows a chooser for all ur hotreload apps + // Therefore must use a unique uri scheme to ensure only one app can handle it. + var activityWithIntentFilter = @" + + + + + + + +"; + var newContents = Regex.Replace(contents, + @"", + activityWithIntentFilter + "\n " + ); + File.WriteAllText(manifestFilePath, newContents); + } +*/ + // Assume unityLibraryPath is to {gradleProject}/unityLibrary/ which is roughly the same across Unity versions 2018/2019/2020/2021/2022 + private static string FindAndroidManifest(string unityLibraryPath) { + // find the AndroidManifest.xml file which we can edit + var dir = new DirectoryInfo(unityLibraryPath); + var manifestFilePath = Path.Combine(dir.FullName, "src", "main", manifestFileName); + if (File.Exists(manifestFilePath)) { + return manifestFilePath; + } + + Log.Info("Did not find {0} at {1}, searching for manifest file inside {2}", manifestFileName, manifestFilePath, dir.FullName); + var manifestFiles = dir.GetFiles(manifestFileName, SearchOption.AllDirectories); + if (manifestFiles.Length == 0) { + return null; + } + + foreach (var file in manifestFiles) { + if (file.FullName.Contains("src")) { + // good choice + return file.FullName; + } + } + // fallback to the first file found + return manifestFiles[0].FullName; + } + + /// + /// Set option android:usesCleartextTraffic="true" + + /// + /// Absolute filepath to the unityLibrary AndroidManifest.xml file + private static void SetUsesCleartextTraffic(string manifestFilePath) { + // Ideally we would create or modify a "Network Security Configuration file" to permit access to local ip addresses + // https://developer.android.com/training/articles/security-config#manifest + // but that becomes difficult when the user has their own configuration file - would need to search for it and it may be inside an aar. + var contents = File.ReadAllText(manifestFilePath); + if (contents.Contains("android:usesCleartextTraffic=")) { + // user has already set this themselves, don't replace it + return; + } + var newContents = Regex.Replace(contents, + @""; + newContents += $"\n"; + File.WriteAllText(manifestFilePath, newContents); + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildModifyAndroidManifest.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildModifyAndroidManifest.cs.meta new file mode 100644 index 0000000..78fd19e --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildModifyAndroidManifest.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 1949292efc07445ea4c040d544e2d369 +timeCreated: 1675441886 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildModifyAndroidManifest.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildSendProjectState.cs b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildSendProjectState.cs new file mode 100644 index 0000000..c28b406 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildSendProjectState.cs @@ -0,0 +1,26 @@ +using System; +using SingularityGroup.HotReload.Editor.Cli; +using UnityEditor; +using UnityEditor.Build; + +namespace SingularityGroup.HotReload.Editor { +#pragma warning disable CS0618 + class PostbuildSendProjectState : IPostprocessBuild { +#pragma warning restore CS0618 + public int callbackOrder => 9999; + public void OnPostprocessBuild(BuildTarget target, string path) { + try { + if (!HotReloadBuildHelper.IncludeInThisBuild()) { + return; + } + // after build passes, need to send again because EditorApplication.delayCall isn't called. + var buildInfo = BuildInfoHelper.GenerateBuildInfoMainThread(); + HotReloadCli.PrepareBuildInfo(buildInfo); + } catch (BuildFailedException) { + throw; + } catch (Exception e) { + throw new BuildFailedException(e); + } + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildSendProjectState.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildSendProjectState.cs.meta new file mode 100644 index 0000000..777d5c3 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildSendProjectState.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 3b27b9eab16f78f448477e546fd5eb97 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PostbuildSendProjectState.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PrebuildIncludeResources.cs b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PrebuildIncludeResources.cs new file mode 100644 index 0000000..40081e8 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PrebuildIncludeResources.cs @@ -0,0 +1,60 @@ +using System; +using UnityEditor; +using UnityEditor.Build; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor { + /// Includes HotReload Resources only in development builds + /// + /// This build script ensures that HotReload Resources are not included in release builds. + /// + /// When HotReload is enabled:
+ /// - include HotReloadSettingsObject in development Android builds.
+ /// - exclude HotReloadSettingsObject from the build.
+ /// When HotReload is disabled:
+ /// - excludes HotReloadSettingsObject from the build.
+ ///
+ ///
+#pragma warning disable CS0618 + internal class PrebuildIncludeResources : IPreprocessBuild, IPostprocessBuild { +#pragma warning restore CS0618 + public int callbackOrder => 10; + + // Preprocess warnings don't show up in console + bool warnSettingsNotSupported; + + public void OnPreprocessBuild(BuildTarget target, string path) { + try { + if (HotReloadBuildHelper.IncludeInThisBuild()) { + // move scriptable object into Resources/ folder + HotReloadSettingsEditor.AddOrRemoveFromBuild(true); + } else { + // make sure HotReload resources are not in the build + HotReloadSettingsEditor.AddOrRemoveFromBuild(false); + + var options = HotReloadSettingsEditor.LoadSettingsOrDefault(); + var so = new SerializedObject(options); + if (IncludeInBuildOption.I.GetValue(so)) { + warnSettingsNotSupported = true; + } + } + } catch (BuildFailedException) { + throw; + } catch (Exception ex) { + throw new BuildFailedException(ex); + } + } + + public void OnPostprocessBuild(BuildTarget target, string path) { + if (warnSettingsNotSupported) { + Debug.LogWarning("Hot Reload was not included in the build because one or more build settings were not supported."); + } + } + + // Do nothing in post build. settings asset will be dirty if build fails, so not worth fixing just for successful builds. + // [PostProcessBuild] + // private static void PostBuild(BuildTarget target, string pathToBuiltProject) { + // } + } + +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PrebuildIncludeResources.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PrebuildIncludeResources.cs.meta new file mode 100644 index 0000000..8f7b71e --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PrebuildIncludeResources.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 7a63dd2d10359e94a8a3c24bf59164fb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/PlayerBuild/PrebuildIncludeResources.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration.meta new file mode 100644 index 0000000..f6f2a3a --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ac3ce0c4b45643859281090bdc74719c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/FileIOProvider.cs b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/FileIOProvider.cs new file mode 100644 index 0000000..2af8f5a --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/FileIOProvider.cs @@ -0,0 +1,44 @@ +using System; +using System.IO; +using System.Security; +using System.Text; +using SingularityGroup.HotReload.Editor.Util; + +namespace SingularityGroup.HotReload.Editor.ProjectGeneration { + class FileIOProvider : IFileIO + { + public bool Exists(string fileName) + { + return File.Exists(fileName); + } + + public string ReadAllText(string fileName) + { + return File.ReadAllText(fileName); + } + + public void WriteAllText(string path, string content) + { + File.WriteAllText(path, content, Encoding.UTF8); + } + + public string EscapedRelativePathFor(string file, string projectDirectory) + { + var projectDir = Path.GetFullPath(projectDirectory); + + // We have to normalize the path, because the PackageManagerRemapper assumes + // dir seperators will be os specific. + var absolutePath = Path.GetFullPath(file.NormalizePath()); + var path = SkipPathPrefix(absolutePath, projectDir); + + return SecurityElement.Escape(path); + } + + private static string SkipPathPrefix(string path, string prefix) + { + return path.StartsWith($@"{prefix}{Path.DirectorySeparatorChar}", StringComparison.Ordinal) + ? path.Substring(prefix.Length + 1) + : path; + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/FileIOProvider.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/FileIOProvider.cs.meta new file mode 100644 index 0000000..13178ce --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/FileIOProvider.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 27e102e0bda3b0c4f95d4e5e9e3bf16a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/FileIOProvider.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/GUIDProvider.cs b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/GUIDProvider.cs new file mode 100644 index 0000000..d55e241 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/GUIDProvider.cs @@ -0,0 +1,9 @@ +namespace SingularityGroup.HotReload.Editor.ProjectGeneration { + class GUIDProvider : IGUIDGenerator + { + public string ProjectGuid(string name) + { + return SolutionGuidGenerator.GuidForProject(name); + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/GUIDProvider.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/GUIDProvider.cs.meta new file mode 100644 index 0000000..8fdcc63 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/GUIDProvider.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: ca39683512eedae448726b029ca101ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/GUIDProvider.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IFileIO.cs b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IFileIO.cs new file mode 100644 index 0000000..0cda7f5 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IFileIO.cs @@ -0,0 +1,12 @@ +namespace SingularityGroup.HotReload.Editor.ProjectGeneration +{ + internal interface IFileIO + { + bool Exists(string fileName); + + string ReadAllText(string fileName); + void WriteAllText(string path, string content); + + string EscapedRelativePathFor(string file, string projectDirectory); + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IFileIO.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IFileIO.cs.meta new file mode 100644 index 0000000..d830184 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IFileIO.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 6e856fe8c0b7d3c45a06140d120fdd87 +timeCreated: 1580717666 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IFileIO.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IGUIDGenerator.cs b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IGUIDGenerator.cs new file mode 100644 index 0000000..46bde64 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IGUIDGenerator.cs @@ -0,0 +1,7 @@ +namespace SingularityGroup.HotReload.Editor.ProjectGeneration +{ + internal interface IGUIDGenerator + { + string ProjectGuid(string name); + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IGUIDGenerator.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IGUIDGenerator.cs.meta new file mode 100644 index 0000000..c55cecc --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IGUIDGenerator.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 27fd74267707df04ab2cfac0e8abd782 +timeCreated: 1580717700 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IGUIDGenerator.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IHotReloadProjectGenerationPostProcessor.cs b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IHotReloadProjectGenerationPostProcessor.cs new file mode 100644 index 0000000..de473c0 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IHotReloadProjectGenerationPostProcessor.cs @@ -0,0 +1,43 @@ +namespace SingularityGroup.HotReload.Editor.ProjectGeneration { + /// + /// Allows to post process Hot Reload's project generation. + /// This should only be needed if you tinker with Unity's project generation as well. + /// Types that inherit from this interface will get created automatically whenever Hot Reload generates project files. + /// Types that implement this interface need to have a public parameterless default constructor. + /// + public interface IHotReloadProjectGenerationPostProcessor { + + /// + /// Specifies the ordering of the post processor. + /// Post processors with lower callback order get executed first. + /// + int CallbackOrder { get; } + + /// + /// Use this method to set up state you need for the project generation. + /// Calls to unity API need to happen here and it's values need to be cached. + /// This is the only method that will get executed on the main thread. + /// + void InitializeOnMainThread(); + + /// + /// Gets called whenever Hot Reload generated a project file. + /// The destination file path for the .csproj file + /// The file contents of the .csproj file + /// + string OnGeneratedCSProjectThreaded(string path, string contents); + + /// + /// Gets called whenever Hot Reload generated a solution file. + /// The destination file path for the .sln file + /// The file contents of the .sln file + /// + string OnGeneratedSlnSolutionThreaded(string path, string contents); + + /// + /// Gets called after Hot Reload project generation is finished. + /// + void OnGeneratedCSProjectFilesThreaded(); + } +} + diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IHotReloadProjectGenerationPostProcessor.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IHotReloadProjectGenerationPostProcessor.cs.meta new file mode 100644 index 0000000..499c7c4 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IHotReloadProjectGenerationPostProcessor.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ff65ad426f484ad5bbd34fb8f9204c4d +timeCreated: 1676637309 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/IHotReloadProjectGenerationPostProcessor.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenenerationPostProcessor.cs b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenenerationPostProcessor.cs new file mode 100644 index 0000000..17856eb --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenenerationPostProcessor.cs @@ -0,0 +1,14 @@ +using System.IO; +using UnityEditor; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor.ProjectGeneration { + class ProjectGenenerationPostProcessor : AssetPostprocessor { + // Called once before any generation of sln/csproj files happens, can return true to disable generation altogether + static bool OnPreGeneratingCSProjectFiles() { + ProjectGeneration.GenerateSlnAndCsprojFiles(Application.dataPath).Forget(); + return false; + } + } +} + diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenenerationPostProcessor.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenenerationPostProcessor.cs.meta new file mode 100644 index 0000000..9215e73 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenenerationPostProcessor.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: d58a4838109c4b31ac7f221547ad82e8 +timeCreated: 1676527868 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenenerationPostProcessor.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGeneration.cs b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGeneration.cs new file mode 100644 index 0000000..c968fe9 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGeneration.cs @@ -0,0 +1,893 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading; +using System.Threading.Tasks; +using SingularityGroup.HotReload; +using SingularityGroup.HotReload.Editor.Util; +using SingularityGroup.HotReload.Newtonsoft.Json; +using UnityEditor; +using UnityEditor.Compilation; +using UnityEditor.PackageManager; +using UnityEditorInternal; +using Assembly = UnityEditor.Compilation.Assembly; +using PackageInfo = UnityEditor.PackageManager.PackageInfo; +#if UNITY_2019_1_OR_NEWER +using System.Reflection; +#endif + +namespace SingularityGroup.HotReload.Editor.ProjectGeneration { + class ProjectGeneration { + private enum ScriptingLanguage { + None, + CSharp + } + + [Serializable] + class Config { + public string projectExclusionRegex; + public HashSet projectBlacklist; + public HashSet polyfillSourceFiles; + public bool excludeAllAnalyzers; + public bool useBuiltInProjectGeneration; + } + + public static readonly string MSBuildNamespaceUri = "http://schemas.microsoft.com/developer/msbuild/2003"; + + /// + /// Map source extensions to ScriptingLanguages + /// + private static readonly Dictionary k_BuiltinSupportedExtensions = + new Dictionary { + { "cs", ScriptingLanguage.CSharp }, + { "uxml", ScriptingLanguage.None }, + { "uss", ScriptingLanguage.None }, + { "shader", ScriptingLanguage.None }, + { "compute", ScriptingLanguage.None }, + { "cginc", ScriptingLanguage.None }, + { "hlsl", ScriptingLanguage.None }, + { "glslinc", ScriptingLanguage.None }, + { "template", ScriptingLanguage.None }, + { "raytrace", ScriptingLanguage.None }, + { "json", ScriptingLanguage.None }, + { "rsp", ScriptingLanguage.None }, + { "asmdef", ScriptingLanguage.None }, + { "asmref", ScriptingLanguage.None }, + { "xaml", ScriptingLanguage.None }, + { "tt", ScriptingLanguage.None }, + { "t4", ScriptingLanguage.None }, + { "ttinclude", ScriptingLanguage.None } + }; + + private string m_SolutionProjectEntryTemplate = string.Join(Environment.NewLine, + @"Project(""{{{0}}}"") = ""{1}"", ""{2}"", ""{{{3}}}""", + @"EndProject").Replace(" ", "\t"); + + private string m_SolutionProjectConfigurationTemplate = string.Join(Environment.NewLine, + @" {{{0}}}.Debug|Any CPU.ActiveCfg = Debug|Any CPU", + @" {{{0}}}.Debug|Any CPU.Build.0 = Debug|Any CPU").Replace(" ", "\t"); + + private string[] m_ProjectSupportedExtensions = new string[0]; + + private readonly string m_ProjectName; + private readonly string m_ProjectDirectory; + private readonly string m_SolutionDirectory; + private readonly IFileIO m_FileIOProvider; + private readonly IGUIDGenerator m_GUIDGenerator; + private static readonly SemaphoreSlim gate = new SemaphoreSlim(1, 1); + + private const string k_ToolsVersion = "4.0"; + private const string k_ProductVersion = "10.0.20506"; + private const string k_BaseDirectory = "."; + +#if !UNITY_2020_2_OR_NEWER + private const string k_TargetLanguageVersion = "latest"; +#endif + + // ReSharper disable once CollectionNeverUpdated.Local + private readonly Dictionary m_PackageInfoCache = + new Dictionary(); + + private Assembly[] m_AllEditorAssemblies; + + private Assembly[] m_AllPlayerAssemblies; + + private string[] m_AllAssetPaths; + + private string m_EngineAssemblyPath; + + private string m_EditorAssemblyPath; + + private bool m_SuppressCommonWarnings; + + private string m_FallbackRootNamespace; + + private IHotReloadProjectGenerationPostProcessor[] m_PostProcessors; + + + public static bool IsSyncing => gate.CurrentCount == 0; + + internal const string tempDir = PackageConst.LibraryCachePath + "/Solution"; + public static string GetUnityProjectDirectory(string dataPath) => new DirectoryInfo(dataPath).Parent.FullName; + public static string GetSolutionFilePath(string dataPath) => Path.Combine(tempDir, Path.GetFileName(GetUnityProjectDirectory(dataPath)) + ".sln"); + + public static Task GenerateSlnAndCsprojFiles(string dataPath) { + if (!IsSyncing) { + return GenerateAsync(dataPath); + } + return Task.CompletedTask; + } + + public static Task EnsureSlnAndCsprojFiles(string dataPath) { + if (File.Exists(GetSolutionFilePath(dataPath))) { + return Task.CompletedTask; + } + + return GenerateAsync(dataPath); + } + + private static Task GenerateAsync(string dataPath) { + Directory.CreateDirectory(tempDir); + var gen = new ProjectGeneration(tempDir, GetUnityProjectDirectory(dataPath)); + return gen.Sync(); + } + + + public ProjectGeneration(string solutionDirectory, string unityProjectDirectory) { + m_ProjectDirectory = unityProjectDirectory; + m_SolutionDirectory = solutionDirectory; + m_ProjectName = Path.GetFileName(unityProjectDirectory); + m_FileIOProvider = new FileIOProvider(); + m_GUIDGenerator = new GUIDProvider(); + } + + public async Task Sync() { + await ThreadUtility.SwitchToThreadPool(); + var config = LoadConfig(); + if (config.useBuiltInProjectGeneration) { + return; + } + + await ThreadUtility.SwitchToMainThread(); + await gate.WaitAsync(); + try { + //Cache all data that is accessed via unity API on the unity main thread. + m_AllAssetPaths = AssetDatabase.GetAllAssetPaths(); + m_ProjectSupportedExtensions = EditorSettings.projectGenerationUserExtensions; + m_EngineAssemblyPath = InternalEditorUtility.GetEngineAssemblyPath(); + m_EditorAssemblyPath = InternalEditorUtility.GetEditorAssemblyPath(); + m_FallbackRootNamespace = EditorSettings.projectGenerationRootNamespace; + m_SuppressCommonWarnings = +#if UNITY_2020_1_OR_NEWER + PlayerSettings.suppressCommonWarnings; +#else + false; +#endif + + //Do the remaining work on a separate thread + await Task.WhenAll( + BuildPackageInfoCache(), + BuildEditorAssemblies(), + BuildPostProcessors() + ); + await GenerateAndWriteSolutionAndProjects(config); + } finally { + gate.Release(); + } + } + + private Config LoadConfig() { + var configPath = Path.Combine(m_ProjectDirectory, PackageConst.ConfigFileName); + Config config; + if(File.Exists(configPath)) { + config = JsonConvert.DeserializeObject(File.ReadAllText(configPath)); + } else { + config = new Config(); + } + return config; + } + + private bool ShouldFileBePartOfSolution(string file) { + // Exclude files coming from packages except if they are internalized. + if (IsInternalizedPackagePath(file)) { + return false; + } + + return HasValidExtension(file); + } + + public bool HasValidExtension(string file) { + var extension = Path.GetExtension(file); + + // Dll's are not scripts but still need to be included.. + if (file.Equals(".dll", StringComparison.OrdinalIgnoreCase)) + return true; + + return IsSupportedExtension(extension); + } + + private bool IsSupportedExtension(string extension) { + extension = extension.TrimStart('.'); + return k_BuiltinSupportedExtensions.ContainsKey(extension) || m_ProjectSupportedExtensions.Contains(extension); + } + + async Task GenerateAndWriteSolutionAndProjects(Config config) { + await ThreadUtility.SwitchToThreadPool(); + + var projectExclusionRegex = config.projectExclusionRegex != null ? new Regex(config.projectExclusionRegex, RegexOptions.Compiled | RegexOptions.Singleline) : null; + var projectBlacklist = config.projectBlacklist ?? new HashSet(); + var polyfillSourceFiles = config.polyfillSourceFiles ?? new HashSet(); + var filteredProjects = new HashSet(); + var runtimeDependenciesBuilder = new List(); + runtimeDependenciesBuilder.Add(typeof(HarmonyLib.DetourApi).Assembly.Location); +# if UNITY_2019_4_OR_NEWER + runtimeDependenciesBuilder.Add(typeof(Helper2019).Assembly.Location); +#endif +# if UNITY_2020_3_OR_NEWER + runtimeDependenciesBuilder.Add(typeof(Helper2020).Assembly.Location); +#endif +# if UNITY_2022_2_OR_NEWER + runtimeDependenciesBuilder.Add(typeof(Helper2022).Assembly.Location); +#endif + var runtimeDependencies = runtimeDependenciesBuilder.ToArray(); + + // Only synchronize islands that have associated source files and ones that we actually want in the project. + // This also filters out DLLs coming from .asmdef files in packages. + var assemblies = GetAssemblies(ShouldFileBePartOfSolution).ToArray(); + var projectParts = new List(); + foreach (var assembly in assemblies) { + if(projectExclusionRegex != null && projectExclusionRegex.IsMatch(assembly.name)) { + filteredProjects.Add(assembly.name); + continue; + } + var part = new ProjectPart(assembly.name, assembly, "", m_FallbackRootNamespace, polyfillSourceFiles); + string projectPath; +# if (UNITY_2021_3_OR_NEWER) + projectPath = Path.GetRelativePath(m_ProjectDirectory, ProjectFile(part)).Replace('\\', '/'); +# else + projectPath = ProjectFile(part).Replace('\\', '/').Replace(m_ProjectDirectory.Replace('\\', '/'), ""); +#endif + if(projectBlacklist.Contains(projectPath)) { + filteredProjects.Add(assembly.name); + continue; + } + projectParts.Add(part); + } + + SyncSolution(projectParts.ToArray()); + + await ThreadUtility.SwitchToMainThread(); + var responseFiles = new List[projectParts.Count]; + for (var i = 0; i < projectParts.Count; i++) { + responseFiles[i] = projectParts[i].ParseResponseFileData(m_ProjectDirectory).ToList(); + } + + await ThreadUtility.SwitchToThreadPool(); + for (var i = 0; i < projectParts.Count; i++) { + SyncProject(projectParts[i], responseFiles[i], filteredProjects, runtimeDependencies, config); + } + + foreach (var pp in m_PostProcessors) { + try { + pp.OnGeneratedCSProjectFilesThreaded(); + } catch (Exception ex) { + Log.Warning("Post processor '{0}' threw exception when calling OnGeneratedCSProjectFilesThreaded:\n{1}", pp, ex); + } + } + } + + private void SyncProject( + ProjectPart island, + List responseFileData, + HashSet filteredProjects, + string[] runtimeDependencies, + Config config) { + + SyncProjectFileIfNotChanged( + ProjectFile(island), + ProjectText(island, responseFileData, filteredProjects, runtimeDependencies, config)); + } + + private void SyncProjectFileIfNotChanged(string path, string newContents) { + foreach (var pp in m_PostProcessors) { + try { + newContents = pp.OnGeneratedCSProjectThreaded(path, newContents); + } catch (Exception ex) { + Log.Warning("Post processor '{0}' failed when processing project '{1}':\n{2}", pp, path, ex); + } + } + + SyncFileIfNotChanged(path, newContents); + } + + private void SyncSolutionFileIfNotChanged(string path, string newContents) { + foreach (var pp in m_PostProcessors) { + try { + newContents = pp.OnGeneratedSlnSolutionThreaded(path, newContents); + } catch (Exception ex) { + Log.Warning("Post processor '{0}' failed when processing solution '{1}':\n{2}", pp, path, ex); + } + } + + SyncFileIfNotChanged(path, newContents); + } + + + private void SyncFileIfNotChanged(string path, string newContents) { + try { + if (m_FileIOProvider.Exists(path) && newContents == m_FileIOProvider.ReadAllText(path)) { + return; + } + } catch (Exception exception) { + Log.Exception(exception); + } + + m_FileIOProvider.WriteAllText(path, newContents); + } + + private string ProjectText(ProjectPart assembly, List responseFilesData, HashSet filteredProjects, string[] runtimeDependencies, Config config) { + var projectBuilder = new StringBuilder(ProjectHeader(assembly, responseFilesData, config)); + + foreach (var file in assembly.SourceFiles) { + var fullFile = m_FileIOProvider.EscapedRelativePathFor(file, m_SolutionDirectory); + projectBuilder.Append(" ").Append(Environment.NewLine); + } + + projectBuilder.Append(assembly.AssetsProjectPart); + + var responseRefs = responseFilesData.SelectMany(x => x.FullPathReferences.Select(r => r)); + var internalAssemblyReferences = assembly.AssemblyReferences + .Where(reference => filteredProjects.Contains(reference.name) || !reference.sourceFiles.Any(ShouldFileBePartOfSolution)).Select(i => i.outputPath); + var allReferences = + assembly.CompiledAssemblyReferences + .Union(responseRefs) + .Union(internalAssemblyReferences).ToArray(); + + foreach (var reference in allReferences) { + var fullReference = Path.IsPathRooted(reference) ? reference : Path.Combine(m_ProjectDirectory, reference); + AppendReference(fullReference, projectBuilder); + } + foreach (var path in runtimeDependencies) { + AppendReference(path, projectBuilder); + } + + if (assembly.AssemblyReferences.Length > 0) { + projectBuilder.Append(" ").Append(Environment.NewLine); + projectBuilder.Append(" ").Append(Environment.NewLine); + foreach (var reference in assembly.AssemblyReferences.Where(i => !filteredProjects.Contains(i.name) && i.sourceFiles.Any(ShouldFileBePartOfSolution))) { + var name = GetProjectName(reference.name, reference.defines); + projectBuilder.Append(" ") + .Append(Environment.NewLine); + projectBuilder.Append(" {").Append(ProjectGuid(name)).Append("}").Append(Environment.NewLine); + projectBuilder.Append(" ").Append(name).Append("").Append(Environment.NewLine); + projectBuilder.Append(" ").Append(Environment.NewLine); + } + } + + projectBuilder.Append(ProjectFooter()); + return projectBuilder.ToString(); + } + + private static void AppendReference(string fullReference, StringBuilder projectBuilder) { + var escapedFullPath = SecurityElement.Escape(fullReference); + escapedFullPath = escapedFullPath.NormalizePath(); + projectBuilder.Append(" ").Append(Environment.NewLine); + projectBuilder.Append(" ").Append(escapedFullPath).Append("").Append(Environment.NewLine); + projectBuilder.Append(" ").Append(Environment.NewLine); + } + + private string ProjectFile(ProjectPart projectPart) { + return Path.Combine(m_SolutionDirectory, $"{GetProjectName(projectPart.Name, projectPart.Defines)}.csproj"); + } + + public string SolutionFile() { + return Path.Combine(m_SolutionDirectory, $"{m_ProjectName}.sln"); + } + + private string ProjectHeader( + ProjectPart assembly, + List responseFilesData, + Config config + ) { + var otherResponseFilesData = GetOtherArgumentsFromResponseFilesData(responseFilesData); + var arguments = new object[] { + k_ToolsVersion, + k_ProductVersion, + ProjectGuid(GetProjectName(assembly.Name, assembly.Defines)), + m_EngineAssemblyPath, + m_EditorAssemblyPath, + string.Join(";", assembly.Defines.Concat(responseFilesData.SelectMany(x => x.Defines)).Distinct().ToArray()), + MSBuildNamespaceUri, + assembly.Name, + assembly.OutputPath, + assembly.RootNamespace, + "", + GenerateLangVersion(otherResponseFilesData["langversion"], assembly), + k_BaseDirectory, + assembly.CompilerOptions.AllowUnsafeCode | responseFilesData.Any(x => x.Unsafe), + GenerateNoWarn(otherResponseFilesData["nowarn"].Distinct().ToList()), + config.excludeAllAnalyzers ? "" : GenerateAnalyserItemGroup(RetrieveRoslynAnalyzers(assembly, otherResponseFilesData)), + config.excludeAllAnalyzers ? "" : GenerateAnalyserAdditionalFiles(otherResponseFilesData["additionalfile"].SelectMany(x=>x.Split(';')).Distinct().ToArray()), + config.excludeAllAnalyzers ? "" : GenerateRoslynAnalyzerRulesetPath(assembly, otherResponseFilesData), + GenerateWarningLevel(otherResponseFilesData["warn"].Concat(otherResponseFilesData["w"]).Distinct()), + GenerateWarningAsError(otherResponseFilesData["warnaserror"], otherResponseFilesData["warnaserror-"], + otherResponseFilesData["warnaserror+"]), + GenerateDocumentationFile(otherResponseFilesData["doc"].ToArray()), + GenerateNullable(otherResponseFilesData["nullable"]) + }; + + try { + return string.Format(GetProjectHeaderTemplate(), arguments); + } catch (Exception) { + throw new NotSupportedException( + "Failed creating c# project because the c# project header did not have the correct amount of arguments, which is " + + arguments.Length); + } + } + + string[] RetrieveRoslynAnalyzers(ProjectPart assembly, ILookup otherResponseFilesData) { + var otherAnalyzers = otherResponseFilesData["a"] ?? Array.Empty(); + #if UNITY_2020_2_OR_NEWER + return otherResponseFilesData["analyzer"].Concat(otherAnalyzers) + .SelectMany(x=>x.Split(';')) + // #if !ROSLYN_ANALYZER_FIX + // .Concat(GetRoslynAnalyzerPaths()) + // #else + .Concat(assembly.CompilerOptions.RoslynAnalyzerDllPaths ?? Array.Empty()) + // #endif + .Select(MakeAbsolutePath) + .Distinct() + .ToArray(); + #else + return otherResponseFilesData["analyzer"].Concat(otherAnalyzers) + .SelectMany(x=>x.Split(';')) + .Distinct() + .Select(MakeAbsolutePath) + .ToArray(); + #endif + } + + private static string GenerateAnalyserItemGroup(string[] paths) { + // + // + // + // + if (!paths.Any()) + return string.Empty; + + var analyserBuilder = new StringBuilder(); + analyserBuilder.AppendLine(" "); + foreach (var path in paths) { + analyserBuilder.AppendLine($" "); + } + + analyserBuilder.AppendLine(" "); + return analyserBuilder.ToString(); + } + + private string GenerateRoslynAnalyzerRulesetPath(ProjectPart assembly, ILookup otherResponseFilesData) { +#if UNITY_2020_2_OR_NEWER + return GenerateAnalyserRuleSet(otherResponseFilesData["ruleset"].Append(assembly.CompilerOptions.RoslynAnalyzerRulesetPath) + .Where(a => !string.IsNullOrEmpty(a)).Distinct().Select(x => MakeAbsolutePath(x).NormalizePath()).ToArray()); +#else + return GenerateAnalyserRuleSet(otherResponseFilesData["ruleset"].Distinct().Select(x => MakeAbsolutePath(x).NormalizePath()).ToArray()); +#endif + } + + private static string GenerateAnalyserRuleSet(string[] paths) { + //..\path\to\myrules.ruleset + if (!paths.Any()) + return string.Empty; + + return + $"{Environment.NewLine}{string.Join(Environment.NewLine, paths.Select(a => $" {a}"))}"; + } + + private static string MakeAbsolutePath(string path) { + return Path.IsPathRooted(path) ? path : Path.GetFullPath(path); + } + + private string GenerateNullable(IEnumerable enumerable) { + var val = enumerable.FirstOrDefault(); + if (string.IsNullOrWhiteSpace(val)) + return string.Empty; + + return $"{Environment.NewLine} {val}"; + } + + private static string GenerateDocumentationFile(string[] paths) { + if (!paths.Any()) + return String.Empty; + + return $"{Environment.NewLine}{string.Join(Environment.NewLine, paths.Select(a => $" {a}"))}"; + } + + private static string GenerateWarningAsError(IEnumerable args, IEnumerable argsMinus, IEnumerable argsPlus) { + var returnValue = String.Empty; + var allWarningsAsErrors = false; + var warningIds = new List(); + + foreach (var s in args) { + if (s == "+" || s == string.Empty) allWarningsAsErrors = true; + else if (s == "-") allWarningsAsErrors = false; + else { + warningIds.Add(s); + } + } + + warningIds.AddRange(argsPlus); + + returnValue += $@" {allWarningsAsErrors}"; + if (warningIds.Any()) { + returnValue += $"{Environment.NewLine} {string.Join(";", warningIds)}"; + } + + if (argsMinus.Any()) + returnValue += $"{Environment.NewLine} {string.Join(";", argsMinus)}"; + + return $"{Environment.NewLine}{returnValue}"; + } + + private static string GenerateWarningLevel(IEnumerable warningLevel) { + var level = warningLevel.FirstOrDefault(); + if (!string.IsNullOrWhiteSpace(level)) + return level; + + return 4.ToString(); + } + + private static string GetSolutionText() { + return string.Join(Environment.NewLine, + @"", + @"Microsoft Visual Studio Solution File, Format Version {0}", + @"# Visual Studio {1}", + @"{2}", + @"Global", + @" GlobalSection(SolutionConfigurationPlatforms) = preSolution", + @" Debug|Any CPU = Debug|Any CPU", + @" EndGlobalSection", + @" GlobalSection(ProjectConfigurationPlatforms) = postSolution", + @"{3}", + @" EndGlobalSection", + @" GlobalSection(SolutionProperties) = preSolution", + @" HideSolutionNode = FALSE", + @" EndGlobalSection", + @"EndGlobal", + @"").Replace(" ", "\t"); + } + + private static string GetProjectFooterTemplate() { + return string.Join(Environment.NewLine, + @" ", + @" ", + @" ", + @"", + @""); + } + + private static string GetProjectHeaderTemplate() { + var header = new[] { + @"", + @"", + @" ", + @" {11}", + @" <_TargetFrameworkDirectories>non_empty_path_generated_by_unity.rider.package", + @" <_FullFrameworkReferenceAssemblyPaths>non_empty_path_generated_by_unity.rider.package", + @" true{17}", + @" ", + @" ", + @" Debug", + @" AnyCPU", + @" {1}", + @" 2.0", + @" {9}", + @" {{{2}}}", + @" {{E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1}};{{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}}", + @" Library", + @" Properties", + @" {7}", + @" v4.7.1", + @" 512", + @" {12}", + @" ", + @" ", + @" true", + @" full", + @" false", + @" {8}", + @" {5}", + @" prompt", + @" {18}", + @" {14}", + @" {13}{19}{20}{21}", + @" " + }; + + var forceExplicitReferences = new[] { + @" ", + @" true", + @" true", + @" false", + @" false", + @" false", + @" " + }; + + var footer = new[] { + @"{15}{16} ", + @"" + }; + + var pieces = header.Concat(forceExplicitReferences).Concat(footer).ToArray(); + return string.Join(Environment.NewLine, pieces); + } + + private void SyncSolution(ProjectPart[] islands) { + SyncSolutionFileIfNotChanged(SolutionFile(), SolutionText(islands)); + } + + private string SolutionText(ProjectPart[] islands) { + var fileversion = "11.00"; + var vsversion = "2010"; + + var projectEntries = GetProjectEntries(islands); + var projectConfigurations = string.Join(Environment.NewLine, + islands.Select(i => GetProjectActiveConfigurations(ProjectGuid(GetProjectName(i.Name, i.Defines)))).ToArray()); + return string.Format(GetSolutionText(), fileversion, vsversion, projectEntries, projectConfigurations); + } + + private static ILookup GetOtherArgumentsFromResponseFilesData(List responseFilesData) { + var paths = responseFilesData.SelectMany(x => { + return x.OtherArguments + .Where(a => a.StartsWith("/", StringComparison.Ordinal) || a.StartsWith("-", StringComparison.Ordinal)) + .Select(b => { + var index = b.IndexOf(":", StringComparison.Ordinal); + if (index > 0 && b.Length > index) { + var key = b.Substring(1, index - 1); + return new KeyValuePair(key.ToLowerInvariant(), b.Substring(index + 1)); + } + + const string warnaserror = "warnaserror"; + if (b.Substring(1).StartsWith(warnaserror, StringComparison.Ordinal)) { + return new KeyValuePair(warnaserror, b.Substring(warnaserror.Length + 1)); + } + + const string nullable = "nullable"; + if (b.Substring(1).StartsWith(nullable)) { + var res = b.Substring(nullable.Length + 1); + if (string.IsNullOrWhiteSpace(res) || res.Equals("+")) + res = "enable"; + else if (res.Equals("-")) + res = "disable"; + return new KeyValuePair(nullable, res); + } + + return default(KeyValuePair); + }); + }) + .Distinct() + .ToLookup(o => o.Key, pair => pair.Value); + return paths; + } + + private string GenerateLangVersion(IEnumerable langVersionList, ProjectPart assembly) { + var langVersion = langVersionList.FirstOrDefault(); + if (!string.IsNullOrWhiteSpace(langVersion)) + return langVersion; +#if UNITY_2020_2_OR_NEWER + return assembly.CompilerOptions.LanguageVersion; +#else + return k_TargetLanguageVersion; +#endif + } + + private static string GenerateAnalyserAdditionalFiles(string[] paths) { + if (!paths.Any()) + return string.Empty; + + var analyserBuilder = new StringBuilder(); + analyserBuilder.AppendLine(" "); + foreach (var path in paths) { + analyserBuilder.AppendLine($" "); + } + + analyserBuilder.AppendLine(" "); + return analyserBuilder.ToString(); + } + + public string GenerateNoWarn(List codes) { + if (m_SuppressCommonWarnings) + codes.AddRange(new[] { "0169", "0649" }); + + if (!codes.Any()) + return string.Empty; + + return string.Join(",", codes.Distinct()); + } + + private string GetProjectEntries(ProjectPart[] islands) { + var projectEntries = islands.Select(i => string.Format( + m_SolutionProjectEntryTemplate, + SolutionGuidGenerator.GuidForSolution(), + i.Name, + Path.GetFileName(ProjectFile(i)), + ProjectGuid(GetProjectName(i.Name, i.Defines)) + )); + + return string.Join(Environment.NewLine, projectEntries.ToArray()); + } + + /// + /// Generate the active configuration string for a given project guid + /// + private string GetProjectActiveConfigurations(string projectGuid) { + return string.Format( + m_SolutionProjectConfigurationTemplate, + projectGuid); + } + + private static string ProjectFooter() { + return GetProjectFooterTemplate(); + } + + + private string ProjectGuid(string name) { + return m_GUIDGenerator.ProjectGuid(m_ProjectName + name); + } + + public ProjectGenerationFlag ProjectGenerationFlag => ProjectGenerationFlag.Local | ProjectGenerationFlag.Embedded; + + public string GetAssemblyNameFromScriptPath(string path) { + return CompilationPipeline.GetAssemblyNameFromScriptPath(path); + } + + public IEnumerable GetAssemblies(Func shouldFileBePartOfSolution) { + return m_AllEditorAssemblies.Where(a => a.sourceFiles.Any(shouldFileBePartOfSolution)); + } + + private Task BuildEditorAssemblies() { + var assemblies = CompilationPipeline.GetAssemblies(AssembliesType.Editor); + return Task.Run(() => { + var result = new Assembly[assemblies.Length]; + for (var i = 0; i < assemblies.Length; i++) { + var assembly = assemblies[i]; + var outputPath = $@"Temp\Bin\Debug\{assembly.name}\"; + result[i] = new Assembly(assembly.name, outputPath, assembly.sourceFiles, + assembly.defines, + assembly.assemblyReferences, assembly.compiledAssemblyReferences, + assembly.flags, assembly.compilerOptions +#if UNITY_2020_2_OR_NEWER + , assembly.rootNamespace +#endif + ); + } + + m_AllEditorAssemblies = result; + }); + } + + public string GetProjectName(string name, string[] defines) { + if (!ProjectGenerationFlag.HasFlag(ProjectGenerationFlag.PlayerAssemblies)) + return name; + return !defines.Contains("UNITY_EDITOR") ? name + ".Player" : name; + } + + private static string ResolvePotentialParentPackageAssetPath(string assetPath) { + const string packagesPrefix = "packages/"; + if (!assetPath.StartsWith(packagesPrefix, StringComparison.OrdinalIgnoreCase)) { + return null; + } + + var followupSeparator = assetPath.IndexOf('/', packagesPrefix.Length); + if (followupSeparator == -1) { + return assetPath.ToLowerInvariant(); + } + + return assetPath.Substring(0, followupSeparator).ToLowerInvariant(); + } + + public UnityEditor.PackageManager.PackageInfo FindForAssetPath(string assetPath) { + var parentPackageAssetPath = ResolvePotentialParentPackageAssetPath(assetPath); + if (parentPackageAssetPath == null) { + return null; + } + + PackageInfo cachedPackageInfo; + if (m_PackageInfoCache.TryGetValue(parentPackageAssetPath, out cachedPackageInfo)) { + return cachedPackageInfo; + } + + return null; + } + + async Task BuildPackageInfoCache() { +#if UNITY_2019_4_OR_NEWER + m_PackageInfoCache.Clear(); + var parentAssetPaths = new HashSet(); + await Task.Run(() => { + for (var i = 0; i < m_AllAssetPaths.Length; i++) { + if (string.IsNullOrWhiteSpace(m_AllAssetPaths[i])) { + continue; + } + + var parentPackageAssetPath = ResolvePotentialParentPackageAssetPath(m_AllAssetPaths[i]); + if (parentPackageAssetPath == null) { + continue; + } + + parentAssetPaths.Add(parentPackageAssetPath); + } + }); + foreach (var parentAssetPath in parentAssetPaths) { + var result = UnityEditor.PackageManager.PackageInfo.FindForAssetPath(parentAssetPath); + m_PackageInfoCache.Add(parentAssetPath, result); + } +#else + //keep compiler happy + await Task.CompletedTask; +#endif + } + + async Task BuildPostProcessors() { +#if UNITY_2019_1_OR_NEWER + var types = TypeCache.GetTypesDerivedFrom(); + m_PostProcessors = await Task.Run(() => { + var postProcessors = new List(types.Count); + foreach (var type in types) { + try { + var instance = (IHotReloadProjectGenerationPostProcessor)Activator.CreateInstance(type); + postProcessors.Add(instance); + } catch (MissingMethodException) { + Log.Warning("The type '{0}' was expected to have a public default constructor but it didn't", type.FullName); + } catch (TargetInvocationException ex) { + Log.Warning("Exception occurred when invoking default constructor of '{0}':\n{1}", type.FullName, ex.InnerException); + } catch (Exception ex) { + Log.Warning("Unknown exception encountered when trying to create post processor '{0}':\n{1}", type.FullName, ex); + } + } + + postProcessors.Sort((x, y) => x.CallbackOrder.CompareTo(y.CallbackOrder)); + return postProcessors.ToArray(); + }); + foreach (var postProcessor in m_PostProcessors) { + postProcessor.InitializeOnMainThread(); + } +#else + m_PostProcessors = new IHotReloadProjectGenerationPostProcessor[0]; + //keep compiler happy + await Task.CompletedTask; +#endif + } + + public bool IsInternalizedPackagePath(string path) { + if (string.IsNullOrWhiteSpace(path)) { + return false; + } + + var packageInfo = FindForAssetPath(path); + if (packageInfo == null) { + return false; + } + + var packageSource = packageInfo.source; + switch (packageSource) { + case PackageSource.Embedded: + case PackageSource.Local: + return false; + default: + return true; + } + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGeneration.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGeneration.cs.meta new file mode 100644 index 0000000..49e11ae --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGeneration.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: c7b221ce3667aeb4ea915b8e2eca7213 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGeneration.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenerationFlag.cs b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenerationFlag.cs new file mode 100644 index 0000000..ac6781f --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenerationFlag.cs @@ -0,0 +1,18 @@ +using System; + +namespace SingularityGroup.HotReload.Editor.ProjectGeneration +{ + [Flags] + enum ProjectGenerationFlag + { + None = 0, + Embedded = 1, + Local = 2, + Registry = 4, + Git = 8, + BuiltIn = 16, + Unknown = 32, + PlayerAssemblies = 64, + LocalTarBall = 128, + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenerationFlag.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenerationFlag.cs.meta new file mode 100644 index 0000000..a8bd61d --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenerationFlag.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ea506e49c851dbd4fa394c3ed513970c +timeCreated: 1580820569 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectGenerationFlag.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectPart.cs b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectPart.cs new file mode 100644 index 0000000..4f2fa3a --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectPart.cs @@ -0,0 +1,85 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEditor.Compilation; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor.ProjectGeneration +{ + internal class ProjectPart + { + public string Name { get; } + public string OutputPath { get; } + public Assembly Assembly { get; } + public string AssetsProjectPart { get; } + public string[] SourceFiles { get; } + public string RootNamespace { get; } + public Assembly[] AssemblyReferences { get; } + public string[] CompiledAssemblyReferences { get; } + public string[] Defines { get; } + public ScriptCompilerOptions CompilerOptions { get; } + + public ProjectPart(string name, Assembly assembly, string assetsProjectPart, string fallbackRootNamespace, HashSet additionalSourceFiles) + { + Name = name; + Assembly = assembly; + AssetsProjectPart = assetsProjectPart; + OutputPath = assembly != null ? assembly.outputPath : "Temp/Bin/Debug"; + SourceFiles = assembly != null ? assembly.sourceFiles.Union(additionalSourceFiles).ToArray() : new string[0]; +#if UNITY_2020_2_OR_NEWER + RootNamespace = assembly != null ? assembly.rootNamespace : string.Empty; +#else + RootNamespace = fallbackRootNamespace; +#endif + AssemblyReferences = assembly != null ? assembly.assemblyReferences : new Assembly[0]; + CompiledAssemblyReferences = assembly!=null? assembly.compiledAssemblyReferences:new string[0]; + Defines = assembly != null ? assembly.defines : new string[0]; + CompilerOptions = assembly != null ? assembly.compilerOptions : new ScriptCompilerOptions(); + } + + public IEnumerable ParseResponseFileData(string projectDirectory) + { +#if UNITY_2019_1_OR_NEWER + if (Assembly == null) + return new ResponseFileData[0]; + + var systemReferenceDirectories = + CompilationPipeline.GetSystemAssemblyDirectories(Assembly.compilerOptions.ApiCompatibilityLevel); + + var responseFilesData = Assembly.compilerOptions.ResponseFiles.ToDictionary( + x => x, x => CompilationPipeline.ParseResponseFile( + x, + projectDirectory, + systemReferenceDirectories + )); + + var responseFilesWithErrors = responseFilesData.Where(x => x.Value.Errors.Any()) + .ToDictionary(x => x.Key, x => x.Value); + + if (responseFilesWithErrors.Any()) + { + foreach (var error in responseFilesWithErrors) + foreach (var valueError in error.Value.Errors) + { + Log.Error("{0} Parse Error : {1}", error.Key, valueError); + } + } + + return responseFilesData.Select(x => x.Value); +#else + return new ResponseFileData[0]; +#endif + } + } + +} +#if !UNITY_2019_1_OR_NEWER +namespace UnityEditor.Compilation { + internal class ResponseFileData { + public string[] Defines; + public string[] FullPathReferences; + public string[] Errors; + public string[] OtherArguments; + public bool Unsafe; + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectPart.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectPart.cs.meta new file mode 100644 index 0000000..a3f4876 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectPart.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3067d709488a2374aba4a7b421588fe9 +timeCreated: 1604050230 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/ProjectPart.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/SolutionGuidGenerator.cs b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/SolutionGuidGenerator.cs new file mode 100644 index 0000000..1417531 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/SolutionGuidGenerator.cs @@ -0,0 +1,29 @@ +using System; +using System.Security.Cryptography; +using System.Text; + +namespace SingularityGroup.HotReload.Editor.ProjectGeneration +{ + internal static class SolutionGuidGenerator + { + public static string GuidForProject(string projectName) + { + return ComputeGuidHashFor(projectName + "salt"); + } + + public static string GuidForSolution() + { + // GUID for a C# class library: http://www.codeproject.com/Reference/720512/List-of-Visual-Studio-Project-Type-GUIDs + return "FAE04EC0-301F-11D3-BF4B-00C04F79EFBC"; + } + + static string ComputeGuidHashFor(string input) + { + using (var md5 = MD5.Create()) + { + var hash = md5.ComputeHash(Encoding.Default.GetBytes(input)); + return new Guid(hash).ToString(); + } + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/SolutionGuidGenerator.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/SolutionGuidGenerator.cs.meta new file mode 100644 index 0000000..bc64799 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/SolutionGuidGenerator.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 6cced23b33c3f7541bb84997246eb6ca +timeCreated: 1580717740 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/SolutionGuidGenerator.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util.meta new file mode 100644 index 0000000..f4d773e --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 15ba2343e4c758e45a3901e7f4ad146f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/FileSystemUtil.cs b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/FileSystemUtil.cs new file mode 100644 index 0000000..c58df02 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/FileSystemUtil.cs @@ -0,0 +1,37 @@ +namespace SingularityGroup.HotReload.Editor.Util +{ + internal static class FileSystemUtil + { + + public static string FileNameWithoutExtension(string path) + { + if (string.IsNullOrEmpty(path)) + { + return ""; + } + + var indexOfDot = -1; + var indexOfSlash = 0; + for (var i = path.Length - 1; i >= 0; i--) + { + if (indexOfDot == -1 && path[i] == '.') + { + indexOfDot = i; + } + + if (path[i] == '/' || path[i] == '\\') + { + indexOfSlash = i + 1; + break; + } + } + + if (indexOfDot == -1) + { + indexOfDot = path.Length; + } + + return path.Substring(indexOfSlash, indexOfDot - indexOfSlash); + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/FileSystemUtil.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/FileSystemUtil.cs.meta new file mode 100644 index 0000000..3568492 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/FileSystemUtil.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 20b02f00e1547df45ab6ce84acc5dd0c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/FileSystemUtil.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/StringUtils.cs b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/StringUtils.cs new file mode 100644 index 0000000..486a32a --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/StringUtils.cs @@ -0,0 +1,14 @@ +using System.IO; + +namespace SingularityGroup.HotReload.Editor.Util +{ + internal static class StringUtils + { + public static string NormalizePath(this string path) + { + return path.Replace(Path.DirectorySeparatorChar == '\\' + ? '/' + : '\\', Path.DirectorySeparatorChar); + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/StringUtils.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/StringUtils.cs.meta new file mode 100644 index 0000000..18fe14b --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/StringUtils.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 5418a9e29385f45488b32d5459ec2c7a +timeCreated: 1623056718 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/ProjectGeneration/Util/StringUtils.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/RequiredSettings.meta b/Packages/com.singularitygroup.hotreload/Editor/RequiredSettings.meta new file mode 100644 index 0000000..2fd152d --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/RequiredSettings.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: bc190bdaae2340c6a6d8cb811dfefe03 +timeCreated: 1674242068 \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/RequiredSettings/RequiredSettingChecker.cs b/Packages/com.singularitygroup.hotreload/Editor/RequiredSettings/RequiredSettingChecker.cs new file mode 100644 index 0000000..6177dcf --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/RequiredSettings/RequiredSettingChecker.cs @@ -0,0 +1,270 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using SingularityGroup.HotReload.HarmonyLib; +using UnityEditor; +using UnityEditor.Compilation; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor { + using IndicationStatus = EditorIndicationState.IndicationStatus; + + // Before Unity 2021.3, value is 0 or 1. Only value of 1 is a problem. + // From Unity 2021.3 onwards, the key is "kAutoRefreshMode". + // kAutoRefreshMode options are: + // 0: disabled + // 1: enabled + // 2: enabled outside playmode + // + // On newer Unity versions, Visual Studio is also checking the kAutoRefresh setting (but it should only check kAutoRefreshMode). + // This is making hot reload unusable and so this setting needs to also get disabled. + internal static class AutoRefreshSettingChecker { + const string autoRefreshKey = "kAutoRefresh"; + #if UNITY_2021_3_OR_NEWER + const string autoRefreshModeKey = "kAutoRefreshMode"; + #endif + + const int desiredValue = 0; + + public static void Apply() { + if (HotReloadPrefs.AppliedAutoRefresh) { + return; + } + + var defaultPref = EditorPrefs.GetInt(autoRefreshKey); + HotReloadPrefs.DefaultAutoRefresh = defaultPref; + EditorPrefs.SetInt(autoRefreshKey, desiredValue); + + #if UNITY_2021_3_OR_NEWER + var defaultModePref = EditorPrefs.GetInt(autoRefreshModeKey); + HotReloadPrefs.DefaultAutoRefreshMode = defaultModePref; + EditorPrefs.SetInt(autoRefreshModeKey, desiredValue); + #endif + + HotReloadPrefs.AppliedAutoRefresh = true; + } + + public static void Check() { + if (!HotReloadPrefs.AppliedAutoRefresh) { + return; + } + + if (EditorPrefs.GetInt(autoRefreshKey) != desiredValue) { + HotReloadPrefs.DefaultAutoRefresh = -1; + } + + #if UNITY_2021_3_OR_NEWER + if (EditorPrefs.GetInt(autoRefreshModeKey) != desiredValue) { + HotReloadPrefs.DefaultAutoRefreshMode = -1; + } + #endif + } + + public static void Reset() { + if (!HotReloadPrefs.AppliedAutoRefresh) { + return; + } + + if (EditorPrefs.GetInt(autoRefreshKey) == desiredValue + && HotReloadPrefs.DefaultAutoRefresh != -1 + ) { + EditorPrefs.SetInt(autoRefreshKey, HotReloadPrefs.DefaultAutoRefresh); + } + HotReloadPrefs.DefaultAutoRefresh = -1; + + #if UNITY_2021_3_OR_NEWER + if (EditorPrefs.GetInt(autoRefreshModeKey) == desiredValue + && HotReloadPrefs.DefaultAutoRefreshMode != -1 + ) { + EditorPrefs.SetInt(autoRefreshModeKey, HotReloadPrefs.DefaultAutoRefreshMode); + } + HotReloadPrefs.DefaultAutoRefreshMode = -1; + #endif + + HotReloadPrefs.AppliedAutoRefresh = false; + } + } + + internal static class ScriptCompilationSettingChecker { + const string scriptCompilationKey = "ScriptCompilationDuringPlay"; + + const int recompileAndContinuePlaying = 0; + static int? recompileAfterFinishedPlaying = (int?)typeof(EditorWindow).Assembly.GetType("UnityEditor.ScriptChangesDuringPlayOptions")? + .GetField("RecompileAfterFinishedPlaying", BindingFlags.Static | BindingFlags.Public)? + .GetValue(null); + + public static void Apply() { + if (HotReloadPrefs.AppliedScriptCompilation) { + return; + } + + var defaultPref = EditorPrefs.GetInt(scriptCompilationKey); + HotReloadPrefs.DefaultScriptCompilation = defaultPref; + EditorPrefs.SetInt(scriptCompilationKey, GetRecommendedAutoScriptCompilationKey()); + + HotReloadPrefs.AppliedScriptCompilation = true; + } + + public static void Check() { + if (!HotReloadPrefs.AppliedScriptCompilation) { + return; + } + if (EditorPrefs.GetInt(scriptCompilationKey) != GetRecommendedAutoScriptCompilationKey()) { + HotReloadPrefs.DefaultScriptCompilation = -1; + } + } + + public static void Reset() { + if (!HotReloadPrefs.AppliedScriptCompilation) { + return; + } + if (EditorPrefs.GetInt(scriptCompilationKey) == GetRecommendedAutoScriptCompilationKey() + && HotReloadPrefs.DefaultScriptCompilation != -1 + ) { + EditorPrefs.SetInt(scriptCompilationKey, HotReloadPrefs.DefaultScriptCompilation); + } + HotReloadPrefs.DefaultScriptCompilation = -1; + + HotReloadPrefs.AppliedScriptCompilation = false; + } + + static int GetRecommendedAutoScriptCompilationKey() { + // In some projects due to an unknown reason both "RecompileAndContinuePlaying" and "StopPlayingAndRecompile" cause issues + // We were unable to identify the cause and therefore we always try to default to "RecompileAfterFinishedPlaying" + // The exact issue users are experiencing is that domain reload happens shortly after entering play mode causing nullrefs + return recompileAfterFinishedPlaying ?? recompileAndContinuePlaying; + } + } + + internal static class PlaymodeTintSettingChecker { + private static readonly Color unsupportedPlaymodeColor = new Color(1f, 0.8f, 0f, 1f); + private static readonly Color compilePlaymodeErrorColor = new Color(1f, 0.7f, 0.7f, 1f); + + public static void Apply() { + if (HotReloadPrefs.AppliedEditorTint != null || !UnitySettingsHelper.I.playmodeTintSupported) { + return; + } + var defaultPref = HotReloadPrefs.DefaultEditorTint ?? UnitySettingsHelper.I.GetCurrentPlaymodeColor(); + if (defaultPref == null) { + return; + } + HotReloadPrefs.DefaultEditorTint = defaultPref.Value; + var currentPlaymodeTint = GetModifiedPlaymodeTint() ?? defaultPref.Value; + SetPlaymodeTint(currentPlaymodeTint); + } + + public static void Check() { + if (HotReloadPrefs.AppliedEditorTint == null || !UnitySettingsHelper.I.playmodeTintSupported) { + return; + } + // if user modifies the settings manually, prevent the setting to be changed + if (HotReloadPrefs.DefaultEditorTint == null || UnitySettingsHelper.I.GetCurrentPlaymodeColor() != HotReloadPrefs.AppliedEditorTint) { + HotReloadPrefs.DefaultEditorTint = null; + return; + } + var color = GetModifiedPlaymodeTint(); + if (color != null && color != HotReloadPrefs.AppliedEditorTint) { + SetPlaymodeTint(color.Value); + } + } + + + public static void Reset() { + if (HotReloadPrefs.AppliedEditorTint == null || !UnitySettingsHelper.I.playmodeTintSupported) { + return; + } + var color = HotReloadPrefs.DefaultEditorTint; + if (color != null && UnitySettingsHelper.I.GetCurrentPlaymodeColor() == HotReloadPrefs.AppliedEditorTint) { + SetPlaymodeTint(color.Value); + } + + HotReloadPrefs.DefaultEditorTint = null; + HotReloadPrefs.AppliedEditorTint = null; + } + + + private static void SetPlaymodeTint(Color color) { + UnitySettingsHelper.I.SetPlaymodeTint(color); + HotReloadPrefs.AppliedEditorTint = color; + } + + private static Color? GetModifiedPlaymodeTint() { + switch (EditorIndicationState.CurrentIndicationStatus) { + case IndicationStatus.CompileErrors: + return compilePlaymodeErrorColor; + case IndicationStatus.Unsupported: + return unsupportedPlaymodeColor; + default: + return HotReloadPrefs.DefaultEditorTint; + } + } + } + + internal static class CompileMethodDetourer { + static bool detouredMethod; + static List reverters = new List(); + + public static void Apply() { + if (detouredMethod) { + return; + } + detouredMethod = true; + + var originAssetRefresh = typeof(AssetDatabase).GetMethod(nameof(AssetDatabase.Refresh), Type.EmptyTypes); + var targetAssetRefresh = typeof(CompileMethodDetourer).GetMethod(nameof(DetouredAssetRefresh)); + + DetourMethod(originAssetRefresh, targetAssetRefresh); + + var originAssetRefreshWithParams = typeof(AssetDatabase).GetMethod(nameof(AssetDatabase.Refresh), new[] { typeof(ImportAssetOptions) }); + var targetAssetRefreshWithParams = typeof(CompileMethodDetourer).GetMethod(nameof(DetouredAssetRefresh)); + + DetourMethod(originAssetRefreshWithParams, targetAssetRefreshWithParams); + + var originCompilation = typeof(CompilationPipeline).GetMethod(nameof(CompilationPipeline.RequestScriptCompilation), Type.EmptyTypes); + var targetCompilation = typeof(CompileMethodDetourer).GetMethod(nameof(RequestScriptCompilation)); + + DetourMethod(originCompilation, targetCompilation); + } + + static void DetourMethod(MethodBase original, MethodBase replacement) { + DetourResult result; + DetourApi.DetourMethod(original, replacement, out result); + + if (!result.success) { + Debug.LogWarning($"Detouring {original.Name} method failed. {result.exception?.GetType()} {result.exception}"); + } else { + reverters.Add(result.patchRecord); + } + } + + public static void Reset() { + if (!detouredMethod) { + return; + } + + detouredMethod = false; + + // don't revert for now + // foreach (var reverter in reverters) { + // try { + // reverter.Dispose(); + // } catch (Exception exc) { + // Debug.LogWarning($"Reverting method detour failed. {exc.GetType()} {exc}"); + // } + // } + + reverters.Clear(); + + // hack to undo changes to Editor assemblies. + // Doing this when starting hotreload cancels the start + // Exit playmode right away to prevent delayed compiling + EditorApplication.isPlaying = false; + + EditorApplication.ExecuteMenuItem("Assets/Refresh"); + EditorUtility.RequestScriptReload(); //this will undo the modifications to the assemblies + } + + public static void DetouredAssetRefresh(ImportAssetOptions options) { } + public static void RequestScriptCompilation() { } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/RequiredSettings/RequiredSettingChecker.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/RequiredSettings/RequiredSettingChecker.cs.meta new file mode 100644 index 0000000..0d682c7 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/RequiredSettings/RequiredSettingChecker.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 63765d77daad497ba3966a622a486391 +timeCreated: 1674243489 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/RequiredSettings/RequiredSettingChecker.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources.meta new file mode 100644 index 0000000..f14fddd --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 030ba7c6c9994974b321f9c38df270ad +timeCreated: 1673704008 \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_Stop.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_Stop.png new file mode 100644 index 0000000000000000000000000000000000000000..a27133ced07c649372d94826f46be15ed8562f88 GIT binary patch literal 117 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=-3?y@QpIZW?7>k44ofvPP)Tsw@I14-?iy0XB zj({-ZRBb+KpdfRAPl#)9aPX><#jk)|Zci7-kcv6U2?{{7R2UeyrQK%%3Nv`R`njxg HN@xNAa%dWD literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_Stop.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_Stop.png.meta new file mode 100644 index 0000000..5887615 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_Stop.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: bef6749cf91a43b4e8368429a0487ac9 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_Stop.png + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_play.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_play.png new file mode 100644 index 0000000000000000000000000000000000000000..429e1be8bce15d0fba8a5e746d8932ccf801aba2 GIT binary patch literal 270 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CH!3-pIl6mg|DaPU;cPGZ1Cw1z99L@rd$YKTt zZeb8+WSBKa0x0Md;1l9%4F*6Sgh2+$adpc!pnkEEAivG#E)SH1sax9WX5oX0&mKK{*jhYe=FcCj z0y1f7j*5vusYn+QYj#h`NsK4llq0*|$fUG0F$i2{X01_Y6$cu};OXk;vd$@?2>`#{ BOG*F$ literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_play.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_play.png.meta new file mode 100644 index 0000000..03215d4 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_play.png.meta @@ -0,0 +1,123 @@ +fileFormatVersion: 2 +guid: 052ef782f5237784eab3e4952a88afde +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/Icn_play.png + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_DarkMode.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_DarkMode.png new file mode 100644 index 0000000000000000000000000000000000000000..5f144aa01a4b74dd8d2b88f93a6a69866984e1ff GIT binary patch literal 3927 zcmV-d52)~oP)5{cwfR)|jl9!x&J82A8iJMfL<*tx(Y z@Dt#z-6&ur60s>G#JhnN;5~t~hm!rn$^Lxc4&YYc?8>E!L?XEq5#mdM`+&~_o0L2^ zCi~+u$KMVd2KE9cRw-a460xy__*~%Iz;}|*8V>6!;}@b@?JjA`y#_ z5I+;qy7vK>8Rsr0`}@6Pv%tTV{HFsq0|$ZEmMdl?64A&C@lHfz?l#W3A2E~P0^9)H z-@rH-l){>y`99tTnywMFe>}srNd|3BYxTcHdmA z$dO3IXApR=k-iMP3V0vz2PMx8un+j3l7161%(TzA&sN|yW=X?L08c2JhL(S#!2O1k zd`rl1n>%+2=?uq#p$hjdvlS^P*maZLR)G2BoL-gRFL#x8E5Z=c2D3<;_`h!{x$kfX z*Y~gKZ-2$EH=iuK@1?Mv=e`jUCAb@Mk06e-ID#R%Glr#6OJl z`^_-YfQNu7V1)Kc9U*;qRwyoLb)f-_A-`=SmLH_dE2N$2h?mw#zE2@-xI}qj9?o3T z$8{dvW|;PNnI$01A@B6xftQg+VQHKIe8KyEae+b|1}-P;`0BJ5?iCYA!)pzgWr*}) zQG3rCg*_LArHI8dYFh+uIdqNOptGTk zUSnygIx>tdSXw)*QmwPnOl{4w=(b7SH10J7j8qZgibDa#~cZugTVWh;Uva0}QE ze4bfdS2}gRY2&AE>$Wz}Gov+HNE;TtrW<<8vWjk^_hPtd*+^?t5#nnL=G({)9m|xq zu+lqq!1Rg+c3b8B=6+z+Wz{wcwYesYt|QPoj9zGCjiItad^vEAlJ=X-_ZMNCFOmL{ zjn>jM+bXse_y#B@>s|M=to5{hxa9Tgf@U)3nZ#DQ=A5WA-S#MV z3#%@xwo$gt#|Ufu7HP-kf6kIOY*hyHxeC48ZbF<_S+*eBRpYtHIPpHx&f$DyU9KaU zynhRvZ-s5HH%-FkmGe|;LT;H+bu>#Y<|r=2O>DvHb_ZtF~JRezPFUzZeUu!=Lx(0tq7+U8%u~MDW`=eSzoieiPWj~9@}K?`)Xd`jbHu|y5oo(r*mt@O}YuO z3M>!O{;+=&5vGt3|4zA(o4w?w8!mcjPXK@PzMqB!ii8&1n*u(j++)3&!#1g1-0cV= z?6cUh#&tDIH8#SKlU1j#J;snWa`Eq$DeVh=w@l$q99#|38FQK=Zvn*YJrfDwxDa?J zYaLY1G=7kDHA~0cq;b$+P4>Rf9->`i-Gx3;;x1(PsxDZOR1KulSwedEJTuxF_UH!# zz_ZbX^;k$>LGp%}+;q(%6ur(I`DXQel79+&7|m~MEAXQ%Wv(^FT8E=GslyF(F$la3 zF@+BTPex+qXpiSVVZU?v!;cer(WC4sHz^Y!`*WbST3-1AOxo$s-Z$C=8U%a#rA|~-XvY4J@3-Dd!y?P&_-R}fmh;#yV#>L$hb=){Jr|tsmn5KJXbw6-| zT*ec;Od9|0W5vwpy%JgJ-HM%`L(1KDFDJy0BkOEsc`5J}L_5DRId&8=hxZ_H(vHoD z;BE)5NRFL|nAC@XOOPpudyseVE0Oo_$1DG&^`nXOw(enBrv1TRMk;m((z$IUN0wz) zyLbPMz%)|#JCL^UJ6$)P>pIs_!rI#!e#+DKtLVWW+L&`5&E%Ssq`z%Vhdbc?E8_L! z2WQMD7Yt46KZ*7wcD5tq#-|zAn?cs^ibNt6@guf=p6o4?WE-+B^(R>y?d1g6EmeCX zwg7()`B%kAB+>!CAU+2C9(hl_6nzPurvRTog!$dx@iP#I*g@=-E9a5;>kk1BR4H^M z5=rre`1`=ik%jVZN0yo0i@p?X0~vz41^6@~)K?kz`WfPdzJe&ckx19@h4={Vp5~*- zIPlrX-?M1E1BtYHs*?T)a1FAs-lCEx5{Xo#$SkH7Vm50YJ&PL)a-|J`=i^Z(Iv-|h&`~Iy|D)${F?oTxG;pB2T)M_?FJ^YimjQ%VP6U|;}cWo5LJULuj8 zwY4?u;7I@&A0LmUxKZbMNCO%lA7|Wj(Q37jN~K{3PrBXi03{Z!rB_Kw$-b3RsNhN9 zKMr@U;7lo{r>A3ebrrX6-NM4cLQr`^LIR#Xed;?#!QWzz2V9$- zokd4S2d#z17o(%2i~(}t;_-M`1NQjD<#OShZ@!@|^QJJwJKf#g2R`y9NTn%Omf63Xtuwv8QXw}t z7whZmSX^Ah_3PKMzP|3O<4t0|csv*z8^hJBSL0eCc`+Caj3E%Oz4jXCndp&Xx7%^`>Q#)5jfHJB z+3j|8c6J6SB(|JKwn%YcHzbA$rW02q#bU9by}g|`cL1l3?wy?-%*@Q-<(FR$xSo}j zg$oxhK&4Wludfd_n+;E%JVASVJF2Uzk(rr^2M-FR{nFFZgOQPu109FUwA6As zogsHmT`m`63QIvj!M?%+;_WzGPJhh=*nKO83U>7F&e8482n2$FH-9Kw>eRmOUteE`(P+fC z-+miq$p{1jm&A=y@={PxfV#Rm)}Qv?%h=c$`uqD?lQjth!t+7gDJ3uE<>k<7wMb1( zWvpYhTG8L%kENw04kaTH2(ct?l@hRg(%~m6e6tw{PS2?c02dL?94i#B-sP2n50(heQCs@+|~`Kp;HBoe1DA-%=0=1i~}^ zl?dSPd`m$f5D3rsdy+^b`U${c0B8A@hCm?vq4|FRA0<7@t~UUf1aKTc76AIgdILyv0{933{tbsv>5U6;JWT)q002ovPDHLkV1f#2is%3U literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_DarkMode.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_DarkMode.png.meta new file mode 100644 index 0000000..4412c9f --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_DarkMode.png.meta @@ -0,0 +1,95 @@ +fileFormatVersion: 2 +guid: 0c501457e83420242a3ac14642818be3 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_DarkMode.png + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_LightMode.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_LightMode.png new file mode 100644 index 0000000000000000000000000000000000000000..bfaeb4a8ee1e467eb1c2a10b421fe7e34c97b648 GIT binary patch literal 3879 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 literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_LightMode.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_LightMode.png.meta new file mode 100644 index 0000000..4c019c7 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_LightMode.png.meta @@ -0,0 +1,95 @@ +fileFormatVersion: 2 +guid: 4a83d4a4d357e18408c025ef0737ab39 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/Logo_HotReload_LightMode.png + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/alert_info.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/alert_info.png new file mode 100644 index 0000000000000000000000000000000000000000..f17c65b1cc99a9417302748fc473472d6c506b97 GIT binary patch literal 862 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 literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/applied_patch.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/applied_patch.png.meta new file mode 100644 index 0000000..7438371 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/applied_patch.png.meta @@ -0,0 +1,134 @@ +fileFormatVersion: 2 +guid: 3e8fc7297345815e0a9416a6b0d4cd68 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/applied_patch.png + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/blue.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/blue.png new file mode 100644 index 0000000000000000000000000000000000000000..a16c26e1872319cf43d75a5865b9587523ba10a5 GIT binary patch literal 6101 zcmeHKc{r5a`=7CAmx@HjAnTaTHj}Xvc}E&VQq1xUW0@HW_u%w zWNA|&g_4w{l&!qc8})rg`}O<&({=s6|21Ev;4hcYpMgNc_VPWvc_eZqjLl)u86g0Sx19~ZfG7qX0*QKf-)qZ} z=epAKqsyX2H06_qle}67{ZpFsDuU~`-P>C27rbtzB+6;Mo_53Z-6!`J;*;yNlyENk zdTMo)eeuiGaPLcAze=ggdtJzt{5;wII5ZZutTSQ3tNY?7mDyUEh@zL%nFot=75~{) z*vj3#z3-(3F3bMGwguo+{u{OGso#t)343jO_*5SwV!9S zM9$H*_WelRyLprXbF{NJttf|3uRh6$&Rx6u466y(&{2Y|>CEyUC z$QG7p4qxkopKlmi5fvV1FjJ(qJn~(e;!w8bzZ3U2SZ#W=BQEK1LeT-)jYSn=+BE&1 zJy~*HOe;O%menFj7eu3_d1-CuskgcY@I*Fe)_eWxUF5(V)TdFOpw_ltb4th|M=a~~^N&pp$qHvBL7UAjre~BQ4w)7v4D7yodn77x z)q)=9&WVrm7Xt>i6+A%5{2kwS$QC=MAipz9y-+LY#>A=c$u*XtpINJJ|J!XC&VJCP z5`%LTtuD^p65+{b{bxO>QUEiXp!^MTqQ-DidiXK{EBgP-`d-% zAx~FuoTbFKBx@j7jJSm(&h7zs&hWwBys6{)cbUh1BGF@JLlIoAl;6vQ9>q*O&vsW}E2x3qn5^^GUJw@Ge^@JRc#CIk#yO?j`^L(BOBH4*kZ)nhL+kbD*mABptzmgV^r;l ziG#)JwRi9p`R@ycNEJ-Se~1?ix%|CCBlrtpi5{r)u3H)A7J+hu})iDhIpx zT=yNb|K56V`M9oxf9rm~uKjZEYR==Aj%SjNe@M=(S7P$HpYZ#E;-GU@2nij%^=Pex z+w)0I+g_}@Msy61Zx!)V{ImwOySKhtF}$tRI#H}}u(?su%|WQ};?mR+omONylbSb^ zzJ0(&D;{N_*B@jyhKh$_Fc?W ztQ$ADGncVq#FiD3^t@8L;d(@KMI9S|3$sf*u;uABTC~jLnTRIO`C9%eB~7i)O4@6l zz2>SSb>*UNmjaGHLW%c}*3~syl05+0(7qm|HcC z>~-0?qyH18B|>NR2(~>3nZsQBasM%u3)hOou>5to&pU=+8y#rhxnrg(G{E_xecFt+ zh5z-!)3$au=uZ-vSJ)>~2b8S1=faLuCXJ|XniO3@utaBZ6R^X;2( z`&cdp3HDCCy^5AOo_e_ne@A(?l$$xetABJZE_Lh3bpGYJ&waW>$II$=L+kU^TVE#^ z-G@M+@eDgVH)lJ$Z|@`UEtIqKFu|$CTD8q@ONpnC$T+MpwE(|aetFnY{T0o&41=06 zf6glq(Hcma+Q(P%vtD3K<&6IHK{Wj+=hxPM*q(Ft?<}je8lkeXF_m!Oe8Z)+o&ArR0(=%0AfyYN>^;Mk^WeronE`GPyorC|sjN^V zGL1z6jG{u>;06K$v9O9_lc~V~4@Ln37)%0uvY`nMW6%h2FB2k)$hHFl8BTl-;LdmT zpz?#MI2zo_Qqm#{4-$j|JTfdQG=#~;M-kwQym;_l(2Rt`79qS~0^FPE2D4*v0GP3n zu@MU45XFeVz%33 z5eV*fCXXD2U~)AD6kj;(0WOupVDlI(CQQIdrm(_!1UMY*hkc7Lluaalr)P4%ssQSN zj3Tp1()X#0g`+T=)YQUJ-~eyk_2#B;T$U95CJfGnm<#}sNe0`;hd1g zbZAs05CVjPP%h{d{foAsQ%u2-(B=rT35td=#hB2{sb6&Bi0y)!|629#K-ib3FOwjIvDgKJ zEfy}GO#R}7OO60&i;h6MFJ06?GBW@GXZY8W`qs|)FT+JcQR!HKf=1Bj6fDA+ZbC*- zOiWD>Xd0FZ;3($CCK&9m>|7R|7fI#-HUVI!U^ZY0EoKAL{VJy3ulUG7K%f)~gGHcl z2n@~xgTkY6c$66&`88RjU`~I_)&lu|^srb2{Im#wc3;}S#RXieklz=puX+h2{2zY4 zj>G@Z14#YH$#3cVN3K6|{gwj11^!cAf8_ct1%3%3TFs=dS>{}->7pH3?HGE?}$B?skDg9YlB6CczS*b#N2wkP_(!D zvM`+9cGT9AfSIV>d7`^~`7T4E^^^J0!BOPC;#{9o%@&dEQ%~E)8yx}LOYZNwCO#b= z*)dnQDf8B=yTIZ4iSfDmA{EkvT*8@F?SnaPO^$Z;2t#MBS6#jP@nOCV{mBadvREKWFP7`yYcN BpM3xT literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/blue.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/blue.png.meta new file mode 100644 index 0000000..3d55d91 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/blue.png.meta @@ -0,0 +1,99 @@ +fileFormatVersion: 2 +guid: 8909f5f9b1bbe3a4e99335241d585b33 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + applyGammaDecoding: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/blue.png + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/close.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/close.png new file mode 100644 index 0000000000000000000000000000000000000000..fc5f16ccc838f840806f37e2f2018dafbb0907e0 GIT binary patch literal 252 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 M7S9SCn7U}?UuBxaS^xk5 literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/events.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/events.png.meta new file mode 100644 index 0000000..12da522 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/events.png.meta @@ -0,0 +1,134 @@ +fileFormatVersion: 2 +guid: b2c1a1b6177ddd425ba5b4879dd5903a +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/events.png + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/foldout_closed.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/foldout_closed.png new file mode 100644 index 0000000000000000000000000000000000000000..ad482a11ed024745a288a56af2c9bcb16cdc44a0 GIT binary patch literal 4865 zcmeHKc~BEs8t;Tt5JVT1akFEa;3{g8?$AIIi3bTv!~g=0z@pIU?m#c(AO{JKiUS@v zcwm93$f9hGC`?Tl(egmWYY@w8ol$n2!Gi)kRvqzT)d6*1heNELsx7N_{-aYb?|bk4 z-tT?y_rCWfy)Gtdu9wF+4+w(1lo5(pP{T~|aRuMJ2UUkab%jb$YLv<;kUMAqB+D6M zF&I!-gKRd-3338`Yd{$VYzD)WaV!@{y&l+q?6XUNJ-H9V1~$rKLtdaR2So&IUr^V8 zLa*&zs{z=|xG0E=PnujeXNF|bI0B7#5+%tu6lQWTLQ7>tUfK|xYP0?@2o?>%Ce zw(l$Y9DClZEJiha> z?C~vD*zt?l*Hc~7>$O#*ve4qiqn&EqPj6Z>JT+NUicV50&772%Po8!O&hMA*>^8lq zmK3sPY!;s#e)Z3{;EJCPcwO%P4*#rVVVkLKSg|0Y=bWXnJ>;^>R+oxTg0EKRv?2Qv z(uv(062HGzuxA~wrYf$X=xM^8V~vSZ7bQNg=viG^-cWbZQpSr&9T`~!hs_>6u>|MM z`#S2&)xN(pO@Fm^@d<@sb@D{SIBgf(tL~xOyZqZXlU`RVg#o^9^(mZtgs=M}_J*?d zW#gwuwL3qV>9lC+g_LTi{X4(WND-+C*%`l!<_l``(kZN5T+7_`yx z3FZXVd?}&V3UE@drUW*vfjKZJbf(RK6B(2lR#R!TPR8v#dV&knq>Q^LNQI~jaw?sU zSZbu=mPW-BOEU-w$(=dFBh)4Z1X{|B!!~WE&Lp+TxDH+^u$gWl7j{6*88U7Hh$Fe) zNWqu@6CnI>8=WoU&hUUkjig2ztC-VA0a`L{y4h@y3WZjyRbUMi=#6PYR3ecG5s^?N z;sXTVl%q4_HonfpV<>t#6qJcD(griF*TD=YuGU-3GA2v5eXPDx143sdIGU+Wwf(p;3bY|XQ3X&L@Z?G6M9or!Z zA(csK0n`LmML$@Qxp4zC7zxs7t-&!1i2VW5Ol#hY^?`59h+{j09Rbq^ct1e*@7)0g zD3wa8&=VHMJ*7g%W!9IHdV(gU4im#f;t-Jr>=i>r0xD66I7lK!Lio4@C;6Bt1m%kfNf4jXkQ6FLF;py4JE%xPI!ABR;@~)G zEuKaR4Z1YP03*0`c8pTS6$yG*b@aq!;${t)Amh%bbr#!uXgsZ@;>t$c4gzWZ0(}@b~w8`p)9_ zTmpuN7WpWBhvXWP>!TF-DDY5p4axOU3ValJD7yY{a(TReouYK$Uyv2NEJdleG=di` zS9RoE1=I{Jf)@GL90G6D&@e+pq6vaL|G*R$R95Z>I^E1lRk+(d4`+`Mk6iZYA_!tv zC>68g({KH5eb6)M(!}R-x}O6>{UZ&_llNb-_~)b|J>~2 z?VVR#+#o`iurj(Y1`A#t3Y?<1*#~#)g@9rLZ z6gpC}o;T&vh`Mk6Po8EUJ~6^xo8R&5Og;zIPMXzBEUd^#owc!GGFz`dwLkF5>(}E) zuH;M}b863|pBDVJXvdD$n}6ESYKgp=w6?ln%e>YLp0*XluG;$6jOkIt#wRRf+d|E{`be^&al?jC2o?&KM{ zan{~nW1n)H3R+r>g1Gy+xxBT?!()PP-2U6E zH^)P_9c##IYBCCPmtoSaJElPkvmX4zT$hq!+*jCsAa@+mrTcDD?St(n7B{$PN)t8P dsjA86NAPy*j=%OIwu0b=l;Keddsu4Te*n^O&$0jj literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/foldout_closed.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/foldout_closed.png.meta new file mode 100644 index 0000000..39e557c --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/foldout_closed.png.meta @@ -0,0 +1,134 @@ +fileFormatVersion: 2 +guid: ae8d6e8a046a7ba47937cf15819407e3 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/foldout_closed.png + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/foldout_open.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/foldout_open.png new file mode 100644 index 0000000000000000000000000000000000000000..928bbfaa96eb5daa34d2610bd4bc69200b2cdf88 GIT binary patch literal 4861 zcmeHKdsGuw8lQkXL}(FFL0O0aE03LICYgjJ5-AW$q68?R0*b<9GJ%o2$O958t3^?K zph8_A92Tux#7B!&yNZSn~S#phB9tnAZ2cXFq z2Qg?J&>5p-7lte33g%XU?gwOAhwjrDZq9K%kf#sIn}HlYsN(`;l;HyTfUypAE|C4f zxDRw{^}t@oflN0~=SK!48hL0;k}J}fTsDfZc^I%qxI8h6h!Kp5a>abUn9Bp&jGZGM z(MXYbXbnJFNhKtt$rBQoMw3B9X-NpO)sN4dsO=Pi}1Aw_@GlrdOKEnf(mM9mo6MvS$9miTJqk;jQM7 z-g}aJHyQDteu3?eaxZAn?e;4|-(57>^?>I;HZJzg%h7B>XUXN3pxnpz`yR5-92W0* zYJRX+w2m>STKKv5<=1X9>;Lt!&-tfq`25XpIn0jn@3LjjI;`zo(dXT^y442?F7LHF zkb_wTL_<~f#V;!x*M#odtvtS|FY9(|dv;W2_D}WCD&DI*e&`EpZKy17;=E1F__)b4 zH{+pm_ou9_@V|R%cK_-{C#39(oSBH}k2_s_4t?+Od`0Ki3x3`!=S28>wB!c$5dNM& zxK!14Ee)BS(lzdWtZQcJ+1$OZhj+Yxb-{ve&u=^3*-Z;;4|(L=gA!6#Y0oruH%4^- z^!KNMWy&c5t#0Loiw)<>>gGVyok+WDP>>7Zc4l$!{d@I~ZvG;<{6nut9%MdNEQqH7jDU`6X zKprI+Oe7OyV{8OYv{A)e)*LTpj7hB#r%T@$gaA(xR)NK06mvKwB_-?<9@}8b=b$2y zh=XuBTrLbWV6$Cs!ELbK97;nBU`RVT>l?25jyC4J+DEochzDV@=21;~Cu(?V%R$a=vydc}F1(T)J~VcZwA zhtBR)23iV*SZW}ww0m-?ghlT!RvQRPEq01LLL?9hc?8T?qbeBV@iefAk4D3UiWFc3 ziQ*y@8wDlTn=QDWAZaK7&ZYnkiV8&phO1#5{@xKG0=3~EYa|6khlfiu4$V`)kqUf7qrx-<4s!`L z24f^I8Ww7BAuJSfLF9xy6xR&IZy4Qd&{#@v6B(Becm!O5^mP70F~gmKig?kNk^+*B z0w4@V5g5US2;&bD#u+>?hprhzCywF#ijx?p!l)tx>;~pQ@dCAwGh7S@IRpOwo^3D| zzvmWA=GZ1L#qSthV|2X~123gKmR)0Xy%Ym4r975h|2Mk4MqZ~#J@^+?0$!H-zN`oD zV350NUXm303d)2s!}c8oZ`9Cuqb%DDK@%p?odMO>1%OEpi(HZD(c?AFD?0FL>xvWz za;cR|<1z|v-raV3?t|C;E0k;4Qh&F}Z5595vwUm*_Nsq}a^=dHb^4q&#IBvf8GG(t zTdSNM1*f3T9gimJ(|$==IKJE}2>E)`+&ee+`YDv@pgsA-FPmcwI#m?3s4@54Iq5U@ z0(tz>WvMk`@*3fzvd+h4&z>*ilh>Q~1YWrq7c`Ca=+Tueg^|TwB_(Zlb&l^M`X0X3 z!pQmX!?u6pjtTO86{mI zA#HyRb##UHedFG+$=co$dfQ&#W0y&8*mPCREoYQJ9&YzMwzQO`*ZNMKQkkD0?>R#n z)T4o>*3F6Oe)Z6a)TQ?7>Gm7F{o91I&sOc3Z(n|AYxTqO@U^?bFJYH4#pR`McPSbh zS6}N))f%=cy*fVF9_Y9ha4=(6)z!`iVdV1NfvfNU_w-lzB7R~{Zcjsvgc}yndNj#9 z!EvwYgJj;cPZ96W5bx^ovNy3LtoJ&Tk6Y7**

6u%Rw1lj%E!zQ4`sm&nhg)jmUy!qBFaovO? zM}C}Uz7$)DMP5ImyFR6Su50I{Cr|npk`3t@-R52f=cq%;3*<=I5fqS?>(X9%iA3HRK}+PQem z{NAl;FD2iu``XC;{BT=&6Mt&$6vI}Zt|Fatr%mTXJbl^McRWDg=STUFB|#oda=()G zVhY~e)}8ey^n>lGrdiIduBnYPW+ixtZCT41#(c=zzW&j($v-M*KUi=e@bGD->%8o2 ueRsreW%9ob;e9Js{k3!NuFk*jE13TqtGqo@a%v^e*$kepelF{r5}E*Ymy#O* literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/green.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/green.png.meta new file mode 100644 index 0000000..b06bbef --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/green.png.meta @@ -0,0 +1,131 @@ +fileFormatVersion: 2 +guid: 45ccf4d7106fc972cb676d15f014f50c +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 109.07 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/green.png + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/grey.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/grey.png new file mode 100644 index 0000000000000000000000000000000000000000..786e5306d16c8f65b2ec254c97ddf3b424ede71d GIT binary patch literal 493 zcmVkdg0005BNklP5cA=4`B9R;6Gr(Lm$jfN z+5lt!FsMlb$*d?Puw4P+^w#BeFVzt!L+oo4LomgyL^oy>`;Eo@zQtkmBvMM(_cQ=D zk46k3h#H$O!&9GPKKuv>rz54KyA7K;D#MUCjXgaV=&jXre!}|x)j=aXW=l2ii}m#5 zF-#mXh@bC9_B4i;myNtzYjo%B=4*^+DHMMyHhE5 zV}^?k2n^DVDP^ZB08ETxGcys;lH(JhnK6p9zxd4$te#JKE`)UQ?$p$n^~wF=>&46U jzgpV=o9b_EeH8#7{Ug0^-H&2$00000NkvXXu0mjfQ3~CZ literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/grey.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/grey.png.meta new file mode 100644 index 0000000..726917d --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/grey.png.meta @@ -0,0 +1,131 @@ +fileFormatVersion: 2 +guid: c381173cda2dd9304b52e11e1a7537bd +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/grey.png + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_check_circle.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_check_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..7f99562cff1cd7535a5055b2855b8e30a4cc8540 GIT binary patch literal 916 zcmV;F18e+=P)Px&PDw;TRA@u(nN3m}Q4q)fE$(AZ5VLd0B6L6Bh|Jb`!u zaS?DAxB<&7giiHLVVKX?^LR5Asxmu@_woOA_v_cwL)h|%wp>5{14KOdvweu#%P|;x zAld`tF!-M^0`nY%ITpJQ_|P4>^8Dr=cy676xdBE4gguoohQJI!G{8acPBkZEkUhZo zyaA$b0QNT#0ALDG2VU>iW}V^ylk*dRz5+P0*)V6$5a26#{b7-HivdiUZ2;ekY*2VC z@g)xWH`;l6fJsw?3qTc57oLBi*+>WQ+Fh(15|7IxL%_t@&T%d zd6S75Ur_h2vxa2@gxTiaw0<@J^J!Lg$^mGKc-N`YmUjrxKTVsQ4iH{aKWuj^Y2F1q zzZ+jW9bnS@<=}>O%`t`Nzc&L^Zhg7}_!7VyBQf(Q)cb?=aY+x1Th}1|Y+TIEfG{ki zirraA31NWXTX_A*Wts%2E_|Xft$~m#w(h^p_CUDEqZ{Mqu97^EvNtX6jV1ZAcC`LJ z5%oYd7ni+wu}SP=ivhGc086P{*0Y)TKowoV>vdKFHvxD8qYHw()My?D;>81WgL+T0 zR)`bXdE6X;aHdf6gx|Fj9Chc=g`FGmp|A&d{%eI`1MpY;iZma>rFa9tL~#Zrm2vGf z(OF1`a4p^tLK=WD6KEjZi#HzPB4tEA1QLapHqV<5U~U>MdXZ&8#6`FgFYD%BWHMmV zoC0`fGQ{iuCJ2|}ff+nM(uZTxa@r=0R`Ilg2(Cy) zVWy7LU|=GAk~i_|#boJ)U`3Knv^04)?U_dLQmmg15PCsgFpi5EskG6N@?m|K?5;%7 zlv;&YaDNYUl&j4;0 z6>b+oX-a~cXW0g^95`(iI|I`ISPtW@!lK5|A7ahQ0nE!jXeay}wfZb2Px%LP$kL5+w>psl}gwmX@sw{#29hd?3P2`#a*mmf3m7NleNnH>o0FHqHUBM;NodAP6GIRl?X?$R} z=p0G{p#va|w6RX7Bmg6(hbqZq7XPJa9H{u>07$8n#^bu$m|~FXB#rSkiZKqrmPs`* zwaSoQS(#J-q{H4BDk(R4TU5tZ0ayoS%WaXN{0(3(%%cJzbBYXOdHTer799XGRi5R^ z@*-RM!c%Ni1m=O&oB~(?){1S50+2=5)%Dk(?i>Z+3h308m@?fp(3KQ{w;VJtm0zT( z)g=M=0xDDXtggE6ux(K(-mO@)P?O{$7ct1{i zf1!~mWVww9rPoeQN0@a0cCe7%%&=@cB^vvp@;FKo9_6(G! i)gkvk0Ef=B67>VwUt%#q^N9ig0000?P)Px%p-DtRRA@u(nLCdYF%ZZ9UMU@~4#cB_J3$LA@C`PzMH))(D1Z(mXn2T60}>^d zf=5Y{B9r|FKzp_72B0AUy&41(Y;fXhVM#F*Dy>9A*WGqG)W4 zNe*Le`o_$BEEga>RlaGH=QCf7G3ORfvD+d*M7IDuXd?iC+syoM-ZvXSlSc;WJZ-Da zHh}j4PD(X5B>#b#Pvu46R||?))_hEu`9L1P9{@o^Gb%M>nE5~7Y)i;{0PmNO_nX-J zH0pOD^ZqE2!#97GeDsh;-w97Jso97?Hc%le?UsEQ&mQ_$=64o#=iI~6{5^tIOavQlN~ zO`N5`+ebbd(A+cY82~E)4g=Vm?z1fb-vK0rakDkgtR*u|CBqBtfl4e_q+}PMqKPc5 Z<}W1b1V9r#p4$Kb002ovPDHLkV1j>FMLYli literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_circle_gray.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_circle_gray.png.meta new file mode 100644 index 0000000..1364c42 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_circle_gray.png.meta @@ -0,0 +1,154 @@ +fileFormatVersion: 2 +guid: 809ef8ee76ad04e198cc8ba61c994f83 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/icon_circle_gray.png + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_loading_star_light_mode_96.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_loading_star_light_mode_96.png new file mode 100644 index 0000000000000000000000000000000000000000..317ba373be7912a0a93e86985d5b6b13d933d551 GIT binary patch literal 822 zcmV-61Ihe}P)z@;j|==^1poj532;bRa{vGf6951U69E94oEQKA0?SE6K~z{r?Uy}k zB0(6(-Blx^U?C)U+}46ct`7=U=|fyeDK-{CB*g{t2^6o8AQk};%Md-%Um=EQ`s6F@ zk-{bjlHf~r@AZLIs@SO>+9>4q9{C- zD;UFu9CLGXbBMV}9R6m*wjk{A9LlLF!=XeXaXlZ^V|og}U@*A$`~6xZ$eRiq zdKWUf0_FIjopNAl0DuwjoJ5Hx-JAEW1iqED&@BNS8?~lOM6K7c1Yc|% z%Ve}5o6RDzRJ>mAUcFxb%erkTl}g{~>b|2qaB_NjYMa1pPeCr1JD`b>)dYIc+_CO= zfpV$@+I+2YxorEMurvV5$K!FEL_`Vc_(UC80eDUo?iY@t*S0glbO{i4cuu04&wV~$ z>f+);m(|YC&-W=ZzaUfA{aGj!bjKA+p`6CxB+{~Iwj72CWHK3%lxv=wDF@Hb&mnp} z?V>qlv= zR(m9+X%b~B=|-brxq}zCCU`3^gRs+5rK!mDT{@r7+doR7G!O^~&1Tc^fON{)*;$MJ zX9z3p0f0y_(UL{J0B>b0mOWo!YQQ?#umLXDKPmJ=|34R&L;wH)07*qoM6N<$f*gKq AKL7v# literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_loading_star_light_mode_96.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_loading_star_light_mode_96.png.meta new file mode 100644 index 0000000..aae6e2a --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_loading_star_light_mode_96.png.meta @@ -0,0 +1,131 @@ +fileFormatVersion: 2 +guid: 725116e63c640c8408ca1c393191bc99 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 109.07 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 1 + swizzle: 50462976 + cookieLightType: 1 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/icon_loading_star_light_mode_96.png + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_warning_circle.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_warning_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..9c4d478e633e3ec3907696c2f47865e9eab73a53 GIT binary patch literal 941 zcmV;e15*5nP)Px&XGugsRA@u(S=~|FKoI^`%n;dfCZ>YG6Cy8x3V;f5I)DlS6#x~)R1l~jrUFa_ z_$ij3fC}PF5Ehok!NV0xTx|0Xbpx3+I+i$=ijMNrr&-2snT5cjke=Y)8q}ZzC?Z?T+0+VaHhVUtk0p`Bdds$0lK=kwEkM2~xUm5@aY^?0me!8>l7GgkW z;VR`001)XpSlB`UT-!VYaQd1V0B~+Op0IQLEgb+Rx~O#r$MFERDlIS{yk-UnxUD+g z>@gK)VCexY!5v5sA&me4h`!|^5RRe%sSW^yx|B=&f6}1T#Ob&{X*yEVsLn!G7Le3J zCJuFNQ_%jgECUqvK3a|!3d7QxIg##0z_{S70B0(1fdJ_2W=_*n^7qg**QaBVU)%Ni zs^iHAHO#)T?_u{cI!d!Zok*OXEVja38~o$rI9mp5q|k;%YxgRVDnK>%}UGpZ+Z zHagBq8oN|!AVk+zchJb%F9l#6PMW3_Sq4qkGd(XILZOSjfFB%LF<&TzqS?vtM@>zw z!A$kE^(gfhQxM3c*omHBwefrOfy2Cp7Yd=c_!U5is6pa4t2~%TCTbC=9UT=)-jN`4 zc}0@6o1iQJo)xgDKV1rL&OgL1oFm0VvC}vU>jk5goEXI2rXB P00000NkvXXu0mjfQz@q> literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_warning_circle.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_warning_circle.png.meta new file mode 100644 index 0000000..f6b159e --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/icon_warning_circle.png.meta @@ -0,0 +1,95 @@ +fileFormatVersion: 2 +guid: 0f8d84c5136cc4c119f14ee9797fb05f +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 9 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/icon_warning_circle.png + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/infos.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/infos.png new file mode 100644 index 0000000000000000000000000000000000000000..5a8ed9b223762c380d713baa6e2fe63e9c14fb0c GIT binary patch literal 5947 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 literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/logo.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/logo.png.meta new file mode 100644 index 0000000..87dc0eb --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/logo.png.meta @@ -0,0 +1,134 @@ +fileFormatVersion: 2 +guid: 0779c2964d0997956acf3c29e4e38a5c +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/logo.png + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/red.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/red.png new file mode 100644 index 0000000000000000000000000000000000000000..44c2c9bf7ccc4a185cdbfaed8cadb5cad95f11d8 GIT binary patch literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyegQrqu0Z;Ur~M;Or^jygK=i@g z=dqi^V|Rzw0iMr1T^_sJe+c$@?B)E#10?d;)$Wn2{kO=#Kk?!JlOn%G2K`Tt{+|@} zJ1+EZLd2i=uu_ZL#y}GVN`m}?8AP)Wz7SaW@4NTk-+6z29IE_1OAjcw%G1R$#NzbX zNjHU>6?j}lZ?Z(HFn#-9za{wAMy`@e+rRC5wn4@6@P~NGlP-Ig3rp@!J=Pk->~Ler zgEecqpjbspLC oFWp+V#kKnTg?qIZ{*~`!et1$j`zopr0N&}C&j0`b literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/red.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/red.png.meta new file mode 100644 index 0000000..ea6cc05 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/red.png.meta @@ -0,0 +1,131 @@ +fileFormatVersion: 2 +guid: b0408809d04ad6d719d1e4d66c181cc2 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/red.png + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/red_dot.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/red_dot.png new file mode 100644 index 0000000000000000000000000000000000000000..5c43f676b505b913e2eae037ddbe72af53e3b654 GIT binary patch literal 4838 zcmeHLdvH|M8NVAI30uYYBFL26eu$ z&$kfCfe%pAHW{&*I%8d8GabZTsv>|O- zNG|LTz(&FG9k6eQO?@Km>nt3bpB(Fl%R(%Tp?;~)UyV{ul5o0cXircskq|_ZK}k*| zDUo5If7|ayA~KO|tqZQf@1Ln2PqokELE{N6tVRHWqz<&~e5m5BlDq$O?wMsR0dZgH zALn_RPFBubcYI}G+2hp@ocgT(2Q8($x6JSAdN_{pH|mayukwHYY+zwdYhHeEc0u{< zqQOnR!{ytuyKmn3;_R<@qIMjZpwpT47a-;6H$ zC*A$-tjL*Py!hbP`ljvkUal`HDM70Wx2Q9;{0otHr+(BD`cYBk!a-s1sBiZCjY`Lr z!Mi@%)q8jE$9<9Tp?w9jmaTp;`C<*rTvjhX*Z%3A3!fA}GFKztX>U5#vf}!i@zOP` z!eSqJ^o1uEJeiLk*=}!tVfvAk1zlxZuJ2y-?}z*GU6uC-r`UyA)ooMH|FiAp8&_k$ zzZ`h4(q8b>OS8NGH7C35bjkA{@*i|>e_OP*Ug+F=X|R8P=aqs_f4O~@JIisgv#V+8 z?yolY-c$ea`5nv8?`@@D3r$ZgKBDzZdh3&gC> zOYir;fAL(yyEktlhl7dNetUSqRs_jgqz3AYI{$J})}l^H(L%tPipI?aLy8xt;*z`; z7-$GIs4=(W>gjV1R8`!LAmbfuR?S`s=ykV^@D2~O8?8PY&0z`o!p{Zyj zri&@J!@?Ee*c9Uq)KW3lx*c_}jyzfdptO^A5?FakT~9d{+0o*J5*BN`OEM7f$?a$~ zjJSy7$z;-*bUC#|15OHpfD;r>Q5e*~^yZi$rLdTOp9zu1@B&>ZRCUITQkDItUM z^&n>4HyT2bhwbA{iHMbsBI6(eqEJR-P(GpP! zE~grm8UP-THCR4O!o|{RpW8t>i4jS4L^8tA!0lMB#+p(i69F{}Y7NO`lVk#iwNCAK%q_OC_7B-Sn0+cpD9wAq-JgplFEwmP@XsmX!5tyq03Bw2h{su@w zWN48gGlb!{K1Epyvoa+EjOPG>!K^rp4>K&rGXfoAsgS|~dTh}DPl_ZJpa_w6i45`G zrO2}3up}!XOkfBKZfF;Y@v_2UG7mTf5E4O!_-`>qW~l7hu_+eg=E*-)x5fB>Rd!lo z)KvjjKP`h-5WLaw;VUgu7Utz~3qP41bqhT}=m{s|;&+0s3A)C`z_^qrs%wI-aWOD1 z<%#P0*66a2ycB~N{985&UwPH{noh#k<*A{{rC#JONDv9mZ+`{;Uj&&JuUMrc$oFQL z&4%nhFb4{=4WGX}`>)gT@^0hr$@Sb0MQ428(g5H4`OZ>%8BmYH zpcF77m|-dZa~bp)zA&6&SiE{314G#Czu9YlK@}tle%Zok#W028*#Ga0<_skaXBhtf zw_MH0z`z1g@MR057?bphXABGs3=A7WcQNdPnacz*oWY982`bGHTFAH$VKEB>0|UeV zT*i4T9>au~SN*^J-;}|W(H5>M^nYkFE?+Pa@+L&VB}OZBi75Vh7Ptb&$^VlgWRazV zS^m7bmVy*ep+_0TnCxNx2xehA#>lry1MUk31|FX;TmC%_o5FDH{}%>x#MoMaMDWU)X002ovPDHLkV1oH{cAo$M literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/refresh.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/refresh.png.meta new file mode 100644 index 0000000..3191f7b --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/refresh.png.meta @@ -0,0 +1,134 @@ +fileFormatVersion: 2 +guid: 75c3ce1c05b6563dfbd2ac68fbb63c79 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/refresh.png + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/report_bug.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/report_bug.png new file mode 100644 index 0000000000000000000000000000000000000000..9754cfbbe431bbe4c6dce336797ccffe7feda5d7 GIT binary patch literal 763 zcmVA#+anu}5EkTqaEb}-2?9ui_95oQYqH2AmKo6=cnxu!W;SDFI~IoYC_n^&jFKswk|hDD z-3UMqiGL1|28MC6q_UC?egLT)Cc6SR^i4$EpY%ua{!lms>ih7CBpZi2C3u`zWPou z34CXfv($Oz06n-?X=Ry05d|bNMkg6$af8D&c=G|!fn7P*nuQol%qh1t62ocgNbsAw zv8fMh4wD~bq>7r=PY=pLh}=X)ki3m^%gL9S1;4yDNbaCtl!*mBxsC{AJk>$+4$iAS z%6UMO6zhmU9HTxUbzRud!p>Ea$s||2*JG;yWVDFnCp+2UO>aAP^--i#LoNUrScOY} zUJ)Q9CuyS<3)vWWMx}Cso)$9{c%w?AKz!5v%K~I9Hf%)kgcodMoC;svb)T4IKV|@u z*(*lHS3MU75ZgIJ8dg$ir2bD1Tq-ZgW*-kBOi$52xaPv3hH{b$V0B< zd!HhGFNHDS0%i`fNDnXR;B9zylv~~<2^%qt)55DT07;~9lSVbMQhTduc?}PTxKFe4 tgw299lgF?cTkS6(4OrNUOO5m2tltmQ-w6mViemr(002ovPDHLkV1m%nPJ#dc literal 0 HcmV?d00001 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/report_bug.png.meta b/Packages/com.singularitygroup.hotreload/Editor/Resources/report_bug.png.meta new file mode 100644 index 0000000..5b22da8 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Resources/report_bug.png.meta @@ -0,0 +1,134 @@ +fileFormatVersion: 2 +guid: 77c9c0af0f612d0a0a94cf95e2235730 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + flipGreenChannel: 0 + isReadable: 1 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Resources/report_bug.png + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Resources/undetected.png b/Packages/com.singularitygroup.hotreload/Editor/Resources/undetected.png new file mode 100644 index 0000000000000000000000000000000000000000..50c857a22edd2c4ba3c13e7bb2f5a3fc5e745eb3 GIT binary patch literal 720 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

vaxVbv*9S zHq}**q`huv;E{jSJKvC|AOAy8;99E5(-&vg>9jm&-&1sFZGW@Zsg=8+XJ< zyJUUNy`KVajmqV@Q=zi5c!5?Y<p7*6OK{k1;t6s-Ak>lb+S&nzssXR4hgPH>gwHTcF*7Hq-J%cBjr%$(6*6zM{8pNrp zbK34yH5w=3gvJ*bPk+QTPO7k}`Dc!!@;>ocquK1)W|)@l#u6G-$qx?3WL`*)6o|zF z40LrsW5%wtPJZkF8=}@%d)4`P}vS zBGpAhoqd?1_^GM{*8v>s#lGt=C9l$d+!+`aAJX<4E-k>a(qNk%16|Gf(Ud^>6fU9yr)y{&4hqJh>3=-=?}@m>XR9 zdumI!$>x|JoMY;$JM1r}GN#eHAjBiD)GHcm%;lyuH@Loi(Xse=TKM38v+j}0_SfCe z+gi0Y>l#Cns5=(886Q91x!hz~H8&yqN!O$H^p%g&f+Vnq4%&LnwQ46uoH1aKkkpbF z;OmQ67*BuQ>u-E}Yhu}kjTu**s!q&Li%0Fw6}8=l?5O!(4|7ILpL~D0@Mx3g=upMl zCwVP(bu}3fc0=oLoP^?Bor;Tg!#OX%F+8V0o^{pz=9RH&C}a)NIQ*=lQ~~w&w+|1f zp4@6RJoSsu9ty>DU`CD+5=my2!(ZRKx`V)hVm<%#UACh;t*Jl9Z0_a)wOhLt9p>K zn_sbUkaceV@~QEZuO)8-BB08Ujk$lmKQedw;P=eOCE91s*t}95w#gSP@E+_Ghn;g7 hT~9R}?TRcZw>t2={Zbm)L;$KO#PamvrxxO&7x1tTUB z!g>3eE&u=ks!2paR5;7clGzf2APhwnSrkNeu>JoJ?UXuHflm6?-q#$KBxe}@D*Xq37<0ZSi+(CGXRT4k{gNjfC zLC{lw%*Q64y}LzQXn`=J0w@zZF{%LA_5h0upj{7e8USt@c;b$sPfp*r2@VPzHM}fv u-LNpQa#`B#CGFOgHfyh*+N%%R|1J;ViX&?$IjO?{0000 instance; + public static TimeSpan HeartBeatTimeout => heartBeatTimeout; + + ServerHealthCheck() { } + + ///

+ /// Whether or not the server is running and responsive + /// + public bool IsServerHealthy { get; private set; } + + void IServerHealthCheckInternal.CheckHealth() { + var fi = new FileInfo(Path.Combine(CliUtils.GetCliTempDir(), "health")); + IsServerHealthy = fi.Exists && DateTime.UtcNow - fi.LastWriteTimeUtc < heartBeatTimeout; + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/ServerHealthCheck.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/ServerHealthCheck.cs.meta new file mode 100644 index 0000000..71850cf --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/ServerHealthCheck.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 45b5951115b94f6ab79756f71777a915 +timeCreated: 1673812440 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/ServerHealthCheck.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.Editor.asmdef b/Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.Editor.asmdef new file mode 100644 index 0000000..a47a0d4 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.Editor.asmdef @@ -0,0 +1,32 @@ +{ + "name": "SingularityGroup.HotReload.Editor", + "rootNamespace": "SingularityGroup.HotReload", + "references": [ + "SingularityGroup.HotReload.Runtime.Public", + "SingularityGroup.HotReload.Runtime", + "UnityEditor.UI", + "UnityEngine.UI", + "UnityEngine.TestRunner", + "UnityEditor.TestRunner", + "VInspector" + ], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "SingularityGroup.HotReload.RuntimeDependencies.dll", + "SingularityGroup.HotReload.RuntimeDependencies2019.dll", + "SingularityGroup.HotReload.RuntimeDependencies2020.dll", + "SingularityGroup.HotReload.RuntimeDependencies2022.dll", + "SingularityGroup.HotReload.EditorDependencies.dll", + "Sirenix.OdinInspector.Editor.dll", + "Sirenix.Utilities.dll", + "Sirenix.OdinInspector.Attributes.dll" + ], + "autoReferenced": false, + "defineConstraints": [] +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.Editor.asmdef.meta b/Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.Editor.asmdef.meta new file mode 100644 index 0000000..5d7a2d5 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.Editor.asmdef.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 43aab4a50a5839e44af6c24ac5006688 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.Editor.asmdef + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.EditorDependencies.dll b/Packages/com.singularitygroup.hotreload/Editor/SingularityGroup.HotReload.EditorDependencies.dll new file mode 100644 index 0000000000000000000000000000000000000000..eb26b0c54c81e6415a4c051dc58abcaecd0d6efd GIT binary patch literal 370688 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 NJSP2 TimeSpan.FromSeconds(30); + private static TimeSpan CheckInterval => TimeSpan.FromHours(1); + + private static readonly HttpClient client = HttpClientUtils.CreateHttpClient(); + + private static string _lastRemotePackageVersion; + + public static string lastRemotePackageVersion => _lastRemotePackageVersion; + + public async void StartCheckingForNewVersion() { + if(started) { + return; + } + started = true; + + for (;;) { + try { + await PerformVersionCheck(); + if(newVersionDetected != null) { + break; + } + } catch(Exception ex) { + Log.Warning("encountered exception when checking for new Hot Reload package version:\n{0}", ex); + } + await Task.Delay(RetryInterval); + } + } + + public bool TryGetNewVersion(out SemVersion version) { + var currentVersion = SemVersion.Parse(PackageConst.Version, strict: true); + return !ReferenceEquals(version = newVersionDetected, null) && newVersionDetected > currentVersion; + } + + async Task PerformVersionCheck() { + var state = await LoadPersistedState(); + var currentVersion = SemVersion.Parse(PackageConst.Version, strict: true); + if(state != null) { + _lastRemotePackageVersion = state.lastRemotePackageVersion; + var newVersion = SemVersion.Parse(state.lastRemotePackageVersion); + if(newVersion > currentVersion) { + newVersionDetected = newVersion; + return; + } + if(DateTime.UtcNow - state.lastVersionCheck < CheckInterval) { + return; + } + } + + var response = await GetLatestPackageVersion(); + if(response.err != null) { + if(response.statusCode == 0 || response.statusCode == 404) { + // probably no internet, fail silently and retry + } else if (!warnedVersionCheckFailed) { + Log.Warning("version check failed: {0}", response.err); + warnedVersionCheckFailed = true; + } + } else { + var newVersion = response.data; + if (response.data > currentVersion) { + newVersionDetected = newVersion; + } + await Task.Run(() => PersistState(response.data)); + } + } + + void PersistState(SemVersion newVersion) { + // ReSharper disable once AssignNullToNotNullAttribute + var fi = new FileInfo(persistedFile); + fi.Directory.Create(); + using (var streamWriter = new StreamWriter(fi.OpenWrite())) + using (var writer = new JsonTextWriter(streamWriter)) { + jsonSerializer.Serialize(writer, new State { + lastVersionCheck = DateTime.UtcNow, + lastRemotePackageVersion = newVersion.ToString() + }); + } + } + + Task LoadPersistedState() { + return Task.Run(() => { + var fi = new FileInfo(persistedFile); + if(!fi.Exists) { + return null; + } + + using(var streamReader = fi.OpenText()) + using(var reader = new JsonTextReader(streamReader)) { + return jsonSerializer.Deserialize(reader); + } + }); + } + + + + static async Task> GetLatestPackageVersion() { + string versionUrl; + + if (PackageConst.IsAssetStoreBuild) { + // version updates are synced with asset store + versionUrl = "https://d2tc55zjhw51ly.cloudfront.net/releases/latest/asset-store-version.json"; + } else { + versionUrl = "https://gitlab.hotreload.net/root/hot-reload-releases/-/raw/production/package.json"; + } + try { + using(var resp = await client.GetAsync(versionUrl).ConfigureAwait(false)) { + if(resp.StatusCode != HttpStatusCode.OK) { + return Response.FromError($"Request failed with statusCode: {resp.StatusCode} {resp.ReasonPhrase}"); + } + + var json = await resp.Content.ReadAsStringAsync().ConfigureAwait(false); + var o = await JObject.LoadAsync(new JsonTextReader(new StringReader(json))).ConfigureAwait(false); + SemVersion newVersion; + JToken value; + if (!o.TryGetValue("version", out value)) { + return Response.FromError("Invalid package.json"); + } else if(!SemVersion.TryParse(value.Value(), out newVersion, strict: true)) { + return Response.FromError($"Invalid version in package.json: '{value.Value()}'"); + } else { + return Response.FromResult(newVersion); + } + } + } catch(Exception ex) { + return Response.FromError($"{ex.GetType().Name} {ex.Message}"); + } + } + + public async Task UpdatePackageAsync(SemVersion newVersion) { + //Package can be updated by updating the git url via the package manager + if(EditorUtility.DisplayDialog($"Update To v{newVersion}", $"By pressing 'Update' the Hot Reload package will be updated to v{newVersion}", "Update", "Cancel")) { + var resp = await GetLatestPackageVersion(); + if(resp.err == null && resp.data > newVersion) { + newVersion = resp.data; + } + + if(await IsUsingGitRepo()) { + var err = UpdateGitUrlInManifest(newVersion); + if(err != null) { + Log.Warning("Encountered issue when updating Hot Reload: {0}", err); + } else { + //Delete state to force another version check after the package is installed + File.Delete(persistedFile); + #if UNITY_2020_3_OR_NEWER + UnityEditor.PackageManager.Client.Resolve(); + #else + CompileMethodDetourer.Reset(); + AssetDatabase.Refresh(); + #endif + } + } else { + var err = await UpdateUtility.Update(newVersion.ToString(), null, CancellationToken.None); + if(err != null) { + Log.Warning("Failed to update package: {0}", err); + } else { + CompileMethodDetourer.Reset(); + AssetDatabase.Refresh(); + } + } + + //open changelog + HotReloadPrefs.ShowChangeLog = true; + HotReloadWindow.Current.SelectTab(typeof(HotReloadAboutTab)); + } + } + + string UpdateGitUrlInManifest(SemVersion newVersion) { + const string repoUrl = "git+https://gitlab.hotreload.net/root/hot-reload-releases.git"; + const string manifestJsonPath = "Packages/manifest.json"; + var repoUrlToNewVersion = $"{repoUrl}#{newVersion}"; + if(!File.Exists(manifestJsonPath)) { + return "Unable to find manifest.json"; + } + + var root = JObject.Load(new JsonTextReader(new StringReader(File.ReadAllText(manifestJsonPath)))); + JObject deps; + var err = TryGetManfestDeps(root, out deps); + if(err != null) { + return err; + } + deps[PackageConst.PackageName] = repoUrlToNewVersion; + root["dependencies"] = deps; + File.WriteAllText(manifestJsonPath, root.ToString(Formatting.Indented)); + return null; + } + + static string TryGetManfestDeps(JObject root, out JObject deps) { + JToken value; + if(!root.TryGetValue("dependencies", out value)) { + deps = null; + return "no dependencies object found in manifest.json"; + } + deps = value.Value(); + if(deps == null) { + return "dependencies object null in manifest.json"; + } + return null; + } + + static async Task IsUsingGitRepo() { + var respose = await Task.Run(() => IsUsingGitRepoThreaded(PackageConst.PackageName)); + if(respose.err != null) { + Log.Warning("Unable to find package. message: {0}", respose.err); + return false; + } else { + return respose.data; + } + } + + static Response IsUsingGitRepoThreaded(string packageId) { + var fi = new FileInfo("Packages/manifest.json"); + if(!fi.Exists) { + return "Unable to find manifest.json"; + } + + using(var reader = fi.OpenText()) { + var root = JObject.Load(new JsonTextReader(reader)); + JObject deps; + var err = TryGetManfestDeps(root, out deps); + if(err != null) { + return "no dependencies specified in manifest.json"; + } + JToken value; + if(!deps.TryGetValue(packageId, out value)) { + //Likely a local package directly in the packages folder of the unity project + //or the package got moved into the Assets folder + return Response.FromResult(false); + } + var pathToPackage = value.Value(); + if(pathToPackage.StartsWith("git+", StringComparison.Ordinal)) { + return Response.FromResult(true); + } + if(pathToPackage.StartsWith("https://", StringComparison.Ordinal)) { + return Response.FromResult(true); + } + return Response.FromResult(false); + } + } + + class Response { + public readonly T data; + public readonly string err; + public readonly long statusCode; + public Response(T data, string err, long statusCode) { + this.data = data; + this.err = err; + this.statusCode = statusCode; + } + + public static implicit operator Response( string err) { + return Response.FromError(err); + } + } + + static class Response { + public static Response FromError(string error) { + return new Response(default(T), error, -1); + } + public static Response FromResult(T result) { + return new Response(result, null, 200); + } + } + + class State { + public DateTime lastVersionCheck; + public string lastRemotePackageVersion; + } + } + + +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Versioning/PackageUpdateChecker.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Versioning/PackageUpdateChecker.cs.meta new file mode 100644 index 0000000..703068a --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Versioning/PackageUpdateChecker.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 0cecc9e1c2704904691175cdd2f450e6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Versioning/PackageUpdateChecker.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Versioning/SemVer.cs b/Packages/com.singularitygroup.hotreload/Editor/Versioning/SemVer.cs new file mode 100644 index 0000000..72d9854 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Versioning/SemVer.cs @@ -0,0 +1,536 @@ +using System; +#if !NETSTANDARD +using System.Globalization; +using System.Runtime.Serialization; +using System.Security.Permissions; +#endif +using System.Text.RegularExpressions; + +namespace SingularityGroup.HotReload.Editor.Semver +{ + ///

+ /// A semantic version implementation. + /// Conforms to v2.0.0 of http://semver.org/ + /// +#if NETSTANDARD + sealed class SemVersion : IComparable, IComparable +#else + [Serializable] + sealed class SemVersion : IComparable, IComparable, ISerializable +#endif + { + public static SemVersion None = new SemVersion(0, 0, 0); + public static string NoneString = new SemVersion(0, 0, 0).ToString(); + + static Regex parseEx = + new Regex(@"^(?\d+)" + + @"(\.(?\d+))?" + + @"(\.(?\d+))?" + + @"(\-(?
[0-9A-Za-z\-\.]+))?" +
+                @"(\+(?[0-9A-Za-z\-\.]+))?$",
+#if NETSTANDARD
+                RegexOptions.CultureInvariant | RegexOptions.ExplicitCapture);
+#else
+                RegexOptions.CultureInvariant | RegexOptions.Compiled | RegexOptions.ExplicitCapture);
+#endif
+
+#if !NETSTANDARD
+        /// 
+        /// Initializes a new instance of the  class.
+        /// 
+        /// 
+        /// 
+        /// 
+        private SemVersion(SerializationInfo info, StreamingContext context)
+        {
+            if (info == null) throw new ArgumentNullException("info");
+            var semVersion = Parse(info.GetString("SemVersion"));
+            Major = semVersion.Major;
+            Minor = semVersion.Minor;
+            Patch = semVersion.Patch;
+            Prerelease = semVersion.Prerelease;
+            Build = semVersion.Build;
+        }
+#endif
+
+        /// 
+        /// Initializes a new instance of the  class.
+        /// 
+        /// The major version.
+        /// The minor version.
+        /// The patch version.
+        /// The prerelease version (eg. "alpha").
+        /// The build eg ("nightly.232").
+        public SemVersion(int major, int minor = 0, int patch = 0, string prerelease = "", string build = "")
+        {
+            this.Major = major;
+            this.Minor = minor;
+            this.Patch = patch;
+
+            this.Prerelease = prerelease ?? "";
+            this.Build = build ?? "";
+        }
+
+        /// 
+        /// Initializes a new instance of the  class.
+        /// 
+        /// The  that is used to initialize 
+        /// the Major, Minor, Patch and Build properties.
+        public SemVersion(Version version)
+        {
+            if (version == null)
+                throw new ArgumentNullException("version");
+
+            this.Major = version.Major;
+            this.Minor = version.Minor;
+
+            if (version.Revision >= 0)
+            {
+                this.Patch = version.Revision;
+            }
+
+            this.Prerelease = String.Empty;
+
+            if (version.Build > 0)
+            {
+                this.Build = version.Build.ToString();
+            }
+            else
+            {
+                this.Build = String.Empty;
+            }
+        }
+
+        /// 
+        /// Parses the specified string to a semantic version.
+        /// 
+        /// The version string.
+        /// If set to true minor and patch version are required, else they default to 0.
+        /// The SemVersion object.
+        /// When a invalid version string is passed.
+        public static SemVersion Parse(string version, bool strict = false)
+        {
+            var match = parseEx.Match(version);
+            if (!match.Success)
+                throw new ArgumentException("Invalid version.", "version");
+
+#if NETSTANDARD
+            var major = int.Parse(match.Groups["major"].Value);
+#else
+            var major = int.Parse(match.Groups["major"].Value, CultureInfo.InvariantCulture);
+#endif
+
+            var minorMatch = match.Groups["minor"];
+            int minor = 0;
+            if (minorMatch.Success) 
+            {
+#if NETSTANDARD
+                minor = int.Parse(minorMatch.Value);
+#else
+                minor = int.Parse(minorMatch.Value, CultureInfo.InvariantCulture);
+#endif
+            }
+            else if (strict)
+            {
+                throw new InvalidOperationException("Invalid version (no minor version given in strict mode)");
+            }
+
+            var patchMatch = match.Groups["patch"];
+            int patch = 0;
+            if (patchMatch.Success)
+            {
+#if NETSTANDARD
+                patch = int.Parse(patchMatch.Value);
+#else
+                patch = int.Parse(patchMatch.Value, CultureInfo.InvariantCulture);
+#endif
+            }
+            else if (strict) 
+            {
+                throw new InvalidOperationException("Invalid version (no patch version given in strict mode)");
+            }
+
+            var prerelease = match.Groups["pre"].Value;
+            var build = match.Groups["build"].Value;
+
+            return new SemVersion(major, minor, patch, prerelease, build);
+        }
+
+        /// 
+        /// Parses the specified string to a semantic version.
+        /// 
+        /// The version string.
+        /// When the method returns, contains a SemVersion instance equivalent 
+        /// to the version string passed in, if the version string was valid, or null if the 
+        /// version string was not valid.
+        /// If set to true minor and patch version are required, else they default to 0.
+        /// False when a invalid version string is passed, otherwise true.
+        public static bool TryParse(string version, out SemVersion semver, bool strict = false)
+        {
+            try
+            {
+                semver = Parse(version, strict);
+                return true;
+            }
+            catch (Exception)
+            {
+                semver = null;
+                return false;
+            }
+        }
+
+        /// 
+        /// Tests the specified versions for equality.
+        /// 
+        /// The first version.
+        /// The second version.
+        /// If versionA is equal to versionB true, else false.
+        public static bool Equals(SemVersion versionA, SemVersion versionB)
+        {
+            if (ReferenceEquals(versionA, null))
+                return ReferenceEquals(versionB, null);
+            return versionA.Equals(versionB);
+        }
+
+        /// 
+        /// Compares the specified versions.
+        /// 
+        /// The version to compare to.
+        /// The version to compare against.
+        /// If versionA < versionB < 0, if versionA > versionB > 0,
+        /// if versionA is equal to versionB 0.
+        public static int Compare(SemVersion versionA, SemVersion versionB)
+        {
+            if (ReferenceEquals(versionA, null))
+                return ReferenceEquals(versionB, null) ? 0 : -1;
+            return versionA.CompareTo(versionB);
+        }
+
+        /// 
+        /// Make a copy of the current instance with optional altered fields. 
+        /// 
+        /// The major version.
+        /// The minor version.
+        /// The patch version.
+        /// The prerelease text.
+        /// The build text.
+        /// The new version object.
+        public SemVersion Change(int? major = null, int? minor = null, int? patch = null,
+            string prerelease = null, string build = null)
+        {
+            return new SemVersion(
+                major ?? this.Major,
+                minor ?? this.Minor,
+                patch ?? this.Patch,
+                prerelease ?? this.Prerelease,
+                build ?? this.Build);
+        }
+
+        /// 
+        /// Gets the major version.
+        /// 
+        /// 
+        /// The major version.
+        /// 
+        public int Major { get; private set; }
+
+        /// 
+        /// Gets the minor version.
+        /// 
+        /// 
+        /// The minor version.
+        /// 
+        public int Minor { get; private set; }
+
+        /// 
+        /// Gets the patch version.
+        /// 
+        /// 
+        /// The patch version.
+        /// 
+        public int Patch { get; private set; }
+
+        /// 
+        /// Gets the pre-release version.
+        /// 
+        /// 
+        /// The pre-release version.
+        /// 
+        public string Prerelease { get; private set; }
+
+        /// 
+        /// Gets the build version.
+        /// 
+        /// 
+        /// The build version.
+        /// 
+        public string Build { get; private set; }
+
+        /// 
+        /// Returns a  that represents this instance.
+        /// 
+        /// 
+        /// A  that represents this instance.
+        /// 
+        public override string ToString()
+        {
+            var version = "" + Major + "." + Minor + "." + Patch;
+            if (!String.IsNullOrEmpty(Prerelease))
+                version += "-" + Prerelease;
+            if (!String.IsNullOrEmpty(Build))
+                version += "+" + Build;
+            return version;
+        }
+
+        /// 
+        /// Compares the current instance with another object of the same type and returns an integer that indicates 
+        /// whether the current instance precedes, follows, or occurs in the same position in the sort order as the 
+        /// other object.
+        /// 
+        /// An object to compare with this instance.
+        /// 
+        /// A value that indicates the relative order of the objects being compared. 
+        /// The return value has these meanings: Value Meaning Less than zero 
+        ///  This instance precedes  in the sort order. 
+        ///  Zero This instance occurs in the same position in the sort order as . i
+        ///  Greater than zero This instance follows  in the sort order.
+        /// 
+        public int CompareTo(object obj)
+        {
+            return CompareTo((SemVersion)obj);
+        }
+
+        /// 
+        /// Compares the current instance with another object of the same type and returns an integer that indicates 
+        /// whether the current instance precedes, follows, or occurs in the same position in the sort order as the 
+        /// other object.
+        /// 
+        /// An object to compare with this instance.
+        /// 
+        /// A value that indicates the relative order of the objects being compared. 
+        /// The return value has these meanings: Value Meaning Less than zero 
+        ///  This instance precedes  in the sort order. 
+        ///  Zero This instance occurs in the same position in the sort order as . i
+        ///  Greater than zero This instance follows  in the sort order.
+        /// 
+        public int CompareTo(SemVersion other)
+        {
+            if (ReferenceEquals(other, null))
+                return 1;
+
+            var r = this.CompareByPrecedence(other);
+            if (r != 0)
+                return r;
+
+            r = CompareComponent(this.Build, other.Build);
+            return r;
+        }
+
+        /// 
+        /// Compares to semantic versions by precedence. This does the same as a Equals, but ignores the build information.
+        /// 
+        /// The semantic version.
+        /// true if the version precedence matches.
+        public bool PrecedenceMatches(SemVersion other)
+        {
+            return CompareByPrecedence(other) == 0;
+        }
+
+        /// 
+        /// Compares to semantic versions by precedence. This does the same as a Equals, but ignores the build information.
+        /// 
+        /// The semantic version.
+        /// 
+        /// A value that indicates the relative order of the objects being compared. 
+        /// The return value has these meanings: Value Meaning Less than zero 
+        ///  This instance precedes  in the version precedence.
+        ///  Zero This instance has the same precedence as . i
+        ///  Greater than zero This instance has creater precedence as .
+        /// 
+        public int CompareByPrecedence(SemVersion other)
+        {
+            if (ReferenceEquals(other, null))
+                return 1;
+
+            var r = this.Major.CompareTo(other.Major);
+            if (r != 0) return r;
+
+            r = this.Minor.CompareTo(other.Minor);
+            if (r != 0) return r;
+
+            r = this.Patch.CompareTo(other.Patch);
+            if (r != 0) return r;
+
+            r = CompareComponent(this.Prerelease, other.Prerelease, true);
+            return r;
+        }
+
+        static int CompareComponent(string a, string b, bool lower = false)
+        {
+            var aEmpty = String.IsNullOrEmpty(a);
+            var bEmpty = String.IsNullOrEmpty(b);
+            if (aEmpty && bEmpty)
+                return 0;
+
+            if (aEmpty)
+                return lower ? 1 : -1;
+            if (bEmpty)
+                return lower ? -1 : 1;
+
+            var aComps = a.Split('.');
+            var bComps = b.Split('.');
+
+            var minLen = Math.Min(aComps.Length, bComps.Length);
+            for (int i = 0; i < minLen; i++)
+            {
+                var ac = aComps[i];
+                var bc = bComps[i];
+                int anum, bnum;
+                var isanum = Int32.TryParse(ac, out anum);
+                var isbnum = Int32.TryParse(bc, out bnum);
+                int r;
+                if (isanum && isbnum)
+                {
+                    r = anum.CompareTo(bnum);
+                    if (r != 0) return anum.CompareTo(bnum);
+                }
+                else
+                {
+                    if (isanum)
+                        return -1;
+                    if (isbnum)
+                        return 1;
+                    r = String.CompareOrdinal(ac, bc);
+                    if (r != 0)
+                        return r;
+                }
+            }
+
+            return aComps.Length.CompareTo(bComps.Length);
+        }
+
+        /// 
+        /// Determines whether the specified  is equal to this instance.
+        /// 
+        /// The  to compare with this instance.
+        /// 
+        ///   true if the specified  is equal to this instance; otherwise, false.
+        /// 
+        public override bool Equals(object obj)
+        {
+            if (ReferenceEquals(obj, null))
+                return false;
+
+            if (ReferenceEquals(this, obj))
+                return true;
+
+            var other = (SemVersion)obj;
+
+            return this.Major == other.Major &&
+                this.Minor == other.Minor &&
+                this.Patch == other.Patch &&
+                string.Equals(this.Prerelease, other.Prerelease, StringComparison.Ordinal) &&
+                string.Equals(this.Build, other.Build, StringComparison.Ordinal);
+        }
+
+        /// 
+        /// Returns a hash code for this instance.
+        /// 
+        /// 
+        /// A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. 
+        /// 
+        public override int GetHashCode()
+        {
+            unchecked
+            {
+                int result = this.Major.GetHashCode();
+                result = result * 31 + this.Minor.GetHashCode();
+                result = result * 31 + this.Patch.GetHashCode();
+                result = result * 31 + this.Prerelease.GetHashCode();
+                result = result * 31 + this.Build.GetHashCode();
+                return result;
+            }
+        }
+
+#if !NETSTANDARD
+        [SecurityPermission(SecurityAction.Demand, SerializationFormatter = true)]
+        public void GetObjectData(SerializationInfo info, StreamingContext context)
+        {
+            if (info == null) throw new ArgumentNullException("info");
+            info.AddValue("SemVersion", ToString());
+        }
+#endif
+
+        /// 
+        /// The override of the equals operator. 
+        /// 
+        /// The left value.
+        /// The right value.
+        /// If left is equal to right true, else false.
+        public static bool operator ==(SemVersion left, SemVersion right)
+        {
+            if(ReferenceEquals(right, null)) {
+                return ReferenceEquals(left, null);
+            }
+            if(ReferenceEquals(left, null)) {
+                return false;
+            }
+            return left.PrecedenceMatches(right);
+        }
+
+        /// 
+        /// The override of the un-equal operator. 
+        /// 
+        /// The left value.
+        /// The right value.
+        /// If left is not equal to right true, else false.
+        public static bool operator !=(SemVersion left, SemVersion right)
+        {
+            return !(left == right);
+        }
+
+        /// 
+        /// The override of the greater operator. 
+        /// 
+        /// The left value.
+        /// The right value.
+        /// If left is greater than right true, else false.
+        public static bool operator >(SemVersion left, SemVersion right)
+        {
+            return left.CompareByPrecedence(right) > 0;
+        }
+
+        /// 
+        /// The override of the greater than or equal operator. 
+        /// 
+        /// The left value.
+        /// The right value.
+        /// If left is greater than or equal to right true, else false.
+        public static bool operator >=(SemVersion left, SemVersion right)
+        {
+            return left == right || left > right;
+        }
+
+        /// 
+        /// The override of the less operator. 
+        /// 
+        /// The left value.
+        /// The right value.
+        /// If left is less than right true, else false.
+        public static bool operator <(SemVersion left, SemVersion right)
+        {
+            return left.CompareByPrecedence(right) < 0;
+        }
+
+        /// 
+        /// The override of the less than or equal operator. 
+        /// 
+        /// The left value.
+        /// The right value.
+        /// If left is less than or equal to right true, else false.
+        public static bool operator <=(SemVersion left, SemVersion right)
+        {
+            return left == right || left < right;
+        }
+    }
+}
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Versioning/SemVer.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Versioning/SemVer.cs.meta
new file mode 100644
index 0000000..5c2a09f
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Versioning/SemVer.cs.meta
@@ -0,0 +1,18 @@
+fileFormatVersion: 2
+guid: 0b49a1188451e7745af9f636d854efc8
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
+AssetOrigin:
+  serializedVersion: 1
+  productId: 254358
+  packageName: Hot Reload | Edit Code Without Compiling
+  packageVersion: 1.13.7
+  assetPath: Packages/com.singularitygroup.hotreload/Editor/Versioning/SemVer.cs
+  uploadId: 752503
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window.meta b/Packages/com.singularitygroup.hotreload/Editor/Window.meta
new file mode 100644
index 0000000..710dd15
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: e1826b88dea6aa446a9bc22bc0140c22
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI.meta
new file mode 100644
index 0000000..5cbd648
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: dddc1cae3f951f84da98305ec6228f25
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons.meta
new file mode 100644
index 0000000..4d51a80
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 86f1446dfdbc2a94aac993437231aaa4
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenDialogueButton.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenDialogueButton.cs
new file mode 100644
index 0000000..3ecfc20
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenDialogueButton.cs
@@ -0,0 +1,42 @@
+using UnityEditor;
+using UnityEngine;
+
+namespace SingularityGroup.HotReload.Editor {
+    internal class OpenDialogueButton : IGUIComponent {
+        public readonly string text;
+        public readonly string url;
+        public readonly string title;
+        public readonly string message;
+        public readonly string ok;
+        public readonly string cancel;
+        
+        public OpenDialogueButton(string text, string url, string title, string message, string ok, string cancel) {
+            this.text = text;
+            this.url = url;
+            this.title = title;
+            this.message = message;
+            this.ok = ok;
+            this.cancel = cancel;
+        }
+
+        public void OnGUI() {
+             Render(text, url, title, message, ok, cancel);
+        }
+
+        public static void Render(string text, string url, string title, string message, string ok, string cancel) {
+            if (GUILayout.Button(new GUIContent(text.StartsWith(" ") ? text : " " + text))) {
+                if (EditorUtility.DisplayDialog(title, message, ok, cancel)) {
+                    Application.OpenURL(url);
+                }
+            }
+        }
+        
+        public static void RenderRaw(Rect rect, string text, string url, string title, string message, string ok, string cancel, GUIStyle style = null) {
+            if (GUI.Button(rect, new GUIContent(text.StartsWith(" ") ? text : " " + text), style ?? GUI.skin.button)) {
+                if (EditorUtility.DisplayDialog(title, message, ok, cancel)) {
+                    Application.OpenURL(url);
+                }
+            }
+        }
+    }
+}
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenDialogueButton.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenDialogueButton.cs.meta
new file mode 100644
index 0000000..e9bfac7
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenDialogueButton.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 97ca8174f0514e8e9ee5d4be26ed8078
+timeCreated: 1674416481
+AssetOrigin:
+  serializedVersion: 1
+  productId: 254358
+  packageName: Hot Reload | Edit Code Without Compiling
+  packageVersion: 1.13.7
+  assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenDialogueButton.cs
+  uploadId: 752503
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenURLButton.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenURLButton.cs
new file mode 100644
index 0000000..0f1edcc
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenURLButton.cs
@@ -0,0 +1,29 @@
+using UnityEditor;
+using UnityEngine;
+
+namespace SingularityGroup.HotReload.Editor {
+    internal class OpenURLButton : IGUIComponent {
+        public readonly string text;
+        public readonly string url;
+        public OpenURLButton(string text, string url) {
+            this.text = text;
+            this.url = url;
+        }
+
+        public void OnGUI() {
+            Render(text, url);
+        }
+
+        public static void Render(string text, string url) {
+            if (GUILayout.Button(new GUIContent(text.StartsWith(" ") ? text : " " + text))) {
+                Application.OpenURL(url);
+            }
+        }
+        
+        public static void RenderRaw(Rect rect, string text, string url, GUIStyle style = null) {
+            if (GUI.Button(rect, new GUIContent(text.StartsWith(" ") ? text : " " + text), style ?? GUI.skin.button)) {
+                Application.OpenURL(url);
+            }
+        }
+    }
+}
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenURLButton.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenURLButton.cs.meta
new file mode 100644
index 0000000..93423aa
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenURLButton.cs.meta
@@ -0,0 +1,18 @@
+fileFormatVersion: 2
+guid: ef12252fc9d1f9f438cbd34cf8f7364b
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
+AssetOrigin:
+  serializedVersion: 1
+  productId: 254358
+  packageName: Hot Reload | Edit Code Without Compiling
+  packageVersion: 1.13.7
+  assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Buttons/OpenURLButton.cs
+  uploadId: 752503
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/EditorTextures.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/EditorTextures.cs
new file mode 100644
index 0000000..d20fae9
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/EditorTextures.cs
@@ -0,0 +1,116 @@
+using UnityEngine;
+
+namespace SingularityGroup.HotReload.Editor {
+    /// 
+    /// Create a new texture only once. Safe access to generated textures.
+    /// 
+    /// 
+    /// If 
+    internal static class EditorTextures {
+        private static Texture2D black;
+        private static Texture2D white;
+        private static Texture2D lightGray225;
+        private static Texture2D lightGray235;
+        private static Texture2D darkGray17;
+        private static Texture2D darkGray30;
+
+        // Texture2D.blackTexture doesn't render properly in Editor GUI.
+        public static Texture2D Black {
+            get {
+                if (!black) {
+                    black = new Texture2D(2, 2, TextureFormat.RGBA32, false);
+                    
+                    var pixels = black.GetPixels32();
+                    for (var i = 0; i < pixels.Length; i++) {
+                        pixels[i] = new Color32(0, 0, 0, byte.MaxValue);
+                    }
+                    black.SetPixels32(pixels);
+                    black.Apply();
+                }
+                return black;
+            }
+        }
+        
+        // Texture2D.whiteTexture might not render properly in Editor GUI.
+        public static Texture2D White {
+            get {
+                
+                if (!white) {
+                    white = new Texture2D(2, 2, TextureFormat.RGBA32, false);
+                    
+                    var pixels = white.GetPixels32();
+                    for (var i = 0; i < pixels.Length; i++) {
+                        pixels[i] = new Color32(byte.MaxValue, byte.MaxValue, byte.MaxValue, byte.MaxValue);
+                    }
+                    white.SetPixels32(pixels);
+                    white.Apply();
+                }
+                return white;
+            }
+        }
+
+        public static Texture2D DarkGray17 {
+            get {
+                if (!darkGray17) {
+                    darkGray17 = new Texture2D(2, 2, TextureFormat.RGBA32, false);
+                    
+                    var pixels = darkGray17.GetPixels32();
+                    for (var i = 0; i < pixels.Length; i++) {
+                        pixels[i] = new Color32(17, 17, 17, byte.MaxValue);
+                    }
+                    darkGray17.SetPixels32(pixels);
+                    darkGray17.Apply();
+                }
+                return darkGray17;
+            }
+        }
+        
+        public static Texture2D DarkGray40 {
+            get {
+                if (!darkGray30) {
+                    darkGray30 = new Texture2D(2, 2, TextureFormat.RGBA32, false);
+                    
+                    var pixels = darkGray30.GetPixels32();
+                    for (var i = 0; i < pixels.Length; i++) {
+                        pixels[i] = new Color32(40, 40, 40, byte.MaxValue);
+                    }
+                    darkGray30.SetPixels32(pixels);
+                    darkGray30.Apply();
+                }
+                return darkGray30;
+            }
+        }
+
+        public static Texture2D LightGray238 {
+            get {
+                if (!lightGray235) {
+                    lightGray235 = new Texture2D(2, 2, TextureFormat.RGBA32, false);
+                    
+                    var pixels = lightGray235.GetPixels32();
+                    for (var i = 0; i < pixels.Length; i++) {
+                        pixels[i] = new Color32(238, 238, 238, byte.MaxValue);
+                    }
+                    lightGray235.SetPixels32(pixels);
+                    lightGray235.Apply();
+                }
+                return lightGray235;
+            }
+        }
+
+        public static Texture2D LightGray225 {
+            get {
+                if (!lightGray225) {
+                    lightGray225 = new Texture2D(2, 2, TextureFormat.RGBA32, false);
+
+                    var pixels = lightGray225.GetPixels32();
+                    for (var i = 0; i < pixels.Length; i++) {
+                        pixels[i] = new Color32(225, 225, 225, byte.MaxValue);
+                    }
+                    lightGray225.SetPixels32(pixels);
+                    lightGray225.Apply();
+                }
+                return lightGray225;
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/EditorTextures.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/EditorTextures.cs.meta
new file mode 100644
index 0000000..8d8446d
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/EditorTextures.cs.meta
@@ -0,0 +1,10 @@
+fileFormatVersion: 2
+guid: 9116854180be4f2b8fcc0422bcf570a5
+timeCreated: 1674127121
+AssetOrigin:
+  serializedVersion: 1
+  productId: 254358
+  packageName: Hot Reload | Edit Code Without Compiling
+  packageVersion: 1.13.7
+  assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/EditorTextures.cs
+  uploadId: 752503
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/IGUIComponent.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/IGUIComponent.cs
new file mode 100644
index 0000000..323ce59
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/IGUIComponent.cs
@@ -0,0 +1,5 @@
+namespace SingularityGroup.HotReload.Editor {
+    internal interface IGUIComponent {
+        void OnGUI();
+    }
+}
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/IGUIComponent.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/IGUIComponent.cs.meta
new file mode 100644
index 0000000..0511db3
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/IGUIComponent.cs.meta
@@ -0,0 +1,18 @@
+fileFormatVersion: 2
+guid: 893cb208871dab94488cb988920f0ebd
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
+AssetOrigin:
+  serializedVersion: 1
+  productId: 254358
+  packageName: Hot Reload | Edit Code Without Compiling
+  packageVersion: 1.13.7
+  assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/IGUIComponent.cs
+  uploadId: 752503
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options.meta
new file mode 100644
index 0000000..32dff3d
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: 2b3fa5ea1ed3545429de96b41801942f
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/AllowAndroidAppToMakeHttpRequestsOption.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/AllowAndroidAppToMakeHttpRequestsOption.cs
new file mode 100644
index 0000000..bcdedf8
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/AllowAndroidAppToMakeHttpRequestsOption.cs
@@ -0,0 +1,48 @@
+using UnityEditor;
+
+namespace SingularityGroup.HotReload.Editor {
+    internal class AllowAndroidAppToMakeHttpRequestsOption : ProjectOptionBase {
+        public override string ShortSummary {
+            get {
+                return "Allow app to make HTTP requests";
+            }
+        }
+
+        public override string Summary => ShortSummary;
+
+        public override bool GetValue(SerializedObject so) {
+            #if UNITY_2022_1_OR_NEWER
+            // use PlayerSettings as the source of truth 
+            return PlayerSettings.insecureHttpOption != InsecureHttpOption.NotAllowed;
+            #else
+            return GetProperty(so).boolValue;
+            #endif
+        }
+
+        public override string ObjectPropertyName =>
+            nameof(HotReloadSettingsObject.AllowAndroidAppToMakeHttpRequests);
+
+        public override void SetValue(SerializedObject so, bool value) {
+            base.SetValue(so, value);
+
+            // Enabling on Unity 2022 or newer → set the Unity option to ‘Development Builds only’
+            #if UNITY_2022_1_OR_NEWER
+            var notAllowed = PlayerSettings.insecureHttpOption == InsecureHttpOption.NotAllowed;
+            if (value) {
+                // user chose to enable it
+                if (notAllowed) {
+                    PlayerSettings.insecureHttpOption = InsecureHttpOption.DevelopmentOnly;
+                }
+            } else {
+                // user chose to disable it
+                PlayerSettings.insecureHttpOption = InsecureHttpOption.NotAllowed;
+            }
+            #endif
+        }
+
+        public override void InnerOnGUI(SerializedObject so) {
+            var description = "For Hot Reload to work on-device, please allow HTTP requests";
+            EditorGUILayout.LabelField(description, HotReloadWindowStyles.WrapStyle);
+        }
+    }
+}
\ No newline at end of file
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/AllowAndroidAppToMakeHttpRequestsOption.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/AllowAndroidAppToMakeHttpRequestsOption.cs.meta
new file mode 100644
index 0000000..3647848
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/AllowAndroidAppToMakeHttpRequestsOption.cs.meta
@@ -0,0 +1,18 @@
+fileFormatVersion: 2
+guid: 0a7442cee510ab4498ca2a846e0c4e92
+MonoImporter:
+  externalObjects: {}
+  serializedVersion: 2
+  defaultReferences: []
+  executionOrder: 0
+  icon: {instanceID: 0}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
+AssetOrigin:
+  serializedVersion: 1
+  productId: 254358
+  packageName: Hot Reload | Edit Code Without Compiling
+  packageVersion: 1.13.7
+  assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/AllowAndroidAppToMakeHttpRequestsOption.cs
+  uploadId: 752503
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base.meta
new file mode 100644
index 0000000..a16bb70
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base.meta
@@ -0,0 +1,8 @@
+fileFormatVersion: 2
+guid: bb8474c37f13d704d96b43e0f681680d
+folderAsset: yes
+DefaultImporter:
+  externalObjects: {}
+  userData: 
+  assetBundleName: 
+  assetBundleVariant: 
diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/HotReloadOptionBase.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/HotReloadOptionBase.cs
new file mode 100644
index 0000000..8cfa457
--- /dev/null
+++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/HotReloadOptionBase.cs
@@ -0,0 +1,57 @@
+using UnityEditor;
+
+namespace SingularityGroup.HotReload.Editor {
+    /// 
+    /// An option stored inside the current Unity project.
+    /// 
+    internal abstract class ProjectOptionBase : IOption, ISerializedProjectOption {
+        public abstract string ShortSummary { get; }
+        public abstract string Summary { get; }
+
+        public virtual bool GetValue(SerializedObject so) {
+            return so.FindProperty(ObjectPropertyName).boolValue;
+        }
+
+        protected SerializedProperty GetProperty(SerializedObject so) {
+            return so.FindProperty(ObjectPropertyName);
+        }
+        
+        public virtual void SetValue(SerializedObject so, bool value) {
+            so.FindProperty(ObjectPropertyName).boolValue = value;
+        }
+
+        public virtual void InnerOnGUI(SerializedObject so) { }
+
+        public abstract string ObjectPropertyName { get; }
+
+        /// 
+        /// Override this if your option is not needed for on-device Hot Reload to work.
+ /// (by default, a project option must be true for Hot Reload to work) + ///
+ public virtual bool IsRequiredForBuild() { + return true; + } + } + + /// + /// An option that is stored on the user's computer (shared between Unity projects). + /// + internal abstract class ComputerOptionBase : IOption { + public abstract string ShortSummary { get; } + public abstract string Summary { get; } + + public abstract bool GetValue(); + + /// Uses for storing the value on the user's computer. + public virtual void SetValue(bool value) { } + + public bool GetValue(SerializedObject so) => GetValue(); + + public virtual void SetValue(SerializedObject so, bool value) => SetValue(value); + + void IOption.InnerOnGUI(SerializedObject so) { + InnerOnGUI(); + } + public virtual void InnerOnGUI() { } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/HotReloadOptionBase.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/HotReloadOptionBase.cs.meta new file mode 100644 index 0000000..a2aa39b --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/HotReloadOptionBase.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: dab8ef53c2ee30a40ab6a7e4abd1260c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/HotReloadOptionBase.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/OptionInterfaces.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/OptionInterfaces.cs new file mode 100644 index 0000000..e68f3a1 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/OptionInterfaces.cs @@ -0,0 +1,34 @@ +using UnityEditor; + +namespace SingularityGroup.HotReload.Editor { + public interface IOption { + string ShortSummary { get; } + string Summary { get; } + + /// The wrapped by SerializedObject + bool GetValue(SerializedObject so); + + /// + /// Handle the new value. + /// + /// + /// Note: caller must skip calling this if value same as GetValue! + /// + /// The wrapped by SerializedObject + /// + void SetValue(SerializedObject so, bool value); + + /// The wrapped by SerializedObject + void InnerOnGUI(SerializedObject so); + } + + /// + /// An option scoped to the current Unity project. + /// + /// + /// These options are intended to be shared with collaborators and used by Unity Player builds. + /// + public interface ISerializedProjectOption { + string ObjectPropertyName { get; } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/OptionInterfaces.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/OptionInterfaces.cs.meta new file mode 100644 index 0000000..44a5c38 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/OptionInterfaces.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0a626aa97160471f85de4646a634bdf1 +timeCreated: 1674574633 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/Base/OptionInterfaces.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/ExposeServerOption.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/ExposeServerOption.cs new file mode 100644 index 0000000..7d225e8 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/ExposeServerOption.cs @@ -0,0 +1,70 @@ +using System; +using System.Threading.Tasks; +using SingularityGroup.HotReload.Editor.Cli; +using UnityEditor; + +namespace SingularityGroup.HotReload.Editor { + internal sealed class ExposeServerOption : ComputerOptionBase { + + public override string ShortSummary => "Allow Devices to Connect"; + public override string Summary => "Allow Devices to Connect (WiFi)"; + + public override void InnerOnGUI() { + string description; + if (GetValue()) { + description = "The HotReload server is reachable from devices on the same Wifi network"; + } else { + description = "The HotReload server is available to your computer only. Other devices cannot connect to it."; + } + EditorGUILayout.LabelField(description, HotReloadWindowStyles.WrapStyle); + } + + public override bool GetValue() { + return HotReloadPrefs.ExposeServerToLocalNetwork; + } + + public override void SetValue(SerializedObject so, bool val) { + // AllowAndroidAppToMakeHttpRequestsOption + if (val == HotReloadPrefs.ExposeServerToLocalNetwork) { + return; + } + + HotReloadPrefs.ExposeServerToLocalNetwork = val; + if (val) { + // they allowed this one for mobile builds, so now we allow everything else needed for player build to work with HR + new AllowAndroidAppToMakeHttpRequestsOption().SetValue(so, true); + } + RunTask(() => { + RunOnMainThreadSync(() => { + var isRunningResult = ServerHealthCheck.I.IsServerHealthy; + if (isRunningResult) { + var restartServer = EditorUtility.DisplayDialog("Hot Reload", + $"When changing '{Summary}', the Hot Reload server must be restarted for this to take effect." + + "\nDo you want to restart it now?", + "Restart server", "Don't restart"); + if (restartServer) { + CodePatcher.I.ClearPatchedMethods(); + EditorCodePatcher.RestartCodePatcher().Forget(); + } + } + }); + }); + } + + void RunTask(Action action) { + var token = HotReloadWindow.Current.cancelToken; + Task.Run(() => { + if (token.IsCancellationRequested) return; + try { + action(); + } catch (Exception ex) { + ThreadUtility.LogException(ex, token); + } + }, token); + } + + void RunOnMainThreadSync(Action action) { + ThreadUtility.RunOnMainThread(action, HotReloadWindow.Current.cancelToken); + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/ExposeServerOption.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/ExposeServerOption.cs.meta new file mode 100644 index 0000000..881e898 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/ExposeServerOption.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 5ab0973d3ae1275469237480381842c0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/ExposeServerOption.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/IncludeInBuildOption.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/IncludeInBuildOption.cs new file mode 100644 index 0000000..3a68134 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/IncludeInBuildOption.cs @@ -0,0 +1,24 @@ +using UnityEditor; + +namespace SingularityGroup.HotReload.Editor { + internal class IncludeInBuildOption : ProjectOptionBase, ISerializedProjectOption { + static IncludeInBuildOption _I; + public static IncludeInBuildOption I = _I ?? (_I = new IncludeInBuildOption()); + public override string ShortSummary => "Include Hot Reload in player builds"; + public override string Summary => ShortSummary; + + public override string ObjectPropertyName => + nameof(HotReloadSettingsObject.IncludeInBuild); + + public override void InnerOnGUI(SerializedObject so) { + string description; + if (GetValue(so)) { + description = "The Hot Reload runtime is included in development builds that use the Mono scripting backend."; + } else { + description = "The Hot Reload runtime will not be included in any build. Use this option to disable HotReload without removing it from your project."; + } + description += " This option does not affect Hot Reload usage in Playmode"; + EditorGUILayout.LabelField(description, HotReloadWindowStyles.WrapStyle); + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/IncludeInBuildOption.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/IncludeInBuildOption.cs.meta new file mode 100644 index 0000000..dd3fa54 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/IncludeInBuildOption.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 39ed4f822bcd81340bdf7189b3bc5016 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Options/IncludeInBuildOption.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs.meta new file mode 100644 index 0000000..b777231 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9c0f7811020465d46bcd0305e2f83e8a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Base.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Base.meta new file mode 100644 index 0000000..9cec40c --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Base.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 58d14712b7ef14540ba4817a5ef873a6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Base/HotReloadTabBase.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Base/HotReloadTabBase.cs new file mode 100644 index 0000000..7a64888 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Base/HotReloadTabBase.cs @@ -0,0 +1,33 @@ + +using UnityEditor; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor { + internal abstract class HotReloadTabBase : IGUIComponent { + protected readonly HotReloadWindow _window; + + public string Title { get; } + public Texture Icon { get; } + public string Tooltip { get; } + + public HotReloadTabBase(HotReloadWindow window, string title, Texture iconImage, string tooltip) { + _window = window; + + Title = title; + Icon = iconImage; + Tooltip = tooltip; + } + + public HotReloadTabBase(HotReloadWindow window, string title, string iconName, string tooltip) : + this(window, title, EditorGUIUtility.IconContent(iconName).image, tooltip) { + } + + protected void Repaint() { + _window.Repaint(); + } + + public virtual void Update() { } + + public abstract void OnGUI(); + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Base/HotReloadTabBase.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Base/HotReloadTabBase.cs.meta new file mode 100644 index 0000000..2c97523 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Base/HotReloadTabBase.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: c2c79b82bd9636d499449f91f93fae2a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Base/HotReloadTabBase.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Helpers.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Helpers.meta new file mode 100644 index 0000000..0c5c6ba --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Helpers.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a089a7225d904b00b2893a34b514ad28 +timeCreated: 1689791626 \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Helpers/RedeemLicenseHelper.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Helpers/RedeemLicenseHelper.cs new file mode 100644 index 0000000..773d55e --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Helpers/RedeemLicenseHelper.cs @@ -0,0 +1,308 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Net; +using System.Net.Http; +using System.Text; +using System.Threading.Tasks; +using SingularityGroup.HotReload.DTO; +using SingularityGroup.HotReload.Newtonsoft.Json; +using UnityEditor; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor { + internal enum RedeemStage { + None, + Registration, + Redeem, + Login + } + + // IMPORTANT: don't rename + internal enum RegistrationOutcome { + None, + Indie, + Business, + } + + internal class RedeemLicenseHelper { + public static readonly RedeemLicenseHelper I = new RedeemLicenseHelper(); + + private string _pendingCompanySize; + private string _pendingInvoiceNumber; + private string _pendingRedeemEmail; + + private const string registerFlagPath = PackageConst.LibraryCachePath + "/registerFlag.txt"; + public const string registerOutcomePath = PackageConst.LibraryCachePath + "/registerOutcome.txt"; + + public RedeemStage RedeemStage { get; private set; } + public RegistrationOutcome RegistrationOutcome { get; private set; } + public bool RegistrationRequired => RedeemStage != RedeemStage.None; + + private string status; + private string error; + + const string statusSuccess = "success"; + const string statusAlreadyClaimed = "already redeemed by this user/device"; + const string unknownError = "We apologize, an error happened while redeeming your license. Please reach out to customer support for assistance."; + + private GUILayoutOption[] secondaryButtonLayoutOptions = new[] { GUILayout.MaxWidth(100) }; + + private bool requestingRedeem; + private HttpClient redeemClient; + const string redeemUrl = "https://vmhzj6jonn3qy7hk7tx7levpli0bstpj.lambda-url.us-east-1.on.aws/redeem"; + + public RedeemLicenseHelper() { + if (File.Exists(registerFlagPath)) { + RedeemStage = RedeemStage.Registration; + } + try { + if (File.Exists(registerOutcomePath)) { + RegistrationOutcome outcome; + if (Enum.TryParse(File.ReadAllText(registerOutcomePath), out outcome)) { + RegistrationOutcome = outcome; + } + } + } catch (Exception e) { + Log.Warning($"Failed determining registration outcome with {e.GetType().Name}: {e.Message}"); + } + } + + public void RenderStage(HotReloadRunTabState state) { + if (state.redeemStage == RedeemStage.Registration) { + RenderRegistration(); + } else if (state.redeemStage == RedeemStage.Redeem) { + RenderRedeem(); + } else if (state.redeemStage == RedeemStage.Login) { + RenderLogin(state); + } + } + + private void RenderRegistration() { + var message = PackageConst.IsAssetStoreBuild + ? "Unity Pro users are required to obtain an additional license. You are eligible to redeem one if your company has ten or fewer employees. Please enter your company details below." + : "The licensing model for Unity Pro users varies depending on the number of employees in your company. Please enter your company details below."; + if (error != null) { + EditorGUILayout.HelpBox(error, MessageType.Warning); + } else { + EditorGUILayout.HelpBox(message, MessageType.Info); + } + EditorGUILayout.Space(); + EditorGUILayout.Space(); + + EditorGUILayout.LabelField("Company size (number of employees)"); + GUI.SetNextControlName("company_size"); + _pendingCompanySize = EditorGUILayout.TextField(_pendingCompanySize)?.Trim(); + EditorGUILayout.Space(); + + if (GUILayout.Button("Proceed")) { + int companySize; + if (!int.TryParse(_pendingCompanySize, out companySize)) { + error = "Please enter a number."; + } else { + error = null; + HandleRegistration(companySize); + } + } + } + + void HandleRegistration(int companySize) { + RequestHelper.RequestEditorEvent(new Stat(StatSource.Client, StatLevel.Debug, StatFeature.Licensing, StatEventType.Register), new EditorExtraData { { StatKey.CompanySize, companySize } }); + if (companySize > 10) { + FinishRegistration(RegistrationOutcome.Business); + EditorCodePatcher.DownloadAndRun().Forget(); + } else if (PackageConst.IsAssetStoreBuild) { + SwitchToStage(RedeemStage.Redeem); + } else { + FinishRegistration(RegistrationOutcome.Indie); + EditorCodePatcher.DownloadAndRun().Forget(); + } + } + + private void RenderRedeem() { + if (error != null) { + EditorGUILayout.HelpBox(error, MessageType.Warning); + } else { + EditorGUILayout.HelpBox("To enable us to verify your purchase, please enter your invoice number/order ID. Additionally, provide the email address that you intend to use for managing your credentials.", MessageType.Info); + } + EditorGUILayout.Space(); + EditorGUILayout.Space(); + + EditorGUILayout.LabelField("Invoice number/Order ID"); + GUI.SetNextControlName("invoice_number"); + _pendingInvoiceNumber = EditorGUILayout.TextField(_pendingInvoiceNumber ?? HotReloadPrefs.RedeemLicenseInvoice)?.Trim(); + EditorGUILayout.Space(); + + EditorGUILayout.LabelField("Email"); + GUI.SetNextControlName("email_redeem"); + _pendingRedeemEmail = EditorGUILayout.TextField(_pendingRedeemEmail ?? HotReloadPrefs.RedeemLicenseEmail); + EditorGUILayout.Space(); + + using (new EditorGUI.DisabledScope(requestingRedeem)) { + if (GUILayout.Button("Redeem", HotReloadRunTab.bigButtonHeight)) { + RedeemLicense(email: _pendingRedeemEmail, invoiceNumber: _pendingInvoiceNumber).Forget(); + } + } + EditorGUILayout.Space(); + EditorGUILayout.Space(); + + using (new EditorGUILayout.HorizontalScope()) { + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Skip", secondaryButtonLayoutOptions)) { + SwitchToStage(RedeemStage.Login); + } + GUILayout.FlexibleSpace(); + } + } + + async Task RedeemLicense(string email, string invoiceNumber) { + string validationError; + if (string.IsNullOrEmpty(invoiceNumber)) { + validationError = "Please enter invoice number / order ID."; + } else { + validationError = HotReloadRunTab.ValidateEmail(email); + } + if (validationError != null) { + error = validationError; + return; + } + var resp = await RequestRedeem(email: email, invoiceNumber: invoiceNumber); + status = resp?.status; + if (status != null) { + if (status != statusSuccess && status != statusAlreadyClaimed) { + Log.Error("Redeeming license failed: unknown status received"); + error = unknownError; + } else { + HotReloadPrefs.RedeemLicenseEmail = email; + HotReloadPrefs.RedeemLicenseInvoice = invoiceNumber; + // prepare data for login screen + HotReloadPrefs.LicenseEmail = email; + HotReloadPrefs.LicensePassword = null; + + SwitchToStage(RedeemStage.Login); + } + } else if (resp?.error != null) { + Log.Warning($"Redeeming a license failed with error: {resp.error}"); + error = GetPrettyError(resp); + } else { + Log.Warning("Redeeming a license failed: uknown error encountered"); + error = unknownError; + } + } + + string GetPrettyError(RedeemResponse response) { + var err = response?.error; + if (err == null) { + return unknownError; + } + if (err.Contains("Invalid email")) { + return "Please enter a valid email address."; + } else if (err.Contains("License invoice already redeemed")) { + return "The invoice number/order ID you're trying to use has already been applied to redeem a license. Please enter a different invoice number/order ID. If you have already redeemed a license for another email, you may proceed to the next step."; + } else if (err.Contains("Different license already redeemed by given email")) { + return "The provided email has already been used to redeem a license. If you have previously redeemed a license, you can proceed to the next step and use your existing credentials. If not, please input a different email address."; + } else if (err.Contains("Invoice not found")) { + return "The invoice was not found. Please ensure that you've entered the correct invoice number/order ID."; + } else if (err.Contains("Invoice refunded")) { + return "The purchase has been refunded. Please enter a different invoice number/order ID."; + } else { + return unknownError; + } + } + + async Task RequestRedeem(string email, string invoiceNumber) { + requestingRedeem = true; + await ThreadUtility.SwitchToThreadPool(); + try { + redeemClient = redeemClient ?? (redeemClient = HttpClientUtils.CreateHttpClient()); + var input = new Dictionary { + { "email", email }, + { "invoice", invoiceNumber } + }; + var content = new StringContent(JsonConvert.SerializeObject(input), Encoding.UTF8, "application/json"); + using (var resp = await redeemClient.PostAsync(redeemUrl, content, HotReloadWindow.Current.cancelToken).ConfigureAwait(false)) { + if (resp.StatusCode != HttpStatusCode.OK) { + return new RedeemResponse(null, $"Redeem request failed. Status code: {(int)resp.StatusCode}, reason: {resp.ReasonPhrase}"); + } + var str = await resp.Content.ReadAsStringAsync().ConfigureAwait(false); + try { + return JsonConvert.DeserializeObject(str); + } catch (Exception ex) { + return new RedeemResponse(null, $"Failed deserializing redeem response with exception: {ex.GetType().Name}: {ex.Message}"); + } + } + } catch (WebException ex) { + return new RedeemResponse(null, $"Redeeming license failed: WebException encountered {ex.Message}"); + } finally { + requestingRedeem = false; + } + } + + private class RedeemResponse { + public string status; + public string error; + + public RedeemResponse(string status, string error) { + this.status = status; + this.error = error; + } + } + + private void RenderLogin(HotReloadRunTabState state) { + if (status == statusSuccess) { + EditorGUILayout.HelpBox("Success! You will receive an email containing your license password shortly. Once you receive it, please enter the received password in the designated field below to complete your registration.", MessageType.Info); + } else if (status == statusAlreadyClaimed) { + EditorGUILayout.HelpBox("Your license has already been redeemed. Please enter your existing password below.", MessageType.Info); + } + EditorGUILayout.Space(); + EditorGUILayout.Space(); + + HotReloadRunTab.RenderLicenseInnerPanel(state, renderLogout: false); + EditorGUILayout.Space(); + EditorGUILayout.Space(); + + using (new EditorGUILayout.HorizontalScope()) { + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Go Back", secondaryButtonLayoutOptions)) { + SwitchToStage(RedeemStage.Redeem); + } + GUILayout.FlexibleSpace(); + } + } + + public void StartRegistration() { + // ReSharper disable once AssignNullToNotNullAttribute + Directory.CreateDirectory(Path.GetDirectoryName(registerFlagPath)); + using (File.Create(registerFlagPath)) { + } + RedeemStage = RedeemStage.Registration; + RegistrationOutcome = RegistrationOutcome.None; + } + + public void FinishRegistration(RegistrationOutcome outcome) { + // ReSharper disable once AssignNullToNotNullAttribute + Directory.CreateDirectory(Path.GetDirectoryName(registerFlagPath)); + File.WriteAllText(registerOutcomePath, outcome.ToString()); + File.Delete(registerFlagPath); + RegistrationOutcome = outcome; + SwitchToStage(RedeemStage.None); + Cleanup(); + } + + void SwitchToStage(RedeemStage stage) { + // remove focus so that the input field re-renders + GUI.FocusControl(null); + RedeemStage = stage; + } + + void Cleanup() { + redeemClient?.Dispose(); + redeemClient = null; + _pendingCompanySize = null; + _pendingInvoiceNumber = null; + _pendingRedeemEmail = null; + status = null; + error = null; + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Helpers/RedeemLicenseHelper.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Helpers/RedeemLicenseHelper.cs.meta new file mode 100644 index 0000000..1fd070c --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Helpers/RedeemLicenseHelper.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: ad73f74d3c494c02aae937e2dfa305a2 +timeCreated: 1689791373 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/Helpers/RedeemLicenseHelper.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadAboutTab.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadAboutTab.cs new file mode 100644 index 0000000..d2b6e95 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadAboutTab.cs @@ -0,0 +1,310 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.Globalization; +using System.Linq; +using UnityEditor; +using UnityEngine; +using System.Threading.Tasks; +using System.IO; +using SingularityGroup.HotReload.Newtonsoft.Json; +using SingularityGroup.HotReload.EditorDependencies; + +namespace SingularityGroup.HotReload.Editor { + internal struct HotReloadAboutTabState { + public readonly bool logsFodlerExists; + public readonly IReadOnlyList changelog; + public readonly bool loginRequired; + public readonly bool hasTrialLicense; + public readonly bool hasPayedLicense; + + public HotReloadAboutTabState( + bool logsFodlerExists, + IReadOnlyList changelog, + bool loginRequired, + bool hasTrialLicense, + bool hasPayedLicense + ) { + this.logsFodlerExists = logsFodlerExists; + this.changelog = changelog; + this.loginRequired = loginRequired; + this.hasTrialLicense = hasTrialLicense; + this.hasPayedLicense = hasPayedLicense; + } + } + + internal class HotReloadAboutTab : HotReloadTabBase { + internal static readonly OpenURLButton seeMore = new OpenURLButton("See More", Constants.ChangelogURL); + internal static readonly OpenDialogueButton manageLicenseButton = new OpenDialogueButton("Manage License", Constants.ManageLicenseURL, "Manage License", "Upgrade/downgrade/edit your subscription and edit payment info.", "Open in browser", "Cancel"); + internal static readonly OpenDialogueButton manageAccountButton = new OpenDialogueButton("Manage Account", Constants.ManageAccountURL, "Manage Account", "Login with company code 'naughtycult'. Use the email you signed up with. Your initial password was sent to you by email.", "Open in browser", "Cancel"); + internal static readonly OpenURLButton contactButton = new OpenURLButton("Contact", Constants.ContactURL); + internal static readonly OpenURLButton discordButton = new OpenURLButton("Join Discord", Constants.DiscordInviteUrl); + internal static readonly OpenDialogueButton reportIssueButton = new OpenDialogueButton("Report issue", Constants.ReportIssueURL, "Report issue", "Report issue in our public issue tracker. Requires gitlab.com account (if you don't have one and are not willing to make it, please contact us by other means such as our website).", "Open in browser", "Cancel"); + + private Vector2 _changelogScroll; + private IReadOnlyList _changelog = new List(); + private bool _requestedChangelog; + private int _changelogRequestAttempt; + private string _changelogDir = Path.Combine(PackageConst.LibraryCachePath, "changelog.json"); + public static string logsPath = Path.Combine(PackageConst.LibraryCachePath, "logs"); + + private static bool LatestChangelogLoaded(IReadOnlyList changelog) { + return changelog.Any() && changelog[0].versionNum == PackageUpdateChecker.lastRemotePackageVersion; + } + + private async Task FetchChangelog() { + if(!_changelog.Any()) { + var file = new FileInfo(_changelogDir); + if (file.Exists) { + await Task.Run(() => { + var bytes = File.ReadAllText(_changelogDir); + _changelog = JsonConvert.DeserializeObject>(bytes); + }); + } + } + if (_requestedChangelog || LatestChangelogLoaded(_changelog)) { + return; + } + _requestedChangelog = true; + try { + do { + var changelogRequestTimeout = ExponentialBackoff.GetTimeout(_changelogRequestAttempt); + _changelog = await RequestHelper.FetchChangelog() ?? _changelog; + if (LatestChangelogLoaded(_changelog)) { + await Task.Run(() => { + Directory.CreateDirectory(PackageConst.LibraryCachePath); + File.WriteAllText(_changelogDir, JsonConvert.SerializeObject(_changelog)); + }); + Repaint(); + return; + } + await Task.Delay(changelogRequestTimeout); + } while (_changelogRequestAttempt++ < 1000 && !LatestChangelogLoaded(_changelog)); + } catch { + // ignore + } finally { + _requestedChangelog = false; + } + } + + public HotReloadAboutTab(HotReloadWindow window) : base(window, "Help", "_Help", "Info and support for Hot Reload for Unity.") { } + + string GetRelativeDate(DateTime givenDate) { + const int second = 1; + const int minute = 60 * second; + const int hour = 60 * minute; + const int day = 24 * hour; + const int month = 30 * day; + + var ts = new TimeSpan(DateTime.UtcNow.Ticks - givenDate.Ticks); + var delta = Math.Abs(ts.TotalSeconds); + + if (delta < 24 * hour) + return "Today"; + + if (delta < 48 * hour) + return "Yesterday"; + + if (delta < 30 * day) + return ts.Days + " days ago"; + + if (delta < 12 * month) { + var months = Convert.ToInt32(Math.Floor((double)ts.Days / 30)); + return months <= 1 ? "one month ago" : months + " months ago"; + } + var years = Convert.ToInt32(Math.Floor((double)ts.Days / 365)); + return years <= 1 ? "one year ago" : years + " years ago"; + } + + void RenderVersion(ChangelogVersion version) { + var tempTextString = ""; + + //version number + EditorGUILayout.TextArea(version.versionNum, HotReloadWindowStyles.H1TitleStyle); + + //general info + if (version.generalInfo != null) { + EditorGUILayout.TextArea(version.generalInfo, HotReloadWindowStyles.H3TitleStyle); + } + + //features + if (version.features != null) { + EditorGUILayout.TextArea("Features:", HotReloadWindowStyles.H2TitleStyle); + tempTextString = ""; + foreach (var feature in version.features) { + tempTextString += "• " + feature + "\n"; + } + EditorGUILayout.TextArea(tempTextString, HotReloadWindowStyles.ChangelogPointerStyle); + } + + //improvements + if (version.improvements != null) { + EditorGUILayout.TextArea("Improvements:", HotReloadWindowStyles.H2TitleStyle); + tempTextString = ""; + foreach (var improvement in version.improvements) { + tempTextString += "• " + improvement + "\n"; + } + EditorGUILayout.TextArea(tempTextString, HotReloadWindowStyles.ChangelogPointerStyle); + } + + //fixes + if (version.fixes != null) { + EditorGUILayout.TextArea("Fixes:", HotReloadWindowStyles.H2TitleStyle); + tempTextString = ""; + foreach (var fix in version.fixes) { + tempTextString += "• " + fix + "\n"; + } + EditorGUILayout.TextArea(tempTextString, HotReloadWindowStyles.ChangelogPointerStyle); + } + + //date + DateTime date; + if (DateTime.TryParseExact(version.date, "dd/MM/yyyy", null, DateTimeStyles.None, out date)) { + var relativeDate = GetRelativeDate(date); + GUILayout.TextArea(relativeDate, HotReloadWindowStyles.H3TitleStyle); + } + } + + void RenderChangelog() { + FetchChangelog().Forget(); + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.SectionInnerBoxWide)) { + using (new EditorGUILayout.VerticalScope()) { + HotReloadPrefs.ShowChangeLog = EditorGUILayout.Foldout(HotReloadPrefs.ShowChangeLog, "Changelog", true, HotReloadWindowStyles.FoldoutStyle); + if (!HotReloadPrefs.ShowChangeLog) { + return; + } + // changelog versions + var maxChangeLogs = 5; + var index = 0; + foreach (var version in currentState.changelog) { + index++; + if (index > maxChangeLogs) { + break; + } + + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.ChangelogSectionInnerBox)) { + using (new EditorGUILayout.VerticalScope()) { + RenderVersion(version); + } + } + } + // see more button + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.ChangelogSectionInnerBox)) { + seeMore.OnGUI(); + } + } + } + } + + private Vector2 _aboutTabScrollPos; + + HotReloadAboutTabState currentState; + public override void OnGUI() { + // HotReloadAboutTabState ensures rendering is consistent between Layout and Repaint calls + // Without it errors like this happen: + // ArgumentException: Getting control 2's position in a group with only 2 controls when doing repaint + // See thread for more context: https://answers.unity.com/questions/17718/argumentexception-getting-control-2s-position-in-a.html + if (Event.current.type == EventType.Layout) { + currentState = new HotReloadAboutTabState( + logsFodlerExists: Directory.Exists(logsPath), + changelog: _changelog, + loginRequired: EditorCodePatcher.LoginNotRequired, + hasTrialLicense: _window.RunTab.TrialLicense, + hasPayedLicense: _window.RunTab.HasPayedLicense + ); + } + using (var scope = new EditorGUILayout.ScrollViewScope(_aboutTabScrollPos, GUI.skin.horizontalScrollbar, GUI.skin.verticalScrollbar, GUILayout.MaxHeight(Math.Max(HotReloadWindowStyles.windowScreenHeight, 800)), GUILayout.MaxWidth(Math.Max(HotReloadWindowStyles.windowScreenWidth, 800)))) { + _aboutTabScrollPos.x = scope.scrollPosition.x; + _aboutTabScrollPos.y = scope.scrollPosition.y; + + using (new EditorGUILayout.VerticalScope(HotReloadWindowStyles.DynamicSectionHelpTab)) { + using (new EditorGUILayout.VerticalScope()) { + GUILayout.Space(10); + RenderLogButtons(); + + EditorGUILayout.Space(); + EditorGUILayout.HelpBox($" Hot Reload version {PackageConst.Version}. ", MessageType.Info); + EditorGUILayout.Space(); + + RenderHelpButtons(); + + GUILayout.Space(15); + + try { + RenderChangelog(); + } catch { + // ignore + } + } + } + } + } + + void RenderHelpButtons() { + var labelRect = GUILayoutUtility.GetLastRect(); + using (new EditorGUILayout.HorizontalScope()) { + using (new EditorGUILayout.VerticalScope()) { + var buttonHeight = 19; + + var bigButtonRect = new Rect(labelRect.x + 3, labelRect.y + 5, labelRect.width - 6, buttonHeight); + OpenURLButton.RenderRaw(bigButtonRect, "Documentation", Constants.DocumentationURL, HotReloadWindowStyles.HelpTabButton); + + var firstLayerX = bigButtonRect.x; + var firstLayerY = bigButtonRect.y + buttonHeight + 3; + var firstLayerWidth = (int)((bigButtonRect.width / 2) - 3); + + var secondLayerX = firstLayerX + firstLayerWidth + 5; + var secondLayerY = firstLayerY + buttonHeight + 3; + var secondLayerWidth = bigButtonRect.width - firstLayerWidth - 5; + + using (new EditorGUILayout.HorizontalScope()) { + OpenURLButton.RenderRaw(new Rect { x = firstLayerX, y = firstLayerY, width = firstLayerWidth, height = buttonHeight }, contactButton.text, contactButton.url, HotReloadWindowStyles.HelpTabButton); + OpenURLButton.RenderRaw(new Rect { x = secondLayerX, y = firstLayerY, width = secondLayerWidth, height = buttonHeight }, "Unity Forum", Constants.ForumURL, HotReloadWindowStyles.HelpTabButton); + } + using (new EditorGUILayout.HorizontalScope()) { + OpenDialogueButton.RenderRaw(rect: new Rect { x = firstLayerX, y = secondLayerY, width = firstLayerWidth, height = buttonHeight }, text: reportIssueButton.text, url: reportIssueButton.url, title: reportIssueButton.title, message: reportIssueButton.message, ok: reportIssueButton.ok, cancel: reportIssueButton.cancel, style: HotReloadWindowStyles.HelpTabButton); + OpenURLButton.RenderRaw(new Rect { x = secondLayerX, y = secondLayerY, width = secondLayerWidth, height = buttonHeight }, discordButton.text, discordButton.url, HotReloadWindowStyles.HelpTabButton); + } + } + } + GUILayout.Space(80); + } + + void RenderLogButtons() { + if (currentState.logsFodlerExists) { + EditorGUILayout.Space(); + EditorGUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + if (GUILayout.Button("Open Log File")) { + var mostRecentFile = LogsHelper.FindRecentLog(logsPath); + if (mostRecentFile == null) { + Log.Info("No logs found"); + } else { + try { + Process.Start($"\"{Path.Combine(logsPath, mostRecentFile)}\""); + } catch (Win32Exception e) { + if (e.Message.Contains("Application not found")) { + try { + Process.Start("notepad.exe", $"\"{Path.Combine(logsPath, mostRecentFile)}\""); + } catch { + // Fallback to opening folder with all logs + Process.Start($"\"{logsPath}\""); + Log.Info("Failed opening log file."); + } + } + } catch { + // Fallback to opening folder with all logs + Process.Start($"\"{logsPath}\""); + Log.Info("Failed opening log file."); + } + } + } + if (GUILayout.Button("Browse all logs")) { + Process.Start($"\"{logsPath}\""); + } + EditorGUILayout.EndHorizontal(); + } + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadAboutTab.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadAboutTab.cs.meta new file mode 100644 index 0000000..e4a19e3 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadAboutTab.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 7cf8e9ef1ab770249a4318e88e882a85 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadAboutTab.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadOptionsSection.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadOptionsSection.cs new file mode 100644 index 0000000..63b5c43 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadOptionsSection.cs @@ -0,0 +1,49 @@ +using UnityEditor; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor { + internal class HotReloadOptionsSection { + /// + /// Opening options tab does not automatically create the settings asset file. + /// - The Options UI shows defaults if the object asset doesn't exist. + /// - When a build starts, we also ensure the asset file exists. + /// + public void DrawGUI(SerializedObject so) { + so.Update(); // must update in-case asset was modified externally + + foreach (var option in HotReloadSettingsTab.allOptions) { + GUILayout.Space(4f); + DrawOption(option, so); + } + + // commit any changes to the underlying ScriptableObject + if (so.hasModifiedProperties) { + so.ApplyModifiedProperties(); + // Ensure asset file exists on disk, because we initially create it in memory (to provide the default values) + // This does not save the asset, user has to do that by saving assets in Unity (e.g. press hotkey Ctrl + S) + var target = so.targetObject as HotReloadSettingsObject; + if (target == null) { + Log.Warning("Unexpected problem unable to save HotReloadSettingsObject"); + } else { + // when one of the project options changed then we ensure the asset file exists. + HotReloadSettingsEditor.EnsureSettingsCreated(target); + } + } + } + + static void DrawOption(IOption option, SerializedObject so) { + EditorGUILayout.BeginVertical(HotReloadWindowStyles.BoxStyle); + + var before = option.GetValue(so); + var after = EditorGUILayout.BeginToggleGroup(new GUIContent(" " + option.Summary), before); + if (after != before) { + option.SetValue(so, after); + } + + option.InnerOnGUI(so); + + EditorGUILayout.EndToggleGroup(); + EditorGUILayout.EndVertical(); + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadOptionsSection.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadOptionsSection.cs.meta new file mode 100644 index 0000000..7cb5d84 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadOptionsSection.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 24379a407eff8494eac0f7841b70e574 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadOptionsSection.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadRunTab.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadRunTab.cs new file mode 100644 index 0000000..0a3556a --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadRunTab.cs @@ -0,0 +1,1389 @@ +using System; +using System.Collections.Generic; +using System.IO; +using SingularityGroup.HotReload.DTO; +using SingularityGroup.HotReload.EditorDependencies; +using UnityEditor; +using UnityEditor.Compilation; +using UnityEngine; +using Color = UnityEngine.Color; +using Task = System.Threading.Tasks.Task; +#if UNITY_2019_4_OR_NEWER +using Unity.CodeEditor; +#endif + +namespace SingularityGroup.HotReload.Editor { + internal class ErrorData { + public string fileName; + public string error; + public TextAsset file; + public int lineNumber; + public string stacktrace; + public string linkString; + private static string[] supportedPaths = new[] { Path.GetFullPath("Assets"), Path.GetFullPath("Plugins") }; + + public static ErrorData GetErrorData(string errorString) { + // Get the relevant file name + string stackTrace = errorString; + string fileName = null; + try { + int csIndex = 0; + int attempt = 0; + do { + csIndex = errorString.IndexOf(".cs", csIndex + 1, StringComparison.Ordinal); + if (csIndex == -1) { + break; + } + int fileNameStartIndex = csIndex - 1; + for (; fileNameStartIndex >= 0; fileNameStartIndex--) { + if (!char.IsLetter(errorString[fileNameStartIndex])) { + if (errorString.Contains("error CS")) { + fileName = errorString.Substring(fileNameStartIndex + 1, + csIndex - fileNameStartIndex + ".cs".Length - 1); + } else { + fileName = errorString.Substring(fileNameStartIndex, + csIndex - fileNameStartIndex + ".cs".Length); + } + break; + } + } + } while (attempt++ < 100 && fileName == null); + } catch { + // ignore + } + fileName = fileName ?? "Tap to show stacktrace"; + + // Get the error + string error = (errorString.Contains("error CS") + ? "Compile error, " + : "Unsupported change detected, ") + "tap here to see more."; + int endOfError = errorString.IndexOf(". in ", StringComparison.Ordinal); + string specialChars = "\"'/\\"; + char[] characters = specialChars.ToCharArray(); + int specialChar = errorString.IndexOfAny(characters); + try { + if (errorString.Contains("error CS") ) { + error = errorString.Substring(errorString.IndexOf("error CS", StringComparison.Ordinal), errorString.Length - errorString.IndexOf("error CS", StringComparison.Ordinal)).Trim(); + using (StringReader reader = new StringReader(error)) { + string line; + while ((line = reader.ReadLine()) != null) { + error = line; + break; + } + } + } else if (errorString.StartsWith("errors:", StringComparison.Ordinal) && endOfError > 0) { + error = errorString.Substring("errors: ".Length, endOfError - "errors: ".Length).Trim(); + } else if (errorString.StartsWith("errors:", StringComparison.Ordinal) && specialChar > 0) { + error = errorString.Substring("errors: ".Length, specialChar - "errors: ".Length).Trim(); + } + } catch { + // ignore + } + + // Get relative path + TextAsset file = null; + try { + foreach (var path in supportedPaths) { + int lastprojectIndex = 0; + int attempt = 0; + while (attempt++ < 100 && !file) { + lastprojectIndex = errorString.IndexOf(path, lastprojectIndex + 1, StringComparison.Ordinal); + if (lastprojectIndex == -1) { + break; + } + var fullCsIndex = errorString.IndexOf(".cs", lastprojectIndex, StringComparison.Ordinal); + var l = fullCsIndex - lastprojectIndex + ".cs".Length; + if (l <= 0) { + continue; + } + var candidateAbsolutePath = errorString.Substring(lastprojectIndex, fullCsIndex - lastprojectIndex + ".cs".Length); + var candidateRelativePath = EditorCodePatcher.GetRelativePath(filespec: candidateAbsolutePath, folder: path); + file = AssetDatabase.LoadAssetAtPath(candidateRelativePath); + } + } + } catch { + // ignore + } + + // Get the line number + int lineNumber = 0; + try { + int lastIndex = 0; + int attempt = 0; + do { + lastIndex = errorString.IndexOf(fileName, lastIndex + 1, StringComparison.Ordinal); + if (lastIndex == -1) { + break; + } + var part = errorString.Substring(lastIndex + fileName.Length); + if (!part.StartsWith(errorString.Contains("error CS") ? "(" : ":", StringComparison.Ordinal) + || part.Length == 1 + || !char.IsDigit(part[1]) + ) { + continue; + } + int y = 1; + for (; y < part.Length; y++) { + if (!char.IsDigit(part[y])) { + break; + } + } + if (int.TryParse(part.Substring(1, errorString.Contains("error CS") ? y - 1 : y), out lineNumber)) { + break; + } + } while (attempt++ < 100); + } catch { + //ignore + } + + return new ErrorData() { + fileName = fileName, + error = error, + file = file, + lineNumber = lineNumber, + stacktrace = stackTrace, + linkString = lineNumber > 0 ? fileName + ":" + lineNumber : fileName + }; + } + + } + + internal struct HotReloadRunTabState { + public readonly bool spinnerActive; + public readonly string indicationIconPath; + public readonly bool requestingDownloadAndRun; + public readonly bool starting; + public readonly bool stopping; + public readonly bool running; + public readonly Tuple startupProgress; + public readonly string indicationStatusText; + public readonly LoginStatusResponse loginStatus; + public readonly bool downloadRequired; + public readonly bool downloadStarted; + public readonly bool requestingLoginInfo; + public readonly RedeemStage redeemStage; + public readonly int suggestionCount; + + public HotReloadRunTabState( + bool spinnerActive, + string indicationIconPath, + bool requestingDownloadAndRun, + bool starting, + bool stopping, + bool running, + Tuple startupProgress, + string indicationStatusText, + LoginStatusResponse loginStatus, + bool downloadRequired, + bool downloadStarted, + bool requestingLoginInfo, + RedeemStage redeemStage, + int suggestionCount + ) { + this.spinnerActive = spinnerActive; + this.indicationIconPath = indicationIconPath; + this.requestingDownloadAndRun = requestingDownloadAndRun; + this.starting = starting; + this.stopping = stopping; + this.running = running; + this.startupProgress = startupProgress; + this.indicationStatusText = indicationStatusText; + this.loginStatus = loginStatus; + this.downloadRequired = downloadRequired; + this.downloadStarted = downloadStarted; + this.requestingLoginInfo = requestingLoginInfo; + this.redeemStage = redeemStage; + this.suggestionCount = suggestionCount; + } + + public static HotReloadRunTabState Current => new HotReloadRunTabState( + spinnerActive: EditorIndicationState.SpinnerActive, + indicationIconPath: EditorIndicationState.IndicationIconPath, + requestingDownloadAndRun: EditorCodePatcher.RequestingDownloadAndRun, + starting: EditorCodePatcher.Starting, + stopping: EditorCodePatcher.Stopping, + running: EditorCodePatcher.Running, + startupProgress: EditorCodePatcher.StartupProgress, + indicationStatusText: EditorIndicationState.IndicationStatusText, + loginStatus: EditorCodePatcher.Status, + downloadRequired: EditorCodePatcher.DownloadRequired, + downloadStarted: EditorCodePatcher.DownloadStarted, + requestingLoginInfo: EditorCodePatcher.RequestingLoginInfo, + redeemStage: RedeemLicenseHelper.I.RedeemStage, + suggestionCount: HotReloadTimelineHelper.Suggestions.Count + ); + } + + internal struct LicenseErrorData { + public readonly string description; + public bool showBuyButton; + public string buyButtonText; + public readonly bool showLoginButton; + public readonly string loginButtonText; + public readonly bool showSupportButton; + public readonly string supportButtonText; + public readonly bool showManageLicenseButton; + public readonly string manageLicenseButtonText; + + public LicenseErrorData(string description, bool showManageLicenseButton = false, string manageLicenseButtonText = "", string loginButtonText = "", bool showSupportButton = false, string supportButtonText = "", bool showBuyButton = false, string buyButtonText = "", bool showLoginButton = false) { + this.description = description; + this.showManageLicenseButton = showManageLicenseButton; + this.manageLicenseButtonText = manageLicenseButtonText; + this.loginButtonText = loginButtonText; + this.showSupportButton = showSupportButton; + this.supportButtonText = supportButtonText; + this.showBuyButton = showBuyButton; + this.buyButtonText = buyButtonText; + this.showLoginButton = showLoginButton; + } + } + + internal class HotReloadRunTab : HotReloadTabBase { + private static string _pendingEmail; + private static string _pendingPassword; + private string _pendingPromoCode; + private bool _requestingActivatePromoCode; + + private static Tuple _activateInfoMessage; + + private HotReloadRunTabState currentState => _window.RunTabState; + // Has Indie or Pro license (even if not currenctly active) + public bool HasPayedLicense => currentState.loginStatus != null && (currentState.loginStatus.isIndieLicense || currentState.loginStatus.isBusinessLicense); + public bool TrialLicense => currentState.loginStatus != null && (currentState.loginStatus?.isTrial == true); + + private Vector2 _patchedMethodsScrollPos; + private Vector2 _runTabScrollPos; + + private string promoCodeError; + private MessageType promoCodeErrorType; + private bool promoCodeActivatedThisSession; + + public HotReloadRunTab(HotReloadWindow window) : base(window, "Run", "forward", "Run and monitor the current Hot Reload session.") { } + + public override void OnGUI() { + using(new EditorGUILayout.VerticalScope()) { + OnGUICore(); + } + } + + internal static bool ShouldRenderConsumption(HotReloadRunTabState currentState) => (currentState.running && !currentState.starting && !currentState.stopping && currentState.loginStatus?.isLicensed != true && currentState.loginStatus?.isFree != true && !EditorCodePatcher.LoginNotRequired) && !(currentState.loginStatus == null || currentState.loginStatus.isFree); + + void OnGUICore() { + using (var scope = new EditorGUILayout.ScrollViewScope(_runTabScrollPos, GUI.skin.horizontalScrollbar, GUI.skin.verticalScrollbar, GUILayout.MaxHeight(Math.Max(HotReloadWindowStyles.windowScreenHeight, 800)), GUILayout.MaxWidth(Math.Max(HotReloadWindowStyles.windowScreenWidth, 800)))) { + _runTabScrollPos.x = scope.scrollPosition.x; + _runTabScrollPos.y = scope.scrollPosition.y; + using (new EditorGUILayout.VerticalScope(HotReloadWindowStyles.DynamiSection)) { + if (HotReloadWindowStyles.windowScreenWidth > Constants.UpgradeLicenseNoteHideWidth + && HotReloadWindowStyles.windowScreenHeight > Constants.UpgradeLicenseNoteHideHeight + ) { + RenderUpgradeLicenseNote(currentState, HotReloadWindowStyles.UpgradeLicenseButtonStyle); + } + + RenderIndicationPanel(); + + if (CanRenderBars(currentState)) { + RenderBars(currentState); + // clear red dot next time button shows + HotReloadState.ShowingRedDot = false; + } + } + } + + // At the end to not fuck up rendering https://answers.unity.com/questions/400454/argumentexception-getting-control-0s-position-in-a-1.html + var renderStart = !EditorCodePatcher.Running && !EditorCodePatcher.Starting && !currentState.requestingDownloadAndRun && currentState.redeemStage == RedeemStage.None; + var e = Event.current; + if (renderStart && e.type == EventType.KeyUp + && (e.keyCode == KeyCode.Return + || e.keyCode == KeyCode.KeypadEnter) + ) { + EditorCodePatcher.DownloadAndRun().Forget(); + } + } + + internal static void RenderUpgradeLicenseNote(HotReloadRunTabState currentState, GUIStyle style) { + var isIndie = RedeemLicenseHelper.I.RegistrationOutcome == RegistrationOutcome.Indie + || EditorCodePatcher.licenseType == UnityLicenseType.UnityPersonalPlus; + + if (RedeemLicenseHelper.I.RegistrationOutcome == RegistrationOutcome.Business + && currentState.loginStatus?.isBusinessLicense != true + && EditorCodePatcher.Running + && (PackageConst.IsAssetStoreBuild || HotReloadPrefs.RateAppShown) + ) { + // Warn asset store users they need to buy a business license + // Website users get reminded after using Hot Reload for 5+ days + RenderBusinessLicenseInfo(style); + } else if (isIndie + && HotReloadPrefs.RateAppShown + && !PackageConst.IsAssetStoreBuild + && EditorCodePatcher.Running + && currentState.loginStatus?.isBusinessLicense != true + && currentState.loginStatus?.isIndieLicense != true + ) { + // Reminder users they need to buy an indie license + RenderIndieLicenseInfo(style); + } + } + + internal static bool CanRenderBars(HotReloadRunTabState currentState) { + return HotReloadWindowStyles.windowScreenHeight > Constants.EventsListHideHeight + && HotReloadWindowStyles.windowScreenWidth > Constants.EventsListHideWidth + && !currentState.starting + && !currentState.stopping + && !currentState.requestingDownloadAndRun + ; + } + + static Texture2D GetFoldoutIcon(AlertEntry alertEntry) { + InvertibleIcon alertIcon = InvertibleIcon.FoldoutClosed; + if (HotReloadTimelineHelper.expandedEntries.Contains(alertEntry)) { + alertIcon = InvertibleIcon.FoldoutOpen; + } + return GUIHelper.GetInvertibleIcon(alertIcon); + } + + static void ToggleEntry(AlertEntry alertEntry) { + if (HotReloadTimelineHelper.expandedEntries.Contains(alertEntry)) { + HotReloadTimelineHelper.expandedEntries.Remove(alertEntry); + } else { + HotReloadTimelineHelper.expandedEntries.Add(alertEntry); + } + } + + static void RenderEntries(TimelineType timelineType) { + List alertEntries; + + alertEntries = timelineType == TimelineType.Suggestions ? HotReloadTimelineHelper.Suggestions : HotReloadTimelineHelper.EventsTimeline; + + bool skipChildren = false; + for (int i = 0; i < alertEntries.Count; i++) { + var alertEntry = alertEntries[i]; + if (i > HotReloadTimelineHelper.maxVisibleEntries && alertEntry.entryType != EntryType.Child) { + break; + } + if (timelineType != TimelineType.Suggestions) { + if (alertEntry.entryType != EntryType.Child + && !enabledFilters.Contains(alertEntry.alertType) + ) { + skipChildren = true; + continue; + } else if (alertEntry.entryType == EntryType.Child && skipChildren) { + continue; + } else { + skipChildren = false; + } + } + + EntryType entryType = alertEntry.entryType; + + string title = $" {alertEntry.title}{(!string.IsNullOrEmpty(alertEntry.shortDescription) ? $": {alertEntry.shortDescription}": "")}"; + Texture2D icon = null; + GUIStyle style; + if (entryType != EntryType.Child) { + icon = GUIHelper.GetLocalIcon(HotReloadTimelineHelper.alertIconString[alertEntry.iconType]); + } + if (entryType == EntryType.Child) { + style = HotReloadWindowStyles.ChildBarStyle; + } else if (entryType == EntryType.Foldout) { + style = HotReloadWindowStyles.FoldoutBarStyle; + } else { + style = HotReloadWindowStyles.BarStyle; + } + + Rect startRect; + using (new EditorGUILayout.HorizontalScope()) { + GUILayout.Space(0); + Rect spaceRect = GUILayoutUtility.GetLastRect(); + // entry header foldout arrow + if (entryType == EntryType.Foldout) { + GUI.Label(new Rect(spaceRect.x + 3, spaceRect.y, 20, 20), new GUIContent(GetFoldoutIcon(alertEntry))); + } else if (entryType == EntryType.Child) { + GUI.Label(new Rect(spaceRect.x + 26, spaceRect.y + 2, 20, 20), new GUIContent(GetFoldoutIcon(alertEntry))); + } + // a workaround to limit the width of the label + GUILayout.Label(new GUIContent(""), style); + startRect = GUILayoutUtility.GetLastRect(); + GUI.Label(startRect, new GUIContent(title, icon), style); + } + + bool clickableDescription = (alertEntry.title == "Unsupported change" || alertEntry.title == "Compile error" || alertEntry.title == "Failed applying patch to method") && alertEntry.alertData.alertEntryType != AlertEntryType.InlinedMethod; + + if (HotReloadTimelineHelper.expandedEntries.Contains(alertEntry) || alertEntry.alertType == AlertType.CompileError) { + using (new EditorGUILayout.VerticalScope()) { + using (new EditorGUILayout.HorizontalScope()) { + using (new EditorGUILayout.VerticalScope(entryType == EntryType.Child ? HotReloadWindowStyles.ChildEntryBoxStyle : HotReloadWindowStyles.EntryBoxStyle)) { + if (alertEntry.alertType == AlertType.Suggestion || !clickableDescription) { + GUILayout.Label(alertEntry.description, HotReloadWindowStyles.LabelStyle); + } + if (alertEntry.actionData != null) { + alertEntry.actionData.Invoke(); + } + GUILayout.Space(5f); + } + } + } + } + + // remove button + if (timelineType == TimelineType.Suggestions && alertEntry.hasExitButton) { + var isClick = GUI.Button(new Rect(startRect.x + startRect.width - 20, startRect.y + 2, 20, 20), new GUIContent(GUIHelper.GetInvertibleIcon(InvertibleIcon.Close)), HotReloadWindowStyles.RemoveIconStyle); + if (isClick) { + HotReloadTimelineHelper.EventsTimeline.Remove(alertEntry); + var kind = HotReloadSuggestionsHelper.FindSuggestionKind(alertEntry); + if (kind != null) { + HotReloadSuggestionsHelper.SetSuggestionInactive((HotReloadSuggestionKind)kind); + } + _instantRepaint = true; + } + } + + // Extend background to whole entry + var endRect = GUILayoutUtility.GetLastRect(); + if (GUI.Button(new Rect(startRect) { height = endRect.y - startRect.y + endRect.height}, new GUIContent(""), HotReloadWindowStyles.BarBackgroundStyle) && (entryType == EntryType.Child || entryType == EntryType.Foldout)) { + ToggleEntry(alertEntry); + } + + if (alertEntry.alertType != AlertType.Suggestion && HotReloadWindowStyles.windowScreenWidth > 400 && entryType != EntryType.Child) { + using (new EditorGUILayout.HorizontalScope()) { + var ago = (DateTime.Now - alertEntry.timestamp); + GUI.Label(new Rect(startRect.x + startRect.width - 60, startRect.y, 80, 20), ago.TotalMinutes < 1 ? "now" : $"{(ago.TotalHours > 1 ? $"{Math.Floor(ago.TotalHours)} h " : string.Empty)}{ago.Minutes} min", HotReloadWindowStyles.TimestampStyle); + } + } + + GUILayout.Space(1f); + } + if (timelineType != TimelineType.Suggestions && HotReloadTimelineHelper.GetRunTabTimelineEventCount() > 40) { + GUILayout.Space(3f); + GUILayout.Label(Constants.Only40EntriesShown, HotReloadWindowStyles.EmptyListText); + } + } + + private static List _enabledFilters; + private static List enabledFilters { + get { + if (_enabledFilters == null) { + _enabledFilters = new List(); + } + + if (HotReloadPrefs.RunTabUnsupportedChangesFilter && !_enabledFilters.Contains(AlertType.UnsupportedChange)) + _enabledFilters.Add(AlertType.UnsupportedChange); + if (!HotReloadPrefs.RunTabUnsupportedChangesFilter && _enabledFilters.Contains(AlertType.UnsupportedChange)) + _enabledFilters.Remove(AlertType.UnsupportedChange); + + if (HotReloadPrefs.RunTabCompileErrorFilter && !_enabledFilters.Contains(AlertType.CompileError)) + _enabledFilters.Add(AlertType.CompileError); + if (!HotReloadPrefs.RunTabCompileErrorFilter && _enabledFilters.Contains(AlertType.CompileError)) + _enabledFilters.Remove(AlertType.CompileError); + + if (HotReloadPrefs.RunTabPartiallyAppliedPatchesFilter && !_enabledFilters.Contains(AlertType.PartiallySupportedChange)) + _enabledFilters.Add(AlertType.PartiallySupportedChange); + if (!HotReloadPrefs.RunTabPartiallyAppliedPatchesFilter && _enabledFilters.Contains(AlertType.PartiallySupportedChange)) + _enabledFilters.Remove(AlertType.PartiallySupportedChange); + + if (HotReloadPrefs.RunTabUndetectedPatchesFilter && !_enabledFilters.Contains(AlertType.UndetectedChange)) + _enabledFilters.Add(AlertType.UndetectedChange); + if (!HotReloadPrefs.RunTabUndetectedPatchesFilter && _enabledFilters.Contains(AlertType.UndetectedChange)) + _enabledFilters.Remove(AlertType.UndetectedChange); + + if (HotReloadPrefs.RunTabAppliedPatchesFilter && !_enabledFilters.Contains(AlertType.AppliedChange)) + _enabledFilters.Add(AlertType.AppliedChange); + if (!HotReloadPrefs.RunTabAppliedPatchesFilter && _enabledFilters.Contains(AlertType.AppliedChange)) + _enabledFilters.Remove(AlertType.AppliedChange); + + return _enabledFilters; + } + } + + private Vector2 suggestionsScroll; + static GUILayoutOption[] timelineButtonOptions = new[] { GUILayout.Height(27), GUILayout.Width(100) }; + + internal static void RenderBars(HotReloadRunTabState currentState) { + if (currentState.suggestionCount > 0) { + GUILayout.Space(5f); + + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.Section)) { + using (new EditorGUILayout.VerticalScope()) { + HotReloadPrefs.RunTabEventsSuggestionsFoldout = EditorGUILayout.Foldout(HotReloadPrefs.RunTabEventsSuggestionsFoldout, "", true, HotReloadWindowStyles.CustomFoldoutStyle); + GUILayout.Space(-23); + if (GUILayout.Button($"Suggestions ({currentState.suggestionCount.ToString()})", HotReloadWindowStyles.ClickableLabelBoldStyle, GUILayout.Height(27))) { + HotReloadPrefs.RunTabEventsSuggestionsFoldout = !HotReloadPrefs.RunTabEventsSuggestionsFoldout; + } + if (HotReloadPrefs.RunTabEventsSuggestionsFoldout) { + using (new EditorGUILayout.VerticalScope(HotReloadWindowStyles.Scroll)) { + RenderEntries(TimelineType.Suggestions); + } + } + } + } + } + GUILayout.Space(5f); + + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.Section)) { + using (new EditorGUILayout.VerticalScope()) { + HotReloadPrefs.RunTabEventsTimelineFoldout = EditorGUILayout.Foldout(HotReloadPrefs.RunTabEventsTimelineFoldout, "", true, HotReloadWindowStyles.CustomFoldoutStyle); + GUILayout.Space(-23); + if (GUILayout.Button("Timeline", HotReloadWindowStyles.ClickableLabelBoldStyle, timelineButtonOptions)) { + HotReloadPrefs.RunTabEventsTimelineFoldout = !HotReloadPrefs.RunTabEventsTimelineFoldout; + } + if (HotReloadPrefs.RunTabEventsTimelineFoldout) { + GUILayout.Space(-10); + var noteShown = HotReloadTimelineHelper.GetRunTabTimelineEventCount() == 0 || !currentState.running; + using (new EditorGUILayout.HorizontalScope()) { + if (noteShown) { + GUILayout.Space(2f); + using (new EditorGUILayout.VerticalScope()) { + GUILayout.Space(2f); + string text; + if (currentState.redeemStage != RedeemStage.None) { + text = "Complete registration before using Hot Reload"; + } else if (!currentState.running) { + text = "Use the Start button to activate Hot Reload"; + } else if (enabledFilters.Count < 4 && HotReloadTimelineHelper.EventsTimeline.Count != 0) { + text = "Enable filters to see events"; + } else { + text = "Make code changes to see events"; + } + GUILayout.Label(text, HotReloadWindowStyles.EmptyListText); + } + GUILayout.FlexibleSpace(); + } else { + GUILayout.FlexibleSpace(); + if (HotReloadTimelineHelper.EventsTimeline.Count > 0 && GUILayout.Button("Clear")) { + HotReloadTimelineHelper.ClearEntries(); + if (HotReloadWindow.Current) { + HotReloadWindow.Current.Repaint(); + } + } + GUILayout.Space(3); + } + } + if (!noteShown) { + GUILayout.Space(2f); + using (new EditorGUILayout.VerticalScope()) { + RenderEntries(TimelineType.Timeline); + } + } + } + } + } + } + + internal static void RenderConsumption(LoginStatusResponse loginStatus) { + if (loginStatus == null) { + return; + } + EditorGUILayout.Space(); + + EditorGUILayout.LabelField($"Hot Reload Limited", HotReloadWindowStyles.H3CenteredTitleStyle); + EditorGUILayout.Space(); + if (loginStatus.consumptionsUnavailableReason == ConsumptionsUnavailableReason.NetworkUnreachable) { + EditorGUILayout.HelpBox("Something went wrong. Please check your internet connection.", MessageType.Warning); + } else if (loginStatus.consumptionsUnavailableReason == ConsumptionsUnavailableReason.UnrecoverableError) { + EditorGUILayout.HelpBox("Something went wrong. Please contact support if the issue persists.", MessageType.Error); + } else if (loginStatus.freeSessionFinished) { + var now = DateTime.UtcNow; + var sessionRefreshesAt = (now.AddDays(1).Date - now).Add(TimeSpan.FromMinutes(5)); + var sessionRefreshString = $"Next Session: {(sessionRefreshesAt.Hours > 0 ? $"{sessionRefreshesAt.Hours}h " : "")}{sessionRefreshesAt.Minutes}min"; + HotReloadGUIHelper.HelpBox(sessionRefreshString, MessageType.Warning, fontSize: 11); + } else if (loginStatus.freeSessionRunning && loginStatus.freeSessionEndTime != null) { + var sessionEndsAt = loginStatus.freeSessionEndTime.Value - DateTime.Now; + var sessionString = $"Daily Session: {(sessionEndsAt.Hours > 0 ? $"{sessionEndsAt.Hours}h " : "")}{sessionEndsAt.Minutes}min Left"; + HotReloadGUIHelper.HelpBox(sessionString, MessageType.Info, fontSize: 11); + } else if (loginStatus.freeSessionEndTime == null) { + HotReloadGUIHelper.HelpBox("Daily Session: Make code changes to start", MessageType.Info, fontSize: 11); + } + } + + static bool _repaint; + static bool _instantRepaint; + static DateTime _lastRepaint; + private EditorIndicationState.IndicationStatus _lastStatus; + public override void Update() { + if (EditorIndicationState.SpinnerActive) { + _repaint = true; + } + if (EditorCodePatcher.DownloadRequired) { + _repaint = true; + } + if (EditorIndicationState.IndicationIconPath == Spinner.SpinnerIconPath) { + _repaint = true; + } + try { + // workaround: hovering over non-buttons doesn't repain by default + if (EditorWindow.mouseOverWindow == HotReloadWindow.Current) { + _repaint = true; + } + if (EditorWindow.mouseOverWindow + && EditorWindow.mouseOverWindow?.GetType() == typeof(PopupWindow) + && HotReloadEventPopup.I.open + ) { + _repaint = true; + } + } catch (NullReferenceException) { + // Unity randomly throws nullrefs when EditorWindow.mouseOverWindow gets accessed + } + if (_repaint && DateTime.UtcNow - _lastRepaint > TimeSpan.FromMilliseconds(33)) { + _repaint = false; + _instantRepaint = true; + } + // repaint on status change + var status = EditorIndicationState.CurrentIndicationStatus; + if (_lastStatus != status) { + _lastStatus = status; + _instantRepaint = true; + } + if (_instantRepaint) { + Repaint(); + HotReloadEventPopup.I.Repaint(); + _instantRepaint = false; + _repaint = false; + _lastRepaint = DateTime.UtcNow; + } + } + + public static void RepaintInstant() { + _instantRepaint = true; + } + + private void RenderRecompileButton() { + string recompileText = HotReloadWindowStyles.windowScreenWidth > Constants.RecompileButtonTextHideWidth ? " Recompile" : ""; + var recompileButton = new GUIContent(recompileText, GUIHelper.GetInvertibleIcon(InvertibleIcon.Recompile)); + if (!GUILayout.Button(recompileButton, HotReloadWindowStyles.RecompileButton)) { + return; + } + RecompileWithChecks(); + } + + public static void RecompileWithChecks() { + var firstDialoguePass = HotReloadPrefs.RecompileDialogueShown + || EditorUtility.DisplayDialog( + title: "Hot Reload auto-applies changes", + message: "Using the Recompile button is only necessary when Hot Reload fails to apply your changes. \n\nDo you wish to proceed?", + ok: "Recompile", + cancel: "Not now"); + HotReloadPrefs.RecompileDialogueShown = true; + if (!firstDialoguePass) { + return; + } + if (!ConfirmExitPlaymode("Using the Recompile button will stop Play Mode.\n\nDo you wish to proceed?")) { + return; + } + Recompile(); + } + + #if UNITY_2020_1_OR_NEWER + public static void SwitchToDebugMode() { + CompilationPipeline.codeOptimization = CodeOptimization.Debug; + HotReloadRunTab.Recompile(); + HotReloadSuggestionsHelper.SetSuggestionInactive(HotReloadSuggestionKind.SwitchToDebugModeForInlinedMethods); + } + #endif + + public static bool ConfirmExitPlaymode(string message) { + return !Application.isPlaying + || EditorUtility.DisplayDialog( + title: "Stop Play Mode and Recompile?", + message: message, + ok: "Stop and Recompile", + cancel: "Cancel"); + } + + public static bool recompiling; + public static void Recompile() { + recompiling = true; + EditorApplication.isPlaying = false; + + CompileMethodDetourer.Reset(); + AssetDatabase.Refresh(); + // This forces the recompilation if no changes were made. + // This is better UX because otherwise the recompile button is unresponsive + // which can be extra annoying if there are compile error entries in the list + if (!EditorApplication.isCompiling) { + CompilationPipeline.RequestScriptCompilation(); + } + } + + private void RenderIndicationButtons() { + if (currentState.requestingDownloadAndRun || currentState.starting || currentState.stopping || currentState.redeemStage != RedeemStage.None) { + return; + } + + if (!currentState.running && (currentState.startupProgress?.Item1 ?? 0) == 0) { + string startText = HotReloadWindowStyles.windowScreenWidth > Constants.StartButtonTextHideWidth ? " Start" : ""; + if (GUILayout.Button(new GUIContent(startText, GUIHelper.GetInvertibleIcon(InvertibleIcon.Start)), HotReloadWindowStyles.StartButton)) { + EditorCodePatcher.DownloadAndRun().Forget(); + } + } else if (currentState.running && !currentState.starting) { + if (HotReloadWindowStyles.windowScreenWidth > 150) { + RenderRecompileButton(); + } + string stopText = HotReloadWindowStyles.windowScreenWidth > Constants.StartButtonTextHideWidth ? " Stop" : ""; + if (GUILayout.Button(new GUIContent(stopText, GUIHelper.GetInvertibleIcon(InvertibleIcon.Stop)), HotReloadWindowStyles.StopButton)) { + if (!EditorCodePatcher.StoppedServerRecently()) { + EditorCodePatcher.StopCodePatcher().Forget(); + } + } + } + } + + void RenderIndicationPanel() { + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.SectionInnerBox)) { + RenderIndication(); + if (HotReloadWindowStyles.windowScreenWidth > Constants.IndicationTextHideWidth) { + GUILayout.FlexibleSpace(); + } + RenderIndicationButtons(); + if (HotReloadWindowStyles.windowScreenWidth <= Constants.IndicationTextHideWidth) { + GUILayout.FlexibleSpace(); + } + } + if (currentState.requestingDownloadAndRun || currentState.starting) { + RenderProgressBar(); + } + if (HotReloadWindowStyles.windowScreenWidth > Constants.ConsumptionsHideWidth + && HotReloadWindowStyles.windowScreenHeight > Constants.ConsumptionsHideHeight + ) { + RenderLicenseInfo(currentState); + } + } + + internal static void RenderLicenseInfo(HotReloadRunTabState currentState) { + var showRedeem = currentState.redeemStage != RedeemStage.None; + var showConsumptions = ShouldRenderConsumption(currentState); + if (!showConsumptions && !showRedeem) { + return; + } + using (new EditorGUILayout.VerticalScope()) { + // space needed only for consumptions because of Stop/Start button's margin + if (showConsumptions) { + GUILayout.Space(6); + } + using (new EditorGUILayout.VerticalScope(HotReloadWindowStyles.Section)) { + if (showRedeem) { + RedeemLicenseHelper.I.RenderStage(currentState); + } else { + RenderConsumption(currentState.loginStatus); + GUILayout.Space(10); + RenderLicenseInfo(currentState, currentState.loginStatus); + RenderLicenseButtons(currentState); + GUILayout.Space(10); + } + } + GUILayout.Space(6); + } + } + + private Spinner _spinner = new Spinner(85); + private void RenderIndication() { + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.IndicationBox)) { + // icon box + if (HotReloadWindowStyles.windowScreenWidth <= Constants.IndicationTextHideWidth) { + GUILayout.FlexibleSpace(); + } + + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.IndicationHelpBox)) { + var text = HotReloadWindowStyles.windowScreenWidth > Constants.IndicationTextHideWidth ? $" {currentState.indicationStatusText}" : ""; + if (currentState.indicationIconPath == Spinner.SpinnerIconPath) { + GUILayout.Label(new GUIContent(text, _spinner.GetIcon()), style: HotReloadWindowStyles.IndicationIcon); + } else if (currentState.indicationIconPath != null) { + var style = HotReloadWindowStyles.IndicationIcon; + if (HotReloadTimelineHelper.alertIconString.ContainsValue(currentState.indicationIconPath)) { + style = HotReloadWindowStyles.IndicationAlertIcon; + } + GUILayout.Label(new GUIContent(text, GUIHelper.GetLocalIcon(currentState.indicationIconPath)), style); + } + } + } + } + + static GUIStyle _openSettingsStyle; + static GUIStyle openSettingsStyle => _openSettingsStyle ?? (_openSettingsStyle = new GUIStyle(GUI.skin.button) { + fontStyle = FontStyle.Normal, + fixedHeight = 25, + }); + + static GUILayoutOption[] _bigButtonHeight; + public static GUILayoutOption[] bigButtonHeight => _bigButtonHeight ?? (_bigButtonHeight = new [] {GUILayout.Height(25)}); + + private static GUIContent indieLicenseContent; + private static GUIContent businessLicenseContent; + + internal static void RenderLicenseStatusInfo(HotReloadRunTabState currentState, LoginStatusResponse loginStatus, bool allowHide = true, bool verbose = false) { + string message = null; + MessageType messageType = default(MessageType); + Action customGUI = null; + GUIContent content = null; + if (loginStatus == null) { + // no info + } else if (loginStatus.lastLicenseError != null) { + messageType = !loginStatus.freeSessionFinished ? MessageType.Warning : MessageType.Error; + message = GetMessageFromError(currentState, loginStatus.lastLicenseError); + } else if (loginStatus.isTrial && !PackageConst.IsAssetStoreBuild) { + message = $"Using Trial license, valid until {loginStatus.licenseExpiresAt.ToShortDateString()}"; + messageType = MessageType.Info; + } else if (loginStatus.isIndieLicense) { + if (verbose) { + message = " Indie license active"; + messageType = MessageType.Info; + customGUI = () => { + if (loginStatus.licenseExpiresAt.Date != DateTime.MaxValue.Date) { + EditorGUILayout.LabelField($"License will renew on {loginStatus.licenseExpiresAt.ToShortDateString()}."); + EditorGUILayout.Space(); + } + using (new GUILayout.HorizontalScope()) { + HotReloadAboutTab.manageLicenseButton.OnGUI(); + HotReloadAboutTab.manageAccountButton.OnGUI(); + } + EditorGUILayout.Space(); + }; + if (indieLicenseContent == null) { + indieLicenseContent = new GUIContent(message, EditorGUIUtility.FindTexture("TestPassed")); + } + content = indieLicenseContent; + } + } else if (loginStatus.isBusinessLicense) { + if (verbose) { + message = " Business license active"; + messageType = MessageType.Info; + if (businessLicenseContent == null) { + businessLicenseContent = new GUIContent(message, EditorGUIUtility.FindTexture("TestPassed")); + } + content = businessLicenseContent; + customGUI = () => { + using (new GUILayout.HorizontalScope()) { + HotReloadAboutTab.manageLicenseButton.OnGUI(); + HotReloadAboutTab.manageAccountButton.OnGUI(); + } + EditorGUILayout.Space(); + }; + } + } + + if (messageType != MessageType.Info && HotReloadPrefs.ErrorHidden && allowHide) { + return; + } + if (message != null) { + if (messageType != MessageType.Info) { + using(new EditorGUILayout.HorizontalScope()) { + EditorGUILayout.HelpBox(message, messageType); + var style = HotReloadWindowStyles.HideButtonStyle; + if (Event.current.type == EventType.Repaint) { + style.fixedHeight = GUILayoutUtility.GetLastRect().height; + } + if (allowHide) { + if (GUILayout.Button("Hide", style)) { + HotReloadPrefs.ErrorHidden = true; + } + } + } + } else if (content != null) { + EditorGUILayout.LabelField(content); + EditorGUILayout.Space(); + } else { + EditorGUILayout.LabelField(message); + EditorGUILayout.Space(); + } + customGUI?.Invoke(); + } + } + + const string assetStoreProInfo = "Unity Pro/Enterprise users from company with your number of employees require a Business license. Please upgrade your license on our website."; + internal static void RenderBusinessLicenseInfo(GUIStyle style) { + GUILayout.Space(8); + using (new EditorGUILayout.HorizontalScope()) { + EditorGUILayout.HelpBox(assetStoreProInfo, MessageType.Info); + if (Event.current.type == EventType.Repaint) { + style.fixedHeight = GUILayoutUtility.GetLastRect().height; + } + if (GUILayout.Button("Upgrade", style)) { + Application.OpenURL(Constants.ProductPurchaseBusinessURL); + } + } + } + + internal static void RenderIndieLicenseInfo(GUIStyle style) { + string message; + if (EditorCodePatcher.licenseType == UnityLicenseType.UnityPersonalPlus) { + message = "Unity Plus users require an Indie license. Please upgrade your license on our website."; + } else if (EditorCodePatcher.licenseType == UnityLicenseType.UnityPro) { + message = "Unity Pro/Enterprise users from company with your number of employees require an Indie license. Please upgrade your license on our website."; + } else { + return; + } + GUILayout.Space(8); + using (new EditorGUILayout.HorizontalScope()) { + EditorGUILayout.HelpBox(message, MessageType.Info); + if (Event.current.type == EventType.Repaint) { + style.fixedHeight = GUILayoutUtility.GetLastRect().height; + } + if (GUILayout.Button("Upgrade", style)) { + Application.OpenURL(Constants.ProductPurchaseURL); + } + } + } + + const string GetLicense = "Get License"; + const string ContactSupport = "Contact Support"; + const string UpgradeLicense = "Upgrade License"; + const string ManageLicense = "Manage License"; + internal static Dictionary _licenseErrorData; + internal static Dictionary LicenseErrorData => _licenseErrorData ?? (_licenseErrorData = new Dictionary { + { "DeviceNotLicensedException", new LicenseErrorData(description: "Another device is using your license. Please reach out to customer support for assistance.", showSupportButton: true, supportButtonText: ContactSupport) }, + { "DeviceBlacklistedException", new LicenseErrorData(description: "You device has been blacklisted.") }, + { "DateHeaderInvalidException", new LicenseErrorData(description: $"Your license is not working because your computer's clock is incorrect. Please set the clock to the correct time to restore your license.") }, + { "DateTimeCheatingException", new LicenseErrorData(description: $"Your license is not working because your computer's clock is incorrect. Please set the clock to the correct time to restore your license.") }, + { "LicenseActivationException", new LicenseErrorData(description: "An error has occured while activating your license. Please contact customer support for assistance.", showSupportButton: true, supportButtonText: ContactSupport) }, + { "LicenseDeletedException", new LicenseErrorData(description: $"Your license has been deleted. Please contact customer support for assistance.", showBuyButton: true, buyButtonText: GetLicense, showSupportButton: true, supportButtonText: ContactSupport) }, + { "LicenseDisabledException", new LicenseErrorData(description: $"Your license has been disabled. Please contact customer support for assistance.", showBuyButton: true, buyButtonText: GetLicense, showSupportButton: true, supportButtonText: ContactSupport) }, + { "LicenseExpiredException", new LicenseErrorData(description: $"Your license has expired. Please renew your license subscription using the 'Upgrade License' button below and login with your email/password to activate your license.", showBuyButton: true, buyButtonText: UpgradeLicense, showManageLicenseButton: true, manageLicenseButtonText: ManageLicense) }, + { "LicenseInactiveException", new LicenseErrorData(description: $"Your license is currenty inactive. Please login with your email/password to activate your license.") }, + { "LocalLicenseException", new LicenseErrorData(description: $"Your license file was damaged or corrupted. Please login with your email/password to refresh your license file.") }, + // Note: obsolete + { "MissingParametersException", new LicenseErrorData(description: "An account already exists for this device. Please login with your existing email/password.", showBuyButton: true, buyButtonText: GetLicense) }, + { "NetworkException", new LicenseErrorData(description: "There is an issue connecting to our servers. Please check your internet connection or contact customer support if the issue persists.", showSupportButton: true, supportButtonText: ContactSupport) }, + { "TrialLicenseExpiredException", new LicenseErrorData(description: $"Your trial has expired. Activate a license with unlimited usage or continue using the Free version. View available plans on our website.", showBuyButton: true, buyButtonText: UpgradeLicense) }, + { "InvalidCredentialException", new LicenseErrorData(description: "Incorrect email/password. You can find your initial password in the sign-up email.") }, + // Note: activating free trial with email is not supported anymore. This error shouldn't happen which is why we should rather user the fallback + // { "LicenseNotFoundException", new LicenseErrorData(description: "The account you're trying to access doesn't seem to exist yet. Please enter your email address to create a new account and receive a trial license.", showLoginButton: true, loginButtonText: CreateAccount) }, + { "LicenseIncompatibleException", new LicenseErrorData(description: "Please upgrade your license to continue using hotreload with Unity Pro.", showManageLicenseButton: true, manageLicenseButtonText: ManageLicense) }, + }); + internal static LicenseErrorData defaultLicenseErrorData = new LicenseErrorData(description: "We apologize, an error happened while verifying your license. Please reach out to customer support for assistance.", showSupportButton: true, supportButtonText: ContactSupport); + + internal static string GetMessageFromError(HotReloadRunTabState currentState, string error) { + if (PackageConst.IsAssetStoreBuild && error == "TrialLicenseExpiredException") { + return assetStoreProInfo; + } + return GetLicenseErrorDataOrDefault(currentState, error).description; + } + + internal static LicenseErrorData GetLicenseErrorDataOrDefault(HotReloadRunTabState currentState, string error) { + if (currentState.loginStatus?.isFree == true) { + return default(LicenseErrorData); + } + if (currentState.loginStatus == null || string.IsNullOrEmpty(error) && (!currentState.loginStatus.isLicensed || currentState.loginStatus.isTrial)) { + return new LicenseErrorData(null, showBuyButton: true, buyButtonText: GetLicense); + } + if (string.IsNullOrEmpty(error)) { + return default(LicenseErrorData); + } + if (!LicenseErrorData.ContainsKey(error)) { + return defaultLicenseErrorData; + } + return LicenseErrorData[error]; + } + + internal static void RenderBuyLicenseButton(string buyLicenseButton) { + OpenURLButton.Render(buyLicenseButton, Constants.ProductPurchaseURL); + } + + static void RenderLicenseActionButtons(HotReloadRunTabState currentState) { + var errInfo = GetLicenseErrorDataOrDefault(currentState, currentState.loginStatus?.lastLicenseError); + if (errInfo.showBuyButton || errInfo.showManageLicenseButton) { + using(new EditorGUILayout.HorizontalScope()) { + if (errInfo.showBuyButton) { + RenderBuyLicenseButton(errInfo.buyButtonText); + } + if (errInfo.showManageLicenseButton && !HotReloadPrefs.ErrorHidden) { + OpenURLButton.Render(errInfo.manageLicenseButtonText, Constants.ManageLicenseURL); + } + } + } + if (errInfo.showLoginButton && GUILayout.Button(errInfo.loginButtonText, openSettingsStyle)) { + // show license section + HotReloadWindow.Current.SelectTab(typeof(HotReloadSettingsTab)); + HotReloadWindow.Current.SettingsTab.FocusLicenseFoldout(); + } + if (errInfo.showSupportButton && !HotReloadPrefs.ErrorHidden) { + OpenURLButton.Render(errInfo.supportButtonText, Constants.ContactURL); + } + if (currentState.loginStatus?.lastLicenseError != null) { + HotReloadAboutTab.reportIssueButton.OnGUI(); + } + } + + internal static void RenderLicenseInfo(HotReloadRunTabState currentState, LoginStatusResponse loginStatus, bool verbose = false, bool allowHide = true, string overrideActionButton = null, bool showConsumptions = false) { + HotReloadPrefs.ShowLogin = EditorGUILayout.Foldout(HotReloadPrefs.ShowLogin, "Hot Reload License", true, HotReloadWindowStyles.FoldoutStyle); + if (HotReloadPrefs.ShowLogin) { + EditorGUILayout.Space(); + if ((loginStatus?.isLicensed != true && showConsumptions) && !(loginStatus == null || loginStatus.isFree)) { + RenderConsumption(loginStatus); + } + RenderLicenseStatusInfo(currentState, loginStatus: loginStatus, allowHide: allowHide, verbose: verbose); + + RenderLicenseInnerPanel(currentState, overrideActionButton: overrideActionButton); + + EditorGUILayout.Space(); + EditorGUILayout.Space(); + } + } + + internal void RenderPromoCodes() { + HotReloadPrefs.ShowPromoCodes = EditorGUILayout.Foldout(HotReloadPrefs.ShowPromoCodes, "Promo Codes", true, HotReloadWindowStyles.FoldoutStyle); + if (!HotReloadPrefs.ShowPromoCodes) { + return; + } + if (promoCodeActivatedThisSession) { + EditorGUILayout.HelpBox($"Your promo code has been successfully activated. Free trial has been extended by 3 months.", MessageType.Info); + } else { + if (promoCodeError != null && promoCodeErrorType != MessageType.None) { + EditorGUILayout.HelpBox(promoCodeError, promoCodeErrorType); + } + EditorGUILayout.LabelField("Promo code"); + _pendingPromoCode = EditorGUILayout.TextField(_pendingPromoCode); + EditorGUILayout.Space(); + + using (new EditorGUI.DisabledScope(_requestingActivatePromoCode)) { + if (GUILayout.Button("Activate promo code", HotReloadRunTab.bigButtonHeight)) { + RequestActivatePromoCode().Forget(); + } + } + } + + EditorGUILayout.Space(); + EditorGUILayout.Space(); + } + + private async Task RequestActivatePromoCode() { + _requestingActivatePromoCode = true; + try { + var resp = await RequestHelper.RequestActivatePromoCode(_pendingPromoCode); + if (resp != null && resp.error == null) { + promoCodeActivatedThisSession = true; + } else { + var requestError = resp?.error ?? "Network error"; + var errorType = ToErrorType(requestError); + promoCodeError = ToPrettyErrorMessage(errorType); + promoCodeErrorType = ToMessageType(errorType); + } + } finally { + _requestingActivatePromoCode = false; + } + } + + PromoCodeErrorType ToErrorType(string error) { + switch (error) { + case "Input is missing": return PromoCodeErrorType.MISSING_INPUT; + case "only POST is supported": return PromoCodeErrorType.INVALID_HTTP_METHOD; + case "body is not a valid json": return PromoCodeErrorType.BODY_INVALID; + case "Promo code is not found": return PromoCodeErrorType.PROMO_CODE_NOT_FOUND; + case "Promo code already claimed": return PromoCodeErrorType.PROMO_CODE_CLAIMED; + case "Promo code expired": return PromoCodeErrorType.PROMO_CODE_EXPIRED; + case "License not found": return PromoCodeErrorType.LICENSE_NOT_FOUND; + case "License is not a trial": return PromoCodeErrorType.LICENSE_NOT_TRIAL; + case "License already extended": return PromoCodeErrorType.LICENSE_ALREADY_EXTENDED; + case "conditionalCheckFailed": return PromoCodeErrorType.CONDITIONAL_CHECK_FAILED; + } + if (error.Contains("Updating License Failed with error")) { + return PromoCodeErrorType.UPDATING_LICENSE_FAILED; + } else if (error.Contains("Unknown exception")) { + return PromoCodeErrorType.UNKNOWN_EXCEPTION; + } else if (error.Contains("Unsupported path")) { + return PromoCodeErrorType.UNSUPPORTED_PATH; + } + return PromoCodeErrorType.NONE; + } + + string ToPrettyErrorMessage(PromoCodeErrorType errorType) { + var defaultMsg = "We apologize, an error happened while activating your promo code. Please reach out to customer support for assistance."; + switch (errorType) { + case PromoCodeErrorType.MISSING_INPUT: + case PromoCodeErrorType.INVALID_HTTP_METHOD: + case PromoCodeErrorType.BODY_INVALID: + case PromoCodeErrorType.UNKNOWN_EXCEPTION: + case PromoCodeErrorType.UNSUPPORTED_PATH: + case PromoCodeErrorType.LICENSE_NOT_FOUND: + case PromoCodeErrorType.UPDATING_LICENSE_FAILED: + case PromoCodeErrorType.LICENSE_NOT_TRIAL: + return defaultMsg; + case PromoCodeErrorType.PROMO_CODE_NOT_FOUND: return "Your promo code is invalid. Please ensure that you have entered the correct promo code."; + case PromoCodeErrorType.PROMO_CODE_CLAIMED: return "Your promo code has already been used."; + case PromoCodeErrorType.PROMO_CODE_EXPIRED: return "Your promo code has expired."; + case PromoCodeErrorType.LICENSE_ALREADY_EXTENDED: return "Your license has already been activated with a promo code. Only one promo code activation per license is allowed."; + case PromoCodeErrorType.CONDITIONAL_CHECK_FAILED: return "We encountered an error while activating your promo code. Please try again. If the issue persists, please contact our customer support team for assistance."; + case PromoCodeErrorType.NONE: return "There is an issue connecting to our servers. Please check your internet connection or contact customer support if the issue persists."; + default: return defaultMsg; + } + } + + MessageType ToMessageType(PromoCodeErrorType errorType) { + switch (errorType) { + case PromoCodeErrorType.MISSING_INPUT: return MessageType.Error; + case PromoCodeErrorType.INVALID_HTTP_METHOD: return MessageType.Error; + case PromoCodeErrorType.BODY_INVALID: return MessageType.Error; + case PromoCodeErrorType.PROMO_CODE_NOT_FOUND: return MessageType.Warning; + case PromoCodeErrorType.PROMO_CODE_CLAIMED: return MessageType.Warning; + case PromoCodeErrorType.PROMO_CODE_EXPIRED: return MessageType.Warning; + case PromoCodeErrorType.LICENSE_NOT_FOUND: return MessageType.Error; + case PromoCodeErrorType.LICENSE_NOT_TRIAL: return MessageType.Error; + case PromoCodeErrorType.LICENSE_ALREADY_EXTENDED: return MessageType.Warning; + case PromoCodeErrorType.UPDATING_LICENSE_FAILED: return MessageType.Error; + case PromoCodeErrorType.CONDITIONAL_CHECK_FAILED: return MessageType.Error; + case PromoCodeErrorType.UNKNOWN_EXCEPTION: return MessageType.Error; + case PromoCodeErrorType.UNSUPPORTED_PATH: return MessageType.Error; + case PromoCodeErrorType.NONE: return MessageType.Error; + default: return MessageType.Error; + } + } + + public static void RenderLicenseButtons(HotReloadRunTabState currentState) { + RenderLicenseActionButtons(currentState); + } + + internal static void RenderLicenseInnerPanel(HotReloadRunTabState currentState, string overrideActionButton = null, bool renderLogout = true) { + EditorGUILayout.LabelField("Email"); + GUI.SetNextControlName("email"); + _pendingEmail = EditorGUILayout.TextField(string.IsNullOrEmpty(_pendingEmail) ? HotReloadPrefs.LicenseEmail : _pendingEmail); + _pendingEmail = _pendingEmail.Trim(); + + EditorGUILayout.LabelField("Password"); + GUI.SetNextControlName("password"); + _pendingPassword = EditorGUILayout.PasswordField(string.IsNullOrEmpty(_pendingPassword) ? HotReloadPrefs.LicensePassword : _pendingPassword); + + RenderSwitchAuthMode(); + + var e = Event.current; + using(new EditorGUI.DisabledScope(currentState.requestingLoginInfo)) { + var btnLabel = overrideActionButton; + if (String.IsNullOrEmpty(overrideActionButton)) { + btnLabel = "Login"; + } + using (new EditorGUILayout.HorizontalScope()) { + var focusedControl = GUI.GetNameOfFocusedControl(); + if (GUILayout.Button(btnLabel, bigButtonHeight) + || (focusedControl == "email" + || focusedControl == "password") + && e.type == EventType.KeyUp + && (e.keyCode == KeyCode.Return + || e.keyCode == KeyCode.KeypadEnter) + ) { + var error = ValidateEmail(_pendingEmail); + if (!string.IsNullOrEmpty(error)) { + _activateInfoMessage = new Tuple(error, MessageType.Warning); + } else if (string.IsNullOrEmpty(_pendingPassword)) { + _activateInfoMessage = new Tuple("Please enter your password.", MessageType.Warning); + } else { + HotReloadWindow.Current.SelectTab(typeof(HotReloadRunTab)); + + _activateInfoMessage = null; + if (RedeemLicenseHelper.I.RedeemStage == RedeemStage.Login) { + RedeemLicenseHelper.I.FinishRegistration(RegistrationOutcome.Indie); + } + if (!EditorCodePatcher.RequestingDownloadAndRun && !EditorCodePatcher.Running) { + LoginOnDownloadAndRun(new LoginData(email: _pendingEmail, password: _pendingPassword)).Forget(); + } else { + EditorCodePatcher.RequestLogin(_pendingEmail, _pendingPassword).Forget(); + } + } + } + if (renderLogout) { + RenderLogout(currentState); + } + } + } + if (_activateInfoMessage != null && (e.type == EventType.Layout || e.type == EventType.Repaint)) { + EditorGUILayout.HelpBox(_activateInfoMessage.Item1, _activateInfoMessage.Item2); + } + } + + public static string ValidateEmail(string email) { + if (string.IsNullOrEmpty(email)) { + return "Please enter your email address."; + } else if (!EditorWindowHelper.IsValidEmailAddress(email)) { + return "Please enter a valid email address."; + } else if (email.Contains("+")) { + return "Mail extensions (in a form of 'username+suffix@example.com') are not supported yet. Please provide your original email address (such as 'username@example.com' without '+suffix' part) as we're working on resolving this issue."; + } + return null; + } + + public static void RenderLogout(HotReloadRunTabState currentState) { + if (currentState.loginStatus?.isLicensed != true) { + return; + } + if (GUILayout.Button("Logout", bigButtonHeight)) { + HotReloadWindow.Current.SelectTab(typeof(HotReloadRunTab)); + if (!EditorCodePatcher.RequestingDownloadAndRun && !EditorCodePatcher.Running) { + LogoutOnDownloadAndRun().Forget(); + } else { + RequestLogout().Forget(); + } + } + } + + async static Task LoginOnDownloadAndRun(LoginData loginData = null) { + var ok = await EditorCodePatcher.DownloadAndRun(loginData); + if (ok && loginData != null) { + HotReloadPrefs.ErrorHidden = false; + HotReloadPrefs.LicenseEmail = loginData.email; + HotReloadPrefs.LicensePassword = loginData.password; + } + } + + async static Task LogoutOnDownloadAndRun() { + var ok = await EditorCodePatcher.DownloadAndRun(); + if (!ok) { + return; + } + await RequestLogout(); + } + + private async static Task RequestLogout() { + int i = 0; + while (!EditorCodePatcher.Running && i < 100) { + await Task.Delay(100); + i++; + } + var resp = await RequestHelper.RequestLogout(); + if (!EditorCodePatcher.RequestingLoginInfo && resp != null) { + EditorCodePatcher.HandleStatus(resp); + } + } + + private static void RenderSwitchAuthMode() { + var color = EditorGUIUtility.isProSkin ? new Color32(0x3F, 0x9F, 0xFF, 0xFF) : new Color32(0x0F, 0x52, 0xD7, 0xFF); + if (HotReloadGUIHelper.LinkLabel("Forgot password?", 12, FontStyle.Normal, TextAnchor.MiddleLeft, color)) { + if (EditorUtility.DisplayDialog("Recover password", "Use company code 'naughtycult' and the email you signed up with in order to recover your account.", "Open in browser", "Cancel")) { + Application.OpenURL(Constants.ForgotPasswordURL); + } + } + } + + Texture2D _greenTextureLight; + Texture2D _greenTextureDark; + Texture2D GreenTexture => EditorGUIUtility.isProSkin + ? _greenTextureDark ? _greenTextureDark : (_greenTextureDark = MakeTexture(0.5f)) + : _greenTextureLight ? _greenTextureLight : (_greenTextureLight = MakeTexture(0.85f)); + + private void RenderProgressBar() { + if (currentState.downloadRequired && !currentState.downloadStarted) { + return; + } + + using(var scope = new EditorGUILayout.VerticalScope(HotReloadWindowStyles.MiddleCenterStyle)) { + float progress; + var bg = HotReloadWindowStyles.ProgressBarBarStyle.normal.background; + try { + HotReloadWindowStyles.ProgressBarBarStyle.normal.background = GreenTexture; + var barRect = scope.rect; + + barRect.height = 25; + if (currentState.downloadRequired) { + barRect.width = barRect.width - 65; + using (new EditorGUILayout.HorizontalScope()) { + progress = EditorCodePatcher.DownloadProgress; + EditorGUI.ProgressBar(barRect, Mathf.Clamp(progress, 0f, 1f), ""); + if (GUI.Button(new Rect(barRect) { x = barRect.x + barRect.width + 5, height = barRect.height, width = 60 }, new GUIContent(" Info", GUIHelper.GetLocalIcon("alert_info")))) { + Application.OpenURL(Constants.AdditionalContentURL); + } + } + } else { + progress = EditorCodePatcher.Stopping ? 1 : Mathf.Clamp(EditorCodePatcher.StartupProgress?.Item1 ?? 0f, 0f, 1f); + EditorGUI.ProgressBar(barRect, progress, ""); + } + GUILayout.Space(barRect.height); + } finally { + HotReloadWindowStyles.ProgressBarBarStyle.normal.background = bg; + } + } + } + + private Texture2D MakeTexture(float maxHue) { + var width = 11; + var height = 11; + Color[] pix = new Color[width * height]; + for (int y = 0; y < height; y++) { + var middle = Math.Ceiling(height / (double)2); + var maxGreen = maxHue; + var yCoord = y + 1; + var green = maxGreen - Math.Abs(yCoord - middle) * 0.02; + for (int x = 0; x < width; x++) { + pix[y * width + x] = new Color(0.1f, (float)green, 0.1f, 1.0f); + } + } + var result = new Texture2D(width, height); + result.SetPixels(pix); + result.Apply(); + return result; + } + + + /* + [MenuItem("codepatcher/restart")] + public static void TestRestart() { + CodePatcherCLI.Restart(Application.dataPath, false); + } + */ + + } + + internal static class HotReloadGUIHelper { + public static bool LinkLabel(string labelText, int fontSize, FontStyle fontStyle, TextAnchor alignment, Color? color = null) { + var stl = EditorStyles.label; + + // copy + var origSize = stl.fontSize; + var origStyle = stl.fontStyle; + var origAnchor = stl.alignment; + var origColor = stl.normal.textColor; + + // temporarily modify the built-in style + stl.fontSize = fontSize; + stl.fontStyle = fontStyle; + stl.alignment = alignment; + stl.normal.textColor = color ?? origColor; + stl.active.textColor = color ?? origColor; + stl.focused.textColor = color ?? origColor; + stl.hover.textColor = color ?? origColor; + + try { + return GUILayout.Button(labelText, stl); + } finally{ + // set the editor style (stl) back to normal + stl.fontSize = origSize; + stl.fontStyle = origStyle; + stl.alignment = origAnchor; + stl.normal.textColor = origColor; + stl.active.textColor = origColor; + stl.focused.textColor = origColor; + stl.hover.textColor = origColor; + } + } + + public static void HelpBox(string message, MessageType type, int fontSize) { + var _fontSize = EditorStyles.helpBox.fontSize; + try { + EditorStyles.helpBox.fontSize = fontSize; + EditorGUILayout.HelpBox(message, type); + } finally { + EditorStyles.helpBox.fontSize = _fontSize; + } + } + } + + internal enum PromoCodeErrorType { + NONE, + MISSING_INPUT, + INVALID_HTTP_METHOD, + BODY_INVALID, + PROMO_CODE_NOT_FOUND, + PROMO_CODE_CLAIMED, + PROMO_CODE_EXPIRED, + LICENSE_NOT_FOUND, + LICENSE_NOT_TRIAL, + LICENSE_ALREADY_EXTENDED, + UPDATING_LICENSE_FAILED, + CONDITIONAL_CHECK_FAILED, + UNKNOWN_EXCEPTION, + UNSUPPORTED_PATH, + } + + internal class LoginData { + public readonly string email; + public readonly string password; + + public LoginData(string email, string password) { + this.email = email; + this.password = password; + } + } +} + diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadRunTab.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadRunTab.cs.meta new file mode 100644 index 0000000..8313f21 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadRunTab.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 38d0877009d34a9458f7d169d7f1b6a7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadRunTab.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadSettingsTab.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadSettingsTab.cs new file mode 100644 index 0000000..8228df9 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadSettingsTab.cs @@ -0,0 +1,863 @@ +using System; +using System.Diagnostics.CodeAnalysis; +using SingularityGroup.HotReload.DTO; +using SingularityGroup.HotReload.Editor.Cli; +using UnityEditor; +using UnityEngine; +using EditorGUI = UnityEditor.EditorGUI; + +namespace SingularityGroup.HotReload.Editor { + internal struct HotReloadSettingsTabState { + public readonly bool running; + public readonly bool trialLicense; + public readonly LoginStatusResponse loginStatus; + public readonly bool isServerHealthy; + public readonly bool registrationRequired; + + public HotReloadSettingsTabState( + bool running, + bool trialLicense, + LoginStatusResponse loginStatus, + bool isServerHealthy, + bool registrationRequired + ) { + this.running = running; + this.trialLicense = trialLicense; + this.loginStatus = loginStatus; + this.isServerHealthy = isServerHealthy; + this.registrationRequired = registrationRequired; + } + } + + internal class HotReloadSettingsTab : HotReloadTabBase { + private readonly HotReloadOptionsSection optionsSection; + + // cached because changing built target triggers C# domain reload + // Also I suspect selectedBuildTargetGroup has chance to freeze Unity for several seconds (unconfirmed). + private readonly Lazy currentBuildTarget = new Lazy( + () => BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget)); + + private readonly Lazy isCurrentBuildTargetSupported = new Lazy(() => { + var target = BuildPipeline.GetBuildTargetGroup(EditorUserBuildSettings.activeBuildTarget); + return HotReloadBuildHelper.IsMonoSupported(target); + }); + + // Resources.Load uses cache, so it's safe to call it every frame. + // Retrying Load every time fixes an issue where you import the package and constructor runs, but resources aren't loadable yet. + private Texture iconCheck => Resources.Load("icon_check_circle"); + private Texture iconWarning => Resources.Load("icon_warning_circle"); + + [SuppressMessage("ReSharper", "Unity.UnknownResource")] // Rider doesn't check packages + public HotReloadSettingsTab(HotReloadWindow window) : base(window, + "Settings", + "_Popup", + "Make changes to a build running on-device.") { + optionsSection = new HotReloadOptionsSection(); + } + + private GUIStyle headlineStyle; + private GUIStyle paddedStyle; + + private Vector2 _settingsTabScrollPos; + + HotReloadSettingsTabState currentState; + public override void OnGUI() { + // HotReloadAboutTabState ensures rendering is consistent between Layout and Repaint calls + // Without it errors like this happen: + // ArgumentException: Getting control 2's position in a group with only 2 controls when doing repaint + // See thread for more context: https://answers.unity.com/questions/17718/argumentexception-getting-control-2s-position-in-a.html + if (Event.current.type == EventType.Layout) { + currentState = new HotReloadSettingsTabState( + running: EditorCodePatcher.Running, + trialLicense: EditorCodePatcher.Status != null && (EditorCodePatcher.Status?.isTrial == true), + loginStatus: EditorCodePatcher.Status, + isServerHealthy: ServerHealthCheck.I.IsServerHealthy, + registrationRequired: RedeemLicenseHelper.I.RegistrationRequired + ); + } + using (var scope = new EditorGUILayout.ScrollViewScope(_settingsTabScrollPos, GUI.skin.horizontalScrollbar, GUI.skin.verticalScrollbar, GUILayout.MaxHeight(Math.Max(HotReloadWindowStyles.windowScreenHeight, 800)), GUILayout.MaxWidth(Math.Max(HotReloadWindowStyles.windowScreenWidth, 800)))) { + _settingsTabScrollPos.x = scope.scrollPosition.x; + _settingsTabScrollPos.y = scope.scrollPosition.y; + using (new EditorGUILayout.VerticalScope(HotReloadWindowStyles.DynamicSectionHelpTab)) { + GUILayout.Space(10); + if (!EditorCodePatcher.LoginNotRequired + && !currentState.registrationRequired + // Delay showing login in settings to not confuse users that they need to login to use Free trial + && (HotReloadPrefs.RateAppShown + || PackageConst.IsAssetStoreBuild) + ) { + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.SectionOuterBoxCompact)) { + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.SectionInnerBoxWide)) { + using (new EditorGUILayout.VerticalScope()) { + RenderLicenseInfoSection(); + } + } + } + } + + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.SectionOuterBoxCompact)) { + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.SectionInnerBoxWide)) { + using (new EditorGUILayout.VerticalScope()) { + HotReloadPrefs.ShowConfiguration = EditorGUILayout.Foldout(HotReloadPrefs.ShowConfiguration, "Settings", true, HotReloadWindowStyles.FoldoutStyle); + if (HotReloadPrefs.ShowConfiguration) { + EditorGUILayout.Space(); + + // main section + RenderUnityAutoRefresh(); + using (new EditorGUI.DisabledScope(!EditorCodePatcher.autoRecompileUnsupportedChangesSupported)) { + RenderAutoRecompileUnsupportedChanges(); + if (HotReloadPrefs.AutoRecompileUnsupportedChanges && EditorCodePatcher.autoRecompileUnsupportedChangesSupported) { + using (new EditorGUILayout.VerticalScope(paddedStyle ?? (paddedStyle = new GUIStyle { padding = new RectOffset(20, 0, 0, 0) }))) { + RenderAutoRecompileUnsupportedChangesImmediately(); + RenderAutoRecompileUnsupportedChangesOnExitPlayMode(); + RenderAutoRecompileUnsupportedChangesInPlayMode(); + RenderAutoRecompilePartiallyUnsupportedChanges(); + RenderDisplayNewMonobehaviourMethodsAsPartiallySupported(); + } + } + EditorGUILayout.Space(); + } + RenderAssetRefresh(); + if (HotReloadPrefs.AllAssetChanges) { + using (new EditorGUILayout.VerticalScope(paddedStyle ?? (paddedStyle = new GUIStyle { padding = new RectOffset(20, 0, 0, 0) }))) { + RenderIncludeShaderChanges(); + } + + EditorGUILayout.Space(); + } + RenderDebuggerCompatibility(); + + // // fields + // RenderShowFeatures(); + // using (new EditorGUILayout.VerticalScope(paddedStyle ?? (paddedStyle = new GUIStyle { padding = new RectOffset(20, 0, 0, 0) }))) { + // RenderShowApplyfieldInitializerEditsToExistingClassInstances(); + // + // EditorGUILayout.Space(); + // } + + // visual feedback + if (EditorWindowHelper.supportsNotifications) { + RenderShowNotifications(); + using (new EditorGUILayout.VerticalScope(paddedStyle ?? (paddedStyle = new GUIStyle { padding = new RectOffset(20, 0, 0, 0) }))) { + RenderShowPatchingNotifications(); + RenderShowCompilingUnsupportedNotifications(); + } + + EditorGUILayout.Space(); + } + + // misc + RenderMiscHeader(); + using (new EditorGUILayout.VerticalScope(paddedStyle ?? (paddedStyle = new GUIStyle { padding = new RectOffset(20, 0, 0, 0) }))) { + RenderAutostart(); + RenderConsoleWindow(); + + EditorGUILayout.Space(); + } + + EditorGUILayout.Space(); + using (new EditorGUILayout.HorizontalScope()) { + GUILayout.FlexibleSpace(); + HotReloadWindow.RenderShowOnStartup(); + } + } + } + } + } + + if (!EditorCodePatcher.LoginNotRequired && currentState.trialLicense && currentState.running) { + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.SectionOuterBoxCompact)) { + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.SectionInnerBoxWide)) { + using (new EditorGUILayout.VerticalScope()) { + RenderPromoCodeSection(); + } + } + } + } + + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.SectionOuterBoxCompact)) { + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.SectionInnerBoxWide)) { + using (new EditorGUILayout.VerticalScope()) { + RenderOnDevice(); + } + } + } + + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.SectionOuterBoxCompact)) { + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.SectionInnerBoxWide)) { + using (new EditorGUILayout.VerticalScope()) { + HotReloadPrefs.ShowAdvanced = EditorGUILayout.Foldout(HotReloadPrefs.ShowAdvanced, "Advanced", true, HotReloadWindowStyles.FoldoutStyle); + if (HotReloadPrefs.ShowAdvanced) { + EditorGUILayout.Space(); + + DeactivateHotReload(); + DisableDetailedErrorReporting(); + } + } + } + } + } + } + } + + void RenderUnityAutoRefresh() { + var newSettings = EditorGUILayout.BeginToggleGroup(new GUIContent("Manage Unity auto-refresh (recommended)"), HotReloadPrefs.AllowDisableUnityAutoRefresh); + if (newSettings != HotReloadPrefs.AllowDisableUnityAutoRefresh) { + HotReloadPrefs.AllowDisableUnityAutoRefresh = newSettings; + } + string toggleDescription; + if (HotReloadPrefs.AllowDisableUnityAutoRefresh) { + toggleDescription = "To avoid unnecessary recompiling, Hot Reload will automatically change Unity's Auto Refresh and Script Compilation settings. Previous settings will be restored when Hot Reload is stopped"; + } else { + toggleDescription = "Enabled this setting to auto-manage Unity's Auto Refresh and Script Compilation settings. This reduces unncessary recompiling"; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + EditorGUILayout.Space(6f); + } + + void RenderAssetRefresh() { + var newSettings = EditorGUILayout.BeginToggleGroup(new GUIContent("Asset refresh (recommended)"), HotReloadPrefs.AllAssetChanges); + if (newSettings != HotReloadPrefs.AllAssetChanges) { + HotReloadPrefs.AllAssetChanges = newSettings; + // restart when setting changes + if (ServerHealthCheck.I.IsServerHealthy) { + var restartServer = EditorUtility.DisplayDialog("Hot Reload", + $"When changing 'Asset refresh', the Hot Reload server must be restarted for this to take effect." + + "\nDo you want to restart it now?", + "Restart Hot Reload", "Don't restart"); + if (restartServer) { + EditorCodePatcher.RestartCodePatcher().Forget(); + } + } + } + string toggleDescription; + if (HotReloadPrefs.AllAssetChanges) { + toggleDescription = "Hot Reload will refresh changed assets such as sprites, prefabs, etc"; + } else { + toggleDescription = "Enable to allow Hot Reload to refresh changed assets in the project. All asset types are supported including sprites, prefabs, shaders etc"; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + EditorGUILayout.Space(6f); + } + + void RenderDebuggerCompatibility() { + var newSettings = EditorGUILayout.BeginToggleGroup(new GUIContent("Auto-disable Hot Reload while a debugger is attached (recommended)"), HotReloadPrefs.AutoDisableHotReloadWithDebugger); + if (newSettings != HotReloadPrefs.AutoDisableHotReloadWithDebugger) { + HotReloadPrefs.AutoDisableHotReloadWithDebugger = newSettings; + CodePatcher.I.debuggerCompatibilityEnabled = !HotReloadPrefs.AutoDisableHotReloadWithDebugger; + } + string toggleDescription; + if (HotReloadPrefs.AutoDisableHotReloadWithDebugger) { + toggleDescription = "Hot Reload automatically disables itself while a debugger is attached, as it can otherwise interfere with certain debugger features. Please read the documentation if you consider disabling this setting."; + } else { + toggleDescription = "When a debugger is attached, Hot Reload will be active, but certain debugger features might not work as expected. Please read our documentation to learn about the limitations."; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + EditorGUILayout.Space(6f); + } + + void RenderIncludeShaderChanges() { + HotReloadPrefs.IncludeShaderChanges = EditorGUILayout.BeginToggleGroup(new GUIContent("Refresh shaders"), HotReloadPrefs.IncludeShaderChanges); + string toggleDescription; + if (HotReloadPrefs.IncludeShaderChanges) { + toggleDescription = "Hot Reload will auto refresh shaders. Note that enabling this setting might impact performance."; + } else { + toggleDescription = "Enable to auto-refresh shaders. Note that enabling this setting might impact performance"; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + } + + void RenderConsoleWindow() { + if (!HotReloadCli.CanOpenInBackground) { + return; + } + var newSettings = EditorGUILayout.BeginToggleGroup(new GUIContent("Hide console window on start"), HotReloadPrefs.DisableConsoleWindow); + if (newSettings != HotReloadPrefs.DisableConsoleWindow) { + HotReloadPrefs.DisableConsoleWindow = newSettings; + // restart when setting changes + if (ServerHealthCheck.I.IsServerHealthy) { + var restartServer = EditorUtility.DisplayDialog("Hot Reload", + $"When changing 'Hide console window on start', the Hot Reload server must be restarted for this to take effect." + + "\nDo you want to restart it now?", + "Restart server", "Don't restart"); + if (restartServer) { + EditorCodePatcher.RestartCodePatcher().Forget(); + } + } + } + string toggleDescription; + if (HotReloadPrefs.DisableConsoleWindow) { + toggleDescription = "Hot Reload will start without creating a console window. Logs can be accessed through \"Help\" tab."; + } else { + toggleDescription = "Enable to start Hot Reload without creating a console window."; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + EditorGUILayout.Space(6f); + } + + void DeactivateHotReload() { + var newSettings = EditorGUILayout.BeginToggleGroup(new GUIContent("Deactivate Hot Reload"), HotReloadPrefs.DeactivateHotReload); + if (newSettings != HotReloadPrefs.DeactivateHotReload) { + DeactivateHotReloadInner(newSettings); + } + string toggleDescription; + if (HotReloadPrefs.DeactivateHotReload) { + toggleDescription = "Hot Reload is deactivated."; + } else { + toggleDescription = "Enable to deactivate Hot Reload."; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + EditorGUILayout.Space(6f); + } + + void DisableDetailedErrorReporting() { + var newSettings = EditorGUILayout.BeginToggleGroup(new GUIContent("Disable Detailed Error Reporting"), HotReloadPrefs.DisableDetailedErrorReporting); + DisableDetailedErrorReportingInner(newSettings); + string toggleDescription; + if (HotReloadPrefs.DisableDetailedErrorReporting) { + toggleDescription = "Detailed error reporting is disabled."; + } else { + toggleDescription = "Toggle on to disable detailed error reporting."; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + EditorGUILayout.Space(6f); + } + + public static void DisableDetailedErrorReportingInner(bool newSetting) { + if (newSetting == HotReloadPrefs.DisableDetailedErrorReporting) { + return; + } + HotReloadPrefs.DisableDetailedErrorReporting = newSetting; + // restart when setting changes + if (ServerHealthCheck.I.IsServerHealthy) { + var restartServer = EditorUtility.DisplayDialog("Hot Reload", + $"When changing 'Disable Detailed Error Reporting', the Hot Reload server must be restarted for this to take effect." + + "\nDo you want to restart it now?", + "Restart server", "Don't restart"); + if (restartServer) { + EditorCodePatcher.RestartCodePatcher().Forget(); + } + } + } + + static void DeactivateHotReloadInner(bool deactivate) { + var confirmed = !deactivate || EditorUtility.DisplayDialog("Hot Reload", + $"Hot Reload will be completely deactivated (unusable) until you activate it again." + + "\n\nDo you want to proceed?", + "Deactivate", "Cancel"); + if (confirmed) { + HotReloadPrefs.DeactivateHotReload = deactivate; + if (deactivate) { + EditorCodePatcher.StopCodePatcher(recompileOnDone: true).Forget(); + } else { + HotReloadRunTab.Recompile(); + } + } + } + + void RenderAutostart() { + var newSettings = EditorGUILayout.BeginToggleGroup(new GUIContent("Autostart on Unity open"), HotReloadPrefs.LaunchOnEditorStart); + if (newSettings != HotReloadPrefs.LaunchOnEditorStart) { + HotReloadPrefs.LaunchOnEditorStart = newSettings; + } + string toggleDescription; + if (HotReloadPrefs.LaunchOnEditorStart) { + toggleDescription = "Hot Reload will be launched when Unity project opens."; + } else { + toggleDescription = "Enable to launch Hot Reload when Unity project opens."; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + EditorGUILayout.Space(); + } + + void RenderShowNotifications() { + EditorGUILayout.Space(10f); + GUILayout.Label("Visual Feedback", HotReloadWindowStyles.NotificationsTitleStyle); + EditorGUILayout.Space(10f); + + if (!EditorWindowHelper.supportsNotifications && !UnitySettingsHelper.I.playmodeTintSupported) { + var toggleDescription = "Indications are not supported in the Unity version you use."; + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + } + } + + // void RenderShowFields() { + // EditorGUILayout.Space(14f); + // GUILayout.Label("Fields", HotReloadWindowStyles.NotificationsTitleStyle); + // } + + void RenderMiscHeader() { + EditorGUILayout.Space(10f); + GUILayout.Label("Misc", HotReloadWindowStyles.NotificationsTitleStyle); + EditorGUILayout.Space(10f); + } + + void RenderShowPatchingNotifications() { + HotReloadPrefs.ShowPatchingNotifications = EditorGUILayout.BeginToggleGroup(new GUIContent("Patching Indication"), HotReloadPrefs.ShowPatchingNotifications); + string toggleDescription; + if (!EditorWindowHelper.supportsNotifications) { + toggleDescription = "Patching Notification is not supported in the Unity version you use."; + } else if (!HotReloadPrefs.ShowPatchingNotifications) { + toggleDescription = "Enable to show GameView and SceneView indications when Patching."; + } else { + toggleDescription = "Indications will be shown in GameView and SceneView when Patching."; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + } + + // void RenderShowApplyfieldInitializerEditsToExistingClassInstances() { + // var newSetting = EditorGUILayout.BeginToggleGroup(new GUIContent("Apply field initializer edits to existing class instances"), HotReloadPrefs.ApplyFieldInitiailzerEditsToExistingClassInstances); + // ApplyApplyFieldInitializerEditsToExistingClassInstances(newSetting); + // string toggleDescription; + // if (HotReloadPrefs.ApplyFieldInitiailzerEditsToExistingClassInstances) { + // toggleDescription = "New field initializers with constant value will update field value of existing objects."; + // } else { + // toggleDescription = "New field initializers will not modify existing objects."; + // } + // EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + // EditorGUILayout.EndToggleGroup(); + // } + + [Obsolete("Not implemented")] + public static void ApplyApplyFieldInitializerEditsToExistingClassInstances(bool newSetting) { + if (newSetting != HotReloadPrefs.ApplyFieldInitiailzerEditsToExistingClassInstances) { + HotReloadPrefs.ApplyFieldInitiailzerEditsToExistingClassInstances = newSetting; + // restart when setting changes + if (ServerHealthCheck.I.IsServerHealthy) { + var restartServer = EditorUtility.DisplayDialog("Hot Reload", + $"When changing 'Apply field initializer edits to existing class instances' setting, the Hot Reload server must restart for it to take effect." + + "\nDo you want to restart it now?", + "Restart server", "Don't restart"); + if (restartServer) { + EditorCodePatcher.RestartCodePatcher().Forget(); + } + } + } + } + + void RenderShowCompilingUnsupportedNotifications() { + HotReloadPrefs.ShowCompilingUnsupportedNotifications = EditorGUILayout.BeginToggleGroup(new GUIContent("Compiling Unsupported Changes Indication"), HotReloadPrefs.ShowCompilingUnsupportedNotifications); + string toggleDescription; + if (!EditorWindowHelper.supportsNotifications) { + toggleDescription = "Compiling Unsupported Changes Notification is not supported in the Unity version you use."; + } else if (!HotReloadPrefs.ShowCompilingUnsupportedNotifications) { + toggleDescription = "Enable to show GameView and SceneView indications when compiling unsupported changes."; + } else { + toggleDescription = "Indications will be shown in GameView and SceneView when compiling unsupported changes."; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + } + + void RenderAutoRecompileUnsupportedChanges() { + HotReloadPrefs.AutoRecompileUnsupportedChanges = EditorGUILayout.BeginToggleGroup(new GUIContent("Auto recompile unsupported changes (recommended)"), HotReloadPrefs.AutoRecompileUnsupportedChanges && EditorCodePatcher.autoRecompileUnsupportedChangesSupported); + string toggleDescription; + if (!EditorCodePatcher.autoRecompileUnsupportedChangesSupported) { + toggleDescription = "Auto recompiling unsupported changes is not supported in the Unity version you use."; + } else if (HotReloadPrefs.AutoRecompileUnsupportedChanges) { + toggleDescription = "Hot Reload will recompile automatically after code changes that Hot Reload doesn't support."; + } else { + toggleDescription = "When enabled, recompile happens automatically after code changes that Hot Reload doesn't support."; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + } + + void RenderAutoRecompilePartiallyUnsupportedChanges() { + HotReloadPrefs.AutoRecompilePartiallyUnsupportedChanges = EditorGUILayout.BeginToggleGroup(new GUIContent("Include partially unsupported changes"), HotReloadPrefs.AutoRecompilePartiallyUnsupportedChanges); + string toggleDescription; + if (HotReloadPrefs.AutoRecompilePartiallyUnsupportedChanges) { + toggleDescription = "Hot Reload will recompile partially unsupported changes."; + } else { + toggleDescription = "Enable to recompile partially unsupported changes."; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + } + + void RenderDisplayNewMonobehaviourMethodsAsPartiallySupported() { + HotReloadPrefs.DisplayNewMonobehaviourMethodsAsPartiallySupported = EditorGUILayout.BeginToggleGroup(new GUIContent("Display new Monobehaviour methods as partially supported"), HotReloadPrefs.DisplayNewMonobehaviourMethodsAsPartiallySupported); + string toggleDescription; + if (HotReloadPrefs.DisplayNewMonobehaviourMethodsAsPartiallySupported) { + toggleDescription = "Hot Reload will display new monobehaviour methods as partially unsupported."; + } else { + toggleDescription = "Enable to display new monobehaviour methods as partially unsupported."; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + } + + void RenderAutoRecompileUnsupportedChangesImmediately() { + HotReloadPrefs.AutoRecompileUnsupportedChangesImmediately = EditorGUILayout.BeginToggleGroup(new GUIContent("Recompile immediately"), HotReloadPrefs.AutoRecompileUnsupportedChangesImmediately); + string toggleDescription; + if (HotReloadPrefs.AutoRecompileUnsupportedChangesImmediately) { + toggleDescription = "Unsupported changes will be recompiled immediately."; + } else { + toggleDescription = "Unsupported changes will be recompiled when editor is focused. Enable to recompile immediately."; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + } + + void RenderAutoRecompileUnsupportedChangesInPlayMode() { + HotReloadPrefs.AutoRecompileUnsupportedChangesInPlayMode = EditorGUILayout.BeginToggleGroup(new GUIContent("Recompile in Play Mode"), HotReloadPrefs.AutoRecompileUnsupportedChangesInPlayMode); + string toggleDescription; + if (HotReloadPrefs.AutoRecompileUnsupportedChangesInPlayMode) { + toggleDescription = "Hot Reload will exit Play Mode to recompile unsupported changes."; + } else { + toggleDescription = "Enable to auto exit Play Mode to recompile unsupported changes."; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + } + + void RenderAutoRecompileUnsupportedChangesOnExitPlayMode() { + HotReloadPrefs.AutoRecompileUnsupportedChangesOnExitPlayMode = EditorGUILayout.BeginToggleGroup(new GUIContent("Recompile on exit Play Mode"), HotReloadPrefs.AutoRecompileUnsupportedChangesOnExitPlayMode); + string toggleDescription; + if (HotReloadPrefs.AutoRecompileUnsupportedChangesOnExitPlayMode) { + toggleDescription = "Hot Reload will recompile unsupported changes when exiting Play Mode."; + } else { + toggleDescription = "Enable to recompile unsupported changes when exiting Play Mode."; + } + EditorGUILayout.LabelField(toggleDescription, HotReloadWindowStyles.WrapStyle); + EditorGUILayout.EndToggleGroup(); + } + + void RenderOnDevice() { + HotReloadPrefs.ShowOnDevice = EditorGUILayout.Foldout(HotReloadPrefs.ShowOnDevice, "On-Device", true, HotReloadWindowStyles.FoldoutStyle); + if (!HotReloadPrefs.ShowOnDevice) { + return; + } + // header with explainer image + { + if (headlineStyle == null) { + // start with textArea for the background and border colors + headlineStyle = new GUIStyle(GUI.skin.label) { + fontStyle = FontStyle.Bold, + alignment = TextAnchor.MiddleLeft + }; + headlineStyle.normal.textColor = HotReloadWindowStyles.H2TitleStyle.normal.textColor; + + // bg color + if (HotReloadWindowStyles.IsDarkMode) { + headlineStyle.normal.background = EditorTextures.DarkGray40; + } else { + headlineStyle.normal.background = EditorTextures.LightGray225; + } + // layout + headlineStyle.padding = new RectOffset(8, 8, 0, 0); + headlineStyle.margin = new RectOffset(6, 6, 6, 6); + } + GUILayout.Space(9f); // space between logo and headline + + GUILayout.Label("Make changes to a build running on-device", + headlineStyle, GUILayout.MinHeight(EditorGUIUtility.singleLineHeight * 1.4f)); + // image showing how Hot Reload works with a phone + // var bannerBox = GUILayoutUtility.GetRect(flowchart.width * 0.6f, flowchart.height * 0.6f); + // GUI.DrawTexture(bannerBox, flowchart, ScaleMode.ScaleToFit); + } + + GUILayout.Space(16f); + + //ButtonToOpenBuildSettings(); + + { + GUILayout.Label("Manual connect", HotReloadWindowStyles.H3TitleStyle); + EditorGUILayout.Space(); + + GUILayout.BeginHorizontal(); + + // indent all controls (this works with non-labels) + GUILayout.Space(16f); + GUILayout.BeginVertical(); + + string text; + var ip = IpHelper.GetIpAddressCached(); + if (string.IsNullOrEmpty(ip)) { + text = $"If auto-pair fails, find your local IP in OS settings, and use this format to connect: '{{ip}}:{RequestHelper.port}'"; + } else { + text = $"If auto-pair fails, use this IP and port to connect: {ip}:{RequestHelper.port}" + + "\nMake sure you are on the same LAN/WiFi network"; + } + GUILayout.Label(text, HotReloadWindowStyles.H3TitleWrapStyle); + + if (!currentState.isServerHealthy) { + DrawHorizontalCheck(ServerHealthCheck.I.IsServerHealthy, + "Hot Reload is running", + "Hot Reload is not running", + hasFix: false); + } + + if (!HotReloadPrefs.ExposeServerToLocalNetwork) { + var summary = $"Enable '{new ExposeServerOption().ShortSummary}'"; + DrawHorizontalCheck(HotReloadPrefs.ExposeServerToLocalNetwork, + summary, + summary); + } + + // explainer image that shows phone needs same wifi to auto connect ? + + GUILayout.EndVertical(); + GUILayout.EndHorizontal(); + } + + GUILayout.Space(16f); + + // loading again is smooth, pretty sure AssetDatabase.LoadAssetAtPath is caching -Troy + var settingsObject = HotReloadSettingsEditor.LoadSettingsOrDefault(); + var so = new SerializedObject(settingsObject); + + // if you build for Android now, will Hot Reload work? + { + + EditorGUILayout.BeginHorizontal(); + GUILayout.Label("Build Settings Checklist", HotReloadWindowStyles.H3TitleStyle); + EditorGUI.BeginDisabledGroup(isSupported); + // One-click to change each setting to the supported value + if (GUILayout.Button("Fix All", GUILayout.MaxWidth(90f))) { + FixAllUnsupportedSettings(so); + } + EditorGUI.EndDisabledGroup(); + EditorGUILayout.EndHorizontal(); + + + // NOTE: After user changed some build settings, window may not immediately repaint + // (e.g. toggle Development Build in Build Settings window) + // We could show a refresh button (to encourage the user to click the window which makes it repaint). + DrawSectionCheckBuildSupport(so); + } + + + GUILayout.Space(16f); + + // Settings checkboxes (Hot Reload options) + { + GUILayout.Label("Options", HotReloadWindowStyles.H3TitleStyle); + if (settingsObject) { + optionsSection.DrawGUI(so); + } + } + GUILayout.FlexibleSpace(); // needed otherwise vertical scrollbar is appearing for no reason (Unity 2021 glitch perhaps) + } + + private void RenderLicenseInfoSection() { + HotReloadRunTab.RenderLicenseInfo( + _window.RunTabState, + currentState.loginStatus, + verbose: true, + allowHide: false, + overrideActionButton: "Activate License", + showConsumptions: true + ); + } + + private void RenderPromoCodeSection() { + _window.RunTab.RenderPromoCodes(); + } + + public void FocusLicenseFoldout() { + HotReloadPrefs.ShowLogin = true; + } + + // note: changing scripting backend does not force Unity to recreate the GUI, so need to check it when drawing. + private ScriptingImplementation ScriptingBackend => HotReloadBuildHelper.GetCurrentScriptingBackend(); + private ManagedStrippingLevel StrippingLevel => HotReloadBuildHelper.GetCurrentStrippingLevel(); + public bool isSupported = true; + + /// + /// These options are drawn in the On-device tab + /// + // new on-device options should be added here + public static readonly IOption[] allOptions = new IOption[] { + new ExposeServerOption(), + IncludeInBuildOption.I, + new AllowAndroidAppToMakeHttpRequestsOption(), + }; + + /// + /// Change each setting to the value supported by Hot Reload + /// + private void FixAllUnsupportedSettings(SerializedObject so) { + if (!isCurrentBuildTargetSupported.Value) { + // try switch to Android platform + // (we also support Standalone but HotReload on mobile is a better selling point) + if (!TrySwitchToStandalone()) { + // skip changing other options (user won't readthe gray text) - user has to click Fix All again + return; + } + } + + foreach (var buildOption in allOptions) { + if (!buildOption.GetValue(so)) { + buildOption.SetValue(so, true); + } + } + so.ApplyModifiedProperties(); + var settingsObject = so.targetObject as HotReloadSettingsObject; + if (settingsObject) { + // when you click fix all, make sure to save the settings, otherwise ui does not update + HotReloadSettingsEditor.EnsureSettingsCreated(settingsObject); + } + + if (!EditorUserBuildSettings.development) { + EditorUserBuildSettings.development = true; + } + + HotReloadBuildHelper.SetCurrentScriptingBackend(ScriptingImplementation.Mono2x); + HotReloadBuildHelper.SetCurrentStrippingLevel(ManagedStrippingLevel.Disabled); + } + + public static bool TrySwitchToStandalone() { + BuildTarget buildTarget; + if (Application.platform == RuntimePlatform.LinuxEditor) { + buildTarget = BuildTarget.StandaloneLinux64; + } else if (Application.platform == RuntimePlatform.WindowsEditor) { + buildTarget = BuildTarget.StandaloneWindows64; + } else if (Application.platform == RuntimePlatform.OSXEditor) { + buildTarget = BuildTarget.StandaloneOSX; + } else { + return false; + } + var current = EditorUserBuildSettings.activeBuildTarget; + if (current == buildTarget) { + return true; + } + var confirmed = EditorUtility.DisplayDialog("Switch Build Target", + "Switching the build target can take a while depending on project size.", + $"Switch to Standalone", "Cancel"); + if (confirmed) { + EditorUserBuildSettings.SwitchActiveBuildTargetAsync(BuildTargetGroup.Standalone, buildTarget); + Log.Info($"Build target is switching to {buildTarget}."); + return true; + } else { + return false; + } + } + + /// + /// Section that user can check before making a Unity Player build. + /// + /// + /// + /// This section is for confirming your build will work with Hot Reload.
+ /// Options that can be changed after the build is made should be drawn elsewhere. + ///
+ public void DrawSectionCheckBuildSupport(SerializedObject so) { + isSupported = true; + var selectedPlatform = currentBuildTarget.Value; + DrawHorizontalCheck(isCurrentBuildTargetSupported.Value, + $"The {selectedPlatform.ToString()} platform is selected", + $"The current platform is {selectedPlatform.ToString()} which is not supported"); + + using (new EditorGUI.DisabledScope(!isCurrentBuildTargetSupported.Value)) { + foreach (var option in allOptions) { + DrawHorizontalCheck(option.GetValue(so), + $"Enable \"{option.ShortSummary}\"", + $"Enable \"{option.ShortSummary}\""); + } + + DrawHorizontalCheck(EditorUserBuildSettings.development, + "Development Build is enabled", + "Enable \"Development Build\""); + + DrawHorizontalCheck(ScriptingBackend == ScriptingImplementation.Mono2x, + $"Scripting Backend is set to Mono", + $"Set Scripting Backend to Mono"); + + DrawHorizontalCheck(StrippingLevel == ManagedStrippingLevel.Disabled, + $"Stripping Level = {StrippingLevel}", + $"Stripping Level = {StrippingLevel}", + suggestedSolutionText: "Code stripping needs to be disabled to ensure that all methods are available for patching." + ); + } + } + + /// + /// Draw a box with a tick or warning icon on the left, with text describing the tick or warning + /// + /// The condition to check. True to show a tick icon, False to show a warning. + /// Shown when condition is true + /// Shown when condition is false + /// Shown when is false + void DrawHorizontalCheck(bool condition, string okText, string notOkText = null, string suggestedSolutionText = null, bool hasFix = true) { + if (okText == null) { + throw new ArgumentNullException(nameof(okText)); + } + if (notOkText == null) { + notOkText = okText; + } + + // include some horizontal space around the icon + var boxWidth = GUILayout.Width(EditorGUIUtility.singleLineHeight * 1.31f); + var height = GUILayout.Height(EditorGUIUtility.singleLineHeight * 1.01f); + GUILayout.BeginHorizontal(HotReloadWindowStyles.BoxStyle, height, GUILayout.ExpandWidth(true)); + var style = HotReloadWindowStyles.NoPaddingMiddleLeftStyle; + var iconRect = GUILayoutUtility.GetRect( + Mathf.Round(EditorGUIUtility.singleLineHeight * 1.31f), + Mathf.Round(EditorGUIUtility.singleLineHeight * 1.01f), + style, boxWidth, height, GUILayout.ExpandWidth(false)); + // rounded so we can have pixel perfect black circle bg + iconRect.Set(Mathf.Round(iconRect.x), Mathf.Round(iconRect.y), Mathf.CeilToInt(iconRect.width), + Mathf.CeilToInt(iconRect.height)); + var text = condition ? okText : notOkText; + var icon = condition ? iconCheck : iconWarning; + if (GUI.enabled) { + DrawBlackCircle(iconRect); + // resource can be null when building player (Editor Resources not available) + if (icon) { + GUI.DrawTexture(iconRect, icon, ScaleMode.ScaleToFit); + } + } else { + // show something (instead of hiding) so that layout stays same size + DrawDisabledCircle(iconRect); + } + GUILayout.Space(4f); + GUILayout.Label(text, style, height); + + if (!condition && hasFix) { + isSupported = false; + } + + GUILayout.EndHorizontal(); + if (!condition && !String.IsNullOrEmpty(suggestedSolutionText)) { + // suggest to the user how they can resolve the issue + EditorGUI.indentLevel++; + GUILayout.Label(suggestedSolutionText, HotReloadWindowStyles.WrapStyle); + EditorGUI.indentLevel--; + } + } + + void DrawDisabledCircle(Rect rect) => DrawCircleIcon(rect, + Resources.Load("icon_circle_gray"), + Color.clear); // smaller circle draws less attention + + void DrawBlackCircle(Rect rect) => DrawCircleIcon(rect, + Resources.Load("icon_circle_black"), + new Color(0.14f, 0.14f, 0.14f)); // black is too dark in unity light theme + + void DrawCircleIcon(Rect rect, Texture circleIcon, Color borderColor) { + // Note: drawing texture from resources is pixelated on the edges, so it has some transperancy around the edges. + // While building for Android, Resources.Load returns null for our editor Resources. + if (circleIcon != null) { + GUI.DrawTexture(rect, circleIcon, ScaleMode.ScaleToFit); + } + + // Draw smooth circle border + const float borderWidth = 2f; + GUI.DrawTexture(rect, EditorTextures.White, ScaleMode.ScaleToFit, true, + 0f, + borderColor, + new Vector4(borderWidth, borderWidth, borderWidth, borderWidth), + Mathf.Min(rect.height, rect.width) / 2f); + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadSettingsTab.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadSettingsTab.cs.meta new file mode 100644 index 0000000..6d2e8b8 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadSettingsTab.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: fff71bd159424bf2978e2e99eacba9b4 +timeCreated: 1674057842 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/GUI/Tabs/HotReloadSettingsTab.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/HotReloadWindow.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/HotReloadWindow.cs new file mode 100644 index 0000000..45b2580 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/HotReloadWindow.cs @@ -0,0 +1,388 @@ + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text.RegularExpressions; +using System.Threading; +using SingularityGroup.HotReload.DTO; +using SingularityGroup.HotReload.Editor.Cli; +using SingularityGroup.HotReload.Editor.Semver; +using UnityEditor; +using UnityEditor.Compilation; +using UnityEngine; + +[assembly: InternalsVisibleTo("SingularityGroup.HotReload.EditorSamples")] + +namespace SingularityGroup.HotReload.Editor { + class HotReloadWindow : EditorWindow { + public static HotReloadWindow Current { get; private set; } + + List tabs; + List Tabs => tabs ?? (tabs = new List { + RunTab, + SettingsTab, + AboutTab, + }); + int selectedTab; + + internal static Vector2 scrollPos; + + static Timer timer; + + + HotReloadRunTab runTab; + internal HotReloadRunTab RunTab => runTab ?? (runTab = new HotReloadRunTab(this)); + HotReloadSettingsTab settingsTab; + internal HotReloadSettingsTab SettingsTab => settingsTab ?? (settingsTab = new HotReloadSettingsTab(this)); + HotReloadAboutTab aboutTab; + internal HotReloadAboutTab AboutTab => aboutTab ?? (aboutTab = new HotReloadAboutTab(this)); + + static ShowOnStartupEnum _showOnStartupOption; + + /// + /// This token is cancelled when the EditorWindow is disabled. + /// + /// + /// Use it for all tasks. + /// When token is cancelled, scripts are about to be recompiled and this will cause tasks to fail for weird reasons. + /// + public CancellationToken cancelToken; + CancellationTokenSource cancelTokenSource; + + static readonly PackageUpdateChecker packageUpdateChecker = new PackageUpdateChecker(); + + [MenuItem("Window/Hot Reload/Open &#H")] + internal static void Open() { + // opening the window on CI systems was keeping Unity open indefinitely + if (EditorWindowHelper.IsHumanControllingUs()) { + if (Current) { + Current.Show(); + Current.Focus(); + } else { + Current = GetWindow(); + } + } + } + + [MenuItem("Window/Hot Reload/Recompile")] + internal static void Recompile() { + HotReloadRunTab.Recompile(); + } + + void OnInterval(object o) { + HotReloadRunTab.RepaintInstant(); + } + + void OnEnable() { + if (timer == null) { + timer = new Timer(OnInterval, null, 20 * 1000, 20 * 1000); + } + Current = this; + if (cancelTokenSource != null) { + cancelTokenSource.Cancel(); + } + // Set min size initially so that full UI is visible + if (!HotReloadPrefs.OpenedWindowAtLeastOnce) { + this.minSize = new Vector2(Constants.RecompileButtonTextHideWidth + 1, Constants.EventsListHideHeight + 70); + HotReloadPrefs.OpenedWindowAtLeastOnce = true; + } + cancelTokenSource = new CancellationTokenSource(); + cancelToken = cancelTokenSource.Token; + + this.titleContent = new GUIContent(" Hot Reload", GUIHelper.GetInvertibleIcon(InvertibleIcon.Logo)); + _showOnStartupOption = HotReloadPrefs.ShowOnStartup; + + packageUpdateChecker.StartCheckingForNewVersion(); + } + + void Update() { + foreach (var tab in Tabs) { + tab.Update(); + } + } + + void OnDisable() { + if (cancelTokenSource != null) { + cancelTokenSource.Cancel(); + cancelTokenSource = null; + } + + if (Current == this) { + Current = null; + } + timer.Dispose(); + timer = null; + } + + internal void SelectTab(Type tabType) { + selectedTab = Tabs.FindIndex(x => x.GetType() == tabType); + } + + public HotReloadRunTabState RunTabState { get; private set; } + void OnGUI() { + // TabState ensures rendering is consistent between Layout and Repaint calls + // Without it errors like this happen: + // ArgumentException: Getting control 2's position in a group with only 2 controls when doing repaint + // See thread for more context: https://answers.unity.com/questions/17718/argumentexception-getting-control-2s-position-in-a.html + if (Event.current.type == EventType.Layout) { + RunTabState = HotReloadRunTabState.Current; + } + using(var scope = new EditorGUILayout.ScrollViewScope(scrollPos, false, false)) { + scrollPos = scope.scrollPosition; + // RenderDebug(); + RenderTabs(); + } + GUILayout.FlexibleSpace(); // GUI below will be rendered on the bottom + if (HotReloadWindowStyles.windowScreenHeight > 90) + RenderBottomBar(); + } + + void RenderDebug() { + if (GUILayout.Button("RESET WINDOW")) { + OnDisable(); + + RequestHelper.RequestLogin("test", "test", 1).Forget(); + + HotReloadPrefs.LicenseEmail = null; + HotReloadPrefs.ExposeServerToLocalNetwork = true; + HotReloadPrefs.LicensePassword = null; + HotReloadPrefs.LoggedBurstHint = false; + HotReloadPrefs.DontShowPromptForDownload = false; + HotReloadPrefs.RateAppShown = false; + HotReloadPrefs.ActiveDays = string.Empty; + HotReloadPrefs.LaunchOnEditorStart = false; + HotReloadPrefs.ShowUnsupportedChanges = true; + HotReloadPrefs.RedeemLicenseEmail = null; + HotReloadPrefs.RedeemLicenseInvoice = null; + OnEnable(); + File.Delete(EditorCodePatcher.serverDownloader.GetExecutablePath(HotReloadCli.controller)); + InstallUtility.DebugClearInstallState(); + InstallUtility.CheckForNewInstall(); + EditorPrefs.DeleteKey(Attribution.LastLoginKey); + File.Delete(RedeemLicenseHelper.registerOutcomePath); + + CompileMethodDetourer.Reset(); + AssetDatabase.Refresh(); + } + } + + internal static void RenderLogo(int width = 243) { + var isDarkMode = HotReloadWindowStyles.IsDarkMode; + var tex = Resources.Load(isDarkMode ? "Logo_HotReload_DarkMode" : "Logo_HotReload_LightMode"); + //Can happen during player builds where Editor Resources are unavailable + if(tex == null) { + return; + } + var targetWidth = width; + var targetHeight = 44; + GUILayout.Space(4f); + // background padding top and bottom + float padding = 5f; + // reserve layout space for the texture + var backgroundRect = GUILayoutUtility.GetRect(targetWidth + padding, targetHeight + padding, HotReloadWindowStyles.LogoStyle); + // draw the texture into that reserved space. First the bg then the logo. + if (isDarkMode) { + GUI.DrawTexture(backgroundRect, EditorTextures.DarkGray17, ScaleMode.StretchToFill); + } else { + GUI.DrawTexture(backgroundRect, EditorTextures.LightGray238, ScaleMode.StretchToFill); + } + + var foregroundRect = backgroundRect; + foregroundRect.yMin += padding; + foregroundRect.yMax -= padding; + // during player build (EditorWindow still visible), Resources.Load returns null + if (tex) { + GUI.DrawTexture(foregroundRect, tex, ScaleMode.ScaleToFit); + } + } + + int? collapsedTab; + void RenderTabs() { + using(new EditorGUILayout.VerticalScope(HotReloadWindowStyles.BoxStyle)) { + if (HotReloadWindowStyles.windowScreenHeight > 210 && HotReloadWindowStyles.windowScreenWidth > 375) { + selectedTab = GUILayout.Toolbar( + selectedTab, + Tabs.Select(t => + new GUIContent(t.Title.StartsWith(" ", StringComparison.Ordinal) ? t.Title : " " + t.Title, + t.Icon, t.Tooltip)).ToArray(), + GUILayout.Height(22f) // required, otherwise largest icon height determines toolbar height + ); + if (collapsedTab != null) { + selectedTab = collapsedTab.Value; + collapsedTab = null; + } + } else { + if (collapsedTab == null) { + collapsedTab = selectedTab; + } + // When window is super small, we pretty much can only show run tab + SelectTab(typeof(HotReloadRunTab)); + } + + if (HotReloadWindowStyles.windowScreenHeight > 250 && HotReloadWindowStyles.windowScreenWidth > 275) { + RenderLogo(); + } + + Tabs[selectedTab].OnGUI(); + } + } + + void RenderBottomBar() { + SemVersion newVersion; + var updateAvailable = packageUpdateChecker.TryGetNewVersion(out newVersion); + + if (HotReloadWindowStyles.windowScreenWidth > Constants.RateAppHideWidth + && HotReloadWindowStyles.windowScreenHeight > Constants.RateAppHideHeight + ) { + RenderRateApp(); + } + + if (updateAvailable) { + RenderUpdateButton(newVersion); + } + + using(new EditorGUILayout.HorizontalScope("ProjectBrowserBottomBarBg", GUILayout.ExpandWidth(true), GUILayout.Height(25f))) { + RenderBottomBarCore(); + } + } + + static GUIStyle _renderAppBoxStyle; + static GUIStyle renderAppBoxStyle => _renderAppBoxStyle ?? (_renderAppBoxStyle = new GUIStyle(GUI.skin.box) { + padding = new RectOffset(10, 10, 0, 0) + }); + + static GUILayoutOption[] _nonExpandable; + public static GUILayoutOption[] NonExpandableLayout => _nonExpandable ?? (_nonExpandable = new [] {GUILayout.ExpandWidth(false), GUILayout.ExpandHeight(true)}); + + internal static void RenderRateApp() { + if (!ShouldShowRateApp()) { + return; + } + using (new EditorGUILayout.VerticalScope(renderAppBoxStyle)) { + using (new EditorGUILayout.HorizontalScope()) { + HotReloadGUIHelper.HelpBox("Are you enjoying using Hot Reload?", MessageType.Info, 11); + if (GUILayout.Button("Hide", NonExpandableLayout)) { + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Debug, StatFeature.RateApp), new EditorExtraData { { "dismissed", true } }).Forget(); + HotReloadPrefs.RateAppShown = true; + } + } + using (new EditorGUILayout.HorizontalScope()) { + if (GUILayout.Button("Yes")) { + var openedUrl = PackageConst.IsAssetStoreBuild && EditorUtility.DisplayDialog("Rate Hot Reload", "Thank you for using Hot Reload!\n\nPlease consider leaving a review on the Asset Store to support us.", "Open in browser", "Cancel"); + if (openedUrl) { + Application.OpenURL(Constants.UnityStoreRateAppURL); + } + HotReloadPrefs.RateAppShown = true; + var data = new EditorExtraData(); + if (PackageConst.IsAssetStoreBuild) { + data.Add("opened_url", openedUrl); + } + data.Add("enjoy_app", true); + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Debug, StatFeature.RateApp), data).Forget(); + } + if (GUILayout.Button("No")) { + HotReloadPrefs.RateAppShown = true; + var data = new EditorExtraData(); + data.Add("enjoy_app", false); + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Debug, StatFeature.RateApp), data).Forget(); + } + } + } + } + + internal static bool ShouldShowRateApp() { + if (HotReloadPrefs.RateAppShown) { + return false; + } + var activeDays = EditorCodePatcher.GetActiveDaysForRateApp(); + if (activeDays.Count < Constants.DaysToRateApp) { + return false; + } + return true; + } + + void RenderUpdateButton(SemVersion newVersion) { + if (GUILayout.Button($"Update To v{newVersion}", HotReloadWindowStyles.UpgradeButtonStyle)) { + packageUpdateChecker.UpdatePackageAsync(newVersion).Forget(CancellationToken.None); + } + } + + internal static void RenderShowOnStartup() { + var prevLabelWidth = EditorGUIUtility.labelWidth; + try { + EditorGUIUtility.labelWidth = 105f; + using (new GUILayout.VerticalScope()) { + using (new GUILayout.HorizontalScope()) { + GUILayout.Label("Show On Startup"); + Rect buttonRect = GUILayoutUtility.GetLastRect(); + if (EditorGUILayout.DropdownButton(new GUIContent(Regex.Replace(_showOnStartupOption.ToString(), "([a-z])([A-Z])", "$1 $2")), FocusType.Passive, GUILayout.Width(110f))) { + GenericMenu menu = new GenericMenu(); + foreach (ShowOnStartupEnum option in Enum.GetValues(typeof(ShowOnStartupEnum))) { + menu.AddItem(new GUIContent(Regex.Replace(option.ToString(), "([a-z])([A-Z])", "$1 $2")), false, () => { + if (_showOnStartupOption != option) { + _showOnStartupOption = option; + HotReloadPrefs.ShowOnStartup = _showOnStartupOption; + } + }); + } + menu.DropDown(new Rect(buttonRect.x, buttonRect.y, 100, 0)); + } + } + } + } finally { + EditorGUIUtility.labelWidth = prevLabelWidth; + } + } + + internal static readonly OpenURLButton autoRefreshTroubleshootingBtn = new OpenURLButton("Troubleshooting", Constants.TroubleshootingURL); + void RenderBottomBarCore() { + bool troubleshootingShown = EditorCodePatcher.Started && HotReloadWindowStyles.windowScreenWidth >= 400; + bool alertsShown = EditorCodePatcher.Started && HotReloadWindowStyles.windowScreenWidth > Constants.EventFiltersShownHideWidth; + using (new EditorGUILayout.VerticalScope()) { + using (new EditorGUILayout.HorizontalScope(HotReloadWindowStyles.FooterStyle)) { + if (!troubleshootingShown) { + GUILayout.FlexibleSpace(); + if (alertsShown) { + GUILayout.Space(-20); + } + } else { + GUILayout.Space(21); + } + GUILayout.Space(0); + var lastRect = GUILayoutUtility.GetLastRect(); + // show events button when scrolls are hidden + if (!HotReloadRunTab.CanRenderBars(RunTabState) && !RunTabState.starting) { + using (new EditorGUILayout.VerticalScope()) { + GUILayout.FlexibleSpace(); + var icon = HotReloadState.ShowingRedDot ? InvertibleIcon.EventsNew : InvertibleIcon.Events; + if (GUILayout.Button(new GUIContent("", GUIHelper.GetInvertibleIcon(icon)))) { + PopupWindow.Show(new Rect(lastRect.x, lastRect.y, 0, 0), HotReloadEventPopup.I); + } + GUILayout.FlexibleSpace(); + } + GUILayout.Space(3f); + } + if (alertsShown) { + using (new EditorGUILayout.VerticalScope()) { + GUILayout.FlexibleSpace(); + HotReloadTimelineHelper.RenderAlertFilters(); + GUILayout.FlexibleSpace(); + } + } + + GUILayout.FlexibleSpace(); + if (troubleshootingShown) { + using (new EditorGUILayout.VerticalScope()) { + GUILayout.FlexibleSpace(); + autoRefreshTroubleshootingBtn.OnGUI(); + GUILayout.FlexibleSpace(); + } + GUILayout.Space(21); + } + } + } + } + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/HotReloadWindow.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/HotReloadWindow.cs.meta new file mode 100644 index 0000000..ead6d52 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/HotReloadWindow.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: f62a84c0b148b0a4582bdd9f1a69e6d3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/HotReloadWindow.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/ShowOnStartupEnum.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/ShowOnStartupEnum.cs new file mode 100644 index 0000000..17f2f50 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/ShowOnStartupEnum.cs @@ -0,0 +1,7 @@ +namespace SingularityGroup.HotReload.Editor { + enum ShowOnStartupEnum { + Always, + OnNewVersion, + Never, + } +} \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/ShowOnStartupEnum.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/ShowOnStartupEnum.cs.meta new file mode 100644 index 0000000..f72f69a --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/ShowOnStartupEnum.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 809f47245f717ad41996974be2443feb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/ShowOnStartupEnum.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/Styles.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/Styles.meta new file mode 100644 index 0000000..48002b6 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/Styles.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 83e25ceea0bb7cd4ebf04b724bb0584c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/Styles/HotReloadWindowStyles.cs b/Packages/com.singularitygroup.hotreload/Editor/Window/Styles/HotReloadWindowStyles.cs new file mode 100644 index 0000000..4f4ede9 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/Styles/HotReloadWindowStyles.cs @@ -0,0 +1,777 @@ +using UnityEditor; +using UnityEngine; +using System.Reflection; + +namespace SingularityGroup.HotReload.Editor { + internal static class HotReloadWindowStyles { + private static GUIStyle h1TitleStyle; + private static GUIStyle h1TitleCenteredStyle; + private static GUIStyle h2TitleStyle; + private static GUIStyle h3TitleStyle; + private static GUIStyle h3TitleWrapStyle; + private static GUIStyle h4TitleStyle; + private static GUIStyle h5TitleStyle; + private static GUIStyle boxStyle; + private static GUIStyle wrapStyle; + private static GUIStyle noPaddingMiddleLeftStyle; + private static GUIStyle middleLeftStyle; + private static GUIStyle middleCenterStyle; + private static GUIStyle mediumMiddleCenterStyle; + private static GUIStyle textFieldWrapStyle; + private static GUIStyle foldoutStyle; + private static GUIStyle h3CenterTitleStyle; + private static GUIStyle logoStyle; + private static GUIStyle changelogPointersStyle; + private static GUIStyle recompileButtonStyle; + private static GUIStyle indicationIconStyle; + private static GUIStyle indicationAlertIconStyle; + private static GUIStyle startButtonStyle; + private static GUIStyle stopButtonStyle; + private static GUIStyle eventFilters; + private static GUIStyle sectionOuterBoxCompactStyle; + private static GUIStyle sectionInnerBoxStyle; + private static GUIStyle sectionInnerBoxWideStyle; + private static GUIStyle changelogSectionInnerBoxStyle; + private static GUIStyle indicationBoxStyle; + private static GUIStyle linkStyle; + private static GUIStyle labelStyle; + private static GUIStyle progressBarBarStyle; + private static GUIStyle section; + private static GUIStyle scroll; + private static GUIStyle barStyle; + private static GUIStyle barBgStyle; + private static GUIStyle barChildStyle; + private static GUIStyle barFoldoutStyle; + private static GUIStyle timestampStyle; + private static GUIStyle clickableLabelBoldStyle; + private static GUIStyle _footerStyle; + private static GUIStyle _emptyListText; + private static GUIStyle _stacktraceTextAreaStyle; + private static GUIStyle _customFoldoutStyle; + private static GUIStyle _entryBoxStyle; + private static GUIStyle _childEntryBoxStyle; + private static GUIStyle _removeIconStyle; + private static GUIStyle upgradeLicenseButtonStyle; + private static GUIStyle upgradeLicenseButtonOverlayStyle; + private static GUIStyle upgradeButtonStyle; + private static GUIStyle hideButtonStyle; + private static GUIStyle dynamicSection; + private static GUIStyle dynamicSectionHelpTab; + private static GUIStyle helpTabButton; + private static GUIStyle indicationHelpBox; + private static GUIStyle notificationsTitleStyle; + + private static Color32? darkModeLinkColor; + private static Color32? lightModeModeLinkColor; + + public static bool IsDarkMode => EditorGUIUtility.isProSkin; + public static int windowScreenWidth => HotReloadWindow.Current ? (int)HotReloadWindow.Current.position.width : Screen.width; + public static int windowScreenHeight => HotReloadWindow.Current ? (int)HotReloadWindow.Current.position.height : Screen.height; + public static GUIStyle H1TitleStyle { + get { + if (h1TitleStyle == null) { + h1TitleStyle = new GUIStyle(EditorStyles.label); + h1TitleStyle.normal.textColor = EditorStyles.label.normal.textColor; + h1TitleStyle.fontStyle = FontStyle.Bold; + h1TitleStyle.fontSize = 16; + h1TitleStyle.padding.top = 5; + h1TitleStyle.padding.bottom = 5; + } + return h1TitleStyle; + } + } + + public static GUIStyle FooterStyle { + get { + if (_footerStyle == null) { + _footerStyle = new GUIStyle(); + _footerStyle.fixedHeight = 28; + } + return _footerStyle; + } + } + + public static GUIStyle H1TitleCenteredStyle { + get { + if (h1TitleCenteredStyle == null) { + h1TitleCenteredStyle = new GUIStyle(H1TitleStyle); + h1TitleCenteredStyle.alignment = TextAnchor.MiddleCenter; + } + return h1TitleCenteredStyle; + } + } + + public static GUIStyle H2TitleStyle { + get { + if (h2TitleStyle == null) { + h2TitleStyle = new GUIStyle(EditorStyles.label); + h2TitleStyle.normal.textColor = EditorStyles.label.normal.textColor; + h2TitleStyle.fontStyle = FontStyle.Bold; + h2TitleStyle.fontSize = 14; + h2TitleStyle.padding.top = 5; + h2TitleStyle.padding.bottom = 5; + } + return h2TitleStyle; + } + } + + public static GUIStyle H3TitleStyle { + get { + if (h3TitleStyle == null) { + h3TitleStyle = new GUIStyle(EditorStyles.label); + h3TitleStyle.normal.textColor = EditorStyles.label.normal.textColor; + h3TitleStyle.fontStyle = FontStyle.Bold; + h3TitleStyle.fontSize = 12; + h3TitleStyle.padding.top = 5; + h3TitleStyle.padding.bottom = 5; + } + return h3TitleStyle; + } + } + + public static GUIStyle NotificationsTitleStyle { + get { + if (notificationsTitleStyle == null) { + notificationsTitleStyle = new GUIStyle(HotReloadWindowStyles.H3TitleStyle); + notificationsTitleStyle.padding.bottom = 0; + notificationsTitleStyle.padding.top = 0; + } + return notificationsTitleStyle; + } + } + + public static GUIStyle H3TitleWrapStyle { + get { + if (h3TitleWrapStyle == null) { + h3TitleWrapStyle = new GUIStyle(H3TitleStyle); + h3TitleWrapStyle.wordWrap = true; + } + return h3TitleWrapStyle; + } + } + + public static GUIStyle H3CenteredTitleStyle { + get { + if (h3CenterTitleStyle == null) { + h3CenterTitleStyle = new GUIStyle(EditorStyles.label); + h3CenterTitleStyle.normal.textColor = EditorStyles.label.normal.textColor; + h3CenterTitleStyle.fontStyle = FontStyle.Bold; + h3CenterTitleStyle.alignment = TextAnchor.MiddleCenter; + h3CenterTitleStyle.fontSize = 12; + } + return h3CenterTitleStyle; + } + } + + public static GUIStyle H4TitleStyle { + get { + if (h4TitleStyle == null) { + h4TitleStyle = new GUIStyle(EditorStyles.label); + h4TitleStyle.normal.textColor = EditorStyles.label.normal.textColor; + h4TitleStyle.fontStyle = FontStyle.Bold; + h4TitleStyle.fontSize = 11; + } + return h4TitleStyle; + } + } + + public static GUIStyle H5TitleStyle { + get { + if (h5TitleStyle == null) { + h5TitleStyle = new GUIStyle(EditorStyles.label); + h5TitleStyle.normal.textColor = EditorStyles.label.normal.textColor; + h5TitleStyle.fontStyle = FontStyle.Bold; + h5TitleStyle.fontSize = 10; + } + return h5TitleStyle; + } + } + + public static GUIStyle LabelStyle { + get { + if (labelStyle == null) { + labelStyle = new GUIStyle(EditorStyles.label); + labelStyle.fontSize = 12; + labelStyle.clipping = TextClipping.Clip; + labelStyle.wordWrap = true; + } + return labelStyle; + } + } + + public static GUIStyle BoxStyle { + get { + if (boxStyle == null) { + boxStyle = new GUIStyle(EditorStyles.helpBox); + boxStyle.normal.textColor = GUI.skin.label.normal.textColor; + boxStyle.fontStyle = FontStyle.Bold; + boxStyle.alignment = TextAnchor.UpperLeft; + } + if (!IsDarkMode) { + boxStyle.normal.background = Texture2D.blackTexture; + } + return boxStyle; + } + } + + public static GUIStyle WrapStyle { + get { + if (wrapStyle == null) { + wrapStyle = new GUIStyle(EditorStyles.label); + wrapStyle.fontStyle = FontStyle.Normal; + wrapStyle.wordWrap = true; + } + return wrapStyle; + } + } + + public static GUIStyle NoPaddingMiddleLeftStyle { + get { + if (noPaddingMiddleLeftStyle == null) { + noPaddingMiddleLeftStyle = new GUIStyle(EditorStyles.label); + noPaddingMiddleLeftStyle.normal.textColor = GUI.skin.label.normal.textColor; + noPaddingMiddleLeftStyle.padding = new RectOffset(); + noPaddingMiddleLeftStyle.margin = new RectOffset(); + noPaddingMiddleLeftStyle.alignment = TextAnchor.MiddleLeft; + } + return noPaddingMiddleLeftStyle; + } + } + + public static GUIStyle MiddleLeftStyle { + get { + if (middleLeftStyle == null) { + middleLeftStyle = new GUIStyle(EditorStyles.label); + middleLeftStyle.fontStyle = FontStyle.Normal; + middleLeftStyle.alignment = TextAnchor.MiddleLeft; + } + + return middleLeftStyle; + } + } + + public static GUIStyle MiddleCenterStyle { + get { + if (middleCenterStyle == null) { + middleCenterStyle = new GUIStyle(EditorStyles.label); + middleCenterStyle.fontStyle = FontStyle.Normal; + middleCenterStyle.alignment = TextAnchor.MiddleCenter; + } + return middleCenterStyle; + } + } + + public static GUIStyle MediumMiddleCenterStyle { + get { + if (mediumMiddleCenterStyle == null) { + mediumMiddleCenterStyle = new GUIStyle(EditorStyles.label); + mediumMiddleCenterStyle.fontStyle = FontStyle.Normal; + mediumMiddleCenterStyle.fontSize = 12; + mediumMiddleCenterStyle.alignment = TextAnchor.MiddleCenter; + } + return mediumMiddleCenterStyle; + } + } + + public static GUIStyle TextFieldWrapStyle { + get { + if (textFieldWrapStyle == null) { + textFieldWrapStyle = new GUIStyle(EditorStyles.textField); + textFieldWrapStyle.wordWrap = true; + } + return textFieldWrapStyle; + } + } + + public static GUIStyle FoldoutStyle { + get { + if (foldoutStyle == null) { + foldoutStyle = new GUIStyle(EditorStyles.foldout); + foldoutStyle.normal.textColor = GUI.skin.label.normal.textColor; + foldoutStyle.alignment = TextAnchor.MiddleLeft; + foldoutStyle.fontStyle = FontStyle.Bold; + foldoutStyle.fontSize = 12; + } + return foldoutStyle; + } + } + + public static GUIStyle LogoStyle { + get { + if (logoStyle == null) { + logoStyle = new GUIStyle(); + logoStyle.margin = new RectOffset(6, 6, 0, 0); + logoStyle.padding = new RectOffset(16, 16, 0, 0); + } + return logoStyle; + } + } + + public static GUIStyle ChangelogPointerStyle { + get { + if (changelogPointersStyle == null) { + changelogPointersStyle = new GUIStyle(EditorStyles.label); + changelogPointersStyle.wordWrap = true; + changelogPointersStyle.fontSize = 12; + changelogPointersStyle.padding.left = 20; + } + return changelogPointersStyle; + } + } + + public static GUIStyle IndicationIcon { + get { + if (indicationIconStyle == null) { + indicationIconStyle = new GUIStyle(H2TitleStyle); + indicationIconStyle.fixedHeight = 20; + } + indicationIconStyle.padding = new RectOffset(left: windowScreenWidth > Constants.IndicationTextHideWidth ? 7 : 5, right: windowScreenWidth > Constants.IndicationTextHideWidth ? 0 : -10, top: 1, bottom: 1); + return indicationIconStyle; + } + } + + public static GUIStyle IndicationAlertIcon { + get { + if (indicationAlertIconStyle == null) { + indicationAlertIconStyle = new GUIStyle(H2TitleStyle); + indicationAlertIconStyle.padding = new RectOffset(left: 5, right: -7, top: 1, bottom: 1); + indicationAlertIconStyle.fixedHeight = 20; + } + return indicationAlertIconStyle; + } + } + + public static GUIStyle RecompileButton { + get { + if (recompileButtonStyle == null) { + recompileButtonStyle = new GUIStyle(EditorStyles.miniButton); + recompileButtonStyle.margin.top = 17; + recompileButtonStyle.fixedHeight = 25; + recompileButtonStyle.margin.right = 5; + } + recompileButtonStyle.fixedWidth = windowScreenWidth > Constants.RecompileButtonTextHideWidth ? 95 : 30; + return recompileButtonStyle; + } + } + + public static GUIStyle StartButton { + get { + if (startButtonStyle == null) { + startButtonStyle = new GUIStyle(EditorStyles.miniButton); + startButtonStyle.fixedHeight = 25; + startButtonStyle.padding.top = 6; + startButtonStyle.padding.bottom = 6; + startButtonStyle.margin.top = 17; + } + startButtonStyle.fixedWidth = windowScreenWidth > Constants.StartButtonTextHideWidth ? 70 : 30; + return startButtonStyle; + } + } + + public static GUIStyle StopButton { + get { + if (stopButtonStyle == null) { + stopButtonStyle = new GUIStyle(EditorStyles.miniButton); + stopButtonStyle.fixedHeight = 25; + stopButtonStyle.margin.top = 17; + } + stopButtonStyle.fixedWidth = HotReloadWindowStyles.windowScreenWidth > Constants.StartButtonTextHideWidth ? 70 : 30; + return stopButtonStyle; + } + } + + internal static GUIStyle EventFiltersStyle { + get { + if (eventFilters == null) { + eventFilters = new GUIStyle(EditorStyles.toolbarButton); + eventFilters.fontSize = 13; + // gets overwritten to content size + eventFilters.fixedHeight = 26; + eventFilters.fixedWidth = 50; + eventFilters.margin = new RectOffset(0, 0, 0, 0); + eventFilters.padding = new RectOffset(0, 0, 6, 6); + } + return eventFilters; + } + } + + private static Texture2D _clearBackground; + private static Texture2D clearBackground { + get { + if (_clearBackground == null) { + _clearBackground = new Texture2D(1, 1); + _clearBackground.SetPixel(0, 0, Color.clear); + _clearBackground.Apply(); + } + return _clearBackground; + + } + } + + public static GUIStyle SectionOuterBoxCompact { + get { + if (sectionOuterBoxCompactStyle == null) { + sectionOuterBoxCompactStyle = new GUIStyle(); + sectionOuterBoxCompactStyle.padding.top = 10; + sectionOuterBoxCompactStyle.padding.bottom = 10; + } + // Looks better without a background + sectionOuterBoxCompactStyle.normal.background = clearBackground; + return sectionOuterBoxCompactStyle; + } + } + + public static GUIStyle SectionInnerBox { + get { + if (sectionInnerBoxStyle == null) { + sectionInnerBoxStyle = new GUIStyle(); + } + sectionInnerBoxStyle.padding = new RectOffset(left: 0, right: 0, top: 15, bottom: 0); + return sectionInnerBoxStyle; + } + } + + public static GUIStyle SectionInnerBoxWide { + get { + if (sectionInnerBoxWideStyle == null) { + sectionInnerBoxWideStyle = new GUIStyle(EditorStyles.helpBox); + sectionInnerBoxWideStyle.padding.top = 15; + sectionInnerBoxWideStyle.padding.bottom = 15; + sectionInnerBoxWideStyle.padding.left = 10; + sectionInnerBoxWideStyle.padding.right = 10; + } + return sectionInnerBoxWideStyle; + } + } + + public static GUIStyle DynamiSection { + get { + if (dynamicSection == null) { + dynamicSection = new GUIStyle(); + } + var defaultPadding = 13; + if (windowScreenWidth > 600) { + var dynamicPadding = (windowScreenWidth - 600) / 2; + dynamicSection.padding.left = defaultPadding + dynamicPadding; + dynamicSection.padding.right = defaultPadding + dynamicPadding; + } else if (windowScreenWidth < Constants.IndicationTextHideWidth) { + dynamicSection.padding.left = 0; + dynamicSection.padding.right = 0; + } else { + dynamicSection.padding.left = 13; + dynamicSection.padding.right = 13; + } + return dynamicSection; + } + } + + public static GUIStyle DynamicSectionHelpTab { + get { + if (dynamicSectionHelpTab == null) { + dynamicSectionHelpTab = new GUIStyle(DynamiSection); + } + dynamicSectionHelpTab.padding.left = DynamiSection.padding.left - 3; + dynamicSectionHelpTab.padding.right = DynamiSection.padding.right - 3; + return dynamicSectionHelpTab; + } + } + + public static GUIStyle ChangelogSectionInnerBox { + get { + if (changelogSectionInnerBoxStyle == null) { + changelogSectionInnerBoxStyle = new GUIStyle(EditorStyles.helpBox); + changelogSectionInnerBoxStyle.margin.bottom = 10; + changelogSectionInnerBoxStyle.margin.top = 10; + } + return changelogSectionInnerBoxStyle; + } + } + + public static GUIStyle IndicationBox { + get { + if (indicationBoxStyle == null) { + indicationBoxStyle = new GUIStyle(); + } + indicationBoxStyle.margin.bottom = windowScreenWidth < 141 ? 0 : 10; + return indicationBoxStyle; + } + } + + + public static GUIStyle LinkStyle { + get { + if (linkStyle == null) { + linkStyle = new GUIStyle(EditorStyles.label); + linkStyle.fontStyle = FontStyle.Bold; + } + var color = IsDarkMode ? DarkModeLinkColor : LightModeModeLinkColor; + linkStyle.normal.textColor = color; + return linkStyle; + } + } + + private static Color32 DarkModeLinkColor { + get { + if (darkModeLinkColor == null) { + darkModeLinkColor = new Color32(0x3F, 0x9F, 0xFF, 0xFF); + } + return darkModeLinkColor.Value; + } + } + + + private static Color32 LightModeModeLinkColor { + get { + if (lightModeModeLinkColor == null) { + lightModeModeLinkColor = new Color32(0x0F, 0x52, 0xD7, 0xFF); + } + return lightModeModeLinkColor.Value; + } + } + public static GUIStyle ProgressBarBarStyle { + get { + if (progressBarBarStyle != null) { + return progressBarBarStyle; + } + var styles = (EditorStyles)typeof(EditorStyles) + .GetField("s_Current", BindingFlags.Static | BindingFlags.NonPublic) + ?.GetValue(null); + var style = styles?.GetType() + .GetField("m_ProgressBarBar", BindingFlags.NonPublic | BindingFlags.Instance) + ?.GetValue(styles); + progressBarBarStyle = style != null ? (GUIStyle)style : GUIStyle.none; + return progressBarBarStyle; + } + } + + internal static GUIStyle Section { + get { + if (section == null) { + section = new GUIStyle(EditorStyles.helpBox); + section.padding = new RectOffset(left: 10, right: 10, top: 10, bottom: 10); + section.margin = new RectOffset(left: 0, right: 0, top: 0, bottom: 0); + } + return section; + } + } + internal static GUIStyle Scroll { + get { + if (scroll == null) { + scroll = new GUIStyle(EditorStyles.helpBox); + } + if (IsDarkMode) { + scroll.normal.background = GUIHelper.ConvertTextureToColor(new Color(0,0,0,0.05f)); + } else { + scroll.normal.background = GUIHelper.ConvertTextureToColor(new Color(0,0,0,0.03f)); + } + return scroll; + } + } + + internal static GUIStyle BarStyle { + get { + if (barStyle == null) { + barStyle = new GUIStyle(GUI.skin.label); + barStyle.fontSize = 12; + barStyle.alignment = TextAnchor.MiddleLeft; + barStyle.fixedHeight = 20; + barStyle.padding = new RectOffset(10, 5, 2, 2); + } + return barStyle; + } + } + + internal static GUIStyle BarBackgroundStyle { + get { + if (barBgStyle == null) { + barBgStyle = new GUIStyle(); + } + barBgStyle.normal.background = GUIHelper.ConvertTextureToColor(Color.clear); + barBgStyle.hover.background = GUIHelper.ConvertTextureToColor(new Color(0, 0, 0, 0.1f)); + barBgStyle.focused.background = GUIHelper.ConvertTextureToColor(Color.clear); + barBgStyle.active.background = null; + return barBgStyle; + } + } + + internal static GUIStyle ChildBarStyle { + get { + if (barChildStyle == null) { + barChildStyle = new GUIStyle(BarStyle); + barChildStyle.padding = new RectOffset(43, barChildStyle.padding.right, barChildStyle.padding.top, barChildStyle.padding.bottom); + } + return barChildStyle; + } + } + + internal static GUIStyle FoldoutBarStyle { + get { + if (barFoldoutStyle == null) { + barFoldoutStyle = new GUIStyle(BarStyle); + barFoldoutStyle.padding = new RectOffset(23, barFoldoutStyle.padding.right, barFoldoutStyle.padding.top, barFoldoutStyle.padding.bottom); + } + return barFoldoutStyle; + } + } + + public static GUIStyle TimestampStyle { + get { + if (timestampStyle == null) { + timestampStyle = new GUIStyle(GUI.skin.label); + } + if (IsDarkMode) { + timestampStyle.normal.textColor = new Color(0.5f, 0.5f, 0.5f); + } else { + timestampStyle.normal.textColor = new Color(0.5f, 0.5f, 0.5f); + } + timestampStyle.hover = timestampStyle.normal; + return timestampStyle; + } + } + + internal static GUIStyle ClickableLabelBoldStyle { + get { + if (clickableLabelBoldStyle == null) { + clickableLabelBoldStyle = new GUIStyle(LabelStyle); + clickableLabelBoldStyle.fontStyle = FontStyle.Bold; + clickableLabelBoldStyle.fontSize = 14; + clickableLabelBoldStyle.margin.left = 17; + clickableLabelBoldStyle.active.textColor = clickableLabelBoldStyle.normal.textColor; + } + return clickableLabelBoldStyle; + } + } + + internal static GUIStyle EmptyListText { + get { + if (_emptyListText == null) { + _emptyListText = new GUIStyle(); + _emptyListText.fontSize = 11; + _emptyListText.padding.left = 15; + _emptyListText.padding.top = 10; + _emptyListText.alignment = TextAnchor.MiddleCenter; + _emptyListText.normal.textColor = Color.gray; + } + + return _emptyListText; + } + } + + internal static GUIStyle StacktraceTextAreaStyle { + get { + if (_stacktraceTextAreaStyle == null) { + _stacktraceTextAreaStyle = new GUIStyle(EditorStyles.textArea); + _stacktraceTextAreaStyle.border = new RectOffset(0, 0, 0, 0); + } + return _stacktraceTextAreaStyle; + } + } + + internal static GUIStyle EntryBoxStyle { + get { + if (_entryBoxStyle == null) { + _entryBoxStyle = new GUIStyle(); + _entryBoxStyle.margin.left = 30; + } + return _entryBoxStyle; + } + } + + internal static GUIStyle ChildEntryBoxStyle { + get { + if (_childEntryBoxStyle == null) { + _childEntryBoxStyle = new GUIStyle(); + _childEntryBoxStyle.margin.left = 45; + } + return _childEntryBoxStyle; + } + } + + internal static GUIStyle CustomFoldoutStyle { + get { + if (_customFoldoutStyle == null) { + _customFoldoutStyle = new GUIStyle(EditorStyles.foldout); + _customFoldoutStyle.margin.top = 4; + _customFoldoutStyle.margin.left = 0; + _customFoldoutStyle.padding.left = 0; + _customFoldoutStyle.fixedWidth = 100; + } + return _customFoldoutStyle; + } + } + + internal static GUIStyle RemoveIconStyle { + get { + if (_removeIconStyle == null) { + _removeIconStyle = new GUIStyle(); + _removeIconStyle.margin.top = 5; + _removeIconStyle.fixedWidth = 17; + _removeIconStyle.fixedHeight = 17; + } + return _removeIconStyle; + } + } + + internal static GUIStyle UpgradeLicenseButtonStyle { + get { + if (upgradeLicenseButtonStyle == null) { + upgradeLicenseButtonStyle = new GUIStyle(GUI.skin.button); + upgradeLicenseButtonStyle.padding = new RectOffset(5, 5, 0, 0); + } + return upgradeLicenseButtonStyle; + } + } + + internal static GUIStyle UpgradeLicenseButtonOverlayStyle { + get { + if (upgradeLicenseButtonOverlayStyle == null) { + upgradeLicenseButtonOverlayStyle = new GUIStyle(UpgradeLicenseButtonStyle); + } + return upgradeLicenseButtonOverlayStyle; + } + } + + internal static GUIStyle UpgradeButtonStyle { + get { + if (upgradeButtonStyle == null) { + upgradeButtonStyle = new GUIStyle(EditorStyles.miniButton); + upgradeButtonStyle.fontStyle = FontStyle.Bold; + upgradeButtonStyle.fontSize = 14; + upgradeButtonStyle.fixedHeight = 24; + } + return upgradeButtonStyle; + } + } + + internal static GUIStyle HideButtonStyle { + get { + if (hideButtonStyle == null) { + hideButtonStyle = new GUIStyle(GUI.skin.button); + } + return hideButtonStyle; + } + } + + internal static GUIStyle HelpTabButton { + get { + if (helpTabButton == null) { + helpTabButton = new GUIStyle(GUI.skin.button); + helpTabButton.alignment = TextAnchor.MiddleLeft; + helpTabButton.padding.left = 10; + } + return helpTabButton; + } + } + + internal static GUIStyle IndicationHelpBox { + get { + if (indicationHelpBox == null) { + indicationHelpBox = new GUIStyle(EditorStyles.helpBox); + indicationHelpBox.margin.right = 0; + indicationHelpBox.margin.left = 0; + } + return indicationHelpBox; + } + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/Window/Styles/HotReloadWindowStyles.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Window/Styles/HotReloadWindowStyles.cs.meta new file mode 100644 index 0000000..7b60abb --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/Window/Styles/HotReloadWindowStyles.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: c06a986e9e8c3874f9578f0002ff3a2d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Editor/Window/Styles/HotReloadWindowStyles.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/LICENSE.md b/Packages/com.singularitygroup.hotreload/LICENSE.md new file mode 100644 index 0000000..b9eb62e --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/LICENSE.md @@ -0,0 +1,45 @@ +End User License Agreement (“EULA”) for Hot Reload for Unity (“Software”) +Please read this End-User License Agreement ("Agreement") carefully before purchasing, downloading, or using Hot Reload for Unity ("Software"). + +By purchasing, downloading or using the Software, you, the individual or entity (“End-User”), agree to be bound by this EULA as well as by our Terms and Conditions. + +If End-User does not agree to the terms of this Agreement, do not purchase, download or use the Software. + +The subject matter of this EULA is the licensing of the Software to End-User. The Software is licensed, not sold. + +License + +The Naughty Cult Ltd. (“Licensor”) grants End-User a revocable, non-exclusive, worldwide, non-transferable, limited license to download, install and use the Software for personal and commercial purposes in accordance with the terms of this Agreement and the terms set out in the Terms and Conditions. + +The Software is owned and copyrighted by The Naughty Cult Ltd.. Your license confers no title or ownership in the Software and should not be construed as a sale of any right in the Software. + +The Software is protected by copyright law and international treaty provisions. You acknowledge that no ownership of the intellectual property in the Software is transferred to you. You further acknowledge that The Naughty Cult Ltd. retains full ownership rights to the Software, and you will not acquire any rights to the Software except as outlined in this license. You agree that any copies of the Software will include the same proprietary notices found on and within the original Software. + +End-User's Rights and Obligations + +End-User may use the licensed Software only for its intended purpose. End-User may not modify, reproduce, distribute, sublicense, rent, lease or lend the Software. +Each active license allows End-User to install and use the Software on a maximum of two devices associated with one specific Unity seat. End-User may not share the Software or the license key with any third party. + +You may not modify the Software or disable any licensing or control features of the Software without express permission from the Licensor. You agree that you will not attempt to reverse compile, modify, translate, or disassemble the Software in whole or in part. + +Once End-User's active license is terminated, End-User will not receive any new updates to the Software, and may not download, install, integrate or otherwise use versions of the Software released at any time hereafter, unless a license is activated. + +Termination +This EULA will terminate automatically if End-User fails to comply with any of the terms and conditions of this Agreement. In such event, End-User must immediately stop using the Software and destroy all copies of the Software in End-User's possession. + +Governing Law +This EULA shall be governed by the laws of the country in which the Licensor is headquartered without regard to its conflict of law provisions. We reserve the right to terminate or suspend your account, without notice or liability, for any reason, including breach of the Terms and Conditions and/or EULA. + +Limitation of Liability +The Naughty Cult Ltd. and its affiliates shall not be held liable for any indirect, incidental, special, consequential or punitive damages, including without limitation, loss of profits, data, use, goodwill, or other intangible losses, resulting from your use of or inability to use the Service, any conduct or content of any third party on the Service, any content obtained from the Service, or unauthorized access or alteration of your transmissions or content. This limitation applies regardless of whether the damages are based on warranty, contract, tort (including negligence), or any other legal theory, and even if we have been advised of the possibility of such damages. + + +Disclaimer of Warranties + +The Service is provided on an "as is" and "as available" basis without any warranties of any kind, either express or implied. We do not warrant that the Service will be uninterrupted or error-free, or that any defects will be corrected. We also do not guarantee that the Service will meet your requirements. + +Waiver and Severability +Our failure to enforce any right or provision of this EULA will not be deemed a waiver of such right or provision. In the event that any provision of these EULA is held to be invalid or unenforceable, the remaining provisions will remain in full force and effect. + +Entire Agreement +This EULA constitutes the entire agreement between End-User and Licensor regarding the use of the Software and supersedes all prior agreements and understandings, whether written or oral. diff --git a/Packages/com.singularitygroup.hotreload/LICENSE.md.meta b/Packages/com.singularitygroup.hotreload/LICENSE.md.meta new file mode 100644 index 0000000..574f937 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/LICENSE.md.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 0f0ed454ae8a66041bea966cdcee0f2e +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/LICENSE.md + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/README.md b/Packages/com.singularitygroup.hotreload/README.md new file mode 100644 index 0000000..1c30967 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/README.md @@ -0,0 +1,9 @@ +![HotReloadLogo](https://hotreload.net/logo.png?w=256&q=75) + +# Hot Reload for Unity + +Edit **any C# function** and get immediate updates in your game. Hot Reload works with your existing project, no code changes required. + +Install instructions on https://hotreload.net/ + +![Modify2dJumpingGameDemo](https://hot-reload-assets.s3.amazonaws.com/assets/hotreload_jump_demo.gif) diff --git a/Packages/com.singularitygroup.hotreload/README.md.meta b/Packages/com.singularitygroup.hotreload/README.md.meta new file mode 100644 index 0000000..cafbb98 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/README.md.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: bdb53603710c4ae3b491b7885e5ff702 +timeCreated: 1674514875 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/README.md + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Runtime.meta b/Packages/com.singularitygroup.hotreload/Runtime.meta new file mode 100644 index 0000000..2b0c282 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8026562867072c3409c904654ec3c17f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Runtime/AppCallbackListener.cs b/Packages/com.singularitygroup.hotreload/Runtime/AppCallbackListener.cs new file mode 100644 index 0000000..bad45db --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/AppCallbackListener.cs @@ -0,0 +1,55 @@ +#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR) +using System; +using System.Collections; +using UnityEngine; + +namespace SingularityGroup.HotReload { + class AppCallbackListener : MonoBehaviour { + /// + /// Reliable on Android and in the editor. + /// + /// + /// On iOS, OnApplicationPause is not called at expected moments + /// if the app has some background modes enabled in PlayerSettings -Troy. + /// + public static event Action onApplicationPause; + + /// + /// Reliable on Android, iOS and in the editor. + /// + public static event Action onApplicationFocus; + + static AppCallbackListener instance; + public static AppCallbackListener I => instance; + + // Must be called early from Unity main thread (before any usages of the singleton I). + public static AppCallbackListener Init() { + if(instance) return instance; + var go = new GameObject("AppCallbackListener"); + go.hideFlags |= HideFlags.HideInHierarchy; + DontDestroyOnLoad(go); + return instance = go.AddComponent(); + } + + public bool Paused { get; private set; } = false; + + public void DelayedQuit(float seconds) { + StartCoroutine(delayedQuitRoutine(seconds)); + } + + IEnumerator delayedQuitRoutine(float seconds) { + yield return new WaitForSeconds(seconds); + Application.Quit(); + } + + void OnApplicationPause(bool paused) { + Paused = paused; + onApplicationPause?.Invoke(paused); + } + + void OnApplicationFocus(bool playing) { + onApplicationFocus?.Invoke(playing); + } + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Runtime/AppCallbackListener.cs.meta b/Packages/com.singularitygroup.hotreload/Runtime/AppCallbackListener.cs.meta new file mode 100644 index 0000000..f7baf54 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/AppCallbackListener.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: a989a17330b04c6fb8f91aa41ac14471 +timeCreated: 1674216227 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/AppCallbackListener.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/BuildInfo.cs b/Packages/com.singularitygroup.hotreload/Runtime/BuildInfo.cs new file mode 100644 index 0000000..c8a2d87 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/BuildInfo.cs @@ -0,0 +1,171 @@ +#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR) +using System; +using System.Collections.Generic; +using System.IO; +using JetBrains.Annotations; +using SingularityGroup.HotReload.Newtonsoft.Json; +using UnityEngine; +using UnityEngine.Serialization; + +namespace SingularityGroup.HotReload { + /// + /// Information about the Unity Player build. + /// + /// + /// + /// This info is used by the HotReload Server to compile your project in the same way that the Unity Player build was compiled.
+ /// For example, when building for Android, Unity sets a bunch of define symbols like UNITY_ANDROID. + ///
+ /// + /// Information that changes between builds is generated at build-time and put in StreamingAssets/.
+ /// This approach means that builds do not need to modify a project file (making file dirty in git). For example, + /// whenever user makes a mono build, the CommitHash changes and we need to regenerate the BuildInfo. + ///
+ ///
+ [Serializable] + class BuildInfo { + /// + /// Uniquely identifies the Unity project. + /// + /// + /// Used on-device to check if Hot Reload server is compatible with the Unity project (same project).
+ /// When your computer has multiple Unity projects open, each project should provide a different value.
+ /// This identifier must also be the same between two different computers that are collaborating on the same project. + /// + /// + /// Edge-case: when a user copy pastes an entire Unity project and has both open at once, + /// then it's fine for this identifier to be the same. + /// + ///
+ public string projectIdentifier; + + /// + /// Git commit hash + /// + /// + /// Used to detect that your code is different to when the build was made. + /// + public string commitHash; + + /// + /// List of define symbols that were active when this build was made. + /// + /// + /// Separate the symbols with a semi-colon character ';' + /// + public string defineSymbols; + + /// + /// A regex of C# project names (*.csproj) to be omitted from compilation. + /// + /// + /// "MyTests|MyEditorAssembly" + /// + [FormerlySerializedAs("projectExclusionRegex")] + public string projectOmissionRegex; + + /// + /// The computer that made the Android (or Standalone etc) build.
+ /// The hostname (ip address) where Hot Reload server would be listening. + ///
+ public string buildMachineHostName; + + /// + /// The computer that made the Android (or Standalone etc) build.
+ /// The port where Hot Reload server would be listening. + ///
+ public int buildMachinePort; + + /// + /// Selected build target in Unity Editor. + /// + public string activeBuildTarget; + + /// + /// Used to pass in the origin onto the phone which is used to identify the correct server. + /// + public string buildMachineRequestOrigin; + + [JsonIgnore] + public HashSet DefineSymbolsAsHashSet { + get { + var symbols = defineSymbols.Trim().Split(';'); + // split on an empty string produces 1 empty string + if (symbols.Length == 1 && symbols[0] == string.Empty) { + return new HashSet(); + } + return new HashSet(symbols); + } + } + + [JsonIgnore] + public PatchServerInfo BuildMachineServer { + get { + if (buildMachineHostName == null || buildMachinePort == 0) { + return null; + } + return new PatchServerInfo(buildMachineHostName, buildMachinePort, commitHash, null, customRequestOrigin: buildMachineRequestOrigin); + } + } + + public string ToJson() { + return JsonConvert.SerializeObject(this); + } + + [CanBeNull] + public static BuildInfo FromJson(string json) { + if (string.IsNullOrEmpty(json)) { + return null; + } + return JsonConvert.DeserializeObject(json); + } + + /// + /// Path to read/write the json file to. + /// + /// A filepath that is inside the player build + public static string GetStoredPath() { + return Path.Combine(Application.streamingAssetsPath, GetStoredName()); + } + + public static string GetStoredName() { + return "HotReload_BuildInfo.json"; + } + + /// True if the commit hashes are definately different, otherwise False + public bool IsDifferentCommit(string remoteCommit) { + if (commitHash == PatchServerInfo.UnknownCommitHash) { + return false; + } + + return !SameCommit(commitHash, remoteCommit); + } + + /// + /// Checks whether the commits are equivalent. + /// + /// + /// + /// False if the commit hashes are definately different, otherwise True + public static bool SameCommit(string commitA, string commitB) { + if (commitA == null) { + // unknown commit hash, so approve anything + return true; + } + + if (commitA.Length == commitB.Length) { + return commitA == commitB; + } else if (commitA.Length >= 6 && commitB.Length >= 6) { + // depending on OS, the git log pretty output has different length (7 or 8 chars) + // if the longer hash starts with the shorter hash, return true + // Assumption: commits have different length. + var longer = commitA.Length > commitB.Length ? commitA : commitB; + var shorter = commitA.Length > commitB.Length ? commitB : commitA; + + return longer.StartsWith(shorter); + } + return false; + } + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Runtime/BuildInfo.cs.meta b/Packages/com.singularitygroup.hotreload/Runtime/BuildInfo.cs.meta new file mode 100644 index 0000000..e4054aa --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/BuildInfo.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 39bb7d4cd9324f31b1882354b1cde762 +timeCreated: 1673776105 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/BuildInfo.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Burst.meta b/Packages/com.singularitygroup.hotreload/Runtime/Burst.meta new file mode 100644 index 0000000..f58389b --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Burst.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d10d24dc13744197a80f50ac50f5d1a1 +timeCreated: 1675449699 \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Burst/JobHotReloadUtility.cs b/Packages/com.singularitygroup.hotreload/Runtime/Burst/JobHotReloadUtility.cs new file mode 100644 index 0000000..a0debd1 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Burst/JobHotReloadUtility.cs @@ -0,0 +1,25 @@ +#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR) +using System; +using System.Reflection; +using SingularityGroup.HotReload.DTO; + +namespace SingularityGroup.HotReload.Burst { + public static class JobHotReloadUtility { + public static void HotReloadBurstCompiledJobs(SUnityJob jobData, Type proxyJobType) { + JobPatchUtility.PatchBurstCompiledJobs(jobData, proxyJobType, unityMajorVersion: + #if UNITY_2022_2_OR_NEWER + 2022 + #elif UNITY_2021_3_OR_NEWER + 2021 + #elif UNITY_2020_3_OR_NEWER + 2020 + #elif UNITY_2019_4_OR_NEWER + 2019 + #else + 2018 + #endif + ); + } + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Burst/JobHotReloadUtility.cs.meta b/Packages/com.singularitygroup.hotreload/Runtime/Burst/JobHotReloadUtility.cs.meta new file mode 100644 index 0000000..b32efd4 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Burst/JobHotReloadUtility.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b9980b40e3ff447b94e71de238a37fb7 +timeCreated: 1676825622 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/Burst/JobHotReloadUtility.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/BurstChecker.cs b/Packages/com.singularitygroup.hotreload/Runtime/BurstChecker.cs new file mode 100644 index 0000000..af64873 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/BurstChecker.cs @@ -0,0 +1,41 @@ +#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR) +using System; +using System.Collections.Generic; +using System.Reflection; + +namespace SingularityGroup.HotReload { + static class BurstChecker { + //Use names instead of the types directly for compat with older unity versions + const string whitelistAttrName = "BurstCompileAttribute"; + const string blacklistAttrName = "BurstDiscardAttribute"; + + public static bool IsBurstCompiled(MethodBase method) { + //blacklist has precedence over whitelist + if(HasAttr(method.GetCustomAttributes(), blacklistAttrName)) { + return false; + } + if(HasAttr(method.GetCustomAttributes(), whitelistAttrName)) { + return true; + } + //Static methods inside a [BurstCompile] type are not burst compiled by default + if(method.DeclaringType == null || method.IsStatic) { + return false; + } + if(HasAttr(method.DeclaringType.GetCustomAttributes(), whitelistAttrName)) { + return true; + } + //No matching attributes + return false; + } + + static bool HasAttr(IEnumerable attributes, string name) { + foreach (var attr in attributes) { + if(attr.GetType().Name == name) { + return true; + } + } + return false; + } + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Runtime/BurstChecker.cs.meta b/Packages/com.singularitygroup.hotreload/Runtime/BurstChecker.cs.meta new file mode 100644 index 0000000..323d0bf --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/BurstChecker.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 20dfd902e9fc4485aeef90b9add39c0a +timeCreated: 1675404225 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/BurstChecker.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/CodePatcher.cs b/Packages/com.singularitygroup.hotreload/Runtime/CodePatcher.cs new file mode 100644 index 0000000..f6204d1 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/CodePatcher.cs @@ -0,0 +1,720 @@ +#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR) + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Threading; +using System.Threading.Tasks; +using SingularityGroup.HotReload.DTO; +using JetBrains.Annotations; +using SingularityGroup.HotReload.Burst; +using SingularityGroup.HotReload.HarmonyLib; +using SingularityGroup.HotReload.JsonConverters; +using SingularityGroup.HotReload.MonoMod.Utils; +using SingularityGroup.HotReload.Newtonsoft.Json; +using SingularityGroup.HotReload.RuntimeDependencies; +#if UNITY_EDITOR +using UnityEditor; +using UnityEditorInternal; +#endif +using UnityEngine; +using UnityEngine.SceneManagement; + +[assembly: InternalsVisibleTo("SingularityGroup.HotReload.Editor")] + +namespace SingularityGroup.HotReload { + class RegisterPatchesResult { + // note: doesn't include removals and method definition changes (e.g. renames) + public readonly List patchedMethods = new List(); + public List addedFields = new List(); + public readonly List patchedSMethods = new List(); + public bool inspectorModified; + public readonly List> patchFailures = new List>(); + public readonly List patchExceptions = new List(); + } + + class FieldHandler { + public readonly Action storeField; + public readonly Action registerInspectorFieldAttributes; + public readonly Func hideField; + + public FieldHandler(Action storeField, Func hideField, Action registerInspectorFieldAttributes) { + this.storeField = storeField; + this.hideField = hideField; + this.registerInspectorFieldAttributes = registerInspectorFieldAttributes; + } + } + + class CodePatcher { + public static readonly CodePatcher I = new CodePatcher(); + /// Tag for use in Debug.Log. + public const string TAG = "HotReload"; + + internal int PatchesApplied { get; private set; } + string PersistencePath {get;} + + List pendingPatches; + readonly List patchHistory; + readonly HashSet seenResponses = new HashSet(); + string[] assemblySearchPaths; + SymbolResolver symbolResolver; + readonly string tmpDir; + public FieldHandler fieldHandler; + public bool debuggerCompatibilityEnabled; + + CodePatcher() { + pendingPatches = new List(); + patchHistory = new List(); + if(UnityHelper.IsEditor) { + tmpDir = PackageConst.LibraryCachePath; + } else { + tmpDir = UnityHelper.TemporaryCachePath; + } + if(!UnityHelper.IsEditor) { + PersistencePath = Path.Combine(UnityHelper.PersistentDataPath, "HotReload", "patches.json"); + try { + LoadPatches(PersistencePath); + } catch(Exception ex) { + Log.Error("Encountered exception when loading patches from disk:\n{0}", ex); + } + } + } + + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] + static void InitializeUnityEvents() { + UnityEventHelper.Initialize(); + } + + + void LoadPatches(string filePath) { + PlayerLog("Loading patches from file {0}", filePath); + var file = new FileInfo(filePath); + if(file.Exists) { + var bytes = File.ReadAllText(filePath); + var patches = JsonConvert.DeserializeObject>(bytes); + PlayerLog("Loaded {0} patches from disk", patches.Count.ToString()); + foreach (var patch in patches) { + RegisterPatches(patch, persist: false); + } + } + } + + + internal IReadOnlyList PendingPatches => pendingPatches; + internal SymbolResolver SymbolResolver => symbolResolver; + + + internal string[] GetAssemblySearchPaths() { + EnsureSymbolResolver(); + return assemblySearchPaths; + } + + internal RegisterPatchesResult RegisterPatches(MethodPatchResponse patches, bool persist) { + PlayerLog("Register patches.\nWarnings: {0} \nMethods:\n{1}", string.Join("\n", patches.failures), string.Join("\n", patches.patches.SelectMany(p => p.modifiedMethods).Select(m => m.displayName))); + pendingPatches.Add(patches); + return ApplyPatches(persist); + } + + RegisterPatchesResult ApplyPatches(bool persist) { + PlayerLog("ApplyPatches. {0} patches pending.", pendingPatches.Count); + EnsureSymbolResolver(); + + var result = new RegisterPatchesResult(); + + try { + int count = 0; + foreach(var response in pendingPatches) { + if (seenResponses.Contains(response.id)) { + continue; + } + foreach (var patch in response.patches) { + var asm = Assembly.Load(patch.patchAssembly, patch.patchPdb); + SymbolResolver.AddAssembly(asm); + } + HandleRemovedUnityMethods(response.removedMethod); +#if UNITY_EDITOR + HandleAlteredFields(response.id, result, response.alteredFields); +#endif + // needs to come before RegisterNewFieldInitializers + RegisterNewFieldDefinitions(response); + // Note: order is important here. Reshaped fields require new field initializers to be added + // because the old initializers must override new initilaizers for existing holders. + // so that the initializer is not invoked twice + RegisterNewFieldInitializers(response); + HandleReshapedFields(response); + RemoveOldFieldInitializers(response); +#if UNITY_EDITOR + RegisterInspectorFieldAttributes(result, response); +#endif + + HandleMethodPatchResponse(response, result); + patchHistory.Add(response); + + seenResponses.Add(response.id); + count += response.patches.Length; + } + if (count > 0) { + Dispatch.OnHotReload(result.patchedMethods).Forget(); + } + } catch(Exception ex) { + Log.Warning("Exception occured when handling method patch. Exception:\n{0}", ex); + } finally { + pendingPatches.Clear(); + } + + if(PersistencePath != null && persist) { + SaveAppliedPatches(PersistencePath).Forget(); + } + + PatchesApplied++; + return result; + } + + internal void ClearPatchedMethods() { + PatchesApplied = 0; + } + + static bool didLog; + [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)] + static void WarnOnSceneLoad() { + SceneManager.sceneLoaded += (_, __) => { + if (didLog || !UnityEventHelper.UnityMethodsAdded()) { + return; + } + Log.Warning("A new Scene was loaded while new unity event methods were added at runtime. MonoBehaviours in the Scene will not trigger these new events."); + didLog = true; + }; + } + + void HandleMethodPatchResponse(MethodPatchResponse response, RegisterPatchesResult result) { + EnsureSymbolResolver(); + + foreach(var patch in response.patches) { + try { + foreach(var sMethod in patch.newMethods) { + var newMethod = SymbolResolver.Resolve(sMethod); + try { + UnityEventHelper.EnsureUnityEventMethod(newMethod); + } catch(Exception ex) { + Log.Warning("Encountered exception in EnsureUnityEventMethod: {0} {1}", ex.GetType().Name, ex.Message); + } + MethodUtils.DisableVisibilityChecks(newMethod); + if (!patch.patchMethods.Any(m => m.metadataToken == sMethod.metadataToken)) { + result.patchedMethods.Add(new MethodPatch(null, null, newMethod)); + result.patchedSMethods.Add(sMethod); + previousPatchMethods[newMethod] = newMethod; + newMethods.Add(newMethod); + } + } + + for (int i = 0; i < patch.modifiedMethods.Length; i++) { + var sOriginalMethod = patch.modifiedMethods[i]; + var sPatchMethod = patch.patchMethods[i]; + var err = PatchMethod(response.id, sOriginalMethod: sOriginalMethod, sPatchMethod: sPatchMethod, containsBurstJobs: patch.unityJobs.Length > 0, patchesResult: result); + if (!string.IsNullOrEmpty(err)) { + result.patchFailures.Add(Tuple.Create(sOriginalMethod, err)); + } + } + foreach (var job in patch.unityJobs) { + var type = SymbolResolver.Resolve(new SType(patch.assemblyName, job.jobKind.ToString(), job.metadataToken)); + JobHotReloadUtility.HotReloadBurstCompiledJobs(job, type); + } +#if UNITY_EDITOR + HandleNewFields(patch.patchId, result, patch.newFields); +#endif + } catch (Exception ex) { + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Error, StatFeature.Patching, StatEventType.Exception), new EditorExtraData { + { StatKey.PatchId, patch.patchId }, + { StatKey.Detailed_Exception, ex.ToString() }, + }).Forget(); + result.patchExceptions.Add($"Edit requires full recompile to apply: Encountered exception when applying a patch.\nCommon causes: editing code that failed to patch previously, an unsupported change, or a real bug in Hot Reload.\nIf you think this is a bug, please report the issue on Discord and include a code-snippet before/after.\nException: {ex}"); + } + } + } + + void HandleRemovedUnityMethods(SMethod[] removedMethods) { + if (removedMethods == null) { + return; + } + foreach(var sMethod in removedMethods) { + try { + var oldMethod = SymbolResolver.Resolve(sMethod); + UnityEventHelper.RemoveUnityEventMethod(oldMethod); + } catch (SymbolResolvingFailedException) { + // ignore, not a unity event method if can't resolve + } catch(Exception ex) { + Log.Warning("Encountered exception in RemoveUnityEventMethod: {0} {1}", ex.GetType().Name, ex.Message); + } + } + } + + // Important: must come before applying any patches + void RegisterNewFieldInitializers(MethodPatchResponse resp) { + for (var i = 0; i < resp.addedFieldInitializerFields.Length; i++) { + var sField = resp.addedFieldInitializerFields[i]; + var sMethod = resp.addedFieldInitializerInitializers[i]; + try { + var declaringType = SymbolResolver.Resolve(sField.declaringType); + var method = SymbolResolver.Resolve(sMethod); + if (!(method is MethodInfo initializer)) { + Log.Warning($"Failed registering initializer for field {sField.fieldName} in {sField.declaringType.typeName}. Field value might not be initialized correctly. Invalid method."); + continue; + } + // We infer if the field is static by the number of parameters the method has + // because sField is old field + var isStatic = initializer.GetParameters().Length == 0; + MethodUtils.DisableVisibilityChecks(initializer); + // Initializer return type is used in place of fieldType because latter might be point to old field if the type changed + FieldInitializerRegister.RegisterInitializer(declaringType, sField.fieldName, initializer.ReturnType, initializer, isStatic); + + } catch (Exception e) { + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Error, StatFeature.Patching, StatEventType.RegisterFieldInitializer), new EditorExtraData { + { StatKey.PatchId, resp.id }, + { StatKey.Detailed_Exception, e.ToString() }, + }).Forget(); + Log.Warning($"Failed registering initializer for field {sField.fieldName} in {sField.declaringType.typeName}. Field value might not be initialized correctly. Exception: {e.Message}"); + } + } + } + + void RegisterNewFieldDefinitions(MethodPatchResponse resp) { + foreach (var sField in resp.newFieldDefinitions) { + try { + var declaringType = SymbolResolver.Resolve(sField.declaringType); + var fieldType = SymbolResolver.Resolve(sField).FieldType; + FieldResolver.RegisterFieldType(declaringType, sField.fieldName, fieldType); + } catch (Exception e) { + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Error, StatFeature.Patching, StatEventType.RegisterFieldDefinition), new EditorExtraData { + { StatKey.PatchId, resp.id }, + { StatKey.Detailed_Exception, e.ToString() }, + }).Forget(); + Log.Warning($"Failed registering new field definitions for field {sField.fieldName} in {sField.declaringType.typeName}. Exception: {e.Message}"); + } + } + } + + // Important: must come before applying any patches + // Note: server might decide not to report removed field initializer at all if it can handle it + void RemoveOldFieldInitializers(MethodPatchResponse resp) { + foreach (var sField in resp.removedFieldInitializers) { + try { + var declaringType = SymbolResolver.Resolve(sField.declaringType); + var fieldType = SymbolResolver.Resolve(sField.declaringType); + FieldInitializerRegister.UnregisterInitializer(declaringType, sField.fieldName, fieldType, sField.isStatic); + } catch (Exception e) { + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Error, StatFeature.Patching, StatEventType.UnregisterFieldInitializer), new EditorExtraData { + { StatKey.PatchId, resp.id }, + { StatKey.Detailed_Exception, e.ToString() }, + }).Forget(); + Log.Warning($"Failed removing initializer for field {sField.fieldName} in {sField.declaringType.typeName}. Field value might not be initialized correctly. Exception: {e.Message}"); + } + } + } + + // Important: must come before applying any patches + // Should also come after RegisterNewFieldInitializers so that new initializers are not invoked for existing objects + internal void HandleReshapedFields(MethodPatchResponse resp) { + foreach(var patch in resp.patches) { + var removedReshapedFields = patch.deletedFields; + var renamedReshapedFieldsFrom = patch.renamedFieldsFrom; + var renamedReshapedFieldsTo = patch.renamedFieldsTo; + + foreach (var f in removedReshapedFields) { + try { + var declaringType = SymbolResolver.Resolve(f.declaringType); + var fieldType = SymbolResolver.Resolve(f).FieldType; + FieldResolver.ClearHolders(declaringType, f.isStatic, f.fieldName, fieldType); + } catch (Exception e) { + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Error, StatFeature.Patching, StatEventType.ClearHolders), new EditorExtraData { + { StatKey.PatchId, resp.id }, + { StatKey.Detailed_Exception, e.ToString() }, + }).Forget(); + Log.Warning($"Failed removing field value from {f.fieldName} in {f.declaringType.typeName}. Field value in code might not be up to date. Exception: {e.Message}"); + } + } + for (var i = 0; i < renamedReshapedFieldsFrom.Length; i++) { + var fromField = renamedReshapedFieldsFrom[i]; + var toField = renamedReshapedFieldsTo[i]; + try { + var declaringType = SymbolResolver.Resolve(fromField.declaringType); + var fieldType = SymbolResolver.Resolve(fromField).FieldType; + var toFieldType = SymbolResolver.Resolve(toField).FieldType; + if (!AreSTypesCompatible(fromField.declaringType, toField.declaringType) + || fieldType != toFieldType + || fromField.isStatic != toField.isStatic + ) { + FieldResolver.ClearHolders(declaringType, fromField.isStatic, fromField.fieldName, fieldType); + continue; + } + FieldResolver.MoveHolders(declaringType, fromField.fieldName, toField.fieldName, fieldType, fromField.isStatic); + } catch (Exception e) { + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Error, StatFeature.Patching, StatEventType.MoveHolders), new EditorExtraData { + { StatKey.PatchId, resp.id }, + { StatKey.Detailed_Exception, e.ToString() }, + }).Forget(); + Log.Warning($"Failed moving field value from {fromField} to {toField} in {toField.declaringType.typeName}. Field value in code might not be up to date. Exception: {e.Message}"); + } + } + } + } + + internal bool AreSTypesCompatible(SType one, SType two) { + if (one.isGenericParameter != two.isGenericParameter) { + return false; + } + if (one.metadataToken != two.metadataToken) { + return false; + } + if (one.assemblyName != two.assemblyName) { + return false; + } + if (one.genericParameterPosition != two.genericParameterPosition) { + return false; + } + if (one.typeName != two.typeName) { + return false; + } + return true; + } + +#if UNITY_EDITOR + internal void RegisterInspectorFieldAttributes(RegisterPatchesResult result, MethodPatchResponse resp) { + foreach (var patch in resp.patches) { + var propertyAttributesFieldOriginal = patch.propertyAttributesFieldOriginal ?? Array.Empty(); + var propertyAttributesFieldUpdated = patch.propertyAttributesFieldUpdated ?? Array.Empty(); + for (var i = 0; i < propertyAttributesFieldOriginal.Length; i++) { + var original = propertyAttributesFieldOriginal[i]; + var updated = propertyAttributesFieldUpdated[i]; + try { + var declaringType = SymbolResolver.Resolve(original.declaringType); + var originalField = SymbolResolver.Resolve(original); + var updatedField = SymbolResolver.Resolve(updated); + fieldHandler?.registerInspectorFieldAttributes?.Invoke(declaringType, originalField, updatedField); + result.inspectorModified = true; + } catch (Exception e) { + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Error, StatFeature.Patching, StatEventType.MoveHolders), new EditorExtraData { + { StatKey.PatchId, resp.id }, + { StatKey.Detailed_Exception, e.ToString() }, + }).Forget(); + Log.Warning($"Failed updating field attributes of {original.fieldName} in {original.declaringType.typeName}. Updates might not reflect in the inspector. Exception: {e.Message}"); + } + } + } + } + + internal void HandleNewFields(string patchId, RegisterPatchesResult result, SField[] sFields) { + foreach (var sField in sFields) { + if (!sField.serializable) { + continue; + } + try { + var declaringType = SymbolResolver.Resolve(sField.declaringType); + var field = SymbolResolver.Resolve(sField); + fieldHandler?.storeField?.Invoke(declaringType, field); + result.inspectorModified = true; + } catch (Exception e) { + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Error, StatFeature.Patching, StatEventType.AddInspectorField), new EditorExtraData { + { StatKey.PatchId, patchId }, + { StatKey.Detailed_Exception, e.ToString() }, + }).Forget(); + Log.Warning($"Failed adding field {sField.fieldName}:{sField.declaringType.typeName} to the inspector. Field will not be displayed. Exception: {e.Message}"); + } + } + result.addedFields.AddRange(sFields); + } + + // IMPORTANT: must come before HandleNewFields. Might contain new fields which we don't want to hide + internal void HandleAlteredFields(string patchId, RegisterPatchesResult result, SField[] alteredFields) { + if (alteredFields == null) { + return; + } + bool alteredFieldHidden = false; + foreach(var sField in alteredFields) { + try { + var declaringType = SymbolResolver.Resolve(sField.declaringType); + if (fieldHandler?.hideField?.Invoke(declaringType, sField.fieldName) == true) { + alteredFieldHidden = true; + } + } catch(Exception e) { + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Error, StatFeature.Patching, StatEventType.HideInspectorField), new EditorExtraData { + { StatKey.PatchId, patchId }, + { StatKey.Detailed_Exception, e.ToString() }, + }).Forget(); + Log.Warning($"Failed hiding field {sField.fieldName}:{sField.declaringType.typeName} from the inspector. Exception: {e.Message}"); + } + } + if (alteredFieldHidden) { + result.inspectorModified = true; + } + } +#endif + + Dictionary previousPatchMethods = new Dictionary(); + public IEnumerable OriginalPatchMethods => previousPatchMethods.Keys; + List newMethods = new List(); + + string PatchMethod(string patchId, SMethod sOriginalMethod, SMethod sPatchMethod, bool containsBurstJobs, RegisterPatchesResult patchesResult) { + try { + var patchMethod = SymbolResolver.Resolve(sPatchMethod); + var start = DateTime.UtcNow; + var state = TryResolveMethod(sOriginalMethod, patchMethod); + if (Debugger.IsAttached && !debuggerCompatibilityEnabled) { + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Error, StatFeature.Patching, StatEventType.DebuggerAttached), new EditorExtraData { + { StatKey.PatchId, patchId }, + }).Forget(); + return "Patching methods is not allowed while the Debugger is attached. You can change this behavior in settings if Hot Reload is compatible with the debugger you're running."; + } + + if (DateTime.UtcNow - start > TimeSpan.FromMilliseconds(500)) { + Log.Info("Hot Reload apply took {0}", (DateTime.UtcNow - start).TotalMilliseconds); + } + + if(state.match == null) { + var error = "Edit requires full recompile to apply: Method mismatch: {0}, patch: {1}. \nCommon causes: editing code that failed to patch previously, an unsupported change, or a real bug in Hot Reload.\nIf you think this is a bug, please report the issue on Discord and include a code-snippet before/after."; + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Error, StatFeature.Patching, StatEventType.MethodMismatch), new EditorExtraData { + { StatKey.PatchId, patchId }, + }).Forget(); + return string.Format(error, sOriginalMethod.simpleName, patchMethod.Name); + } + + PlayerLog("Detour method {0:X8} {1}, offset: {2}", sOriginalMethod.metadataToken, patchMethod.Name, state.offset); + DetourResult result; + DetourApi.DetourMethod(state.match, patchMethod, out result); + if (result.success) { + // previous method is either original method or the last patch method + MethodBase previousMethod; + if (!previousPatchMethods.TryGetValue(state.match, out previousMethod)) { + previousMethod = state.match; + } + MethodBase originalMethod = state.match; + if (newMethods.Contains(state.match)) { + // for function added at runtime the original method should be null + originalMethod = null; + } + patchesResult.patchedMethods.Add(new MethodPatch(originalMethod, previousMethod, patchMethod)); + patchesResult.patchedSMethods.Add(sOriginalMethod); + previousPatchMethods[state.match] = patchMethod; + try { + Dispatch.OnHotReloadLocal(state.match, patchMethod); + } catch { + // best effort + } + return null; + } else { + if(result.exception is InvalidProgramException && containsBurstJobs) { + //ignore. The method is likely burst compiled and can't be patched + return null; + } else { + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Error, StatFeature.Patching, StatEventType.Failure), new EditorExtraData { + { StatKey.PatchId, patchId }, + { StatKey.Detailed_Exception, result.exception.ToString() }, + }).Forget(); + return HandleMethodPatchFailure(sOriginalMethod, result.exception); + } + } + } catch(Exception ex) { + RequestHelper.RequestEditorEventWithRetry(new Stat(StatSource.Client, StatLevel.Error, StatFeature.Patching, StatEventType.Exception), new EditorExtraData { + { StatKey.PatchId, patchId }, + { StatKey.Detailed_Exception, ex.ToString() }, + }).Forget(); + return HandleMethodPatchFailure(sOriginalMethod, ex); + } + } + + struct ResolveMethodState { + public readonly SMethod originalMethod; + public readonly int offset; + public readonly bool tryLowerTokens; + public readonly bool tryHigherTokens; + public readonly MethodBase match; + public ResolveMethodState(SMethod originalMethod, int offset, bool tryLowerTokens, bool tryHigherTokens, MethodBase match) { + this.originalMethod = originalMethod; + this.offset = offset; + this.tryLowerTokens = tryLowerTokens; + this.tryHigherTokens = tryHigherTokens; + this.match = match; + } + + public ResolveMethodState With(bool? tryLowerTokens = null, bool? tryHigherTokens = null, MethodBase match = null, int? offset = null) { + return new ResolveMethodState( + originalMethod, + offset ?? this.offset, + tryLowerTokens ?? this.tryLowerTokens, + tryHigherTokens ?? this.tryHigherTokens, + match ?? this.match); + } + } + + struct ResolveMethodResult { + public readonly MethodBase resolvedMethod; + public readonly bool tokenOutOfRange; + public ResolveMethodResult(MethodBase resolvedMethod, bool tokenOutOfRange) { + this.resolvedMethod = resolvedMethod; + this.tokenOutOfRange = tokenOutOfRange; + } + } + + ResolveMethodState TryResolveMethod(SMethod originalMethod, MethodBase patchMethod) { + var state = new ResolveMethodState(originalMethod, offset: 0, tryLowerTokens: true, tryHigherTokens: true, match: null); + var result = TryResolveMethodCore(state.originalMethod, patchMethod, 0); + if(result.resolvedMethod != null) { + return state.With(match: result.resolvedMethod); + } + state = state.With(offset: 1); + const int tries = 100000; + while(state.offset <= tries && (state.tryHigherTokens || state.tryLowerTokens)) { + if(state.tryHigherTokens) { + result = TryResolveMethodCore(originalMethod, patchMethod, state.offset); + if(result.resolvedMethod != null) { + return state.With(match: result.resolvedMethod); + } else if(result.tokenOutOfRange) { + state = state.With(tryHigherTokens: false); + } + } + if(state.tryLowerTokens) { + result = TryResolveMethodCore(originalMethod, patchMethod, -state.offset); + if(result.resolvedMethod != null) { + return state.With(match: result.resolvedMethod); + } else if(result.tokenOutOfRange) { + state = state.With(tryLowerTokens: false); + } + } + state = state.With(offset: state.offset + 1); + } + return state; + } + + + ResolveMethodResult TryResolveMethodCore(SMethod methodToResolve, MethodBase patchMethod, int offset) { + bool tokenOutOfRange = false; + MethodBase resolvedMethod = null; + try { + resolvedMethod = TryGetMethodBaseWithRelativeToken(methodToResolve, offset); + var err = MethodCompatiblity.CheckCompatibility(resolvedMethod, patchMethod); + if(err != null) { + // if (resolvedMethod.Name == patchMethod.Name) { + // Log.Info(err); + // } + resolvedMethod = null; + } + } catch (SymbolResolvingFailedException ex) when(ex.InnerException is ArgumentOutOfRangeException) { + tokenOutOfRange = true; + } catch (ArgumentOutOfRangeException) { + tokenOutOfRange = true; + } + return new ResolveMethodResult(resolvedMethod, tokenOutOfRange); + } + + MethodBase TryGetMethodBaseWithRelativeToken(SMethod sOriginalMethod, int offset) { + return symbolResolver.Resolve(new SMethod(sOriginalMethod.assemblyName, + sOriginalMethod.displayName, + sOriginalMethod.metadataToken + offset, + sOriginalMethod.simpleName)); + } + + string HandleMethodPatchFailure(SMethod method, Exception exception) { + return $"Edit requires full recompile to apply: Failed to apply patch for method {method.displayName} in assembly {method.assemblyName}.\nCommon causes: editing code that failed to patch previously, an unsupported change, or a real bug in Hot Reload.\nIf you think this is a bug, please report the issue on Discord and include a code-snippet before/after.\nException: {exception}"; + } + + void EnsureSymbolResolver() { + if (symbolResolver == null) { + var searchPaths = new HashSet(); + var assemblies = AppDomain.CurrentDomain.GetAssemblies(); + var assembliesByName = new Dictionary>(); + for (var i = 0; i < assemblies.Length; i++) { + var name = assemblies[i].GetNameSafe(); + List list; + if (!assembliesByName.TryGetValue(name, out list)) { + assembliesByName.Add(name, list = new List()); + } + list.Add(assemblies[i]); + + if(assemblies[i].IsDynamic) continue; + + var location = assemblies[i].Location; + if(File.Exists(location)) { + searchPaths.Add(Path.GetDirectoryName(Path.GetFullPath(location))); + } + } + symbolResolver = new SymbolResolver(assembliesByName); + assemblySearchPaths = searchPaths.ToArray(); + } + } + + + //Allow one save operation at a time. + readonly SemaphoreSlim gate = new SemaphoreSlim(1); + public async Task SaveAppliedPatches(string filePath) { + await gate.WaitAsync(); + try { + await SaveAppliedPatchesNoLock(filePath); + } finally { + gate.Release(); + } + } + + async Task SaveAppliedPatchesNoLock(string filePath) { + if (filePath == null) { + throw new ArgumentNullException(nameof(filePath)); + } + filePath = Path.GetFullPath(filePath); + var dir = Path.GetDirectoryName(filePath); + if(string.IsNullOrEmpty(dir)) { + throw new ArgumentException("Invalid path: " + filePath, nameof(filePath)); + } + Directory.CreateDirectory(dir); + var history = patchHistory.ToList(); + + PlayerLog("Saving {0} applied patches to {1}", history.Count, filePath); + + await Task.Run(() => { + using (FileStream fs = File.Create(filePath)) + using (StreamWriter sw = new StreamWriter(fs)) + using (JsonWriter writer = new JsonTextWriter(sw)) { + JsonSerializer serializer = JsonSerializer.Create(new JsonSerializerSettings { + Converters = new List { new MethodPatchResponsesConverter() } + }); + serializer.Serialize(writer, history); + } + }); + } + + public void InitPatchesBlocked(string filePath) { + seenResponses.Clear(); + var file = new FileInfo(filePath); + if (file.Exists) { + using(var fs = new FileStream(file.FullName, FileMode.Open, FileAccess.Read, FileShare.Read, 4096, FileOptions.SequentialScan)) + using (StreamReader sr = new StreamReader(fs)) + using (JsonReader reader = new JsonTextReader(sr)) { + JsonSerializer serializer = JsonSerializer.Create(new JsonSerializerSettings { + Converters = new List { new MethodPatchResponsesConverter() } + }); + pendingPatches = serializer.Deserialize>(reader); + } + ApplyPatches(persist: false); + } + } + + + [StringFormatMethod("format")] + static void PlayerLog(string format, params object[] args) { +#if !UNITY_EDITOR + HotReload.Log.Info(format, args); +#endif //!UNITY_EDITOR + } + + class SimpleMethodComparer : IEqualityComparer { + public static readonly SimpleMethodComparer I = new SimpleMethodComparer(); + SimpleMethodComparer() { } + public bool Equals(SMethod x, SMethod y) => x.metadataToken == y.metadataToken; + public int GetHashCode(SMethod x) { + return x.metadataToken; + } + } + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Runtime/CodePatcher.cs.meta b/Packages/com.singularitygroup.hotreload/Runtime/CodePatcher.cs.meta new file mode 100644 index 0000000..c64984c --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/CodePatcher.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: b6c8477b90c3f384f8124d62a5dc6e74 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/CodePatcher.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo.meta b/Packages/com.singularitygroup.hotreload/Runtime/Demo.meta new file mode 100644 index 0000000..d67b179 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 55206f9d10104e838249bf8ac177e332 +timeCreated: 1677091847 \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes.meta b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes.meta new file mode 100644 index 0000000..a16c17b --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c895e9065d763824f9211fa8054f7c2e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBasicDemo.unity b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBasicDemo.unity new file mode 100644 index 0000000..ca6a3dd --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBasicDemo.unity @@ -0,0 +1,1079 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 11 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_UseShadowmask: 1 +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &19295889 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 19295893} + - component: {fileID: 19295892} + - component: {fileID: 19295891} + - component: {fileID: 19295890} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &19295890 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 19295889} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 2, y: 2, z: 2} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &19295891 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 19295889} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &19295892 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 19295889} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &19295893 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 19295889} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &249270788 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 249270791} + - component: {fileID: 249270790} + - component: {fileID: 249270789} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &249270789 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 249270788} + m_Enabled: 1 +--- !u!20 &249270790 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 249270788} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &249270791 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 249270788} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &460271676 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 460271677} + - component: {fileID: 460271679} + - component: {fileID: 460271678} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &460271677 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 460271676} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 511172213} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -28.681885, y: -20.492146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &460271678 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 460271676} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 48 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 24 + m_MaxSize: 64 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Open Script +--- !u!222 &460271679 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 460271676} + m_CullTransparentMesh: 0 +--- !u!1 &511172212 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 511172213} + - component: {fileID: 511172216} + - component: {fileID: 511172215} + - component: {fileID: 511172214} + m_Layer: 5 + m_Name: Button open script + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &511172213 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 511172212} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 460271677} + m_Father: {fileID: 649153321} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -256.6, y: 118} + m_SizeDelta: {x: 392.12805, y: 72.27574} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &511172214 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 511172212} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 511172215} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &511172215 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 511172212} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &511172216 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 511172212} + m_CullTransparentMesh: 0 +--- !u!1 &649153317 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 649153321} + - component: {fileID: 649153320} + - component: {fileID: 649153319} + - component: {fileID: 649153318} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &649153318 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 649153317} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &649153319 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 649153317} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1280, y: 720} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!223 &649153320 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 649153317} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 1 + m_Camera: {fileID: 249270790} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &649153321 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 649153317} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 1537524790} + - {fileID: 1847025553} + - {fileID: 511172213} + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &700195177 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 700195180} + - component: {fileID: 700195179} + - component: {fileID: 700195178} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &700195178 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700195177} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &700195179 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700195177} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &700195180 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700195177} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &965437870 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 965437872} + - component: {fileID: 965437871} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &965437871 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 965437870} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &965437872 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 965437870} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1101930858 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1101930859} + - component: {fileID: 1101930861} + - component: {fileID: 1101930860} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1101930859 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101930858} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1847025553} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -28.681885, y: -20.492146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1101930860 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101930858} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 48 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 24 + m_MaxSize: 64 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Open Editor tab +--- !u!222 &1101930861 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101930858} + m_CullTransparentMesh: 0 +--- !u!1 &1537524789 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1537524790} + - component: {fileID: 1537524792} + - component: {fileID: 1537524791} + m_Layer: 5 + m_Name: InformationText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1537524790 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537524789} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 649153321} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -0.00000095367, y: 215.4} + m_SizeDelta: {x: 861.9848, y: 122.55513} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1537524791 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537524789} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 64 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 64 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Hot Reload is not running yet +--- !u!222 &1537524792 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537524789} + m_CullTransparentMesh: 0 +--- !u!1 &1847025552 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1847025553} + - component: {fileID: 1847025556} + - component: {fileID: 1847025555} + - component: {fileID: 1847025554} + m_Layer: 5 + m_Name: Button open editor tab + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1847025553 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1847025552} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1101930859} + m_Father: {fileID: 649153321} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 218.9, y: 118} + m_SizeDelta: {x: 392.12805, y: 72.27574} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1847025554 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1847025552} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1847025555} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1847025555 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1847025552} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1847025556 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1847025552} + m_CullTransparentMesh: 0 +--- !u!1 &2132145875 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2132145876} + - component: {fileID: 2132145877} + m_Layer: 0 + m_Name: HotReloadDemo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2132145876 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2132145875} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 18.716805, y: 53.419094, z: 92.546875} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2132145877 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2132145875} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5a2e4d3f095a9441688c70278068eee0, type: 3} + m_Name: + m_EditorClassIdentifier: + cube: {fileID: 19295889} + informationText: {fileID: 1537524791} + openWindowButton: {fileID: 1847025554} + openScriptButton: {fileID: 511172214} + thisScript: {fileID: 11500000, guid: 5a2e4d3f095a9441688c70278068eee0, type: 3} + myEditedField: 54 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBasicDemo.unity.meta b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBasicDemo.unity.meta new file mode 100644 index 0000000..3331e35 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBasicDemo.unity.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: ae744488364b34fcf8c80218eadc721c +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBasicDemo.unity + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemo.unity b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemo.unity new file mode 100644 index 0000000..9ad180f --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemo.unity @@ -0,0 +1,9607 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0.18028378, g: 0.22571412, b: 0.30692285, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 0 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + m_AtlasSize: 1024 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 + m_Padding: 2 + m_LightmapParameters: {fileID: 0} + m_LightmapsBakeMode: 1 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 500 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 4890085278179872738, guid: 961e97ae3d4011b47a1198a930f5c30d, type: 2} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 3 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &19295889 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 19295893} + - component: {fileID: 19295892} + - component: {fileID: 19295891} + - component: {fileID: 19295890} + m_Layer: 0 + m_Name: Cube + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!65 &19295890 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 19295889} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &19295891 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 19295889} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &19295892 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 19295889} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!4 &19295893 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 19295889} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: 0.8224261, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &40618803 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 40618804} + - component: {fileID: 40618807} + - component: {fileID: 40618806} + - component: {fileID: 40618805} + m_Layer: 0 + m_Name: Cube (48) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &40618804 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 40618803} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: 2.4375737, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &40618805 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 40618803} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &40618806 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 40618803} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &40618807 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 40618803} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &53988356 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 53988357} + - component: {fileID: 53988360} + - component: {fileID: 53988359} + - component: {fileID: 53988358} + m_Layer: 0 + m_Name: Cube (75) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &53988357 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 53988356} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: 2.427574, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &53988358 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 53988356} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &53988359 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 53988356} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &53988360 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 53988356} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &69029314 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 69029315} + - component: {fileID: 69029318} + - component: {fileID: 69029317} + - component: {fileID: 69029316} + m_Layer: 0 + m_Name: Cube (16) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &69029315 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 69029314} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: -1.6699998, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &69029316 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 69029314} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &69029317 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 69029314} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &69029318 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 69029314} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &121342030 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 121342031} + - component: {fileID: 121342034} + - component: {fileID: 121342033} + - component: {fileID: 121342032} + m_Layer: 0 + m_Name: Cube (43) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &121342031 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 121342030} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: 4.92, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &121342032 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 121342030} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &121342033 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 121342030} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &121342034 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 121342030} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &127719937 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 127719938} + - component: {fileID: 127719941} + - component: {fileID: 127719940} + - component: {fileID: 127719939} + m_Layer: 0 + m_Name: Cube (67) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &127719938 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 127719937} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: 2.4375737, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &127719939 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 127719937} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &127719940 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 127719937} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &127719941 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 127719937} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &128004585 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 128004586} + - component: {fileID: 128004589} + - component: {fileID: 128004588} + - component: {fileID: 128004587} + m_Layer: 0 + m_Name: Cube (56) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &128004586 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 128004585} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: 2.427574, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &128004587 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 128004585} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &128004588 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 128004585} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &128004589 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 128004585} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &132063619 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 132063620} + - component: {fileID: 132063623} + - component: {fileID: 132063622} + - component: {fileID: 132063621} + m_Layer: 0 + m_Name: Cube (4) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &132063620 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 132063619} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: 0.8224261, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &132063621 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 132063619} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &132063622 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 132063619} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &132063623 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 132063619} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &133838188 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 133838189} + - component: {fileID: 133838192} + - component: {fileID: 133838191} + - component: {fileID: 133838190} + m_Layer: 0 + m_Name: Cube (62) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &133838189 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 133838188} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: 4.92, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &133838190 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 133838188} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &133838191 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 133838188} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &133838192 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 133838188} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &181686442 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 181686443} + - component: {fileID: 181686446} + - component: {fileID: 181686445} + - component: {fileID: 181686444} + m_Layer: 0 + m_Name: Cube (13) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &181686443 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 181686442} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: 0.8124263, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &181686444 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 181686442} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &181686445 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 181686442} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &181686446 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 181686442} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &218081520 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 218081521} + - component: {fileID: 218081524} + - component: {fileID: 218081523} + - component: {fileID: 218081522} + m_Layer: 0 + m_Name: Cube (66) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &218081521 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 218081520} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: 2.4375737, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &218081522 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 218081520} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &218081523 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 218081520} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &218081524 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 218081520} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &249270788 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 249270791} + - component: {fileID: 249270790} + - component: {fileID: 249270789} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &249270789 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 249270788} + m_Enabled: 1 +--- !u!20 &249270790 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 249270788} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + m_TargetEye: 3 + m_HDR: 1 + m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 + m_ForceIntoRT: 0 + m_OcclusionCulling: 1 + m_StereoConvergence: 10 + m_StereoSeparation: 0.022 +--- !u!4 &249270791 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 249270788} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 1, z: -10} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &249919994 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 249919995} + - component: {fileID: 249919998} + - component: {fileID: 249919997} + - component: {fileID: 249919996} + m_Layer: 0 + m_Name: Cube (50) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &249919995 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 249919994} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: 4.91, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &249919996 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 249919994} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &249919997 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 249919994} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &249919998 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 249919994} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &262969854 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 262969855} + - component: {fileID: 262969858} + - component: {fileID: 262969857} + - component: {fileID: 262969856} + m_Layer: 0 + m_Name: Cube (30) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &262969855 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 262969854} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: 0.8124263, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &262969856 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 262969854} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &262969857 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 262969854} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &262969858 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 262969854} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &266848583 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 266848584} + - component: {fileID: 266848587} + - component: {fileID: 266848586} + - component: {fileID: 266848585} + m_Layer: 0 + m_Name: Cube (21) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &266848584 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 266848583} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: 0.8224261, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &266848585 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 266848583} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &266848586 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 266848583} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &266848587 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 266848583} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &280025523 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 280025524} + - component: {fileID: 280025527} + - component: {fileID: 280025526} + - component: {fileID: 280025525} + m_Layer: 0 + m_Name: Cube (8) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &280025524 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 280025523} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: -1.6600001, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &280025525 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 280025523} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &280025526 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 280025523} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &280025527 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 280025523} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &282541332 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 282541333} + - component: {fileID: 282541336} + - component: {fileID: 282541335} + - component: {fileID: 282541334} + m_Layer: 0 + m_Name: Cube (52) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &282541333 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 282541332} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: 4.91, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &282541334 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 282541332} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &282541335 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 282541332} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &282541336 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 282541332} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &297017159 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 297017160} + - component: {fileID: 297017163} + - component: {fileID: 297017162} + - component: {fileID: 297017161} + m_Layer: 0 + m_Name: Cube (5) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &297017160 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 297017159} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: -1.66, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &297017161 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 297017159} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &297017162 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 297017159} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &297017163 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 297017159} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &297623418 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 297623419} + - component: {fileID: 297623422} + - component: {fileID: 297623421} + - component: {fileID: 297623420} + m_Layer: 0 + m_Name: Cube (76) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &297623419 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 297623418} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: 2.427574, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &297623420 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 297623418} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &297623421 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 297623418} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &297623422 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 297623418} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &315895885 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 315895886} + - component: {fileID: 315895889} + - component: {fileID: 315895888} + - component: {fileID: 315895887} + m_Layer: 0 + m_Name: Cube (72) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &315895886 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 315895885} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: 4.91, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &315895887 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 315895885} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &315895888 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 315895885} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &315895889 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 315895885} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &321495839 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 321495840} + m_Layer: 0 + m_Name: Cubes + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &321495840 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 321495839} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0.908883, y: -0.8224261, z: -0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 19295893} + - {fileID: 323745810} + - {fileID: 582255912} + - {fileID: 1893598706} + - {fileID: 132063620} + - {fileID: 297017160} + - {fileID: 768601852} + - {fileID: 1931512540} + - {fileID: 280025524} + - {fileID: 1281233703} + - {fileID: 1927368435} + - {fileID: 2042268981} + - {fileID: 1682534256} + - {fileID: 181686443} + - {fileID: 351532142} + - {fileID: 1500025043} + - {fileID: 69029315} + - {fileID: 667369431} + - {fileID: 375087532} + - {fileID: 1124320615} + - {fileID: 927111012} + - {fileID: 266848584} + - {fileID: 2063974669} + - {fileID: 1010368909} + - {fileID: 1343033883} + - {fileID: 781926843} + - {fileID: 341472300} + - {fileID: 2136109399} + - {fileID: 677037662} + - {fileID: 1973025879} + - {fileID: 262969855} + - {fileID: 1399883246} + - {fileID: 743324179} + - {fileID: 1586797431} + - {fileID: 1123278460} + - {fileID: 928584462} + - {fileID: 1069134373} + - {fileID: 2014093030} + - {fileID: 792419466} + - {fileID: 1855770257} + - {fileID: 893274498} + - {fileID: 500782909} + - {fileID: 443249060} + - {fileID: 121342031} + - {fileID: 1130193477} + - {fileID: 523436227} + - {fileID: 1600668863} + - {fileID: 2053621922} + - {fileID: 40618804} + - {fileID: 738032838} + - {fileID: 249919995} + - {fileID: 835270569} + - {fileID: 282541333} + - {fileID: 519530843} + - {fileID: 1774902065} + - {fileID: 1019461522} + - {fileID: 128004586} + - {fileID: 1231537575} + - {fileID: 1965297415} + - {fileID: 589500252} + - {fileID: 1218495767} + - {fileID: 778191808} + - {fileID: 133838189} + - {fileID: 1983101811} + - {fileID: 387856195} + - {fileID: 2102038396} + - {fileID: 218081521} + - {fileID: 127719938} + - {fileID: 1555484938} + - {fileID: 1876148967} + - {fileID: 1228425737} + - {fileID: 801020416} + - {fileID: 315895886} + - {fileID: 1768551574} + - {fileID: 1850807847} + - {fileID: 53988357} + - {fileID: 297623419} + - {fileID: 1946060858} + - {fileID: 1380444550} + - {fileID: 643205569} + m_Father: {fileID: 0} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &323745809 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 323745810} + - component: {fileID: 323745813} + - component: {fileID: 323745812} + - component: {fileID: 323745811} + m_Layer: 0 + m_Name: Cube (1) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &323745810 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 323745809} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: 0.8224261, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &323745811 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 323745809} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &323745812 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 323745809} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &323745813 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 323745809} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &341472299 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 341472300} + - component: {fileID: 341472303} + - component: {fileID: 341472302} + - component: {fileID: 341472301} + m_Layer: 0 + m_Name: Cube (26) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &341472300 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 341472299} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: -1.6600001, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &341472301 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 341472299} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &341472302 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 341472299} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &341472303 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 341472299} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &351532141 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 351532142} + - component: {fileID: 351532145} + - component: {fileID: 351532144} + - component: {fileID: 351532143} + m_Layer: 0 + m_Name: Cube (14) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &351532142 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 351532141} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: 0.8124263, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &351532143 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 351532141} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &351532144 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 351532141} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &351532145 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 351532141} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &375087531 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 375087532} + - component: {fileID: 375087535} + - component: {fileID: 375087534} + - component: {fileID: 375087533} + m_Layer: 0 + m_Name: Cube (18) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &375087532 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 375087531} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: -1.67, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &375087533 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 375087531} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &375087534 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 375087531} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &375087535 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 375087531} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &387856194 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 387856195} + - component: {fileID: 387856198} + - component: {fileID: 387856197} + - component: {fileID: 387856196} + m_Layer: 0 + m_Name: Cube (64) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &387856195 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 387856194} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: 4.92, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &387856196 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 387856194} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &387856197 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 387856194} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &387856198 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 387856194} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &443249059 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 443249060} + - component: {fileID: 443249063} + - component: {fileID: 443249062} + - component: {fileID: 443249061} + m_Layer: 0 + m_Name: Cube (42) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &443249060 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 443249059} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: 4.92, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &443249061 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 443249059} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &443249062 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 443249059} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &443249063 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 443249059} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &460271676 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 460271677} + - component: {fileID: 460271679} + - component: {fileID: 460271678} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &460271677 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 460271676} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 511172213} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -28.681885, y: -20.492146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &460271678 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 460271676} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 48 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 24 + m_MaxSize: 64 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Open Script +--- !u!222 &460271679 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 460271676} + m_CullTransparentMesh: 0 +--- !u!1 &500782908 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 500782909} + - component: {fileID: 500782912} + - component: {fileID: 500782911} + - component: {fileID: 500782910} + m_Layer: 0 + m_Name: Cube (41) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &500782909 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 500782908} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: 4.92, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &500782910 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 500782908} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &500782911 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 500782908} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &500782912 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 500782908} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &511172212 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 511172213} + - component: {fileID: 511172216} + - component: {fileID: 511172215} + - component: {fileID: 511172214} + m_Layer: 5 + m_Name: Button open script + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &511172213 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 511172212} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.6553401, y: 0.6553401, z: 0.6553401} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 460271677} + m_Father: {fileID: 649153321} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 159, y: 36} + m_SizeDelta: {x: 392.12805, y: 72.27574} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &511172214 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 511172212} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 511172215} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &511172215 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 511172212} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &511172216 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 511172212} + m_CullTransparentMesh: 0 +--- !u!1 &519530842 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 519530843} + - component: {fileID: 519530846} + - component: {fileID: 519530845} + - component: {fileID: 519530844} + m_Layer: 0 + m_Name: Cube (53) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &519530843 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519530842} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: 4.91, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &519530844 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519530842} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &519530845 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519530842} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &519530846 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 519530842} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &523436226 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 523436227} + - component: {fileID: 523436230} + - component: {fileID: 523436229} + - component: {fileID: 523436228} + m_Layer: 0 + m_Name: Cube (45) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &523436227 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 523436226} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: 2.437574, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &523436228 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 523436226} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &523436229 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 523436226} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &523436230 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 523436226} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &582255911 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 582255912} + - component: {fileID: 582255915} + - component: {fileID: 582255914} + - component: {fileID: 582255913} + m_Layer: 0 + m_Name: Cube (2) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &582255912 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 582255911} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: 0.8224261, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &582255913 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 582255911} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &582255914 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 582255911} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &582255915 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 582255911} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &589500251 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 589500252} + - component: {fileID: 589500255} + - component: {fileID: 589500254} + - component: {fileID: 589500253} + m_Layer: 0 + m_Name: Cube (59) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &589500252 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 589500251} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: 2.427574, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &589500253 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 589500251} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &589500254 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 589500251} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &589500255 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 589500251} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &643205568 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 643205569} + - component: {fileID: 643205572} + - component: {fileID: 643205571} + - component: {fileID: 643205570} + m_Layer: 0 + m_Name: Cube (79) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &643205569 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 643205568} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: 2.427574, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &643205570 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 643205568} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &643205571 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 643205568} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &643205572 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 643205568} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &649153317 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 649153321} + - component: {fileID: 649153320} + - component: {fileID: 649153319} + - component: {fileID: 649153318} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &649153318 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 649153317} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &649153319 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 649153317} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1000, y: 557} + m_ScreenMatchMode: 1 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &649153320 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 649153317} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &649153321 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 649153317} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1537524790} + - {fileID: 511172213} + - {fileID: 1847025553} + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &667369430 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 667369431} + - component: {fileID: 667369434} + - component: {fileID: 667369433} + - component: {fileID: 667369432} + m_Layer: 0 + m_Name: Cube (17) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &667369431 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 667369430} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: -1.6699998, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &667369432 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 667369430} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &667369433 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 667369430} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &667369434 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 667369430} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &677037661 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 677037662} + - component: {fileID: 677037665} + - component: {fileID: 677037664} + - component: {fileID: 677037663} + m_Layer: 0 + m_Name: Cube (28) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &677037662 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 677037661} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: -1.6600001, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &677037663 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 677037661} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &677037664 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 677037661} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &677037665 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 677037661} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &700195177 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 700195180} + - component: {fileID: 700195179} + - component: {fileID: 700195178} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &700195178 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700195177} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &700195179 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700195177} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &700195180 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 700195177} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &738032837 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 738032838} + - component: {fileID: 738032841} + - component: {fileID: 738032840} + - component: {fileID: 738032839} + m_Layer: 0 + m_Name: Cube (49) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &738032838 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738032837} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: 2.4375737, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &738032839 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738032837} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &738032840 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738032837} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &738032841 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 738032837} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &743324178 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 743324179} + - component: {fileID: 743324182} + - component: {fileID: 743324181} + - component: {fileID: 743324180} + m_Layer: 0 + m_Name: Cube (32) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &743324179 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 743324178} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: 0.8124263, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &743324180 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 743324178} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &743324181 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 743324178} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &743324182 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 743324178} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &768601851 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 768601852} + - component: {fileID: 768601855} + - component: {fileID: 768601854} + - component: {fileID: 768601853} + m_Layer: 0 + m_Name: Cube (6) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &768601852 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 768601851} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: -1.6600001, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &768601853 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 768601851} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &768601854 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 768601851} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &768601855 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 768601851} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &778191807 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 778191808} + - component: {fileID: 778191811} + - component: {fileID: 778191810} + - component: {fileID: 778191809} + m_Layer: 0 + m_Name: Cube (61) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &778191808 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 778191807} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: 4.92, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &778191809 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 778191807} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &778191810 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 778191807} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &778191811 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 778191807} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &781926842 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 781926843} + - component: {fileID: 781926846} + - component: {fileID: 781926845} + - component: {fileID: 781926844} + m_Layer: 0 + m_Name: Cube (25) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &781926843 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 781926842} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: -1.66, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &781926844 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 781926842} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &781926845 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 781926842} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &781926846 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 781926842} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &792419465 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 792419466} + - component: {fileID: 792419469} + - component: {fileID: 792419468} + - component: {fileID: 792419467} + m_Layer: 0 + m_Name: Cube (38) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &792419466 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792419465} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: -1.67, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &792419467 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792419465} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &792419468 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792419465} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &792419469 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 792419465} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &801020415 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 801020416} + - component: {fileID: 801020419} + - component: {fileID: 801020418} + - component: {fileID: 801020417} + m_Layer: 0 + m_Name: Cube (71) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &801020416 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 801020415} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: 4.91, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &801020417 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 801020415} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &801020418 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 801020415} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &801020419 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 801020415} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &835270568 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 835270569} + - component: {fileID: 835270572} + - component: {fileID: 835270571} + - component: {fileID: 835270570} + m_Layer: 0 + m_Name: Cube (51) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &835270569 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835270568} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: 4.91, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &835270570 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835270568} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &835270571 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835270568} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &835270572 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 835270568} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &893274497 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 893274498} + - component: {fileID: 893274501} + - component: {fileID: 893274500} + - component: {fileID: 893274499} + m_Layer: 0 + m_Name: Cube (40) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &893274498 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 893274497} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: 4.92, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &893274499 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 893274497} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &893274500 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 893274497} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &893274501 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 893274497} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &927111011 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 927111012} + - component: {fileID: 927111015} + - component: {fileID: 927111014} + - component: {fileID: 927111013} + m_Layer: 0 + m_Name: Cube (20) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &927111012 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 927111011} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: 0.8224261, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &927111013 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 927111011} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &927111014 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 927111011} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &927111015 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 927111011} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &928584461 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 928584462} + - component: {fileID: 928584465} + - component: {fileID: 928584464} + - component: {fileID: 928584463} + m_Layer: 0 + m_Name: Cube (35) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &928584462 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 928584461} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: -1.6699998, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &928584463 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 928584461} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &928584464 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 928584461} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &928584465 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 928584461} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &965437870 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 965437872} + - component: {fileID: 965437871} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &965437871 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 965437870} + m_Enabled: 1 + serializedVersion: 10 + m_Type: 1 + m_Shape: 0 + m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 2 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &965437872 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 965437870} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &1010368908 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1010368909} + - component: {fileID: 1010368912} + - component: {fileID: 1010368911} + - component: {fileID: 1010368910} + m_Layer: 0 + m_Name: Cube (23) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1010368909 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1010368908} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: 0.8224261, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1010368910 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1010368908} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1010368911 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1010368908} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1010368912 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1010368908} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1019461521 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1019461522} + - component: {fileID: 1019461525} + - component: {fileID: 1019461524} + - component: {fileID: 1019461523} + m_Layer: 0 + m_Name: Cube (55) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1019461522 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1019461521} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: 2.427574, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1019461523 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1019461521} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1019461524 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1019461521} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1019461525 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1019461521} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1069134372 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1069134373} + - component: {fileID: 1069134376} + - component: {fileID: 1069134375} + - component: {fileID: 1069134374} + m_Layer: 0 + m_Name: Cube (36) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1069134373 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1069134372} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: -1.6699998, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1069134374 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1069134372} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1069134375 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1069134372} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1069134376 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1069134372} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1101930858 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1101930859} + - component: {fileID: 1101930861} + - component: {fileID: 1101930860} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1101930859 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101930858} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1847025553} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -28.681885, y: -20.492146} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1101930860 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101930858} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 48 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 24 + m_MaxSize: 64 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Open Editor tab +--- !u!222 &1101930861 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1101930858} + m_CullTransparentMesh: 0 +--- !u!1 &1123278459 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1123278460} + - component: {fileID: 1123278463} + - component: {fileID: 1123278462} + - component: {fileID: 1123278461} + m_Layer: 0 + m_Name: Cube (34) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1123278460 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1123278459} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: 0.8124263, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1123278461 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1123278459} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1123278462 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1123278459} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1123278463 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1123278459} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1124320614 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1124320615} + - component: {fileID: 1124320618} + - component: {fileID: 1124320617} + - component: {fileID: 1124320616} + m_Layer: 0 + m_Name: Cube (19) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1124320615 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1124320614} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: -1.6699998, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1124320616 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1124320614} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1124320617 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1124320614} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1124320618 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1124320614} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1130193476 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1130193477} + - component: {fileID: 1130193480} + - component: {fileID: 1130193479} + - component: {fileID: 1130193478} + m_Layer: 0 + m_Name: Cube (44) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1130193477 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1130193476} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: 4.92, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1130193478 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1130193476} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1130193479 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1130193476} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1130193480 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1130193476} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1218495766 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1218495767} + - component: {fileID: 1218495770} + - component: {fileID: 1218495769} + - component: {fileID: 1218495768} + m_Layer: 0 + m_Name: Cube (60) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1218495767 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1218495766} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: 4.92, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1218495768 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1218495766} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1218495769 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1218495766} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1218495770 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1218495766} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1228425736 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1228425737} + - component: {fileID: 1228425740} + - component: {fileID: 1228425739} + - component: {fileID: 1228425738} + m_Layer: 0 + m_Name: Cube (70) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1228425737 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1228425736} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: 4.91, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1228425738 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1228425736} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1228425739 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1228425736} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1228425740 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1228425736} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1231537574 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1231537575} + - component: {fileID: 1231537578} + - component: {fileID: 1231537577} + - component: {fileID: 1231537576} + m_Layer: 0 + m_Name: Cube (57) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1231537575 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1231537574} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: 2.427574, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1231537576 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1231537574} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1231537577 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1231537574} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1231537578 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1231537574} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1281233702 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1281233703} + - component: {fileID: 1281233706} + - component: {fileID: 1281233705} + - component: {fileID: 1281233704} + m_Layer: 0 + m_Name: Cube (9) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1281233703 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1281233702} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: -1.6600001, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1281233704 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1281233702} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1281233705 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1281233702} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1281233706 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1281233702} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1343033882 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1343033883} + - component: {fileID: 1343033886} + - component: {fileID: 1343033885} + - component: {fileID: 1343033884} + m_Layer: 0 + m_Name: Cube (24) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1343033883 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1343033882} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: 0.8224261, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1343033884 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1343033882} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1343033885 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1343033882} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1343033886 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1343033882} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1380444549 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1380444550} + - component: {fileID: 1380444553} + - component: {fileID: 1380444552} + - component: {fileID: 1380444551} + m_Layer: 0 + m_Name: Cube (78) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1380444550 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1380444549} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: 2.4275737, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1380444551 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1380444549} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1380444552 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1380444549} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1380444553 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1380444549} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1399883245 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1399883246} + - component: {fileID: 1399883249} + - component: {fileID: 1399883248} + - component: {fileID: 1399883247} + m_Layer: 0 + m_Name: Cube (31) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1399883246 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1399883245} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: 0.8124263, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1399883247 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1399883245} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1399883248 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1399883245} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1399883249 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1399883245} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1500025042 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1500025043} + - component: {fileID: 1500025046} + - component: {fileID: 1500025045} + - component: {fileID: 1500025044} + m_Layer: 0 + m_Name: Cube (15) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1500025043 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1500025042} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: -1.6699998, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1500025044 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1500025042} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1500025045 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1500025042} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1500025046 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1500025042} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1537524789 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1537524790} + - component: {fileID: 1537524792} + - component: {fileID: 1537524791} + m_Layer: 5 + m_Name: InformationText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1537524790 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537524789} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 649153321} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -0.00000095367, y: 253} + m_SizeDelta: {x: 861.9848, y: 122.55513} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1537524791 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537524789} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 56 + m_FontStyle: 1 + m_BestFit: 0 + m_MinSize: 0 + m_MaxSize: 64 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Hot Reload is not running yet +--- !u!222 &1537524792 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1537524789} + m_CullTransparentMesh: 0 +--- !u!1 &1555484937 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1555484938} + - component: {fileID: 1555484941} + - component: {fileID: 1555484940} + - component: {fileID: 1555484939} + m_Layer: 0 + m_Name: Cube (68) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1555484938 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1555484937} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: 2.4375737, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1555484939 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1555484937} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1555484940 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1555484937} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1555484941 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1555484937} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1586797430 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1586797431} + - component: {fileID: 1586797434} + - component: {fileID: 1586797433} + - component: {fileID: 1586797432} + m_Layer: 0 + m_Name: Cube (33) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1586797431 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586797430} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: 0.8124263, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1586797432 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586797430} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1586797433 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586797430} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1586797434 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1586797430} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1600668862 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1600668863} + - component: {fileID: 1600668866} + - component: {fileID: 1600668865} + - component: {fileID: 1600668864} + m_Layer: 0 + m_Name: Cube (46) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1600668863 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1600668862} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: 2.4375737, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1600668864 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1600668862} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1600668865 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1600668862} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1600668866 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1600668862} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1682534255 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1682534256} + - component: {fileID: 1682534259} + - component: {fileID: 1682534258} + - component: {fileID: 1682534257} + m_Layer: 0 + m_Name: Cube (12) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1682534256 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1682534255} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: 0.8124263, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1682534257 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1682534255} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1682534258 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1682534255} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1682534259 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1682534255} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1768551573 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1768551574} + - component: {fileID: 1768551577} + - component: {fileID: 1768551576} + - component: {fileID: 1768551575} + m_Layer: 0 + m_Name: Cube (73) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1768551574 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1768551573} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: 4.91, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1768551575 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1768551573} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1768551576 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1768551573} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1768551577 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1768551573} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1774902064 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1774902065} + - component: {fileID: 1774902068} + - component: {fileID: 1774902067} + - component: {fileID: 1774902066} + m_Layer: 0 + m_Name: Cube (54) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1774902065 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1774902064} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: 4.91, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1774902066 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1774902064} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1774902067 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1774902064} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1774902068 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1774902064} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1847025552 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1847025553} + - component: {fileID: 1847025556} + - component: {fileID: 1847025555} + - component: {fileID: 1847025554} + m_Layer: 5 + m_Name: Button open editor tab + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1847025553 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1847025552} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.65534, y: 0.65534, z: 0.65534} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 1101930859} + m_Father: {fileID: 649153321} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: -153, y: 36} + m_SizeDelta: {x: 393.12805, y: 73.27576} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1847025554 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1847025552} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1847025555} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1847025555 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1847025552} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1847025556 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1847025552} + m_CullTransparentMesh: 0 +--- !u!1 &1850807846 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1850807847} + - component: {fileID: 1850807850} + - component: {fileID: 1850807849} + - component: {fileID: 1850807848} + m_Layer: 0 + m_Name: Cube (74) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1850807847 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1850807846} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: 4.91, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1850807848 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1850807846} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1850807849 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1850807846} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1850807850 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1850807846} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1855770256 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1855770257} + - component: {fileID: 1855770260} + - component: {fileID: 1855770259} + - component: {fileID: 1855770258} + m_Layer: 0 + m_Name: Cube (39) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1855770257 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1855770256} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: -1.6699998, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1855770258 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1855770256} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1855770259 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1855770256} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1855770260 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1855770256} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1876148966 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1876148967} + - component: {fileID: 1876148970} + - component: {fileID: 1876148969} + - component: {fileID: 1876148968} + m_Layer: 0 + m_Name: Cube (69) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1876148967 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1876148966} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: 2.4375737, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1876148968 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1876148966} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1876148969 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1876148966} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1876148970 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1876148966} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1893598705 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1893598706} + - component: {fileID: 1893598709} + - component: {fileID: 1893598708} + - component: {fileID: 1893598707} + m_Layer: 0 + m_Name: Cube (3) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1893598706 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1893598705} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: 0.8224261, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1893598707 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1893598705} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1893598708 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1893598705} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1893598709 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1893598705} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1927368434 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1927368435} + - component: {fileID: 1927368438} + - component: {fileID: 1927368437} + - component: {fileID: 1927368436} + m_Layer: 0 + m_Name: Cube (10) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1927368435 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1927368434} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: 0.8124263, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1927368436 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1927368434} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1927368437 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1927368434} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1927368438 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1927368434} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1931512539 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1931512540} + - component: {fileID: 1931512543} + - component: {fileID: 1931512542} + - component: {fileID: 1931512541} + m_Layer: 0 + m_Name: Cube (7) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1931512540 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1931512539} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: -1.6600001, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1931512541 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1931512539} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1931512542 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1931512539} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1931512543 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1931512539} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1946060857 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1946060858} + - component: {fileID: 1946060861} + - component: {fileID: 1946060860} + - component: {fileID: 1946060859} + m_Layer: 0 + m_Name: Cube (77) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1946060858 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1946060857} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: 2.427574, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1946060859 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1946060857} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1946060860 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1946060857} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1946060861 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1946060857} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1965297414 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1965297415} + - component: {fileID: 1965297418} + - component: {fileID: 1965297417} + - component: {fileID: 1965297416} + m_Layer: 0 + m_Name: Cube (58) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1965297415 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1965297414} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: 2.4275737, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1965297416 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1965297414} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1965297417 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1965297414} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1965297418 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1965297414} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1973025878 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1973025879} + - component: {fileID: 1973025882} + - component: {fileID: 1973025881} + - component: {fileID: 1973025880} + m_Layer: 0 + m_Name: Cube (29) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1973025879 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1973025878} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 5.4900002, y: -1.6600001, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1973025880 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1973025878} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1973025881 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1973025878} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1973025882 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1973025878} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &1983101810 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1983101811} + - component: {fileID: 1983101814} + - component: {fileID: 1983101813} + - component: {fileID: 1983101812} + m_Layer: 0 + m_Name: Cube (63) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1983101811 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1983101810} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 1.73, y: 4.92, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &1983101812 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1983101810} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &1983101813 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1983101810} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &1983101814 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1983101810} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2014093029 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2014093030} + - component: {fileID: 2014093033} + - component: {fileID: 2014093032} + - component: {fileID: 2014093031} + m_Layer: 0 + m_Name: Cube (37) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2014093030 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2014093029} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: -1.6699998, z: 5.4483223} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2014093031 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2014093029} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2014093032 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2014093029} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2014093033 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2014093029} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2042268980 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2042268981} + - component: {fileID: 2042268984} + - component: {fileID: 2042268983} + - component: {fileID: 2042268982} + m_Layer: 0 + m_Name: Cube (11) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2042268981 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2042268980} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -7, y: 0.8124263, z: 1.85} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2042268982 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2042268980} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2042268983 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2042268980} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2042268984 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2042268980} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2053621921 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2053621922} + - component: {fileID: 2053621925} + - component: {fileID: 2053621924} + - component: {fileID: 2053621923} + m_Layer: 0 + m_Name: Cube (47) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2053621922 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2053621921} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: 2.4375737, z: 0.0616778} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2053621923 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2053621921} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2053621924 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2053621921} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2053621925 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2053621921} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2063974668 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2063974669} + - component: {fileID: 2063974672} + - component: {fileID: 2063974671} + - component: {fileID: 2063974670} + m_Layer: 0 + m_Name: Cube (22) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2063974669 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2063974668} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: 0.8224261, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2063974670 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2063974668} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2063974671 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2063974668} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2063974672 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2063974668} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2102038395 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2102038396} + - component: {fileID: 2102038399} + - component: {fileID: 2102038398} + - component: {fileID: 2102038397} + m_Layer: 0 + m_Name: Cube (65) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2102038396 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2102038395} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -4.19, y: 2.437574, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2102038397 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2102038395} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2102038398 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2102038395} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2102038399 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2102038395} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} +--- !u!1 &2132145875 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2132145876} + - component: {fileID: 2132145877} + m_Layer: 0 + m_Name: HotReloadDemo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2132145876 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2132145875} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 18.716805, y: 53.419094, z: 172.31} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2132145877 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2132145875} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: e09948cf1f317d04fbaf410dbfe91656, type: 3} + m_Name: + m_EditorClassIdentifier: + cubes: + - {fileID: 19295893} + - {fileID: 323745810} + - {fileID: 582255912} + - {fileID: 1893598706} + - {fileID: 132063620} + - {fileID: 297017160} + - {fileID: 768601852} + - {fileID: 1931512540} + - {fileID: 280025524} + - {fileID: 1281233703} + - {fileID: 1927368435} + - {fileID: 2042268981} + - {fileID: 1682534256} + - {fileID: 181686443} + - {fileID: 351532142} + - {fileID: 1500025043} + - {fileID: 69029315} + - {fileID: 667369431} + - {fileID: 375087532} + - {fileID: 1124320615} + - {fileID: 927111012} + - {fileID: 266848584} + - {fileID: 2063974669} + - {fileID: 1010368909} + - {fileID: 1343033883} + - {fileID: 781926843} + - {fileID: 341472300} + - {fileID: 2136109399} + - {fileID: 677037662} + - {fileID: 1973025879} + - {fileID: 262969855} + - {fileID: 1399883246} + - {fileID: 743324179} + - {fileID: 1586797431} + - {fileID: 1123278460} + - {fileID: 928584462} + - {fileID: 1069134373} + - {fileID: 2014093030} + - {fileID: 792419466} + - {fileID: 1855770257} + - {fileID: 893274498} + - {fileID: 500782909} + - {fileID: 443249060} + - {fileID: 121342031} + - {fileID: 1130193477} + - {fileID: 523436227} + - {fileID: 1600668863} + - {fileID: 2053621922} + - {fileID: 40618804} + - {fileID: 738032838} + - {fileID: 249919995} + - {fileID: 835270569} + - {fileID: 282541333} + - {fileID: 519530843} + - {fileID: 1774902065} + - {fileID: 1019461522} + - {fileID: 128004586} + - {fileID: 1231537575} + - {fileID: 1965297415} + - {fileID: 589500252} + - {fileID: 1218495767} + - {fileID: 778191808} + - {fileID: 133838189} + - {fileID: 1983101811} + - {fileID: 387856195} + - {fileID: 2102038396} + - {fileID: 218081521} + - {fileID: 127719938} + - {fileID: 1555484938} + - {fileID: 1876148967} + - {fileID: 1228425737} + - {fileID: 801020416} + - {fileID: 315895886} + - {fileID: 1768551574} + - {fileID: 1850807847} + - {fileID: 53988357} + - {fileID: 297623419} + - {fileID: 1946060858} + - {fileID: 1380444550} + - {fileID: 643205569} + informationText: {fileID: 1537524791} + openWindowButton: {fileID: 1847025554} + openScriptButton: {fileID: 511172214} + thisScript: {fileID: 11500000, guid: e09948cf1f317d04fbaf410dbfe91656, type: 3} +--- !u!1 &2136109398 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2136109399} + - component: {fileID: 2136109402} + - component: {fileID: 2136109401} + - component: {fileID: 2136109400} + m_Layer: 0 + m_Name: Cube (27) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2136109399 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2136109398} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: -1.36, y: -1.6600001, z: 3.66} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 321495840} + m_RootOrder: -1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!65 &2136109400 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2136109398} + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_IsTrigger: 0 + m_ProvidesContacts: 0 + m_Enabled: 1 + serializedVersion: 3 + m_Size: {x: 1, y: 1, z: 1} + m_Center: {x: 0, y: 0, z: 0} +--- !u!23 &2136109401 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2136109398} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 2 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 0 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_AdditionalVertexStreams: {fileID: 0} +--- !u!33 &2136109402 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2136109398} + m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemo.unity.meta b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemo.unity.meta new file mode 100644 index 0000000..1db3cae --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemo.unity.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: fad9aa54ab3335844b5a35b9eb6ae286 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemo.unity + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemoSettings.lighting b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemoSettings.lighting new file mode 100644 index 0000000..3c301a1 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemoSettings.lighting @@ -0,0 +1,66 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!850595691 &4890085278179872738 +LightingSettings: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: HotReloadBurstDemoSettings + serializedVersion: 6 + m_GIWorkflowMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 1 + m_RealtimeEnvironmentLighting: 1 + m_BounceScale: 1 + m_AlbedoBoost: 1 + m_IndirectOutputScale: 1 + m_UsingShadowmask: 1 + m_BakeBackend: 1 + m_LightmapMaxSize: 1024 + m_BakeResolution: 40 + m_Padding: 2 + m_LightmapCompression: 3 + m_AO: 0 + m_AOMaxDistance: 1 + m_CompAOExponent: 1 + m_CompAOExponentDirect: 0 + m_ExtractAO: 0 + m_MixedBakeMode: 2 + m_LightmapsBakeMode: 1 + m_FilterMode: 1 + m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0} + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_RealtimeResolution: 2 + m_ForceWhiteAlbedo: 0 + m_ForceUpdates: 0 + m_FinalGather: 0 + m_FinalGatherRayCount: 256 + m_FinalGatherFiltering: 1 + m_PVRCulling: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVREnvironmentSampleCount: 512 + m_PVREnvironmentReferencePointCount: 2048 + m_LightProbeSampleCountMultiplier: 4 + m_PVRBounces: 2 + m_PVRMinBounces: 2 + m_PVREnvironmentImportanceSampling: 0 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_PVRTiledBaking: 0 + m_NumRaysToShootPerTexel: -1 + m_RespectSceneVisibilityWhenBakingGI: 0 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemoSettings.lighting.meta b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemoSettings.lighting.meta new file mode 100644 index 0000000..dccb118 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemoSettings.lighting.meta @@ -0,0 +1,15 @@ +fileFormatVersion: 2 +guid: 961e97ae3d4011b47a1198a930f5c30d +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 4890085278179872738 + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/Demo/Scenes/HotReloadBurstDemoSettings.lighting + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts.meta b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts.meta new file mode 100644 index 0000000..f542db8 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 30c72b28fb747184ba79468d3571dea4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBasicDemo.cs b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBasicDemo.cs new file mode 100644 index 0000000..8c2f936 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBasicDemo.cs @@ -0,0 +1,217 @@ +#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR) +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; +using UnityEngine.UI; + +namespace SingularityGroup.HotReload.Demo { + class HotReloadBasicDemo : MonoBehaviour { + + public GameObject cube; + public Text informationText; + public Button openWindowButton; + public Button openScriptButton; + public TextAsset thisScript; + + // // 1. Adding fields (Added fields can show in the inspector) + // public int myNewField = 1; + + void Start() { + if (Application.isEditor) { + openWindowButton.onClick.AddListener(Demo.I.OpenHotReloadWindow); + openScriptButton.onClick.AddListener(() => Demo.I.OpenScriptFile(thisScript, myStaticField, 13)); + } else { + openWindowButton.gameObject.SetActive(false); + openScriptButton.gameObject.SetActive(false); + informationText.gameObject.SetActive(false); + } + } + + // Update is called once per frame + void Update() { + if (Demo.I.IsServerRunning()) { + informationText.text = "Hot Reload is running"; + } else { + informationText.text = "Hot Reload is not running"; + } + + // // 2. Editing functions in monobehaviours, normal classes or static classes + // // Edit the vector to rotate the cube in the scene differently or change the speed + // var speed = 100; + // cube.transform.Rotate(new Vector3(0, 1, 0) * Time.deltaTime * speed); + + // // 2. Editing functions in monobehaviours, normal classes or static classes + // // Uncomment this code to scale the cube + // cube.transform.localScale = Mathf.Sin(Time.time) * Vector3.one; + + // // 2. Editing functions in monobehaviours, normal classes or static classes + // // Uncomment this code to make the cube move from left to right and back + // var newPos = cube.transform.position += (cube.transform.localScale.x < 0.5 ? Vector3.left : Vector3.right) * Time.deltaTime; + // if(Mathf.Abs(newPos.x) > 10) { + // cube.transform.position = Vector3.zero; + // } + } + + // 3. Editing lambda methods + static Func addFunction = x => { + var result = x + 10; + Debug.Log("Add: " + result); + // // uncomment to change the operator to multiply and log the result + // result = x * 10; + // Debug.Log("Multiply: " + result); + return result; + }; + + // 4. Editing async/await methods + async Task AsyncMethod() { + // await Task.Delay(500); + // Debug.Log("AsyncMethod"); + + // // silicense warning + await Task.CompletedTask; + } + + // 5. Editing properties (get/set) + public static string SomeString { + // edit the get method + get { + var someStringHere = "This is some string"; + return someStringHere; + } + } + + // 6. Editing indexers (square bracket access such as dictionaries) + class CustomDictionary : Dictionary { + public new int this[string key] { + get { + // // uncomment to change the indexer and log a different entry based on case + // return base[key.ToLower()]; + return base[key.ToUpper()]; + } + set { + base[key.ToUpper()] = value; + } + } + } + CustomDictionary randomDict = new CustomDictionary { + { "a", 4 }, + { "A", 5 }, + { "b", 9 }, + { "B", 10 }, + { "c", 14 }, + { "C", 15 }, + { "d", 19 }, + { "D", 20 } + }; + + // 7. Editing operators methods (explicit and implicit operators) + public class Email { + public string Value { get; } + + public Email(string value) { + Value = value; + } + + // Define implicit operator + public static implicit operator string(Email value) + // Uncomment to change the implicit operator + // => value.Value + " FOO"; + => value.Value; + + // // Uncomment to change add an implicit operator + // public static implicit operator byte[](Email value) + // => Encoding.UTF8.GetBytes(value.Value); + + // Define explicit operator + public static explicit operator Email(string value) + => new Email(value); + } + + // 8. Editing fields: modifiers/type/name/initializer + public int myEditedField = 4; + + // 9. Editing static field initializers (variable value is updated) + static readonly int myStaticField = 31; + + // // 10. Adding auto properties/events + // int MyProperty { get; set; } = 6; + // event Action MyEvent = () => Debug.Log("MyEvent"); + + class GenericClass { + // // 11. Adding methods in generic classes + // public void GenericMethod() { + // Debug.Log("GenericMethod"); + // } + // // 12. Adding fields (any type) in generic classes + // public T myGenericField; + } + + void LateUpdate() { + // // 3. Editing lambda methods + // addFunction(10); + + + // // 4. Editing async/await methods + // AsyncMethod().Forget(); + + + // // 5. Editing properties (get/set) + // Debug.Log(SomeString); + + + // // 6. Editing indexers (square bracket access such as dictionaries) + // Debug.Log(randomDict["A"]); + + + // // 7. Editing operators methods (explicit and implicit operators) + Email email = new Email("example@example.com"); + // string stringEmail = email; + // Debug.Log(stringEmail); + + // // Uncomment new operator in Email class + Uncomment this to add byte implicit operator + // byte[] byteEmail = email; + // var hexRepresentation = BitConverter.ToString(byteEmail); + // Debug.Log(hexRepresentation); + // Debug.Log(Encoding.UTF8.GetString(byteEmail)); + + // // 8. Editing fields: modifiers/type/name/initializer + // Debug.Log("myEditedField: " + myEditedField); + + // // 9. Editing static field initializers (variable value is updated) + // Debug.Log("myStaticField: " + myStaticField); + + // // 10. Adding auto properties/events + // Debug.Log("MyProperty: " + MyProperty); + // MyEvent.Invoke(); + + // var newClass = new GenericClass(); + // // 11. Adding methods in generic classes + // newClass.GenericMethod(); + // // 12. Adding fields in generic classes + // newClass.myGenericField = 3; + // Debug.Log("myGenericField: " + newClass.myGenericField); + + // // 13. Editing lambda methods with closures + // // Uncomment to log sorted array + // // Switch a and b to reverse the sorting + // int[] numbers = { 5, 3, 8, 1, 9 }; + // Array.Sort(numbers, (b, a) => a.CompareTo(b)); + // Debug.Log(string.Join(", ", numbers)); + } + + // This function gets invoked every time it's patched + [InvokeOnHotReloadLocal] + static void OnHotReloadMe() { + // // change the string to see the method getting invoked + // Debug.Log("Hello there"); + } + + // // 14. Adding event functions + // void OnDisable() { + // Debug.Log("OnDisable"); + // } + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBasicDemo.cs.meta b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBasicDemo.cs.meta new file mode 100644 index 0000000..1a1c28f --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBasicDemo.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: 5a2e4d3f095a9441688c70278068eee0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBasicDemo.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBurstJobsDemo.cs b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBurstJobsDemo.cs new file mode 100644 index 0000000..b7a1fe3 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBurstJobsDemo.cs @@ -0,0 +1,63 @@ +#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR) +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.Jobs; +using UnityEngine.UI; + +namespace SingularityGroup.HotReload.Demo { + public class HotReloadBurstJobsDemo : MonoBehaviour { + public Transform[] cubes; + public Text informationText; + public Button openWindowButton; + public Button openScriptButton; + public TextAsset thisScript; + + TransformAccessArray cubeTransforms; + CubeJob job; + void Awake() { + cubeTransforms = new TransformAccessArray(cubes); + if(Application.isEditor) { + openWindowButton.onClick.AddListener(Demo.I.OpenHotReloadWindow); + openScriptButton.onClick.AddListener(() => Demo.I.OpenScriptFile(thisScript, 49, 17)); + } else { + openWindowButton.gameObject.SetActive(false); + openScriptButton.gameObject.SetActive(false); + } + informationText.gameObject.SetActive(true); + } + + void Update() { + job.deltaTime = Time.deltaTime; + job.time = Time.time; + var handle = job.Schedule(cubeTransforms); + handle.Complete(); + + if (Demo.I.IsServerRunning()) { + informationText.text = "Hot Reload is running"; + } else { + informationText.text = "Hot Reload is not running"; + } + } + + struct CubeJob : IJobParallelForTransform { + public float deltaTime; + public float time; + public void Execute(int index, TransformAccess transform) { + transform.localRotation *= Quaternion.Euler(50 * deltaTime, 0, 0); + + // Uncomment this code to scale the cubes + // var scale = Mathf.Abs(Mathf.Sin(time)); + // transform.localScale = new Vector3(scale, scale, scale); + + // Uncomment this code to make the cube move from left to right and back + // transform.position += (transform.localScale.x < 0.5 ? Vector3.left : Vector3.right) * deltaTime; + } + } + + void OnDestroy() { + cubeTransforms.Dispose(); + } + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBurstJobsDemo.cs.meta b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBurstJobsDemo.cs.meta new file mode 100644 index 0000000..c499d72 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBurstJobsDemo.cs.meta @@ -0,0 +1,18 @@ +fileFormatVersion: 2 +guid: e09948cf1f317d04fbaf410dbfe91656 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/HotReloadBurstJobsDemo.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/IDemo.cs b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/IDemo.cs new file mode 100644 index 0000000..ca2034a --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/IDemo.cs @@ -0,0 +1,29 @@ +#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR) +using UnityEngine; + +namespace SingularityGroup.HotReload.Demo { + public interface IDemo { + bool IsServerRunning(); + void OpenHotReloadWindow(); + void OpenScriptFile(TextAsset textAsset, int line, int column); + } + + public static class Demo { + public static IDemo I = new PlayerDemo(); + } + + public class PlayerDemo : IDemo { + public bool IsServerRunning() { + return ServerHealthCheck.I.IsServerHealthy; + } + + public void OpenHotReloadWindow() { + //no-op + } + + public void OpenScriptFile(TextAsset textAsset, int line, int column) { + //no-op + } + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/IDemo.cs.meta b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/IDemo.cs.meta new file mode 100644 index 0000000..0863bc2 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/IDemo.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 04dccdcced0245f1830021fdcad1d28a +timeCreated: 1677321944 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/Demo/Scripts/IDemo.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/HotReloadPrompts.prefab b/Packages/com.singularitygroup.hotreload/Runtime/HotReloadPrompts.prefab new file mode 100644 index 0000000..85d6761 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/HotReloadPrompts.prefab @@ -0,0 +1,2942 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1013787301382345451 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3597930498506735329} + - component: {fileID: 5263297665501092759} + - component: {fileID: 8191138318542799492} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3597930498506735329 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1013787301382345451} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8361365728969909008} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5263297665501092759 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1013787301382345451} + m_CullTransparentMesh: 0 +--- !u!114 &8191138318542799492 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1013787301382345451} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11320752, g: 0.11320752, b: 0.11320752, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 22 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Cancel +--- !u!1 &1057795414473985365 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8361365728969909008} + - component: {fileID: 9109116132926969505} + - component: {fileID: 6961214002816918688} + - component: {fileID: 5585168207715079851} + m_Layer: 5 + m_Name: ButtonMoreEffort + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8361365728969909008 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1057795414473985365} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3597930498506735329} + m_Father: {fileID: 6484505723585156786} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: -423.1, y: -64.9} + m_SizeDelta: {x: 141.6914, y: 45.0679} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &9109116132926969505 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1057795414473985365} + m_CullTransparentMesh: 0 +--- !u!114 &6961214002816918688 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1057795414473985365} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &5585168207715079851 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1057795414473985365} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 0.9622642, g: 0.9622642, b: 0.9622642, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 6961214002816918688} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &1335534115928082901 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5505278863775282652} + - component: {fileID: 882497356905571160} + - component: {fileID: 6369210938302316831} + m_Layer: 5 + m_Name: TextSummary + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5505278863775282652 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1335534115928082901} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6484505723585156786} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 30, y: -39.233} + m_SizeDelta: {x: -105.96521, y: 54.542114} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &882497356905571160 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1335534115928082901} + m_CullTransparentMesh: 0 +--- !u!114 &6369210938302316831 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1335534115928082901} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Editor and current build are on different commits +--- !u!1 &1390084864838268853 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1221019002237951643} + - component: {fileID: 8358362994993817161} + - component: {fileID: 1980611848569999305} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1221019002237951643 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1390084864838268853} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 7107734678944665722} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -35.811356, y: -12.790634} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &8358362994993817161 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1390084864838268853} + m_CullTransparentMesh: 0 +--- !u!114 &1980611848569999305 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1390084864838268853} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.103773594, g: 0.103773594, b: 0.103773594, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 21 + m_MaxSize: 28 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Continue +--- !u!1 &2338911661825597671 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4216036513099635638} + - component: {fileID: 594918778888372109} + - component: {fileID: 2127224386387722146} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4216036513099635638 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2338911661825597671} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4911193491485015256} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &594918778888372109 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2338911661825597671} + m_CullTransparentMesh: 0 +--- !u!114 &2127224386387722146 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2338911661825597671} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.103773594, g: 0.103773594, b: 0.103773594, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: More Info +--- !u!1 &2557231470263189725 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6280529082113425347} + m_Layer: 5 + m_Name: Information + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6280529082113425347 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2557231470263189725} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3344052376368028088} + - {fileID: 7593666350427564864} + m_Father: {fileID: 4967086678334773008} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 30, y: -13.59} + m_SizeDelta: {x: -106.39874, y: -142.43198} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &2582527480827036942 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6528462525361087078} + - component: {fileID: 5585154964765544786} + - component: {fileID: 5675038352245823804} + m_Layer: 5 + m_Name: TextSuggestion + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6528462525361087078 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2582527480827036942} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6484505723585156786} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 30.217, y: 6.0687} + m_SizeDelta: {x: -106.3987, y: -145.1455} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5585154964765544786 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2582527480827036942} + m_CullTransparentMesh: 0 +--- !u!114 &5675038352245823804 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2582527480827036942} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 22 + m_FontStyle: 0 + m_BestFit: 1 + m_MinSize: 21 + m_MaxSize: 28 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1.17 + m_Text: 'This can cause errors when the build was made on an old commit. + +' +--- !u!1 &2945586050721362106 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7593666350427564864} + - component: {fileID: 4488835628498483499} + - component: {fileID: 6495855994796430067} + m_Layer: 5 + m_Name: TextForDebugging + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &7593666350427564864 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2945586050721362106} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6280529082113425347} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4488835628498483499 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2945586050721362106} + m_CullTransparentMesh: 0 +--- !u!114 &6495855994796430067 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2945586050721362106} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 29 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Make sure you're on the same LAN/WiFi network +--- !u!1 &3342967049223911331 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3344052376368028088} + - component: {fileID: 4147603110869920048} + - component: {fileID: 116564040413298098} + m_Layer: 5 + m_Name: TextSuggestion + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3344052376368028088 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3342967049223911331} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6280529082113425347} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 5.6499987} + m_SizeDelta: {x: 0, y: 11.300002} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4147603110869920048 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3342967049223911331} + m_CullTransparentMesh: 0 +--- !u!114 &116564040413298098 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3342967049223911331} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 23 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 275 + m_Alignment: 0 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Make sure you're on the same WiFi network and Hot Reload is running +--- !u!1 &3751191164850618597 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3751191164850618611} + - component: {fileID: 3751191164850618616} + - component: {fileID: 3751191164850618560} + m_Layer: 5 + m_Name: Logo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3751191164850618611 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3751191164850618597} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4967086677765351015} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 46.1, y: -43.161} + m_SizeDelta: {x: 54.687653, y: 54.687653} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3751191164850618616 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3751191164850618597} + m_CullTransparentMesh: 0 +--- !u!114 &3751191164850618560 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3751191164850618597} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 90cf8e542151548c6aa3cba26467e144, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &3751191164850618600 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3751191164850618614} + - component: {fileID: 3751191164850618595} + - component: {fileID: 3751191164850618571} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3751191164850618614 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3751191164850618600} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4967086678661718217} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3751191164850618595 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3751191164850618600} + m_CullTransparentMesh: 0 +--- !u!114 &3751191164850618571 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3751191164850618600} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 22 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Hide +--- !u!1 &3751191164850618601 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3751191164850618615} + - component: {fileID: 3751191164850618620} + - component: {fileID: 3751191164850618564} + m_Layer: 5 + m_Name: Prompts + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3751191164850618615 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3751191164850618601} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4967086677765351015} + - {fileID: 4967086678334773008} + - {fileID: 6484505723585156786} + m_Father: {fileID: 4967086677379066171} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -0.00024414062, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3751191164850618620 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3751191164850618601} + m_CullTransparentMesh: 0 +--- !u!114 &3751191164850618564 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3751191164850618601} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d92cdbfacafd433ca77184c22a384a6d, type: 3} + m_Name: + m_EditorClassIdentifier: + retryPrompt: {fileID: 4967086678334773011} + connectedPrompt: {fileID: 4967086677765351014} + questionPrompt: {fileID: 6563246299181214611} + fallbackEventSystem: {fileID: 8054601594198067103} +--- !u!1 &3751191164850618602 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3751191164850618608} + - component: {fileID: 3751191164850618621} + - component: {fileID: 3751191164850618565} + m_Layer: 5 + m_Name: Summary + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3751191164850618608 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3751191164850618602} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4967086677765351015} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 42.160004, y: -43.00023} + m_SizeDelta: {x: -109.740295, y: 54.366207} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3751191164850618621 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3751191164850618602} + m_CullTransparentMesh: 0 +--- !u!114 &3751191164850618565 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3751191164850618602} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 32 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Connecting... +--- !u!1 &4116732687138738479 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8252921096633957241} + - component: {fileID: 4733576179552229060} + - component: {fileID: 2012827545077904779} + - component: {fileID: 3158748587153539730} + m_Layer: 5 + m_Name: ButtonMoreInfo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8252921096633957241 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4116732687138738479} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 5758986847798381115} + m_Father: {fileID: 6484505723585156786} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: -99.72, y: -64.9} + m_SizeDelta: {x: 141.6914, y: 45.0679} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4733576179552229060 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4116732687138738479} + m_CullTransparentMesh: 0 +--- !u!114 &2012827545077904779 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4116732687138738479} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &3158748587153539730 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4116732687138738479} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 0.9622642, g: 0.9622642, b: 0.9622642, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 2012827545077904779} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &4279783835045373039 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8141605075363586685} + - component: {fileID: 1129507980982577600} + - component: {fileID: 3409363427364332004} + m_Layer: 5 + m_Name: Text (Legacy) + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8141605075363586685 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4279783835045373039} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8150310283045374484} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1129507980982577600 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4279783835045373039} + m_CullTransparentMesh: 1 +--- !u!114 &3409363427364332004 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4279783835045373039} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 15 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!1 &4471505415598507920 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6235104375140882572} + - component: {fileID: 4057252686040207820} + - component: {fileID: 3554294960250654513} + m_Layer: 5 + m_Name: TextIP + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6235104375140882572 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4471505415598507920} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4967086678334773008} + m_RootOrder: 6 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -248.5, y: -66.756} + m_SizeDelta: {x: 65, y: 61.4766} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4057252686040207820 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4471505415598507920} + m_CullTransparentMesh: 0 +--- !u!114 &3554294960250654513 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4471505415598507920} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'IP:' +--- !u!1 &4803576491919660416 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8857299115396528434} + - component: {fileID: 2155891017074897053} + - component: {fileID: 462332990179851889} + m_Layer: 5 + m_Name: Suggestion + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8857299115396528434 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4803576491919660416} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4967086677765351015} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 42.185, y: -30.900002} + m_SizeDelta: {x: -109.78961, y: -97.906265} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2155891017074897053 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4803576491919660416} + m_CullTransparentMesh: 0 +--- !u!114 &462332990179851889 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4803576491919660416} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Edit code to see changes on device... +--- !u!1 &4967086676766916185 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4967086676766916190} + - component: {fileID: 4967086676766916188} + - component: {fileID: 4967086676766916191} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4967086676766916190 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086676766916185} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4967086677112779038} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4967086676766916188 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086676766916185} + m_CullTransparentMesh: 0 +--- !u!114 &4967086676766916191 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086676766916185} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.103773594, g: 0.103773594, b: 0.103773594, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: 'Reconnect + +' +--- !u!1 &4967086676871555599 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4967086676871555596} + - component: {fileID: 4967086676871555698} + - component: {fileID: 4967086676871555597} + m_Layer: 5 + m_Name: ImageLogo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4967086676871555596 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086676871555599} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4967086678334773008} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 42.06, y: -39.16} + m_SizeDelta: {x: 54.687653, y: 54.687653} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4967086676871555698 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086676871555599} + m_CullTransparentMesh: 0 +--- !u!114 &4967086676871555597 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086676871555599} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 90cf8e542151548c6aa3cba26467e144, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &4967086677112779033 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4967086677112779038} + - component: {fileID: 4967086677112779037} + - component: {fileID: 4967086677112779036} + - component: {fileID: 4967086677112779039} + m_Layer: 5 + m_Name: ButtonRetry + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4967086677112779038 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677112779033} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4967086676766916190} + m_Father: {fileID: 4967086678334773008} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 45.1, y: 34.638} + m_SizeDelta: {x: -465.6686, y: 45.06787} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4967086677112779037 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677112779033} + m_CullTransparentMesh: 0 +--- !u!114 &4967086677112779036 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677112779033} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &4967086677112779039 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677112779033} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 4967086677112779036} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &4967086677379066170 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4967086677379066171} + - component: {fileID: 3499838185132214990} + - component: {fileID: 3499838185132214991} + - component: {fileID: 3499838185132214988} + m_Layer: 5 + m_Name: HotReloadPrompts + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4967086677379066171 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677379066170} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_Children: + - {fileID: 3751191164850618615} + - {fileID: 8564535462043123833} + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!223 &3499838185132214990 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677379066170} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 0 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!114 &3499838185132214991 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677379066170} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 1280, y: 720} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0.5 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 +--- !u!114 &3499838185132214988 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677379066170} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!1 &4967086677533727706 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4967086677533727707} + - component: {fileID: 4967086677533727705} + - component: {fileID: 4967086677533727704} + m_Layer: 5 + m_Name: TextSummary + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4967086677533727707 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677533727706} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4967086678334773008} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 30, y: -42.7} + m_SizeDelta: {x: -105.96521, y: 61.476562} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4967086677533727705 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677533727706} + m_CullTransparentMesh: 0 +--- !u!114 &4967086677533727704 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677533727706} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 24 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Auto-pair ran into an issue +--- !u!1 &4967086677765351014 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4967086677765351015} + - component: {fileID: 4967086677765351013} + - component: {fileID: 4967086677765351012} + - component: {fileID: 235867154863528169} + - component: {fileID: 7034300310699233304} + m_Layer: 5 + m_Name: ConnectionDialog + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &4967086677765351015 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677765351014} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 3751191164850618611} + - {fileID: 3751191164850618608} + - {fileID: 8857299115396528434} + m_Father: {fileID: 3751191164850618615} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 8, y: 160.00003} + m_SizeDelta: {x: 603.4334, y: 152.50421} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4967086677765351013 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677765351014} + m_CullTransparentMesh: 0 +--- !u!114 &4967086677765351012 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677765351014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.039215688, g: 0.039215688, b: 0.039215688, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &235867154863528169 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677765351014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 4967086677765351012} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &7034300310699233304 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086677765351014} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bb1cc47c374f478e861f2c3dade07e1a, type: 3} + m_Name: + m_EditorClassIdentifier: + buttonHide: {fileID: 235867154863528169} + textSummary: {fileID: 3751191164850618565} + textSuggestion: {fileID: 462332990179851889} + pendingPatches: 0 + patchesApplied: 0 +--- !u!1 &4967086678334773011 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4967086678334773008} + - component: {fileID: 4967086678334773014} + - component: {fileID: 4967086678334773009} + - component: {fileID: 3727107046497244783} + m_Layer: 5 + m_Name: RetryDialog + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &4967086678334773008 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086678334773011} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4967086676871555596} + - {fileID: 4967086677533727707} + - {fileID: 6280529082113425347} + - {fileID: 4967086678661718217} + - {fileID: 4967086677112779038} + - {fileID: 4911193491485015256} + - {fileID: 6235104375140882572} + - {fileID: 8150310283045374484} + m_Father: {fileID: 3751191164850618615} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 8, y: 160} + m_SizeDelta: {x: 603.4334, y: 203.0878} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4967086678334773014 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086678334773011} + m_CullTransparentMesh: 0 +--- !u!114 &4967086678334773009 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086678334773011} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.039215688, g: 0.039215688, b: 0.039215688, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &3727107046497244783 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086678334773011} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7a69f8e8e50a405a84ec22ac7c2f4bdc, type: 3} + m_Name: + m_EditorClassIdentifier: + buttonHide: {fileID: 4967086678661718222} + buttonRetryAutoPair: {fileID: 4967086677112779039} + buttonTroubleshoot: {fileID: 6672458751395352801} + textSummary: {fileID: 4967086677533727704} + textSuggestion: {fileID: 116564040413298098} + ipInput: {fileID: 7429817927027686359} + textForDebugging: {fileID: 6495855994796430067} + enableDebugging: 0 +--- !u!1 &4967086678661718216 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4967086678661718217} + - component: {fileID: 4967086678661718220} + - component: {fileID: 4967086678661718223} + - component: {fileID: 4967086678661718222} + m_Layer: 5 + m_Name: ButtonHide + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4967086678661718217 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086678661718216} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0.8, y: 0.8, z: 0.5} + m_Children: + - {fileID: 3751191164850618614} + m_Father: {fileID: 4967086678334773008} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -45.7, y: -26} + m_SizeDelta: {x: 95.76041, y: 46.033897} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4967086678661718220 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086678661718216} + m_CullTransparentMesh: 0 +--- !u!114 &4967086678661718223 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086678661718216} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.745283, g: 0.745283, b: 0.745283, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &4967086678661718222 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4967086678661718216} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 4967086678661718223} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &5487644203504871490 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4911193491485015256} + - component: {fileID: 3977274743991914834} + - component: {fileID: 2696062604266108078} + - component: {fileID: 6672458751395352801} + m_Layer: 5 + m_Name: ButtonTroubleshoot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4911193491485015256 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5487644203504871490} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4216036513099635638} + m_Father: {fileID: 4967086678334773008} + m_RootOrder: 5 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 200.54193, y: 34.638} + m_SizeDelta: {x: -447.021, y: 45.0679} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &3977274743991914834 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5487644203504871490} + m_CullTransparentMesh: 0 +--- !u!114 &2696062604266108078 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5487644203504871490} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &6672458751395352801 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5487644203504871490} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 2696062604266108078} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &6563246299181214611 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6484505723585156786} + - component: {fileID: 1661502203157216626} + - component: {fileID: 5891534192019788270} + - component: {fileID: 2310985356733911194} + m_Layer: 5 + m_Name: ReusedQuestionDialog + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &6484505723585156786 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6563246299181214611} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 4288889589057652595} + - {fileID: 5505278863775282652} + - {fileID: 6528462525361087078} + - {fileID: 8361365728969909008} + - {fileID: 7107734678944665722} + - {fileID: 8252921096633957241} + m_Father: {fileID: 3751191164850618615} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 8, y: 160} + m_SizeDelta: {x: 603.4334, y: 203.0878} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1661502203157216626 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6563246299181214611} + m_CullTransparentMesh: 0 +--- !u!114 &5891534192019788270 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6563246299181214611} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.039215688, g: 0.039215688, b: 0.039215688, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &2310985356733911194 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6563246299181214611} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: ef31038a0ed84685b779466bf22d53a9, type: 3} + m_Name: + m_EditorClassIdentifier: + textSummary: {fileID: 6369210938302316831} + textSuggestion: {fileID: 5675038352245823804} + buttonContinue: {fileID: 5265040605375167127} + buttonCancel: {fileID: 5585168207715079851} + buttonMoreInfo: {fileID: 3158748587153539730} +--- !u!1 &6697092821899816264 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5758986847798381115} + - component: {fileID: 5463465806778337131} + - component: {fileID: 8072588694671228428} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &5758986847798381115 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6697092821899816264} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8252921096633957241} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5463465806778337131 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6697092821899816264} + m_CullTransparentMesh: 0 +--- !u!114 &8072588694671228428 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6697092821899816264} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.11320752, g: 0.11320752, b: 0.11320752, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 20 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 2 + m_MaxSize: 40 + m_Alignment: 4 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: More Info +--- !u!1 &7506156204490477245 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7107734678944665722} + - component: {fileID: 677914236431176414} + - component: {fileID: 9047087872360317623} + - component: {fileID: 5265040605375167127} + m_Layer: 5 + m_Name: ButtonContinue + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7107734678944665722 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7506156204490477245} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1221019002237951643} + m_Father: {fileID: 6484505723585156786} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: -261.41, y: -64.89999} + m_SizeDelta: {x: 141.6914, y: 45.0679} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &677914236431176414 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7506156204490477245} + m_CullTransparentMesh: 0 +--- !u!114 &9047087872360317623 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7506156204490477245} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &5265040605375167127 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7506156204490477245} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Highlighted + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 9047087872360317623} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &7769261099572506218 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8150310283045374484} + - component: {fileID: 5348576082586449480} + - component: {fileID: 6647422777320841469} + - component: {fileID: 7429817927027686359} + m_Layer: 5 + m_Name: IpInput + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8150310283045374484 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7769261099572506218} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 8207283617714762719} + - {fileID: 8141605075363586685} + m_Father: {fileID: 4967086678334773008} + m_RootOrder: 7 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -125.62808, y: -66.75602} + m_SizeDelta: {x: 180.7402, y: 41.1} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5348576082586449480 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7769261099572506218} + m_CullTransparentMesh: 1 +--- !u!114 &6647422777320841469 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7769261099572506218} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &7429817927027686359 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7769261099572506218} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 6647422777320841469} + m_TextComponent: {fileID: 3409363427364332004} + m_Placeholder: {fileID: 8746367729340876900} + m_ContentType: 0 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 0 + m_LineType: 0 + m_HideMobileInput: 0 + m_CharacterValidation: 0 + m_CharacterLimit: 21 + m_OnEndEdit: + m_PersistentCalls: + m_Calls: [] + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_CaretColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_CustomCaretColor: 0 + m_SelectionColor: {r: 0.65882355, g: 0.80784315, b: 1, a: 0.7529412} + m_Text: + m_CaretBlinkRate: 0.85 + m_CaretWidth: 1 + m_ReadOnly: 0 +--- !u!1 &8054601594198067103 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8564535462043123833} + - component: {fileID: 7768483217031697610} + - component: {fileID: 1047141224289122821} + m_Layer: 5 + m_Name: FallbackInputProvider + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &8564535462043123833 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8054601594198067103} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 4967086677379066171} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &7768483217031697610 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8054601594198067103} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!114 &1047141224289122821 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8054601594198067103} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!1 &8201367103125407330 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8207283617714762719} + - component: {fileID: 2716239957931866459} + - component: {fileID: 8746367729340876900} + m_Layer: 5 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8207283617714762719 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8201367103125407330} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 8150310283045374484} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2716239957931866459 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8201367103125407330} + m_CullTransparentMesh: 1 +--- !u!114 &8746367729340876900 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8201367103125407330} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 2 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: Enter text... +--- !u!1 &9029651609518542122 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4288889589057652595} + - component: {fileID: 1714143093284739457} + - component: {fileID: 3128017247211677084} + m_Layer: 5 + m_Name: ImageLogo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4288889589057652595 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9029651609518542122} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 6484505723585156786} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 42.06, y: -39.16} + m_SizeDelta: {x: 54.687653, y: 54.687653} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1714143093284739457 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9029651609518542122} + m_CullTransparentMesh: 0 +--- !u!114 &3128017247211677084 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9029651609518542122} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 90cf8e542151548c6aa3cba26467e144, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/HotReloadPrompts.prefab.meta b/Packages/com.singularitygroup.hotreload/Runtime/HotReloadPrompts.prefab.meta new file mode 100644 index 0000000..0ce76eb --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/HotReloadPrompts.prefab.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: 0dc8d7047b14c44b7970c5d35665dbe1 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/HotReloadPrompts.prefab + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/HotReloadSettingsObject.cs b/Packages/com.singularitygroup.hotreload/Runtime/HotReloadSettingsObject.cs new file mode 100644 index 0000000..4a6ac9f --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/HotReloadSettingsObject.cs @@ -0,0 +1,140 @@ +#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR) +using System; +using System.Linq; +using JetBrains.Annotations; +using System.IO; +using UnityEngine; + +#if UNITY_EDITOR +using UnityEditor; +#endif + +namespace SingularityGroup.HotReload { + /// + /// HotReload runtime settings. These can be changed while the app is running. + /// + /// + /// ScriptableObject that may be included in Resources/ folder. + /// See also Editor/PrebuildIncludeResources.cs + /// + [Serializable] + class HotReloadSettingsObject : ScriptableObject { + #region singleton + private static HotReloadSettingsObject _I; + public static HotReloadSettingsObject I { + get { + if (_I == null) { + _I = LoadSettingsOrDefault(); + } + return _I; + } + } + + /// Create settings inside Assets/ because user cannot edit files that are included inside a Unity package + /// + /// You can change this in a build script if you want it created somewhere else. + /// + public static string editorAssetPath = "Assets/HotReload/Resources/HotReloadSettingsObject.asset"; + + private static string resourceName => Path.GetFileNameWithoutExtension(editorAssetPath); + + public static bool TryLoadSettings(out HotReloadSettingsObject settings) { + try { + settings = LoadSettings(); + return settings != null; + } catch(FileNotFoundException) { + settings = null; + return false; + } + } + + [NotNull] + private static HotReloadSettingsObject LoadSettingsOrDefault() { + var settings = LoadSettings(); + if (settings == null) { + // load defaults + settings = CreateInstance(); + } + return settings; + } + + [CanBeNull] + private static HotReloadSettingsObject LoadSettings() { + HotReloadSettingsObject settings; + if (Application.isEditor) { + #if UNITY_EDITOR + settings = AssetDatabase.LoadAssetAtPath(editorAssetPath); + #else + settings = null; + #endif + } else { + // load from Resources (assumes that build includes the resource) + settings = Resources.Load(resourceName); + } + return settings; + } + #endregion + + #region settings + + /// Set default values. + /// + /// This is called by the Unity editor when the ScriptableObject is first created. + /// This function is only called in editor mode. + /// + private void Reset() { + EnsurePrefabSetCorrectly(); + } + + /// + /// Path to the prefab asset file. + /// + const string prefabAssetPath = "Packages/com.singularitygroup.hotreload/Runtime/HotReloadPrompts.prefab"; + + // Call this during build, just to be sure the field is correct. (I had some issues with it while editing the prefab) + public void EnsurePrefabSetCorrectly() { +#if UNITY_EDITOR + var prefab = AssetDatabase.LoadAssetAtPath(prefabAssetPath); + if (prefab == null) { + // when you use HotReload as a unitypackage, prefab is somewhere inside your assets folder + var guids = AssetDatabase.FindAssets("HotReloadPrompts t:prefab", new string[]{"Assets"}); + var paths = guids.Select(guid => AssetDatabase.GUIDToAssetPath(guid)); + var promptsPrefabPath = paths.FirstOrDefault(assetpath => Path.GetFileName(assetpath) == "HotReloadPrompts.prefab"); + if (promptsPrefabPath != null) { + prefab = AssetDatabase.LoadAssetAtPath(promptsPrefabPath); + } + } + if (prefab == null) { + throw new Exception("Failed to find PromptsPrefab (are you using Hot Reload as a package?"); + } + PromptsPrefab = prefab; +#endif + } + + public void EnsurePrefabNotInBuild() { +#if UNITY_EDITOR + PromptsPrefab = null; +#endif + } + + + // put the stored settings here + + [Header("Build Settings")] + [Tooltip("Should the Hot Reload runtime be included in development builds? HotReload is never included in release builds.")] + public bool IncludeInBuild = true; + + [Header("Player Settings")] + public bool AllowAndroidAppToMakeHttpRequests = false; + + #region hidden + + /// Reference to the Prefab, for loading it at runtime + [HideInInspector] + public GameObject PromptsPrefab; + #endregion + + #endregion settings + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Runtime/HotReloadSettingsObject.cs.meta b/Packages/com.singularitygroup.hotreload/Runtime/HotReloadSettingsObject.cs.meta new file mode 100644 index 0000000..fcce7f6 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/HotReloadSettingsObject.cs.meta @@ -0,0 +1,20 @@ +fileFormatVersion: 2 +guid: 324c6fd3c103e0f418eb4b98c46bf63c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - PromptsPrefab: {fileID: 4967086677379066170, guid: 0dc8d7047b14c44b7970c5d35665dbe1, + type: 3} + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/HotReloadSettingsObject.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/HttpClientUtils.cs b/Packages/com.singularitygroup.hotreload/Runtime/HttpClientUtils.cs new file mode 100644 index 0000000..04cf753 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/HttpClientUtils.cs @@ -0,0 +1,19 @@ +#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR) +using System.Net.Http; + +namespace SingularityGroup.HotReload { + + public class HttpClientUtils { + public static HttpClient CreateHttpClient() { + var handler = new HttpClientHandler { + // Without this flag HttpClients don't work for PCs with double-byte characters in the name + UseCookies = false + }; + + return new HttpClient(handler); + } + } + +} + +#endif \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Runtime/HttpClientUtils.cs.meta b/Packages/com.singularitygroup.hotreload/Runtime/HttpClientUtils.cs.meta new file mode 100644 index 0000000..fb68264 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/HttpClientUtils.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b40f5d8cac104565b0aaa1d1e294ff8f +timeCreated: 1700069330 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/HttpClientUtils.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/IServerHealthCheck.cs b/Packages/com.singularitygroup.hotreload/Runtime/IServerHealthCheck.cs new file mode 100644 index 0000000..082f412 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/IServerHealthCheck.cs @@ -0,0 +1,11 @@ +#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR) +namespace SingularityGroup.HotReload { + public interface IServerHealthCheck { + bool IsServerHealthy { get; } + } + + internal interface IServerHealthCheckInternal : IServerHealthCheck { + void CheckHealth(); + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Runtime/IServerHealthCheck.cs.meta b/Packages/com.singularitygroup.hotreload/Runtime/IServerHealthCheck.cs.meta new file mode 100644 index 0000000..72e06c4 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/IServerHealthCheck.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: bcb0ff221290427182643b815685ea97 +timeCreated: 1675232020 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/IServerHealthCheck.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/InstallQRDialog.cs b/Packages/com.singularitygroup.hotreload/Runtime/InstallQRDialog.cs new file mode 100644 index 0000000..50eda6b --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/InstallQRDialog.cs @@ -0,0 +1,27 @@ +#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR) +using UnityEngine; +using UnityEngine.UI; + +namespace SingularityGroup.HotReload { + class InstallQRDialog : MonoBehaviour { + public Button buttonGo; + public Button buttonHide; + + private void Start() { + buttonHide.onClick.AddListener(Hide); + + // launch camera app that can scan QR-Code https://singularitygroup.atlassian.net/browse/SG-29495 + buttonGo.onClick.AddListener(() => { + Hide(); + var recommendedQrCodeApp = "com.scanteam.qrcodereader"; + Application.OpenURL($"https://play.google.com/store/apps/details?id={recommendedQrCodeApp}"); + }); + } + + /// hide this dialog + void Hide() { + gameObject.SetActive(false); // this should disable the Update loop? + } + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Runtime/InstallQRDialog.cs.meta b/Packages/com.singularitygroup.hotreload/Runtime/InstallQRDialog.cs.meta new file mode 100644 index 0000000..1a0795c --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/InstallQRDialog.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 03d3be3b485a4450b112f9ea3af4fb66 +timeCreated: 1674988075 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/InstallQRDialog.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/IpHelper.cs b/Packages/com.singularitygroup.hotreload/Runtime/IpHelper.cs new file mode 100644 index 0000000..2802b46 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/IpHelper.cs @@ -0,0 +1,64 @@ +#if ENABLE_MONO && (DEVELOPMENT_BUILD || UNITY_EDITOR) +#if UNITY_ANDROID && !UNITY_EDITOR +#define MOBILE_ANDROID +#endif +#if UNITY_IOS && !UNITY_EDITOR +#define MOBILE_IOS +#endif +#if MOBILE_ANDROID || MOBILE_IOS +#define MOBILE +#endif + +using System; +using System.Net.NetworkInformation; +using System.Net.Sockets; + +namespace SingularityGroup.HotReload { + static class IpHelper { + // get my local ip address + + static DateTime cachedAt; + static string ipCached; + public static string GetIpAddressCached() { + if (string.IsNullOrEmpty(ipCached) || DateTime.UtcNow - cachedAt > TimeSpan.FromSeconds(5)) { + ipCached = GetIpAddress(); + cachedAt = DateTime.UtcNow; + } + return ipCached; + } + + public static string GetIpAddress() { + var ip = GetLocalIPv4(NetworkInterfaceType.Wireless80211); + + if (string.IsNullOrEmpty(ip)) { + return GetLocalIPv4(NetworkInterfaceType.Ethernet); + } + return ip; + } + + private static string GetLocalIPv4(NetworkInterfaceType _type) { + string output = ""; + foreach (NetworkInterface item in NetworkInterface.GetAllNetworkInterfaces()) { + if (item.NetworkInterfaceType == _type && item.OperationalStatus == OperationalStatus.Up) { + foreach (UnicastIPAddressInformation ip in item.GetIPProperties().UnicastAddresses) { + if (ip.Address.AddressFamily == AddressFamily.InterNetwork && IsLocalIp(ip.Address.MapToIPv4().GetAddressBytes())) { + output = ip.Address.ToString(); + } + } + } + } + return output; + } + + // https://datatracker.ietf.org/doc/html/rfc1918#section-3 + static bool IsLocalIp(byte[] ipAddress) { + return ipAddress[0] == 10 + || ipAddress[0] == 172 + && ipAddress[1] >= 16 + && ipAddress[1] <= 31 + || ipAddress[0] == 192 + && ipAddress[1] == 168; + } + } +} +#endif diff --git a/Packages/com.singularitygroup.hotreload/Runtime/IpHelper.cs.meta b/Packages/com.singularitygroup.hotreload/Runtime/IpHelper.cs.meta new file mode 100644 index 0000000..dde88f9 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/IpHelper.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 4d3a24a25ced4eae8b7e0b9b5a0d5c9d +timeCreated: 1674145172 +AssetOrigin: + serializedVersion: 1 + productId: 254358 + packageName: Hot Reload | Edit Code Without Compiling + packageVersion: 1.13.7 + assetPath: Packages/com.singularitygroup.hotreload/Runtime/IpHelper.cs + uploadId: 752503 diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Libs.meta b/Packages/com.singularitygroup.hotreload/Runtime/Libs.meta new file mode 100644 index 0000000..192e762 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Libs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 053fc5684eb47f54e8c877cb1ade54d6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly.meta b/Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly.meta new file mode 100644 index 0000000..d961c60 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 520640393141aab41bd6d6b1f43e7037 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly/SingularityGroup.HotReload.RuntimeDependencies.dll b/Packages/com.singularitygroup.hotreload/Runtime/Libs/EditorOnly/SingularityGroup.HotReload.RuntimeDependencies.dll new file mode 100644 index 0000000000000000000000000000000000000000..6f883286c465d302a18da240584d93273fb88977 GIT binary patch literal 3046912 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 wshBe3(t-b*lc#6 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%0AKV0;sM|WA0Qq8zT^YM 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%0A(Ppa}jp8}TE zJO%MepQpmdo@2zsZW5c-WSG+DX^gd+bXup=-{k**>KG2HW0+E1m}b@cwJb?b%4?k= z`T4){a#*|&jcW07CL_RC2}1dBYb(FS;Dy_}OfSTWQ~CR2ZB|(XcqCAW^(5vkN>+#o zoBU!-Av9g7e%x}2Obt@I6;K|Fn5ZhH3e&GF|yABHhIc11bxqsxb-5K^Rbh$V42`*#mFJ>83mPAkJ?uW~W zwmd8aRaaV8@%jfr(2EN@Me64XtsUOU0HApN{Sq#9?Qq|K%C@s|owpJ(oDYx11!lez zQp%3ckINygYSFHL*{?S)`Wbf>tK?mIOgcQC!IJ(8VxfGX29?s|1Gd~Rtv4I+<+x0F zzFoKe8Z>}eBae7Ukx=Xdtg4OEcX4@WDC=}0Zyqj3@$u%p7ODN$9g;h|v(U^jXD4wM zIfIrhn!>mi|MU=ZC?HP zkL{sn8bV*%WTDQ+Cs7(~J9e_35R|c6{pBd5@k!u%i{R6at%X~}cro>4sR+Z9Bex?- zCMg&0!Un*49J!wS(*N#SZW$KJ_?NO37#&NvA|l&0mXP*AbiDen&a zw>=i6cps^K9Q_r7VS9f7SKzqkIiY{RO?TjyRYY-Xdq)wgpGU!h)$9aU9F8LP&q$n8 zyr;bXW0EiU>3Yj2r8Uu`NHl;`0den(h#W{Hyb}Rmal9AC%`5T=xly5p=PjyGcX(ey zl5#H}6r(TfAYK3_Z=|KQgWk7mFs&T~%QC3hlB)I44ss;T>QgXH?HY8ZOtxP7QPy53 z#m@e$_M;W6#%{aU@6&jUdc{mfpC%@WAslF391pug55oGr%LM4%FQWnI3^KbBY%oOo z^ec#pb`w}G?}SpGS_89mF)$3bpNd&(-tr7PiL;v5fcV=A>l^7FRl;Hk zVN4u{8CM@?5^Wh?hf;cB*E!zT@IRNTj#}=kP;Rf2ZhV~~w)AYu`vyKz-Z$~TqxHD4 z(o6|>tcnFn`(-~qkBdAq;N;!he;wX6DfH2LEQyNk^%`V;H99dBV<`F z;JBN#R$lp{wYr24ILP5hj%aNoYu*ppC+U3~ZL(#^B)#vzuk&m?Mx)B>aE@A=kxAm+ zJ1nz=-l(CC{-~ji{?hp7k7<0@k1tPH-ov1>v7KZX!XKdDWFKfnumcM_3yOYrtoL2Q zW!1mt6I$1Vd_p9G_wPU>daG44&P-2S$| zqgk@Ln~`>VAyK+HjND?T91O~pKa>l^by(x5WH_vC9rd^Lpwh9=4(?7~OA7cA`O=T^ zZ#%~#LSM(wCowu3PvPHo4%x`_SsbFcs*~IRS7-Y>%ol1X2N^b6IlipEc#DI|>PxhU zfw2Sarle|eEaL{4^|p*jOUa8(B0sfbJQFh$xCuFkxmf9Dz!hO8nQfalqvXMYXlo)R;?xQT?>N%8y5@#FG0lpD&5HMT3zmiD(*( zi02Ti`BDUkjCvavd9)yT2w1A(A&_~z8&AO^WM7Ctu)hu~uR909$k_c55b4f?Y@I1zY%Uo^ zd6WiW=D)}CaCr!@0K=%M%UdAjjn)r&%8V)~Jki3)(1MafE&@Xz#bd9>d_E-Oi@K$7 zLZ6-7i)O1$2W4b{nd6(B4oS8G(%`U{J^N}wKLlS5-kGXT8T;fZDXB`(9sZ%bVuDAu zAf{#XJ>(!US9~<~wd;@i?Nm5AsakVH89)x#9iXYnvno(Obb*YWWKw}r#ax_7;g@!m z_KABZu&=i*B?U**Knk!Y?$AG zC2r}`hIUdPG@BurnFqCT$&w{pKZ)3_D6`1^33PGWnxG)Fdbo=fM5FsGsB^f}F^5Y=nbxT|H#2;gQMGg`)91hgh5>WXzXgL^@Zov?@MoRDF`h-x z8MX`eIca6eV*_y~mM9+6+7zkt1DN6la8;Ix5V*pKL>X%Vate_Q6Jg3Mg_RT$CbP6QbfosWw8#?v0@`%6=*c-3 zQjx&BIBlbMw^54d-EsZq0D!2>#S1)i3rX)BP|!|nm`4`!u-!Tng6StQcpG;EFO6U0 z-*!@ind56He^wi<#5b=-5utWEZQ-!x=Q;ZEP<6unKc5fSvDYH+Qiw))r5dz_f{X4Q zh^^$3^()zB@`8|%zMubx>DHKa@GRf$M$#6-JH1#^X3(+I%)pptQ0MxBA z6Q>8tM>$Rsd2H9z2663-4Nc&e6q)W9>0*zjek-a_h9dLfMwBrsV}bN2ItsLqhT(-3 z6HtZ8Y360)Rh(-OL%Xa~STQeIbd0fG5^E|kwiENZT&i&ox(2m87S^J8`ZDU7jd}*< zl-hn!cuc$vK}wkvk^0i3YhH~IN=fIHUmh7BSYG>5(h>jkflmoa%{b`O)Czt1&{Umx zG;y$KhUx*&(U#qN0b6;o4vg{~5i+j}3QU6G?m`070;zKK8Cd4p^|02uEqAiiA7nOJ z-|;!JuMoEd?tze+Lp|2m5x6`Nag!f}0*5zZ7RP=Jo8d@cr3Xi0=U_;=-;{oeBuC7k zhC-~{#z91}PCN*BxgQ{&)!4VC$8ukWPQ=}4(N7zjrja_@BLO{Y#=hmZ3Bb+mIqOfb zoqAG!&^>IH59eNz#Usf+yXVp($*hFdO*%=&E&vJ4>EIF2t3bOh3v4uz7)4*<(yU~4 z!g9Zb&#F6Ud&@B9>ch_fU~Y*f>mOKwvGjF#MHC!#*MJ>v!HCi;Y;^%iTY^N4uc*(J zF(6`=>~+e{~^qt~lntYCXTe$5rcKr`yOE7o#oY^%&xP72uu@~8nlqL3`t``=y%WK=VgG$}| zFwA(+;kR%v%9Pg{>1}B!0aJR@w1;9X;oje#Au7lv3l}ZR)<23?n4QU_UPeq=|6hP* z9$}H4>*pxzD<0;I8=i6t&y;1$X73j}*=0qh@EVZe?*LkL!mgk8FN5o-4$iLM;s;NS zUZ-%;%EP6hkX4;a+y~guC{cCFc=^<}gMpF88vHXtxmhXHYtK#r!Kw3Zhb2X^SSS>V zjo+j6?d*ZE4~ODfeDV}@DPEwD%t>SQ`%#!86gcDDu0d0Hnc~FzAonL4WEFdZ;_-;UMS)Q#=k)Ji@?-S;5Ic;Gp+shCas7 zWBpL?(I9&O-Cr2=V0*H^24Uy>jd;w@xj63iaHsvEpwP#IsDwsctx?_+h~VRekx#8D zf~u>DD)cGkz7pK|0Jr%WAlv&J3S2U_zeZp-#wXv&Wiszcenbj> zB@0F*UGFKAQa+yM2MXbb?foMf_0P7bXZRH<@)}blUGHBepL{$U{rGqEV>drW>W_iS zXmDnZ*u07*VfqvoK+^U8WAe!dUiLJ5;Z}?m`3ry-tNCiATfH5hCQA=e;oRCb=+@#b zMwZWqdO`}Y5arqU*NEevL`Gv02+TnE(0y;;h*Axkp>SE zlSWL42T~dEz(mg#4@?{2;i%Zsy5fQKyc}>Y7C6}>lWZjp55e#yL*zuDSX{N26vhO~ z0&c?OyPZ7#vLwtafH`QQc5W60@Y?Adp@#w=htj0mNbu78y{rK=&JWw`e0x0UWl>4oaNKGC;DgK_~{rpnC?m0C=5z_u-+2m6p2?4SMoS=zsL{ zV}FgYy@6=dU|ZA>zc|)Rv9Dz{XboMjp!xKp82uQIe$3Jj_e_AXIRk7{RCP}ww~{py z&&%yYoVptjhD%ZQBfKNXRautwM(NJPQe!qe-W)`MJd4RfBw52{hB=6r>!LT}tHJ|2 zVL`Bk!E?@yxk%DrOZZWWe#{F#R^$9zV?IAw>ewOj;9p|_1C}vhe>>h-$gdOlbp&46 z;m2bByPP4AekMhbTGAfAUQ@;!`!IYHlb#bznutVPZ9sRCR5-P^gr8c8@a4t8n+v?z zlUI>1%Pk8;UDA^dUy9VC13#U0q2~qvmSym-XuwOVi1o&hmh`|6+bi=6Fi2Dd9|}Y8 z>7EuXv4@dC&y0j+Q(PD}QGpfdsS`52NZir0f z6OCgu%wZTUqHqbTlBG2XI}$wnk#`X0DAij!Y%bEK*xnLi?f^6p42ih1BeUqW_$Esd zcfGoXl};eX*oe%FV0T7L7OFXSDF@z`gOwj%V!pw;igrzPpV zgHSo_pDgbJCOmYas^_+hfFV>1rMzifHf@eY9pn;eW!Nhb)^sZm-LROeJM ztLO|bb>N*?sRnlnNTxzPwj07USy3|NBf=6j0m#(I1TTy&YABu3o{xv#t8D-O%GU1V@;;8=FxR+f?A^kf z(c1~XUItX*6Ygq(Wf=0I#>z{jEvGe=Wl=(^0#t!OqIgp&%!na0g5gn#sB}hHkaz-* z%(t;i-SE)S5c)$|T@b7Am;w*I)`Qw@VawTF_rzG!`=IICM?5 zD6fQ+F(&WXipKA4;Am$snFBV2dsB6}cs5htNjvI;(7H@Wr~^0${@llN)qn|{IDyD2r0_UK9m`qw#+!v>9_*59Szg9=_bocBI@ul; z_2SF`Ix>KQ;gt8xd}}89>Tu-);Mrg(NM$j52R?G2qy*TE&RSXM^J#u*H#_VWoIQXW zjEMmp5-3K|R9$Vb|D(eiZN}QyEU<_2J_Vr5Zo$pWCA&CLBljG(}7{wSohjXG)b`Mkr*~#0ZVL zB{Nzh9IF(L#oGg6?V+xY(V@I2y@o}HaW`IM#5f@^BUS{ng~Ov4JVZcOvH+^Mf+L^z zi;xJ2^#*F@R^)Z)Lq{Wj!$Iu>^qP8|C&;}wNVE^M_B#S%2H1wBJIZ4;gD{bj`O0U5 zo-4>n-1}fSSA`no^kCdD8xbt_4M^*FM+mml0}Y0#AY*h0G&+6WXqn)kvK9K{wFVJ3X z@k@FE7+dc|TjfGw7u8!dsTkSHE`f%#bX+8=yi`)c(h}C%+Kysj*^VN@m=R&nL%LMU zL`I>~QhUNz;U}}PCN0i7HA~eIl5BjPBxp!A6-RVUWLKh0g$y;JGi#{nrt*_n$vAc# zRgxsoKp7DhWUg)okveH#)>`)TWXqTY5elAATdCLtJ4Lba87^w**8Y;D?G)0Mi-N)4 zJ_wP9d!@22A|pXaa44=BEZ6PYrEgA2HxYy*Y0C5*Kq}L+27!86Df%K3CN{>gV`-FK zTFx?kP*9MtWp8Q7sjdqeEvt+45VA0NqqR6qH8|v<;>2iip48xwhrm&nNsVLkz)ff% zZp>bXmdYqU73m?Un7wgYoCz8n@=$S{TAbM$9P&_c;#Jh6EgV7n#S z61YoL_ZqFy<=SPtMSWyj6vBFF2lS$hijf!8Yib`U@=-4eAyR?jDm#UVZ3kU^R5GkTUvydrgbD|E~ecGl+`m zF0$7HqB5Jv_(v7c9g>xSF997gDz>604(3bo1=Dg4(^gYxgb^qA+@~pXN`%oVPam=f zFRZJ9X-h<~mA^!M0JDm~%-STyK6I5J0|eN}Vy z^FF4fd#U=}LOngv1$9dJ%# zj~3`>6l!xYYKbsGCd)}C!6sP0(AJm@|5Z0^+x3^y_NIRVZa?8P^ZrG?lKPKIz?uEbT>a|{576U!s;gDN1#K%(54 zL`?=nbkPyP<+0VVXsRxEnXkPy>IQ&;EXY@O2v~c@S)})VjBk1FMf%?LpmQI?JL6ou%S5^qV7?g{44mW9%7z}#B` z1%s&Tf)qVTlgdYzcuP`r6)+V8+=Nq+_-qQ33qGaf<-$In<3hwNi?p+`;;%o z%Z{m0ZsZ(lgf45nuiOUf9!GlU&tS~?6sZ>tk~m;jlsr-540%%!aRxWY)+!P4U}F&4 zIKn6Okc3l7l_iw)TwOp@Yws4{vsENOR7dG38K3jjS?$y3=X?76=zuf-9kcBLeGK^! zgF7*lTKJHHCF`^pSf~Atq7Cb`hO{M2`4Ks#NcU-==U(R3Hd7ENyvWhv<_vZ@ftk}iUp!|YiQo}W34I>oIAI0_UaP;oDTvxhjB-k4MK z6WwT=g)T67=%91;OO!RDWyw7GUofygHs=@QE{>)rEtF(|l55138#E6QY1AYy!|V)I zNY7P9T%xdxy&joq*w+G*YReuH9rBQ_Xw;XmrCO2r1TQm8J1(Ps!z@&H7NM|Hv%po~ z8S1JHR~;@L?tdARIaA%zk^K=aW|KD3Mjf41)ClDYy*6pWL__-cyTf&5Cr7fpTS7jtE5%TkD|nf4PY(SC+ulS@vfiNr>YvQ`=*XQa&3 zwgp?UgiTy{(_T>A7->(66(ut~*eaW)bd0fNX;ue;q433ie#lXd1WBiI6X|O#>J=q7 zCR}+VaDovkhh}0jQ5pE6IhXv(#23x3FdZsD-45MA zQNG);I-4dSCfU$2Xd`Z?!JZyy@ztdI#&0fc52TdZNfSm26){4zpUU&CpIw2(5tX1uz@AN0a zr51hBPK3Ikb~6S;{vv^D;yS72KC;f&uI3ot%DN(q{=7!wS!A}WDrUZ^7JmyQ8pc2^ zkffU321fz-`^?k2Cn}Zb9b157`ZEX}Sc10!ErrySM|3CFu^PpY5$DSr66J&_yACWo zlcax=Jops8M!E_DQ6Ai*{|hz;V}RT{d6ps<}Tnaisu3$!ko ze5;V^LhW2cHdnMZx52m2CSJO$HeOD?0Ti)fw~oAF$U;wV9%SJE7)Kw?!O?bLrs27T zc!0cUPO}@esi~-6Uji!DXQJUX8D)9{9F2i#86O7?>-qt8H=btz$N3)O`z*e*0oS^E z@S|@xo(e4Ab%wDokX}miX7-*#MBedW%Iv+2*D%+U7ViXn!sv*Yw|XBC0i!1;EkkfO{Ou($* zJX#Nt^9E7q<}5CqJ`MUlWrOkj|7a!!#4GKe@)g6qKS1V^kOYZSW zm-I>rU_Epjn2|nel|UHMmyN*lV_GN97-D2P)Z&`0_4(_O+nG^%@jdqvCPD=SDO^iM z0b4)cLMfI=4(}9*FijFxK}PRX605}aPQ$xeZcS32(FSLa^mHR#O&yeI=pp)kqb>uD zOSAHA6V9a4{R~HK(WNz-9E+LBry(RTLmK|~`%ttlXw#q1;9)uamL9`;U zk;12FMN|^h$WXM1g(`1)LV5-K8^(%i9;&tiqA9h9*+Ok$nFfa|Oymu!`*dWE_YQ@| zlsHs20-@fY0pM@oM-mQ|gvn}!2vdzq)zp^o)I?kOyx~0rvP4Y@1D>cf5e};1dRv63 zIcmaG2-OBZB*GRcV~da^{#P|Z)`wBLrmy?z!$n>5WLY0-J91|rbwyNWsYl&N&x5if zH3%yavG>O?Z+J>r^{AX`R?N*yY)8ivp6FjCcXyEgwL<0PwaCAYP!2b;R-a zk+^jEx|d#|y|{}Bi6LhoB2sr9<<10y1=|o>pF4|QU#C}N0nx<~7J}L_U%2cLj9}Dz zJ^y=tY(Nq7A{o$wx%~8kn`8(kiYHno(0QF8s8bhCp!FyTf!tq!i zfli34j-DS7FX?)|U%XV*=Zv8=QP(I5&za?GxOgU+IbbuKRnO9*h(lI5xj#*zpgi6<^gi9(8H8Odl z1hvT!9@?swlr~Nb;M}b0l}z!~tvG*wwDPG;i_o5nw8Z(i6`2}`HT_bl0l&f{9v3>L z*z_r3{4{tH358eAZlp^;iKOw+LD{BJFNnO8f#YzwQG(RRh&ba*#Tj1*bju{?e?eKs zEs`iKWG?Enf-5LqZxvZ0G8AXZVw_1?ibLnMc`9zBqngD(g(pe(O?<#!9t!FU$gRvZ zj&xJL$p4<9ru>iKX|9oJ%HNNd1c;G;fM9fuj+O?tO%hnm6*W|yc6$B^pc!HMoY)W) zU6~>LAYd|9_{gaEDZpeL@zsqf5x7@0T-e=+1W`Ws^AnH-jgBA_WzDD0)aQ%VNBnx9 zM=ir9*cb4SZ~?)co-qZKTDsM#Joby!gbDAi(%ayjLj(*G*a`K9*p#)|I~QI)9$KOe zYK{Cgz+j9fBvgr;!gYol3r7ZE`{9njU52|42mOPt6I>zOT)3uyt;Cc1`TeR>PU1z+ zPa;;N3&Zt=BT9FcEMNiWsSE}k0}cXmeTx{ zK3yLtWS$^P5skAY5^gruAYmcr5V#66C)5eI@xOxq>X=sHIkw8B|tkHNl6h zwJ4M+xP4aj6@`P(gB+37DX>ctx3~E`KL>f?dP(13EJP_7+EqqwvY?aT?lNK@_zvxK`M z^!aa~)LT=bAF>%&T3He3*FY~y-I6HCsdl5I=6S27r#;w=A!4YC(!i8im(QmK2?2%;`x_{a>3XZPCqD)j>{t)c1P6L40v7bFjK=J_SJC;> z$zu(M~4DzG0i_jLAzi8dvJ#*HdJ7XA-TI#A-F?^8LB^0TB~Ux$ML z??bU8+uzrbcMsq+HM6risc1r6Mw6q)1+&4_vyR@7PGdP5 z|2zR2^k*pCguu>)HR<%p!p#)ZuLXyji3n_;#2);1iGUB z2*zk4SOkci2okGOIGIU8Xu{9?GI9lW{o;LDZ*HkZ>c&;oWnfbl$s$Tbm7YRef}o^ z0oa^2Snx*#oMx}s_?x>DzyhL$ zu?K-5qfhZ=@UDUfwnF$Q5YYQ7QE0DHAbl56SWOhjTcv>Qq(lk49|4dOBc20NLUL~c zUUUf1B>8%n5TKe=@sAP_W5F>s7=2Q3@tv(Vh|Z}3zeVx(b>#j)#Et{UDPKvyMCd2! zNum=k0DMLOC^X|lP(&aA@c7(^DPDk)sABM6DGp#1`!K`{0H=Ha@iNoLy37IoJA&zr z>c^i%BLa6nBG_qPF!2Jw7e0V^sjbhy4S<(4TiB@~J`7&c)TYnV^QLrKN~u}j8i+i1 zBfJYJSo(85oK0^33{T_jqy8GvdlkjKAMKpr5sZE_@t%o}hzRNPzb7s>OD=NSg$9j| z;qL+Ax%&E?`K7)tmwdI?b2{%@pL+x0csQt{RB*97BloHwM0+Ud*l^^_kHj-3Xszj! zSHmw&(1-ysLF1b!e!`C;4h;oA5Po~KarEN-3ceDAB4Ny>(jX9Jot=V8)sFgKft&$Z zQlLCiC}TreELvfT9Tx&17>1&P6^SF%y9Vzyid<^X;;Z8@1JWxeRIjAZNeokGsAW}a zs)$rZ@gO0}aj8L92mCncTmWg>QQ06(JM_shd@&^-%MQ)4zuJ-en?D^$xHy9YLZtH) z^@UVnWD)@yEI?FoB&ZPRWLv5?WLOPO(Ga+TH9_bC!QsMR+!%=iej+J{wi_6_l*#pR zx#$`s%%286LgM0ngCHL+kr*k#G_p#GmLxtjR0Ik76J&aYYsrj~_&6@zkKY|+o{?ZO zL~%+g1btRQF(&sx#{udUP*^%s9Y>m|e#Cx*w%pkz9sDL3- zg2rzq{3c4jhmMCJDh9XO)NM7y@N-CXh9-_VB93yXhstTWP+S}lCHb5ZrWRvEvP{tn zhMeyY`P!foUt{iH{^Ctz54|n}`LTrZBcm$&bXC$68pg!v}I z29S2^5FAaG6&H~7d@~5g@Gbbwv@nZzPOVgziM{&c#}iZ2ENtnoxy{`k*8+XIh0Wdi zp4H95$Gq3xqf7!#oK9=zTSe$?_|34edhN$mpwOcotIert3SBJ_gMdX-dn|S{W9;4z z9;F3fL~NdG{|Ps%pS<-ak5YqRdGXNUfrD3eRG&{YoICPfCJtKO=FQw5C6sV7Ya-w) z?~QP?7njz5(WCrikp<$E zdC##CuS|LMqBkgy_lv$9UhP15JHSerGQE>PqWqWeGCL42i;X}`tZCLYLiOl?a+Es{ zRR=~5Ln>m^o=8ozC9@g7jO#!JDfdkG*S~0^S_3BkWaq3-Fif;4SG<*bTIJE4=d7_$e^qlg)ngT)xr$l15)oMNq;L$KU^1`ONZmUIik{{G0#rs&p$c$8rQn8Hep%0aaao2$6l z&>(A`M`;Yq9MBuh&K&>vyedv?sewGD6;mwlggE89HKlq=Ki(PN*ddDFIU~?!@-D>F z6wu&Z2~!nDH@x#F>E|i@gt2xxZ$>G_u;7ZptU8(fa{u8KH+$uc;BP(3`+yqr(39)K z9O2ljCr_1E?*B&hiowUx|;l=wFQpuKA-#^;*7I60i7p)}Grn0#7)Y$QjnyAH>Y~W@PQ6n-fL52^;7rR{Jr{uCM5i2QR&!e19=V?VR=(TnraW@Bj_{CZUrCY z!$;!B`xaH;a92BacEPULvJ5p=8L5ING3RM;M!AO>Qs{b&hH$X^D#6w4Ce`*}| zC^oI{vu?i(Q)2qIiUE_fDA5bqImn>X-NJWsJaNsuZWi9J0lpl>C}9flsEI~Dq&on& z34VIuJ%jg?cwdJnj(OB6WS3)$!q(F$aGKEe#x^&blTldPcPMecYl=69}uCjxW4#ls3O~~iO8@gZ7n$`xkErHLF zBB_@&f0_>X;$M~Ne!I6e(N)EiW=jQ6WD{(Qv&HiwiX{QQuVk#Q{+Yn+n$GYJiTgy%Ey9eYG!zv&Cc`iD!%PF7~2-h$5DLmf#1v#YKK*=REK4E*c|`4 z7g7n7bU|tx>hAddnT_4!mLHar~^ ziGovAdQO3-Jq|fvAh8avTJtnvHT!vUby0Gz4s7}lO3q&oKr4<^->E}bOKj7J z39PmDN!5XMny`{t;+2L*HygYt4ZY8PfLQ3!ny;&!AD;vgyii2T9{n=%ab*=SWV44B z=HMdNW}@8C@=dXz9QQ_KGAK_V$`*&OVXS^&P-{2a(dWk<9;FY(u%PJ7S+yUMF;IFk zJ*?wrrU<1W1y0~IDbhqKNLwPGh0iNZY>64!Y|*I2Vg6dKPAsmXM#Lk>Q9pH9T1n)y zfse!;Z9U;9H)}WY-~f;7_$4)4YF9y@$)5)X`{a+_$!c0zi(_>^!FvH!h8N)JaPSw2 zibZyn*?bPZ>`7OeTQeFn{n|d(vP>ka3=lIem32OsNF=l5ZBM=6W+Rpz`^e)ue94xS z4%}vFLy6%uG$>>6T#9D|p7clX_C}pJLjpy-6#O*4-+=#QG*?=DT>L1EbaU{e7LERh z&N}>bH|unN0p46dX&$AW1Ac(wSY{0D-4^Vd>zNP+QQC5?W&(-1o<)UWmUZ6*D9uSV zFbiRphViKqris^EPY^7{i?>mbjJFiM5#_?>eu?p3S)Naphw<=EPnCVkqmF5vU*M+=FrU_HEa{S=vZUHMrGdE9QmQBxGHM}++@4NtI!x{h< z8UQvX0IZ*cY0J4`%2J$~?^-!;^tT6SN@Usgrm3(}y!0*4 z%V{3*`0+Jz^L8v>E;KqCw5qZUi0Qt8GmOV%8)wqRp&xsk^lW@BI=`_D zvvXF|ti>I*qc!k#0E?;Tdb}9;2K>tD^G3Xd82D>=6vkozmYV5ID~!R*LsJN5;kh4y z)6^pJ;f2&qPsUG}i7f;(P6OYBU>3d^zu4un1&?qx`p~~`u^pea-VddWDJ8nEux+UW z^dgM*Nww!f-}oM$uL4#9ZY18FaAfa@N*V%VSLF^w z1yfZMt8Drb)0PQ0)^GN>p0^f$0&e+Mc(VMZTOTT85mYkCcLIp5ZnkJ+&EX#9Hpb)D!XxA#%+**77e4>p%{o6bh#GzyJOn*TkF`*J<0+a=*weyOzgF!-CNyk|EUSk zt&As+V3BYPZ=a8Pc{L@x(TeN~NVr=>cMK5-ae?MnKX!?6v&%g`H+z)Fgzs^mFWd9| zFVmE&0(b&IHHA2bXt~%>yB*viiZ70TD>R?2k8iz&v8jnwY$cU8Iwy@|g4t_wK4V!!aDmXg;FKgjRL{n&{Quii^%giZW<`>0VGR9eh z_SB`IeLvY*NyKP4y89EvI7!g>%*VeO_1dCK#sH%u>PYcRJ~Aw=;ees2B2$pHDKWT( zG7LVrSlcghT$@rX?xH05uZ!Wk@F*g#az6*{A`870)0-7<#VMpGBTRPvg=yD)bgS^U zDHLwm&|=&wm~<2vq!+^J0Rkfw7%Y8U^Az^gowJ#!J;s#CzG6FU9hCgX;qIaEUq(%! zn(;9lnok{MqVvKryl+Pttd5qTExwcB;_kc3b{T$f$(@m{?Agw%j0D}{ioVpP;4%)R2+JQfBU`b2AJl%&Wp~@;QCb46kYs`l z52qj%i}y5sX+;Ex_RmkubTh~NiuXK9A`ngH2hLpJ{mBQffP+@wf)~D|SO=t|>1whWN?d<$tryr?sqB2G5zwfNb8YZ-BOH_hBI^qtjo>K}vKBZ?YTLThxZ+%2omrO}Up%zrBcXU~ z$wy)_3aG3C>r#`7^GZIFi^r9GR45)%@{wXKMgjE&N(m_*ulWisMrYvn3oDM)e1#W3 z>;EdkT{cEGmhF8~%%_XHp-73E=qszp<% zdz2XfrlZ!-dPDVC*jdtgLm2wN5RvqCD zfTN0c2nF1M3P~09BAjBwhhDB)*wR@}LEl0*>(=F`{T|m2lOeAHidjJ-Vld^?uTOdM zKC(0qOA|rirQvG{&H(ozQZdP^41nDjV-IGdBBxlCC&7XxhVO+}7TpkwXy2)N;29{r zpI63ulzQ+sh$X8q_&jRKcevTeR_)LciOMPXkfG7AFL-->DAl}!6(TyJnN4RGtF_KR zGfR~d<_TiSgtX>n{sE#ZNFrHv8Mk(T@;MN4&!94+n@DGyzqy>?X4MPM-tj2!z{kw@ z0o|vweu^!=zHpddysFN+J*0<1rNdB6>SNpbb=DSWt3Lz*XAivW#|s_@@ZcZeCyk9; zUf9L8Q`K6d=Z{MKDvlCCv7qr=QdVm%WvohU5uz*2o|}DlwsV8B?9~HaXO%T#6Gz>t zD)lf)4~DQRk71I>Fv;UV!DG=^{X<>bN_bqm?CU|qBSi%s>A;gxnsu1lQvyH157rsN zX?*r2q|2vL<(`HgyNS8lSL@?vQ`Oa!QIq6;g+K+kq{fI`vDP_X!ObSWb2%Go5;cNP z5rKCB=Hd2m?fKM)mPkTy%lAs1$<|scxA$!!TS$znQ*w#L6-|hHDCx_ zcepKZVSvrS6AKGE8$!Q z4~yI^wEJ|AM;V3a0s4(6wne?(y7EJhLf0bOY|s`YY||JAxkq(LC&-5^746 z=k_D#JxOI?L5Kem(u;EP=gt|i}Cf~emEL~ z8kA{UBy`m2tjNA%p_@JX*W+tE$|nR?nTW#?3)mZky3l9xZ7jnri5=(>OSZO1M7^?Q z>|~1irRhC%qMrRx=iGYKv#CTO%4S<`hnS?eyyqYz8gn&Onp2RE-Wh5Ew>=2cW{VQt zeXsdz#hT$OzfNunKN{2_nF}dfBiK(%cO)v+0P-bHPy`bbHb&hbir?3JbXzcy*6h^< zVB%klspNXba5^V~=0?!&QF|4`k3hhg-PvNx(N6wSlGs;lO`%$m21lyGvydfe$y|-% zguMebC5>yoT-(i_xYnnM$MvxTn-lC7c48!ks_*8WM-p)$s~tz(9;FCwup@u$e8RQL zVYdb-r@hcQu;}Fvvi%&Sg!FBNp`308Tvxb9a1&7E+QV(c`$4cn zX7fbBp+XHUy@Q_yNj$!gk2CV|B_8}M{IGvcG;60c7eT1`lr6j27Q>Ij*Y040sxIbA zCHVXKv#NaZladzk%sFX`e~1HL=*&>nbc*V z9Q<7QyKa;&XV8$!B3<6eTP`DAs|2b@S1dn9aip`m^) zy?748$l(E={{X%Ruv&0lxFUR0#vaFe7d*+RgqpzGa4UgNGtH@R4e|aN9F3WWK(@{B zJPw>bfGvgp2E0cCb_>rza7ln;#I92Y0(cpB9Z|1pymI!Qo4s4~0(!Mh{ygVjBQ-4U zOtV%>RtfMTfK-4Ee`a0kW=~E{KI~BvC{xqf@a%aj-K=@N>gb%!1d8WZfsOT~boOE8 zg_w=HtHvDgC_g}8@Vf#(l#UyC)UmM7vs^t$s8=RV$b(Q16HW}j3D3d^3tH7J7*(UF z8X8yR8niW(Q*mN75&1oF%=Dq;Nm2)mY0^`y0miev6)&eKqXANzz{?bUIy=_f)y>WB zR2}@WN9hXR%O^sGOq$<`?%-yx&$(msDA|B(6I1!txnmfG^jrG9N2x%53C`+ReQ9F7 zK(Swbs@=Duv^l0H{)p1{fF_FR>>#g}>1JnE&BQe0Hb5#H-+&D^cK+94${9Zpaa{+P z*Ta$nzeWg8Rq7M2?2?2QjvAWeX7NjUo%JYdBxsd&$8-rHRRujQU(^bv-fUUv)=wf6X^Db<8OzA8`UlO5_sMp#l*%bQu2HmU>X-)D@ zh=a$Rkcab@?wq#2X z4fS^9MKTIrUGT6J?iI=#Nd8L;q_cbCtL?BZED6L6-@G5@P)A>_46&g0v=MH0W#q+{9wnVXYT>+ZE-9SRgSL&OkZKt=01e$uoOZ!k4Q5Yd zlY-VomoyEJ^=pFTM;bJ!Gl8(m2!9i*G29D)y#m-` z;0?k%_HKxUAsFN8EWo=1I<4_M3wS1Qyl|61j{!!Tw=Uqh5q=90XBKb|0X70*pU3-o zyw3;jk9gwpJKaCP-HGoH@!W^+r-1Ve-U|@+I^es2*BdT^cz|DbzS^(HgG33i9`bwX^TK*~_bw7kI=p8K6r2hrmQ=#&?}>dz7VwUIooV_qqqgKx5m* zmZL=!t0&hufGEZRLDt5?%V^=HHYuiX80GA@q9BUl*Vw}t$IIaYr+E!;gz9NeVk=_gzn_wDT)P7f)Nbm;xIv4~O8&_Nk0~dEu zV6ovR&3i@mGQA={Pb0j@y%UoJ-kzf7alktQJa#g4BH83j!g!f_*p0-_&-i(cow_+P zN!dWOQYDwS0k%`UA9}LWS~u%=bXkr^nMMfdZ2Rx2UqWHFOJB{Sj3!V8Fy8&Ww?C(d zXYGGV=7i&JW*#D@rh!#!u#cwV6tTZ3M-Xr1{_#Kj%K#r&m}hbt9`VzMc}f*1|N zrO|*tf(HCok-}7aN&$J;QuuTl`p=-De-b-*=WI9SrmS)or|#|LW@*LuE2+!QsrDo= z9WiJAH*WUevG4UBWiMeSfoV!MF`bt-stTmNUQ(#NY9rETt9EWFl#BqWvq|K_q56aN z5dLF1)7A^=_I-C!5E40p0#?=L@?$cWDI1l?CE3u+j+$=vN7}E}QrYA; z$MsawB$h6_K{QmSlX^VzD0TuR$pJiLQ7OS)6dgd2+&V}u5$);5ZvTo_=fTxc9R))( z6FSrbL+AfNNNaWoDhwO_>9Z!~2mwsCiu^lBdbyBD*6dBNeG8d6{-j6QLf)w{{1$wX zPM3AW9ZKhfg!=0Q*<0>o?}O}ALQ9f{50%-a@fl+kFM*N~CO5utCWVRmd(eClW-_eK z5T+9$RLOq~xhA50c4hA{H(QwS^lq4)z|W#qBGR8}3kNC0yw{NDwyOMPu!THaJhAV3 zH~X`P`2&yg=lw^Il>TT)0N?Ug<8!FDRgW};*$LpV+mP)nPaq>KQ5)0Qp_|dr0@T=2 z2gAPifTa%6nD;s&nUhLd1S%-6{8JC6RlU|Gp7$s(31V_QF;vrJZ@T`rm(u$B#gqdbkuQhW zCH*b(rO}klg4a>6Rda&ZcL}#5Xe92u{TCsOI9hp`Ksag3&IH0@LP*Mc3CbpW1qi0q z+g~4cv)~lx1&=b3{L)$5TAu(^qvnC*9%TrDDv3$I&C)}xu?Trq4h`#wY3krK)TZWy z6EJgLSn}wCn>Fb1b_&gOYG&UUkyXHN7*`;Tx)q5i_yzHX+!bhxue znNFZ2p*ym38;5Kkj9ov9M7O$KrJ91R#_L02Zl<{Z7m?bMcyb!)Yu=)FS{FsQivLr(|MU%NQAE3(&6LRPG|RO2_Ocx^+v!D@7k4d1!hs7=;b)c-$0 z&R9r>MNTo}Om*1Oc*p8c=JW4?&VQgV)NkAb1#0IHo@{s3%{ImT{R7OdD0Dj8G|V>G z&F&|Ch5`O;0wv|a+*EI`$hzNam!sqXRDK5Iai@(T=+I1Fll&SfOvM{o5o_N@Lhzb7w%2GKZfURxZZH! zL5v4a;=Ll?hrs;+r#u9JZjk>L`PKz0=`%ym^>?#|{kE+4D9?g;1n!(*Td!^vbAu21 z9Dg1;*d1_F-e(XWE>2)>$1||&s^QsJj72*50F*Po?Ox2M&UVBAu9`p&M(GS?N0!fd zSC}p8LzvCf;;IrRVzBaGsNmD=$on1mU{hxh_25&%Ff#Q8)#VU9VRio%)N%SAOMDHqc(LNa#2|PWu+ScW;8STZRYeM zR&4Fx#^1UR<>a_`v;OfYbKrw2BGwlwVp#tK%44)H zroe&LiFLZ;p1~f@n)wn6WTbE1?;5ZXzp#U)LS;hvnTcl_o^%9MCA?E>G8^xM;6~z| z)&QTtQ<(-pFuw;8V8h;WJZzE7lG(PNn^is1_J+r`Fg6sBUpGCEVaTFg<15QOF@p7Q zc>K8{ceR^+_S7#JCJY2k;?zlFlSp>O@#`MwF1uV<=uz5IiOa_cJx1Ik6Upu@&Zz8W zUG6_N$D?Gz%N7zUD2Bmr)6U*eZnk2;SCc)8O;9YP1*bwMIMtbCD7;NA*3r`&AV>f5vOt;a>0rW1_XhO$5{}bW)U--$erZfZ9m3UR5 ze@iIrEd*4cMu$a*M@RVN6J`sy;eI5+3S0l;gHx^agF-IEU7rRWBSW_&u7=lmtw5k{{+= zCZY$f%~}qkg+!EAp8X+ZVv$qJKvf$7oA6YR>;vG(|=4+I)aYxUGX}pmO^1mO&f4*W{1RgEL;iiq}1Cj-R!5g z&tYd%S9tqljnp2PYeXu}%480wIXFTrWjXUM1CL(l)EybcGh_XiXd3HAPnS7%QKRDFL0pm6k| z2^SdK)*tpVdU>prh=bbw%q+HW^zo0_Z{L18zhrkQ?J7kr6{|ZgCpPjf1|#Vvwr+o~ zTsPbLaSOA@b;6KO1SFIEAt4A}I{A4~=`Y^*LOV9Kdb6%2^y7g;^u_K~qQ6Aacem{V zeem`Vj4x{FKN6%t+o0=!wxkRCS7X)#gk~9u<9=h8{!t!icAU~syfxf9IBJ^az#W4d z2iG6&AGn)vE;wqkb|b0EA9zuXX^hjBzf0xd$Em{?W2nBy!glqZ-W)2IK8+ipcZCrN zZWIAWDJ+=3iYNPG*ZF(OI8aduEI%Im4G~z>`P>H7*&U3TIb@Entl#c+VJTvOLA~P(aOi(|W(8C~F z)_KDlAAn%k=9gx?%B~jfUFJy*^=<4ugq%o&=ht|W2uYN5vNR2-XG^>_WRxUg4}FomnXl)>YMa8h`|T$#ZbFxlRhPGAUgmm{ZFqn zv(IbnK?~hDEd;7h52DvIT7g70Ubk`fDw4^vd%yh!>9-=kl*#aDA9fh4k0$1suy+YO zGT@PJW~;tC2Hnb%rO%A_h?9fTXuC>Vi=oW!--XQDLCy9YvCB+~aS!+0-`MU&5^7zl2GN8tCKp zKQRKbYI^V{>0E3u`#-=4&L;re|gyhD0yGk8S*M z+E`T;$}veYJxA?Ru-KEa1ZS)p^jN`e#rh;Go!GYxR}MmfQfJW3AYZDI$#CZ=)9Aa2 z-htc2VK+&Ax|z+0`r~a3YO8!y&Eq;?5M59RD|DKka=itlICoT#nN@jr3zXa~vr}I2 zxK^rmv_>7+(3EedzkJtf!*(}0*P89@bS@ISsN=Lth`$9wRE86LGz(N{YgKxBhMQH} zelf%2`tU!=aV7h7a*odRs%WPTy6UI^UD19C8S46lu(Zn0SlQ427{s3W(7vrg5#@eF zUja`VES-iM14q+=S#Sg4K7zXeM^#R_iXSt>Pa+g5ldkovA7X!}NF zhcFTo*}>j$)U&we>M6vdexWAHO9N_0zb?CkN;Ey_-`ljieL(Kq(dhiBYMJ5&gs_JD z484R^ttqa5h=o;izk=rJexGqrB{d=(Cqdt>8iM8G$X8yi>QSl!D)bf#+a28sN5s-(M&P{o#H9PCD4`3ivmG(}MPHJU7Cx0iLu0DId?- zc%A_43%nl&PCI-@;hVNSUdKD71e^DC4dF-AJnA$z0R9O*@x2ay?SOk8?-6h>0ggj( zbyWaM!TaBUQT|VWy8)PT1)jLSBm(tv*1|es)!2BTU=ZqM6xh}C?T`w(jHv@Y7AGP6 zRR76}@T0*kx(uW2T&_5_bW^SaloF-NSQunS=^$(BePHan`j1s3q1tHkWId1A+Nj!a zevy|XG0tu)Y4QPpZw$mfyUNjqaBL zM%XV~dRw^Jv{4~YIUXaBF(n=`?~J;4gi3RVhzMKlf8r)0tPg)0E`U(=?_PtpsP2@_y*)|_z(l;(i~s!MW;fDiKEN>*fa$p& znE-m7wj30?pZ%$x_XWM6h}*A$-nSU)rX&ezyu0Ix&td4aur>4tV)@yKa49w7MJ^lK zM8b4L*$s5PC?T?V=(!p6!*I_74Y$F-jV`;pyII^H?cVh$FA(iWZL#u~srsjnz)rW% zg>j^k0GciMwBRA}=cx_dY~`bzD;}i-;FPA-^LKpeW@pZ z7Y^S={sU^YV0P#DE50g8ZA#Ll$HA?YuqA6MhmLR%{Gdj4bmx^TS+Q{TE!Jyf1|qR* z2UP1s!JAZ>1p6Q57_IXdQygf`-udcA82R*E@=1;m-_hky{Y?2Uf}0=%OcDnUP8ZAG zGsb$`Q~r}*i2=HA^4Ur>%VZ8<0 z4%mnh=4)%T!2*B)3qe5`|c}4l?edqd9V~$>zf;d zNyR!7tW_{*CK|yo_zPy$#vUB5JWjZ3^@&!iPw729zOziU`)&g6L)7f!)8hV5`w+Fb zS?ZoeElg2iCZV^c#+dFZp)38oKViNm`Yr{5@~TZQ|4jxclMWtuZ`9Z7 z-YzX|@5{82t4w(By?}gpe~|sZJNIi5dOyiusZ=@cU4&Va_xN( zC~pGoE3F!U?!T(cwS1-ozsIz6uy>Bn9mOtEiRIZJH zuBsf&6CmDRf#U5=z*6m)cTIr(yWCKoKi}C>+H~X^C7u@M4VJLdZJ0@LEp=tkbExfA zfW6zfAC%vxnrjxJOY{9@fOg_|09gC-dvm>(0Q5GO-*4}IJpgQ50N8~9?G6hNZ<-1# zTZcFnh0C?Kyq@SGLI4;G0IL`PR>=>esW|m(xmFBOifHR>nLWciu^it99tz|#cwSs7RhCD8 zSc7gK;(3zhsA8vtfk%RZSh2;aqx5RS56;|{hB49j$eN1~?9TD5)$G!^kh9QzsydXx zfXBf#gY)Z924ee83_@AhH;;cf*3HIy3iR}yq zVS6O~H2LlI?b+ADR;cYj>3SRPFKgOz#npbhH12pop==%ZM#%DJ)^TL!Q;@SfhRk=^ z94v|ANT!RxIlJzDb0{lb=NSvtKxj&ZzO6_NLmMrZ;`tWbV|XWZ%oBL#!G*&u$Mib~ zLa^gWhtXjhg|0eq&cWTpJ83~@0scK)cfh8@{Q?&aM{8uy!X1F4y<|o>n$~}gZ)G%y zJM1u5+wXl=8H^aPM<7^inY`;BEjE0nSaWD1M%!U5wh%1*n0Yc1V+#=n{_u);7bR&O zTlvi2ofSGH)dC`>9(0KMa-InPb?nUj@4AZZFt$*}zfXdB-helY!aT}vG+Pd3PD_PJ z(0A5<^{mv!Sa~%B!vrmqrLvKW-RvrFImx4Z3Tzp>cPpxevxnGjh)a4{>jT&Rb+gfn zw;%N=tBEE&v8Wu%w%pi`O?scaa68GP%#@MsSo_l&H;ek^^$S?{1IU3TthSw(J*y1C zM_~#|tksma1nVKbEpln#B{kEYX69AJn=viM6)e)sIRGrP-`NggJB)@m$r(#N?G05T zK$msOp7}4dWOU@8xHdf06cgigIC(bAl~OZ9)6DpEVw(o&{W8`*5vbTL;Nq1Kf!s}5 z8E-hgp7zR_coo4&Y?>jz2Kc4$#oJ+(%L&QJQ}G+lo;YdgsJw(ZIqp`YtJRRLK8aZz zCjJDXS_cV*$F5rCW|_59VSq4*Ci}bsf{Wzg@G~n0MHV)It!49V{hCJV(3P0%ZCD!YM8QMZ7yI9V8ozgqgq0q7>JbF0W^>}6#dVdcKr{0sP(VYL zFs0d7)Q}B&H0}i*%wy)ncO}6j5O=(>L-|>L^N&GXl*uZ7MI?_A@{q zl=HNYK!?1|JXqj-alv6!2D;BmK~Gi+GV?~#r4gx zwJ_iLG^OJAt`B(DP>eqhwd0wRd8I-3HS)GQ`Us=gha19PKDGNhwkoXqN9YiOHC7yG zo^|!%65w2Q4JMv}JP)-6vlrr)W7)dy(Jog#u0v*C17LA#2Tq4zwYp7y8Jm)8Mh@|~ zwwicN__539M)g3!5DNNQ0Px!Q$$Zkx>(EDC{NTRodU%9eczrz3?iwWyU7gYZkW3uc zz!kitS$Gy6892Bj8&4B&h~Kfaeb~w$!>gG$!f#48Z;Xe~M}+8JgdN_~H1-fjbB3_I zMekl=Av;gsKzieRy78xwNZL#H0HwY=Qcn9F8k=;wcL0AH&t!bh#FO?&JcR#efbRkB zIy^(*cLe=dbHK6jT6YKUbO=ao_?-bx1{|$xY=$3of^Fy<{-pn23!2Ds-OqsE0xT9d zV}W}K-(hg=0LuYh3LGv_)t!VR1FYxaM>={GYq>_U5-;j5ZJapW1j$FE`E-{L+fpk~ z`^iPnlH20glGW?RqZOc&S8Xw7{v^;uR|eCRYdhWh2={vbytmOHT_6&WBWJ1e3o^6s7|~VTd~6 z?uggj>_EqR@z9Nm?#C|_*|=(?BqdQ60QKUk-SvJ^Hd7A+;_9G)-lXJwZ$NzM=S?3g zlYwZ34Rurxn`0eV=-zW77CqxT-NFX3fkedUD0HA2lOL44*jo2iy*{wgX+zKAyD-dl`O0uTaP! zaaWMT9?FXOxMRwB(VaX+vM19@Iwg^J#}_)69(%(hL{aJebVDKjZ@0bQ9+AI>Ajmp8 z7T9MdRC40(x{`cEy3T)a1Ut8T-uA@FtyvZ+k621`i)*8vbF-qgPhfLOHzFCwK85Id# z%bkp>S)^<4PPKpIZIDhMJjC(7{|pL(%R@8gXUtKCf}hfC`wHpIk4*&_4dm@==TVvw*Rl*#@vPVCE$7Iunk^s(#vm3=@hbu1$_>lp8bh-MoNPt36Pzf%c${++Iu z(3p^JT=mRaffCB{8yvZ*j3=mt_o1*>Vo6n?xJLhP+Y%%bNfybXo7tvaLcD{aH9Qz56802;w`?c}{tiDa%Sqo=5Z2=T^h5nZ32{5pZ zHQ}=_D)Zo_x8Yh;G3vD8{>W0}Kkih=EP5>8tK-h1xJO|J!rm{JL~aSnuTkXSBr!h{IA|zsCQM&w=v>TvJFOW=hF6@Hv&5 zGu%q)9Mts=O`0|5;bDLw<^()O4tyydA1oIaSwsCJ^dlv@NAEnj#!*K9pD09D2KT?| zIZN?)f?_XsR$Y>hW~njq|HXNn-egI-48Q-^^Oy=EmeP5b5&-u9=X^&~4!piOh!*xg zogo^cbEsv;w@w&giZDl5BCKBK%P%cG-+G}2=ATcMDgzZMG|f|s(1-TG*q&WSM02}f z^GH!eG!Lv*(obHtXonK&Nexd4>)Q$)sqO=~b#SyT2BT=PMOugVV|eFq@p#{hA$5Da zPl8j@0KjozYoXAmjqmSm$Pzo!-ER!W=?_-c&->FWP#!KTtb`bWN4p)RNttB>al$Tk z>}(fClPM{ZHA0l|N%zz1;|%l#zU3F~Jv zCNLW5P_fB+>@frc_golt*HH0$(maa~LZDC>Df0<sQXE~wz@{&8cEhAA)^`Zc zFi4rqm8!yh14p)%lrt^h#^aqfEY*cOg71!aZbiyygZdV@mH1Y+<0l%&@F<9aPol`` z;LR4xW_Le?J%5*{b?xJE&1Q9n|NSz$5Zb%U^MUmoTQUCEC&eK=Wv2eP7sk zD1SCof{IZd!qb2_ECdRX{3GOejOld?I|q;8VEZSBsl1t~ca$kCG1` zOLi?V43Fj;&*1!vuQol7zI%WOG8sX55q>Z{+5A;4k;vXRmg4*!ps%X_{#l4a5geGg zz@0)IsEj9!`4{$~6?fEuO3f~i^n3{UQ{J#s{R``h^Dr!YI)L6vsK9okvKAT1TGjlb zzQ1TB_icsgy6$uENGkxN;VQ#Xj#J6#1E*}jk11bB^m!1&g&!{v%|YmO*{Fld+^#oG z`Jx;I^BM5qGx04e{@04Q_(==vnBah_Q7XWVat=d`FWhV?}8r=AU9@Yvppj}iT0;Y zJ=Dr)8-5jNIDp*9=YR;LJapIZKjMCX{N01;0CFpz3oxHY5tv=oS@Xs7$M`9!>mei+ zT3uNNcNWyh&`;Te9~*8WrO*qAviiOR@6bIG9ZE;l>GADgLiswpU!piduz4VaJw)I- zcG0S-9_y(&!yWY0jMzfN7hgnV>2ivf1$~7(6gH*(*bDK2otoEYv=3HNkN`-{45>vvJLCVc_7(t9JyGBAvI`rOEUBn4qTrPk z1MAv}-3hCrYhtbnD1soESct9I*x212*kWQ}cX!wOJ9Bq&QU1^Kz2Entv-jSaGiT16 z>6vrR6w1zP?q=InX0B~*I2!t14O@gmHH^%*^Qu7BMLLlt6D-*wO|sK;}htZ_@=0<%~1uPZZSf7-0SZtMO-XdZG z!ML#^Lw$SenOAH@D@nqesN+kmsujJe5Dj&I>>xWpEdfq;)7;qOJOMZK>_g*l#2`Ch z+}xPmyOvzjG~Lrcwkq7%H~CI$@HamIkgq9ZD9oM}b12nGR8t&@vv1fo`na?4mm`8eVJA*}!cpYMqU~M7|4K zY+Ms4)}(4ec$X2li?G5H#Y*xceSe}ZfG)#Wg%?*LjXq%`i+8k=C+}!=)~-bIY6P>T z`}PHh_rZQslbjDv>@BoHrvR#kb*i~X&uTWT8!Kt#W|Ls1emQ}=vCsbZp;B_YNq5*Y zo=IitZ0?VV?^I=M%XckrWXiK{bZK!+kuh~tKnD@sP>|GS39ky?)<4J$;lC{J4Gdycr z=k%XS-vBs|MUx`|wjU=;!pMazC(uhPRjeOZHi;XXC|#uui6 zH7U&LAWL20@YUdJYgWC*kv-SjE{!KC1lb%H!{n-@v??}F}N;YE7bsV5}7*(UKK{rx50Ez@bY)}4+>p&-+ z8{z33Rl0yAnN!`1qs2;~&H~XSMRg+(nU0!rBJw3f zXGUI26KxPFjy@|+1R^C%zkM(hdRxb)U6w3X$5EOAXJDLpcBCiFl{gLWXAm<`N5cJ3 z`Qvp6RkD`uWibnyVi(>7f}RMI%;ZvbgbkFZN%<#q11bFMVk11HGg%k*V(6DLf9G`* z<<*+(0LJ?Pc?Rq_SqX&7gKr7LICFlpPpYsP{_(U^no-8=>CVBV5ZeA`F;U&7i)3dk zV<{c35~_HAPIhMfq##T%Cm(f`j2mVwF#}|$1yuqmbyHeoNJ7cN7j41@PpL-tm*O-N zy_>`&Z0Q;f4xy&>BadBsUq2;;E?&S)ptzVosG?!obaKyNuEK5~Gv1Ft8aB%!-N873 z2%SNiKT09T`jxK({@Uw_DGp@hXStq><(@g>#srw)EY^ZCB}{$_StX=JZ9^`M!*OD4 zX#~i*xQU!~N_zj;Tw+^57IR>6Yv93W|6Ab^OEzCYEUh0~W#b7W(BWeOR;t{jt+&1oj~)w2RVKX>DfOIke({eaZZ%wugf-X8E4Xeq!~ z7v^y40wn(A3=e0%fINgBqR)n_Ug&Af#uhl|e~2v6HXDp7YzIPVt9l2a-iaSv-nNS# z(#?Ro$$JldJH%44uqj1)!AN&?d3`MK)aE5O^*Hn4s=_^l+l9>1GCTpUIeMGEc+&V7 zf+wFrHNuBn!8bFZi%i{IfP+%lPl+ACk4~ku=A(>okdk(>j-_hC6lG30>qcPf6DQ)B z-WIP{l#8XmsT$QC!va}H)T-J14-bPOXTXMH=bxL-hb#%3leS)|XUkP?n{l5X!CBke zxY$6R0AW+7ZQiM8uPdKIx8Z{@rLYf)s-)ZV)NJJYkt;EIo4;+7q~t?;uPH7nwQvYf zG~*tFr*IfQ(oJ-6X@UOIshT7Xp=SB=X};^(o61d~baoJ}d=N69^D@D|3&KO#3w(C0 zey>bHOhOcua0DKv3+L2q$m?Wi6}371a4$|(5X{>o*@WJMF{yp_+MKTBJc@Y5E3zY2 zPA}L<)yOkcY!=h(KUGpV2FPge<4q5%dYEN9zW0LOs;eEYbLPx<*jp|+8-q7iB~W+;uprAjRNEvPXsBBJobM=uvnl-M2XKJrBN<;U2)v zhocdSj%5eoxdY$gV!UJ@f`Cw!|Az5;W|+JX`V)Lw&2Jdc{1HC^Oz^mE{V;`|zbRcR zc%^Ux*+eh*`opE+)Db3Bs+%8EL6~i8SC))9<^v^i6|d{?JTl_>16Y_+M_)3CzrkpD z&GA&>40C(ms8oaa0$y_7UHJwm{lsdZQb-4W7FBZWRPij83{MYJ?;Q)0`4O$tgQ>wh zy%VQAejvS7075-v@1CzbDbB+O=$B3w*~e>rHj3lm<%+ux+0m6hZ{ak4HS1^)BjBk< zJFpJcpfU<4kz^{X;`{OnzcWE@aXOV#!srwL)x3wXW08A`e&*I6l)`a%JJ78SYNkK^ z;63*L^FD{#8_5%CRiFoL?cl|`mxx_!$A5xOo%kMu0m(DnE3xAhKTg#u0f&PW|4&1? zaz!cO%00lH0-Q-K2+PsX@=NrrswNEQpPMK^&9uXJwZy?fRs)=0Erb^;8}DUG4cnF} zCP^?~#^@rjRl>ewD2pL48{YIF`(+)>&#yEj|8)j=5KiNV6}T5Mnd{M;0Nptdd)xAs zjd{G_aFKDvvP6GMR4^bOsHr(K6MJQmC+frOr_*xYB6P!%Xu|TMYC$##2{e0LbHe7 zpW#;mPioWi;2(!~k|*?l6Vu=URrsQqf%&r`C+b^q*-9=`b{1sWs~M|(eWYn15@@(a zoAkb&#+Qa2pX?ybJJKr$4uRvicItXlu`GO)0efJyrt#tNLQXlT~#@XSwd(9pi1HUnER!Uo?KZ8uIYPW- zZdf`_Mn`a@Qcz1myfA$N844pY2&7g${1h-}&s_k=nE<#&^;#AOTtyC-$AA4(OQr#i z7(@7M3RLO?I5I;Ct+;+y)|)8h%mo}30>M46C=LW1S*Qh>^%4g|2hy=k1Y|v~zzcFZ z5CVV@+UKS<#iQ_$_@WZdBd3uxJ@s`k>cAqzovZZ4dg)+|UXbWZAyAsLssuj>{2{&I zFjpO=_o{mo8Jw|Ze%7frCs4JQOjjICm54xR`F1P zo+ZyUb~5NL$~|H!sx&eP7r;4bzV>IH$S&te+-@pJ`7oN+{&Mew_H889Ej}Sr2p17A zz?Ic_x#EWjQo$>o&W2AQ1e&o)c$Km=Y^HWZ`&UStM>gzk86}&=VOEqt$BwTpjq)ENu+nNLZ>B!k~jDdjgjNmxi#* z@bf~vP{4EmOm(<-cqaj=R6ITKjZ+)hAiP^4P6pobUxo=OzeQ;&;1U4S5Pl?qhQnal zZonM_ZV$k80B!-_Kj3V^@q6&^2l&1SbHe)zJoh19XM_g=R!qQ;!dlv^Fip&8n~hy9 zv8JN<5-r0Y@|BceeTxTc~1Q>Vac#lKv&X&Ks{hhSm2)J77s^ zqshcah=MFL8Lart+X`_g z;t}2b=T*TZddv$3!#iY`8a$dpJR-r{nOS?V16tT-18f&IK$wXnE|tBYiuyDTFJ8)I zu+=5e@F#WQdUj&+k>?tT_5hIo*$nUHsn)|($)w&$$N}k8X}Dsmp4FSUDiOjTX!Jx^ zK_}nYdiLmaAPn1_p^kuO%Z~MYz0*hB1CReL)3=BOz5?JC?V5H@d2tltX_ch5+f``B zjbPg(HnB$U(}$;U7g2N&6QZqnTj1x1T6{4fN#hVAfA*l@dMB|GQDB)Rm1M0`+B~*n zf%muOf%s3s_Bix$1T1Cg$pCLy6S|hs3G1J4kOG3&(#|VC>)EKq*664o!|Q*`)NRUC zc7nWa8YvMYY?W+bjNZFW(hHIs>lM9y-b0Xv#P1UXS?-otPNFsvnhhKIT zJt(^KDap^U^9#DHK32}ah|ro)|5q+4OLt=;?n6+_W3d*t7ywLu*WWK(hq;<-Bo1L* zBm`6=rNt~Si-Hr}T9_1rA*#c!HaUtV;QEPkY8k|P5E_E?q{L~j*)m@-gM3VlNo`S! zXSR7?MBI!(DQ|YH<-NE@Vk$g{hz`34HNjfomoE;(k~k32V9$1!sizTR;i0wWmraMD zW=5iXT+oT_1hLi8bm=B4TISH{gaXg62%inVrTFd*_*(eB3|KN5M%Sc~*tgjaNqZDr zxEcm{nsr34L{IhVjsOV$oArA&WMC3@w`$Zfntoqwoq zqC`gk;6M9`8z2+1q`zK7IEWztRA|iAIka;AhY%L*d- zjG2~48>S@U+IG)AI}PGyK%&Q*3f7XU0;UzctLXUFLt?j04m{(}!UyC*#>WAYt$UoX zID5pNMY**>pT;d{^GPE=nwIvZR-xcSY23Cr%j$}4bB_>P_F1__%@Sv3cEAvB%yJDyDy#-@N5G|o6DO}YcM*>p24k#6Kev%A{7n4ZrjCLjx))7 zAQ6WnDbv0Asb^HE-w@=WUlCYY5 zJ0X%^f-`LSSr_!5uh0zS?&w!LjM&WYe>tA`elbVCsP9g)T5tvc8jlcr&}#QJFGT&8 z%$>6b_LJeQQkRCf;)nD6wC>jJZdmk-3*hhS&)ix(>LyObJEGlv?S!u8aNP;+25~sN z-0jeuT{9Ln6$f%)urkN~Wv+57|F?SF7JHw@;Jrn7ZSlpqVA zo4$1-sjmK&Ms9L-x#=zDrjJ`CR-;{F@JBNt2)DK5=gMFqir_Zuo;-bVYN~ zB@drx(#Nyp^WA@C{P=xAfAJ+8BirBQ5q|DpKjY_I@(bmGzvBvFx$xc&EuPZN!2^?i zaSlH{Mb1(GjPbeP!vWLZ=^D*C%$7Vb>(l2*BlO=iO8?7yW8lAj;Q_hOlABI>ncT{p z{hMyt+~9ovg){4gTjs4?ZgGqJ8@GIJaDM;7Rmcra_!myh12}v(K*W1Se3~8ix#Z;|LMPSvq#YM-#Q`8GWC6y zZ8w*^37h|oYh3fM{I#)hZuoNXYnqE+9+O`V9#s3cT^OrNegHR*vviMk4bGas`|%zU z4|Cw`E&2Twzot33a#UY2k z!ic#hN|fw?%lY)N6XvKq4y0I>(6fJqDI@z@C%!YAaPCZB2;W**8>F2kjGFwCQC)dc zN@Vg?!&Y}n@zJxkr+pz$dz6Qm48YoJ*u%Ep&ppo~#^XQtLM+$3= z*>Pv&Q7*gzLS&NdJlwGxTdIxMkU3V9F+(+=AQUglfTPJZacDmX>4GQfr|dOcJRI#H zinOMKe(s%&dbm*fkgShEw?XC2FsU8<&6m%!N5%U>BUqQBjH?T7%Y}DHS@?_}7*PI^ z5u#@UyBLm2(u&Hsv*4fb7J;ni$x-(FxJwyV5AocEPdv)go-HTnS(9Hf=-koLQo<*x zbiXIeAMk^fizfXyKiz*~{DrF{)$CnCJ>9}Y#?F;-^?{J50(-1`GGK=6_^}!JB(u?2 ziE#oy0u7>hG)>JMfZh`+`@h!6gX zmEgk)r#<##d4~?w5tB{wREI$cF?TT>Nw&BHkd7*-)D^v zLyHk}Cggub8x$eL9N{Mc{=$z1BH=f_xkRd(m74b%@@vET$CZ{WMk?c4f)aNDTdg4F z#pdbf_3Y~^FC0YDJ?z9KaDU@V$S>C(7p0PH6e#1IaTlIt0#-cs__>a0diL(VKA!;c%K1A<`<|g*eWLS_lJ15V`}T7 zRoRBi87?S<0--@P>~w}J3|9;85{Qk%lUki_m{PEow)dR|q-~_M!$x(tP*^P$9(8bto!9&Vw#3ZrDuE@=v>##~=%ndF{8GAx&|0otBeMtztymmu%T+bS;+8(@;1 z+)_BIRg@cEdluqD#WRC_j8i4ca5Kj@joPIodoPo-bHdij9o8VtUvt0;O|#3(60gwAT(-^3 zWjhFi&j5wsfNCl@($6&58e>U$*Qc?Jj%~O6Ib}5qC-KRiyWBdKZl+V>WPAZ+RBo=# zdk`{nf2~D~|6P{(OIgXBKtm7S54A$Vwzq8jTy1ZmLePAX{xlkyjV+p^8MY^fZT-K% z%6Z=eIVa2?+i=+Oer#=pNl9!|fh*I{MVltCln>hO=R>L1)mFu-WG2ZVc)Pu5ra^as z2tlX?E#)m~3FEZ1{a+>wasvTs*^H7`rKtdnf)BN^?O^M20` zPpMxKT#&5mFWzU%WhcM^nEF7ub%3|6GOi8Hp6Dv#iZst;SqWW6vGacA$Dk0sJwk(M z68aw1w-TPi@N|Q71rDri`8b8nnqS>L3*U6Oa~m!Uj;0)ha57jz+wmXZ%EKQUC;S?( zi+JwCw}|zYEI$m@r%r07(X(cQ&SN?sgGkCay_qtMYA?!aw4NN$K!Vo7sw`arv1zS1fnFZ_x|)b6w`%=P5JA^FE92Um0gyGvW4`+dphe3m%K$)o@XELj763_I zQl1h(_n4|T0T2oRPbAy4?1NvhZ{6wS41?GZesZBBN^}{WMIyA}ho6ucZ*H>+=k~=B z>JGn^f&CzQyLOxr2A}fsWI9?T6ZK}(MM|dX+|v_~%x9d)DgPXNg3xA_i*g%tKYYI7 zvPMaGCa#?Yh9P;5jUf!)C%QfZz*b=JK(bp)TzUa@h{>rqm>{uhWn8E^5(??lqNPtL z(xo!3_aRa|2MD$R2>z(dB7iXM=??(t1OQW3ds9|Xk7%3^R^XR(R;k~x~ia5V3VfvXPZgRli~!FZ=*r`LD}0A@O#qwzfwmFX-$1)NFnul0 zUj}zshMqnJ@c^pm<^Xxfb!-@fJbZ)zx)jNx#LXac8$^2PS;n5F;|!t$K=PRbigfIR zWqH9xRhOGqw{ey{9%of;3z4(QtveM0U5eysj=4VHcu0W!7DpU6aG@||Tz0KN@wG1F zv5jJ8eXMgEG3kD4XRBXsD3<&zY+v#faV)QB*%cm9o(xOi)nt5HXV`w{#^G`{_K?r7 zQwgW~!PL0`2;vyB+Z1Zz)0mYUAmqc&-2f=U0kY5N0Z_Wv%Fl%1M!}jzn z1E#mdz00nrm_dA&voe`MO2~V*gYHC;u!#mS9UukF0qY7M!9@62qtRgoaUB8*ngd?7 zafyaapb5uHKur|^`ON_f0?MC(BtmqR1Gvf!0m>XLCS>5s@kHnS@t3LXw+BF8bIjoH zCu-~2&U$4HxSN#6wCohRhqio6F&7>Ei~~Wj5C^dA{AyK8KSlsoXB~b302u(>&8Wu) z92krF{Em&F_AyS`m3&pkM*)=2)4L6LWjJ#BDRK80094R}R>(*%2$Dz`J3?vfV4K>m zm$7-)3#0jYttK>xCV9tD>nh?o4Q>b=H7c42(R#ECoDZBxYf%M~+E#KAKkl4st%1xT zP9r0PALo}t_ z;0;hS+Kca=gNtIZcs9m=m_fG|-(z-1EY&mpnYCF4-FzHOQ>NACdBUZ^yYds2=f_Wp z0hQ560U%ufVz!@{hu&RC>d$A`5w0*cIct&uuuTDbtG*vwH2t$fHsz){SrHJ2f|T6` zjLt{Oq(#C+_R-zt3hLRteb-K8~$!Q$QnYc4sToA9|2kB9Ud#OxWz7Ibfs_9uNxkJ6=yBhf*M9=gheFg-S?50u1C zU1`VD?@n1zv&@~}M^RyoY<>n86zMh+WdGfLChFOj=rMN{gF$S4=Bnp(o+4$ktclfI>?1gmmh6ug!5c=Rps=?6K=!=hKUC7*%(ix^Rv2+Sh$aN~bx4=8(K#VQ% zWEGx_)ADOAEwMv(xfKFY@LPX9e?#1_G~wQ zWy%%=OvsCR$_2Rl|GzEP4&6L*l98(6=;y~bYFJPEDDrZM}=xppff!NR>w;8NZKWHfl6m6 z;j#}st#~m~Um-^s_UB`s5t$6=!loAK?Z65>P!+`j)4YRE4W$p3qw|{^bX&+s%80t{AcGS+diElNZizc?#ajI>M3I; z1My=d87XXl2TvbglPY?dNlAg|=SftK_SH3P@!PRD4N06{bC<+Bi?}K-sAR8J3WI=& z4J3_@Y3NgJaf!)K z#YT+2`JeQFR9^=q`!7$};1;;cqy}-(BGAn2$u^g{`I$k_;z@xZAHevnGXW1)q2YZi zK474M+oXZoO{A2(>A`sz;@cAkENiUG^Xr^!*Iviz6Nvi#qIOI4Ok@IupBpVbwx|QY zw;9=?1zco(vO@rsJNB&4;5B-7QAfAr(Va}F7(u<3mE-p|%Y_1zqLM`{b$A3R#ieC2 z$BCkOFvg-%JKuGsN)oXxqAO1``Ge*P(hMdf5RRo38{=J*OP>2*aOV3B84<0jBhS77 zvw$)S(J@tz1wNAf0azPx?~jJ0C>2)RAb!L&lWw9JS@m-{%i*A&43 zNF-EhsmwirP^tt5-=5%P!n>*?c<0?!~Z3?$~c#9if;%D$@1fU48p79Jq__@Al^f~M`MoS z3S0#d|1IJ;0bam!4Z>R^tTpIKM0h38rU3jkoM}Hn`bXe@m}mg}5@dfW;#@%*Ef7zM z2DAh&Keqq&B3udofq9T9V9Fvst(Efv$3)<~f;4>Kj>0bxFv)PwfO`SpuHd}_-iH9^ zB+&O0&zf+w<+B$49gv^Zz@LWr_u(3Xo}IuMgme|ae*yHyBF#v=LoP^GA2^yJd;`)_ z0$vHYH+a5BIwyg*C*JD;_cnq9Oasuc3~~M7=Zy5i@VyRc+(P(e;6W5Vjln6rtUciC z0Z$X8R|X?IOvwS4v7CAVLuSI9&sQ)A-f732SDEv_{|2)6W|wXAaSibDs&;Ml!;X1D~E+8 zp+bAJtV7~dROk^@<6QtSe@jPxIQ8u3lzAMW_T0PC05A|her-YHH*~7n0@{Kpye6X& zO}_O)PblqYZy}@dA^_!l+Y$P@NvQ1XK>cNJOyf0sUGw!s^VmI^8V>DD`m-sOGGPV@ z%RNlxy;<^Ct2tOwRcr%2zo%x;lzi<@!;of#g|Urfh`)>-Rh{0_=6 zP<^h{v>?$lY{BaY&_g!FIo2s>6>aovfx|>7bxxx=-t4KaeGD#f4^Dh*5aY?q6Q&tG z*@1@}qQn8_c!iatuqjfY%W?F%?coWmg^++>VFZ4_$gGd=xDBN(<4X48te^Mh^jff6Jr^2i& zL*nEo-}d9TGPGP?39516#io{x9wV`#0F)ymBSswar;HpA9$1KnA6mA-5#b>mI|~c1 z(p+qUcddhQ3DpS4q+S?vo>l5NnPMH-SR#?fx)4;KWVH(uq%B`PqgITkO!Iz_z3X41 zkZ40VVNLZ+@B#-(i-2lDj~^!&LkTxa!2ZR3lJ765&2KK_g}#~Gl*77WSDGNb)(Di=e^9LWalWHi8y;$K&3>2OhUmInvvEL1^NMD_tn&NmtWq*mKBBTDLAYDg-LsR&c> z8xTiWIh{Y5KEAkyD$Uzv@SVrUziCm-v9+!zLBay<MUqpzJ2~s%1_^Gw{RLEUO<>T$|`1Ynabi(e7L%Ju*E`8 zXK@FGQ2lXz+ZPMcmD5gQezF9fu!Z9#Y5mM2irlnbDZ+fbnfo!<4>O`Dg@nPeq&4o% zB1*nAfUP|#Zb8(Hf^7M>;}yhq^sN%cA}aX2tm@^G6zlMmOj{l+Y=~+%VwDDzJQ8zw zIX7?@;nsQ>fl)^X@?8+BLhRxj?74(c$;`P$;Qiw>(axwLi*N9*5Mq!DG}iA2o{kZ3 z!H1gehuuFa5-xZ72WX*!&`nL%JE;5-j;}p|o+EIl-q0vafL6oHRG*Rw6ImphLN9J? z*0bSJ;sk`Ng`x04cM^@qFDrl6COJKyI1nN7NKB*U_H5St1$JU*!mbe#0c5;IEnX#z z!#f)N#;PY;5Iqx)tf$Fp1p-tHBM}Ir<)-@N$ci;D<0R&%u)JDNV=7_Dr}fMpMe@BI z;Ymnh^4Frf3EzF9 ze~2??cbkI~!I)(L;#FeYx2EBG)^~DPd4re?Pgt6Z1DPlYP5lwmDXL9SX=&JNymXU0 zqV}e!DEWd7C-)IMQWRHi++FL&+r_CdO~+C+ou}skp5nv%?P5M9uerojy@`0 zAG*`ykN?8^@mNRFMcaj4)y7_qIeW#G+P&)L`t8t{qFVY>3kN8$w5#u6tm zB_vLuP4)_@5l3m~Y5P_UP8jwqzO&Ice27D`BI%d^Rd zO@%4PM?bHu#WQ795>pG@XiNavS$A1Bo3nG-r`9w^F$$Ch6rkvM{mnW;5&pi{U5>(c zR=yrU@$J1SVKI3973|kOYV_G4J~VrNQq=c^#7rZ%Yp}WmPY)t7-%Ft}w9}R}c#10o z%#eMDmp`Ou6H2ZKfeCqdYJ|~JMoT@NQJoSF**=?YHyw{KkUSlMF8P3L%IeeZdiHAW zNytU@HzQk6xs4AdFFl$M!}t$RdE_K>b%fn3Q^U+NGR>9{dp}){<)&EL9J$%L@g4Q7 zRajCNgIIu4vk{_@n$+t^mC#xm1(5vCs|RuL*|Ylt%+X%I1F%vUPNXRj=6K)hrk?fk z-H!RdMTFr#A|4OiqRM5vZI#o&92Xjgh9@8HCEUe#O8!FuQd6|$2)_lvQ2jr z2WC$mx0sh{K&h@8l&K#1Rl?dB0H$^{2f6!eluv;dzs6`b`Yd6tne9mD<>bVEL}e4PGPVgs z8%oDi2@9AedD;S;r;h5*lL@lN^8xR8%In`KN$c^#8$^MTCW)snhhFA~Sv88MujNn! z9_C*Ls5O9+)67HeqGpYTy>b;($cN9pQ6hZu%@-iZQb6O&2J9}obw-1W02HqY$rtLj z*R!R85jzcHCrT1V?0J!+Ps!*vOCZv+b|(}>CTdVH%>geYHn~gw(`T1l$cd>j)a4wA z@irsfmz+LQ&!%qZY;O>4DOS#jiHECDhnSgjf&#<=lg73q#O%RYnuMKuO_`fPnR939 ziRYZfz3|~=dzZASp=YP-)ER6LSHhEK4Hwhfbf(xd#?GOs#uRvCI5+jIe>zieqM7qo z*r*Juv;R8AKLWG+7mSq~+dQw>*qmT$$!Ul6%%{!)9j;e4d&&});TW-k%~mv6AHw4V zBZ++Zh?@_xN1gXk0}Bvcg_=JP0$pEU0T5P5!2x91*={-SCQoe}HJ0=8N8i9T;N?X? zDSs)$v2zl>5I-&+metVA!JL!M|EP{&%`aI?dm@2XOFwZikaIQ~`#;7^s@OmWTr_Sl zd#=wKFcD)1@dFa6y8i6(HF3eS2*! zK~+l_4sCC7D+PM9ZqGkd!3N!eKEKia;l=Ybs(K>qqYm1haS!d^?Aa$-4jJ3hE6+iX zJ<9A^ZRnfHxYncbhLL+)0qx! zf_TAIfNKSpfelRB%o+qIPQ;IbPgIcm)FlJLiS$O5KHK5+YCE4G(E@bkhTVJ%boZrt zm{{u;$Q2PZn-&%z%Q)f6>v}m*&(ix|-)hi}Kp4$?ghf(Vs;q>v#i2&d z!Dhs!qXLpw%SH-ii&VtNz;<9dByBP_R+&l47G_-wl`OcEtTHG7-3o4UauCriEI}Mw zU1zrDl*e9nY25d^?{j$NJTP9@=Wmjx?XgXz%(nIDZ-s+@`ERDY2o~_Uq{$!@W z#5t-Cl))^dUWQUHO`WCEW!gMK(WHASY|d(!{W$Rj4iFEkIRiB8v`^p>w6=NIaA2`6 z%Or26lEsdK&>8+H|GV)F=j9dxf^Bsob81=VDRbOc_X^6*lz;4h@zfjRSqzSNplhf! z>Ji0`g&lDoqdSwGuOBO?-y)(25AwBzc+y_t33eB4jUDl$X185$x#AML*vh>Ox+zk* zI_~m4Zcf-#t{$d@seDO^Mk?2cz-_+yMPjkSKW zQ)|#IKx6}aVG5!`S|{CPN$jr=&Pln>?w>MZQS7lvY!mK*eTjrX5;2jHc_4w*J&`bl zv9wd0eFoibkhp?Ss#)i<4ZcuWw+zcT4VEn?(Cz0w!LUsE9=9PfkW3!lyI+;S;NHL< zvOU9qTp_HKV&^}+<`c#4;NRmW#*oek1L{=>VaHRdZFD5(`yifVE7ka}HR|4RuEJfPrcemGCv$3m#;~@DoENe08d#O_#*tXI>;ksqGWzwFV^QoZK zrI-?5jl^v&XmS(Qz{id?8P++39|A*y!J3`!_Y;ecsVzD^lnydA0>z^p4%@^yuCvlC z*yaL8VQaQ+@UvRTdIiv|S%y64r}&Su>Kw+hVQ^juJ{ClXTE)%uIZmm@*WV`^ZD<3= zDiA{ILg>4!W&N;0KN$RCSC8Gjfvw~ivb41psk%zMs>8;;SOIyky}i1ES85B1iGsjD zm5(GvTEbCf=?bSa_`}ZKrrRa3(NQt^<5vUPe1I)`A6~nRZacQF<-$5*hA9D*>doXw zeW+AhwMwG_cp61_D1Yi5OeytOhhlJztA*VJ81H`^m4Aph5Y&??Pu!!#B|3N@v=oh9 z(JTXou*4DLY_iEU_55URib%bIxJ0V1xsuJAey^Ts>)gAnupT7&2DqV472ZB~7W`wu z2a~@Yd%2;0d0m>6lFHZ(34z2Wg&qldR&B^_C#VI%0JXAsB{r|7O3Y5&)JSg=yOAh0 zR@@2zo3BU<@$a^&CD$|ck2PJ$0JX|h*Z}|HBI{jzt1cUdDFZ|}@tKZ%2$!x1F{$XS zp4i%{XdMk6pOFh25ntGZAA43?>s(j2E3Pl`O-0-yp%O0ta_D%n$KTis10(e}lnTdQ zi^o(8n}JMj>@MZ^P0yDQ^DEcqjuG-)CV(xL0Ii!v81-!S;i1bR#cg6pjOwI3J2?x6 zn0qcT#3W?`TX~rc&p}_b?A>3SA#zDRravv+%0N1l{{;WnueWQkC;t~$8<{R%FT*x_ z$+wmG!f%7Sn5Xr1l1ue}>#Agb=hc<+cGVTn6-`=?Z+7OU z!qF(aa50!u4%$3|>7RpepHyLc2j9W2nzbT8L3X5DQrolQ@-rJ`Q)*h#sEJa&Wfjp< z&flrOc7`ACuO*$SxuDin2*58Q|3|pOG8|`crtu>?8sgb-1xp-UYBNTe`6Kn-l{O&) zd$hipjP;aXDn|kyCZWbv2%rIeJX{!DbGUTWl(KjZg`+N#-`;^aN)J>OX!pLZe*O}! zC)siACi+FC!dlo)glpJ17d^JxJd6XO05O~0j?mmRwKQQH0HT@Wt4*PNOi&3s;h|xz z9DD}Ayl>rcB2KfZb_zS-4^z3zZ2E9}zw*d@m^#|B)$SdNh_wJg!_eEc9#^PCnNmQu zf~IuC!y&bXBM<~D@=l_P;p=Xl>g%DNNR=y9*ae&s#1HV6WS4rPPmH3uM8zxUS()x& z&AKeLlw%k=K&3?;X2>{iE?x?D(|hnC)^4DyG>>8)S00e-j>v^Q@G)M5%@A8% zBPJZUS~(k?MSn`tXT($D=UBL4xVmuS2>jfoo}yXqYEm22$jh za8iyH;ftctg)UOrlN>_WaO``9b?5?p*d)MS0<0bL96zU##N+I{p(X7Mpz)QD7Xo&K4$#t=@6y>+$H}0D?QSP8|b;ZrrB3PNNP15VxB)+M7bze6R z3~V%;xCt`>#3=jwgZ%XDZc;I*EK|+-pU4*%gD5u0I7P_LfvH?bY$^zD033E4`9&gB zKIeduYbC<8G!kpFrRsJZ(9Zby5n7g7Yr2CwC!uHcCBO0-=_}0QjLlrDDO0hafX=wV8rUib!h`^im0!U{iEf1wrkq*p+c#0Tk*DP>qn$cEA!(YuPU z7rqd&be#H&&6ImQM-x|hdxr*j12y%Cr{R3TB`Wj}aMVBVM-A%_=Iw_67rf7h-$=N{ z`1Zy3eYm#xK8x>tc)G%o0{msTF!(LR6VnSWlhFn5P4NzmCs}1YC%}!yyLbXGm{H>7 zZKK!N{bDDiM-xmm0`vXu*{vYxaLg3qef`;^un3mS=GtL?s$%jVn^Iuk>hok6zohvf zA>;+?fs(C+oM+?czjGGfIi6P`h4d2MK=g?wkJvnF^>xr~!anhK%N+>0LUL4ud)>vz z$G8*vj8{*S=8qjqEbYHQ+)7bt{yXN=$#{OVn1b0w9VUI%Xmjs~u4Z_<__>7k&i?2x zKuelGT3E7n|C_Mxo>#jQoOkV-VQ4uJl>E|>Zl!IC2)MUe#oBAqmgw1N&swnbM`m;3 z^(1pY3@R*W^QI`azTu@I>EMtHr8eR+wo(a2p!oz(PGjXq_fB&S37)0`ReIhGV5XTS~_W0u~iq^(gDgAgllam$zFXv zV-g$Dws@35TtN7UEw5`HKO!dMizhjMd-Y8)z85g_x@7K}N(eIrVuXi934viH7hhOR zjJQ2|`3z9elu}VrDkDC~vS4ujcbE3K$cubc5F?!)uV-^7?%IgklPO_o9bo2p?>Qx( z0EHbwI16hxZ0V$D?>pRw0SYpA&FLKd%RNW;&5;01z_P!_)7 zz*l6=)rIZ>}Of=h*re~UC0C8XsKW z;v8V3sf`Nz;brWJiG{65T`=nxbhj4Mr#FX0xPz&ij)p&VVU^%I!qHS2?T2sr>7rDa zkp$0MQd-YeuU!{y&>d2lL|^#aP0h--8Zd@9+jqZwD@_+hY`05B-#iz+TNsjsdE|9* zjj*>=Q^Vrh4Z&uRpFVAuWGN3Iy#RvZA*u*TKDX!AU_^VgHmR?J86*pJMU$-(d)dal z(%uEF^^1X2i7!GRXNK2*c4I;rVi4eI-{}ONF`P#Sh)2DNN4l1*V$;oS+2r&G&VLw0 zyPsM>`@ju>s{+>qj+ms2L@xU9jJm3SHq{-uHCThqfjoC$4mN946bvIEyswl?LQT26 z8`%ICVCm)%Yde)&bsB~YI@KGBTlp+m3$FBR^qN->hyLXfh_$LkOPivJgl2Qcn3Fr0 zgE)4X{Uh@063CUh~VJH4m8*J&R^WIE(cu28)G|&#BWnvOipsq- zE`o6Bx`H6)H0_ziAzU{0rURr{g22uMmx#jY=qBR~XE6+(O0|Zc%Ks@HKi2t)UM4m| zpo)vI*@K$vM=tc!Gq)x2sgQLdTpCuYN(Q8{uX|mn3t1O zq0gP+xB6|g&RGFY>9^+>GckNgg@f+Q-KlpW%1Xh7$K7~Vie-$1;S_NbfFOX?Dx@PY z@HL=RD(Rz_w-IMhpl}4-^#?VBypzX3hM?ksbPV_i(b~Aff@KEw*IDRW-Q5RKi46!MId^zp2v9xJv(L|lVfHl#-b&`?vh5xi!>4~zYLs7b z7zN_$B^7FaJXJm(CLJi-k!;%IuZQwc@{J03!9bJPI9GV)`|)Bcu@u6js=*J(!4~J@ zmE9@wLE}$cBL}(ymiD59TO}YhR4*$obLNW~DkNZk#U(1ajG7YA1vJU0^epS;zH&J0 z5pc~s6OXB9TFw>W|a z{zoBnMl~wr+Z0(zT(q&9g%?`9yzO%RqLG9wf!ac7NUSajhgcS#>dLb zOY88;n4{Lnal6a1{9lIX(e1I6qBw zVL!m#c}LUvVojXPm0LV932F-@aB1pFjv*e(f%+I?RmXjHYS1v2l95^i=7e(DM)d1( z+2a!W<#ehERp^J(&!u0Us1bUw+xAytF?3m*@1!E#05x1;3<<5_M#7zk+X`0|?iCyc z27aOHE(`!-VE}8SK92}R2A}$!ly=EK9)g6eZeDKnwpQ$xXx#{!A7i(DK$V@NumSu^ zRox)=p+SX(i^WcXdw(jrTsSTv_rAMVNnB7gh(OOFRslHX|JH0&)U2Wqvg)L0WKu$6 z^-8Ub%TWUC1PBu8Mg*ma;B4;ru>rS|T5?OtY87v^D0H3#l5)IKk0i~`qwkjsCqRZB z((~49&_kwo&4TdFc7&+Zy!&-fQ;X>MZYbB+p=pcL!%c*11$P53 z6zn^Ic;Y|+DOvDa!@-ePf&cn8Xx1=|#(XuDE3^#n?~xG=YRcB1qA z!s2EGk_wRX%En0)N15^9C{OBW-ofpW)U;faG8GReUK{`rxo}bsp& zp7fMnq-)d&Ks1n?`c~!zg^xPW7)x?wX~nA7DG1jg9M><=)`2x3N^`s@LXM-B`8g2d+zfLXYvwO|P*`lk ziQE3N*0&rjmOU6yI+CxWX`WCFLsK?!EVBJCKLBIzM#p~j^qXd;adI~0|IXU%R!%C< zRY*`nO76?v@0Nx^yLVme#nTv(9jz;^L@h=J8h=e#hCwyc%37LM$how%9YVaDUVMQY zE%JukHHfom6z6hfR+2WcR!9L6X5DyVrEh?PANxLk)doM3YO}B ztpstAXhpGA26C;nw7%DzpU!0}t8~2pNpF!Mh>kG8#5IN=-9#sR%em~PJ=YGLo8VOs z*Dm-ZVKe3f4cBT-iX`O5Gt4#N8ir}hikS$MN8mWwN|*^^on$cWu@)l4d~n8uh#CNq z^u>4x$|2%P_)`@sPp1 zH&c;GEs?iCF_@C)3IWJ|pDVY!64GTmJCM3g6~bi`R|m&P?!svhmjsx71H0)si%?>K z$xHEbR>gzm(`^W%$BnTt&j@1TJ?bq1X)pPpJ8na4kYz#mnR`(h0}G<)(Jg7^kqfZ| zH5X!4UWn$&5v}?#W5! z_$hEJA4MHPgB*Z(8+y1Sc+$4_L%7;NK)vfyIEX&UYT!8vjyCdr@J&53zXwkq0T~!+ z76;Q9D~D~|vAfe3$Zla@l_$%6Sq7!hMEY|CIs}u2m?%N&c zdw{ID)$k;w;X&cT8N_uro`!X82Lz?meB_9WVEWh{H;A9neL?^0``w#&#pnDT01@Z1 zFq3_OEmu<6UHs4RZ zU_WQCSb%cUdbbJ zL*@wI>Ey5x@EUPf;MoFk8Xzo!{NQFHZVJ9@08caE+yeN<@Q;Nbt^$zVMY^=$-i_?1Kho-=`)1Qi6t+lTiNh)WX>GEy`O_67S4a{SMB5bXn>v0k$0swR-jO~tb5&)n6ImH3#pK&(bUO5v_ldmCnC@Xh-B zYc!d_UkHI3FJAn(&Ycx3_fw~5P49Xi#zKYSX@u)iyo~wIr--f+FRzS5{n4_$7nZF< z{kel-3_GqrKb4Kl(Z8@_6|LTghY%`hWT4?p?q55BP!z2@<`I%!PBC%Yp%MDIwh$3e z3Rff+EY=2da~|hxBbEb>t^#(p{!_(?&e9FrK+CwA&7;@Y%tJU9gUQQlnF*kV3RaGA zbK{bA8{Wv$fTujc=~No2vOBQmc8(h*+daZ1DUSi0JvI@6m42VtiU>9mflA{b5Xi3g z@H`{FqoGMDT$K`_EE0TI_X*BpXuw|_hgO-Uw60xS`MV>X|xT4OJ=;;%90mg3s)C~pbEkWIqvgDn=^BT%h$nIO{ zDMdL2YFUM)o(||2uNQ*?=xZ9Dw5)2I^%rnA+0mWv3}Tk#Q!xew);u+T(%FSZcEFi zRkm{l)x8M6Qn({geKEu1EV;u*z9AFKtIp{7-1y37>qo+GO zjEjeJ#Y3z+Kz6vc?J6QD=J-{K*%6DZ2Z3x_s4KV~B~*AVd%W-1N^HZB!0<uA zc4NN}?E_j=fQ*()7KuYC)Yek_47+`vR}RdiRMMW0x`b@E0gRljdvoe15bzO;hFW_P zGWET3XemKDwbWCuqWiD366H4ELMxB{p?NENi}gJHOgV z>wsEE?XvHPE6`BU?fZpeNRXA%`5j&6AwIgFJ=&1O4#oE=XC<<+0#xxcKgBN z@nTtoN{VE5tj+X77x~prP`d?^7rlC%(X$Dcy*k5o8^Dx*_CwjeNgKWb8`TPpa1q&Y zVANBH55J&8@n`R6sy>L<@U9fjBT%@2AM|$9LQ=VgN6`EJ0aDE!ADz0aU4wjJl|YF>8tOQMT-A#6ECB8Ix5bjPzTxvd14>RTPw9jWGWT`Qr)uTagM5}r?|EhcdJA355y4a zH4wKZPm=FD!hD9D)%Ki-V_U8NOW|VoU{(O6M&o5-_<(HRGgAISEcZfa6O`*$M}hsW*e;m zoPQEcgMDE;>IsEXnvk@zTz97W=2iV^-KoC$n8kWO)z?!lRHaD5Q~dg~wQq{87Qd6` zqL#I{I$a*NAKj#L z+WDAz;tWkIuVjOXCtE$Zb7gkq>Z?we(yJ|nk4d<=BAg4LZsC~>*By?gu<39lfFe2~ z(3PY=&%K@Hp=U+EL^p$w9b~@;AXSA>gVO$hA3*rFZ*p7Dy2nj8N`~wC9=lw4fiTnQ z*Gs%QSpo3jw#ieVk23mAqIA_8uo0N>8b5gdNbjHU1JE%)1G~ahZ%95Usa3$z3c>s& z?TrL#Akeq;t`OeQ`+NK#T7|pE7wK8t!6SJj6J!eXPK}GK_8@Ne4(wkY+>@D9*!qCGSTpdm@f*mQt`ZJ=50cEBf}eS)gr-1bYzt9Tmbhy~m~J1! z4bf48}g`Q1}4aLRRTgs4L>09X64BCCfL!xUilI^n6dlKj5UH|d-=`D^)Ez`1F1jW03_?caKATgl zEy!Jg#Ff9?acXOl&430Lx~;O5=do7ZUzlajl=6sZv+UUnd5n`Jdxn;-=rT!qCwbB4 zXx}5zzQg072xzO6$2P;>kurvU16r^Tl`5=ew`v_bMtkC>!Y0`Z0j@F}ahUR?Yov^6 znjKNVQ3mdpzz?>PR$WSf`g7-Q-HO9#8XEa;Ug4VsIH)sc(^es7hWoo(}-I<$RHwTXJPU2vb_eBkzh2PF|k8wF8t6W~OD zc#uZ%)$=d-nrNx*U{b+UvI3Eb-yut}*us>S1H3o9F4|YmY!l)t7<8l67GzoEN@MH{ zV{+2%l}h9Y(Y|agH4`^PuS!{kt#Hr*uZx)>J2B~K6z2kwDtJM%c?xo7&zLrJmq=m~ z@RqWq#4quXB8T9kfs&c3{UN@$4=&*q(rO)LeVopAmo5)+9Ic6G}4 z58N=Cmi9TXH(pSMkj`H0Lq-dfY;gtevzU9WMt5h*HCUM++pq;PzrPZv!y7f)>X&;j z_)7A*ru?gb+?0R*`b!y4#6+SXg>jVn_&-Ic{sT*|agBKvvTHyXMI6j)0EGw>DEdVF zCm$$McsmfzS>idXfm?Wc*09`x$~tV)k5R~QQ>JVb-;bLG(BcEw>aJUkv2DK_zc%3b(bO%W-{80# z;mL=N2J#33=YyF-8q(T>FR09KyoU3A!1BHPU!i2J*&uOFFI46=QVi1KX;W|PJ}ju_ zesMPFX2=DH|3ltehewfgeZ#{{G7ngF-BWey)Tydde(D@h#|JKdOAl6T z?2K!!)aA}34ym@4DWJ}z0KP44z@apF1sGL`C|xFb8nM@mY&oHI&a%-Mc(*Xh25Fb< zTWcrOP-dUf66Sk=LLT3m9-lISB2e;R@_|T2;?@-hx3P@87Z;~8ZhBqD6w#IuWkkddY((ay=eLa`Hp|UyC`vW#+*Ig`Hv+8={_2 z@Wj&Sjo7y52+W;FEo=xaT4<%xwl0#e7g>CgNT!%5(bEW%)G#Bg&(re!Lb_wtV4OsQ z#>MYa6OjB04nz|qIr%U-`O(+*e~^@oD>93t;NOZY*+q#2?Cpnz0uY^D{*w0HTXIS; z8I=zk{Dq9jjZUZt)REDUK1|$)q9^@G5Tb6)J-K`)2gt|Xbj^N(E73PO?*k9lObV99 zOlp_=QE}8RrOd`WKxML|e@gzr7PgN2fEMZGikg5U&LB>p-k%PEufWmhKqKQexD4=b zig!P_T_|9YY#?j<48;R7-Bqdd^=w3*aadMe?lvIFh8uTWRSk-<(z3~X%e4Bewb;kB z4ACZHQcWtbd)5o(>!+ctGOf`%P`&k;D`AY2F!p1;fpL6;IY|(>;NcV(DOQ)l+eC)f zhtTcQ*)i2jC}SoWuaq2HBHK5QgXF0cgdnu>Z`0TGBZN5{mdyZ!Ehw?HOs-CZp3+h&{i3VZYhAy^K1 z-_0}_`Zla(Kqbix;!GG9jxIFH04waRKSHYh06by39z}un8FYD7LEbw}Ew2OROAuz{ z8|)@6-|LmW`ChxdKjsJg^w?5ZC@c0QP^v2JUl&GOS>q7{HIjZvt#D5&<~R91Tm8lSlM*xspikHSMHsNh?sK@dlAR#kC zU`3suC-5^Ldmybne4(jf?ZD!FU5!H?n1jH>;9hP5fClFL__oxBb$AH8VvWO|eA<=S zavJ|LNQ)H0K}7e9onH$b)@Eo#8;0zd_0hTzi^=S40QQZv!m*ynW427dDD3+q^nhy} z17UsECtXw{7b#Aa#05bJwJA*Z`0*}{x}+3z8s3lbo(Pu_4vRufL%I2G4&f-k zpH(h)DFMP~?^ANwM57Wd$0kHG)aL_<-NwGS)PqWQ=(TCpK*TN1<LKU^Iu z?XSukLQnB2Z_qTX$+qPhW>*@#l6&0pt++{tR$OH#s#1)H@5 zJ=F+Cg21UHZ4bNuQ7g_mM2Hec)SM0FY`(Rv0ZY4``e73o3*d{lYS7>fOTC=t~d1oWAKMLDX`xio1P#nRomxk+1*lC-w7p7J1Heyq*jT|2OI0tFfPD+qYtyB&aq zU+@iHZRdOT5iYTuxw*(@8IQ0?f{T*Ek`8^rF4p7cS9{pR?!+g2JCHBQf_=m&bck%W z;nqKDlu~`uC{PfNX0W(x6r~OAaYIniXdd!rZ)Yo?4MafTW~8W zeDQ|ef__9REjc3bCm#`KA>w=`&6&PJe)6KV2+lSAS>_`Dwt;CCP5-ktKDz}R?~Vte zR}D5;YO$SJ_da*g>ru6_pffMgT0Y1iBvA|_jwyI&ZPe+d?zt7QX`w$FzPIcF&>#ST zO~_>FLi@TdwIJ)XoGkS(IxB=>^Dk}nsMqstWJ&hPfMjT{EYPO1 zmhW@&tLB>hygi?w(uqb+u-hmUpt>)J2OD+1*?87R z^A$o}PPI!nz_8RDPk3(ScUO0u?8i>aGsuPuelOT-k@*@yR#;wRf|xJ z(6`yr?51TA;ufK}MR{Dul%_{4E98^VQT_+?Tzc8aD+^jV=XHDyGgO-szuPQJp#h)QtxP4= zt%;>9Irt8`#F}WJMr2z}6M*feWd#rdGj(zbJ*$-a6e^Yz+P#$IHT#a^e3f$?Rp0 z`fb_#CkLv!5AeA`2ek#>2FgeoLwg@L?&dnmSf4+&tLUnpBmP)6?8yD9%oVsQUGYm+ zw!3`aIM^xC3N?^bdBl%l$G+^(;!IB-r>NbTk(NbHkG2La)t#e0tMzemkmamA#G`Nt z1JTf?S-WiD`K@}MfHCbf#l%YgI(Y|7<9$C?1;)T6CU&0!$a8@6ntpK-@6sHg8ZtYc zmw8Q4>^9`rf(NRXL?i9V=)(PR6eP}Ry@qvZd*KSke1n`7YNzesXbDqa&W^;XTO~6n|HmWSKZ6ya&*72w8^Z7T$m0Ie5;Uln@tC6T=0SvUM)%bld9NT&rZu*g0E@#nT+httk zlg?Y-9t;GMBpwRa^d9Tvq2-$CqLYUjq+9ph*?;+PWo#38|0V5vr%i;lY4cz$p9X8w zX2Iyza!|XY39r8;hK;D}7{Q+17zT6G&WRCq%+x{CQ7n}ib=a1gU>=(C2C%#n_8#IL zv^=@JmOTFvwROUTqC*Ew3DCNY?^n=-*u*XcbhAP`bG2X?y_+m?TiWzjvOBHC&h`Mg z?a-LG7D@k~<}a2V|Gjh&+mpL3=|qrQ5zQ57(nm8b%AcjUGjB5Kc0P$8RC9k%%P|DW z`P_AMAKxP&jL7F&?_4<7nx!?Z=SuZQF%k8YQk4$Yf;9G28XRKSgtaY-vZh~B za-)Hp6b+n;pU4U!(thDrV{=_Jez&s4zLD+7rdu`O2@&d|kYi~7nB`hMAj-0X?fs*C zS$PjasE5GFP@z6vLIXSk*yJZ0$$(%o?N%JoWjK!SA@n^27=(rdZWJ03cw>4r!6T4W z{d;Vri$YnU1ogoW;b=#jbp24@Ogq`D>3s(eY|ZtgIe2rznG$Z~N4i%0N$Eo7dt2ZO zH#X~=mO-E2><3LDAvE8OAV?%@WKx;|Rv=LvoaP?3Gn-65QlRx7UAmH%h`y5O$;~X6 z4Pq_OWa4V2aQD0-4W}m7{rH@w(8-vsC1l0&Bitx7MSPPT(nJ&-di&HVD;sq#a+qWt z*C-Uhrj0*BMwi+No#Memu8g#a?`dtu%>&k5VD9cJ7KPR;sx;d8w}eU>Qh}iK@mZMg zHNR0GnsCqF!N6jF8;e{FLdgp)K?CbiaR7-X(k7D73LdFcxx9wMCIo<=B15%Hg?I!A zlL3+lJKI_94RB8H$GIsOTXDFQjD==rloC7KyH6!G!XiNwXY||>55hXA(LMxRXf|R6 zYhsO~TQ|hf;gkFcHp@Y%r!(X)#by*LoW&DYW*N_Ylp)m9=_P%A$Yq7Lop3(fZ#7hJ zow;L%-lAA6_$b9>xN6|A-{8vPn||cq3=f(xt--rIdE!UsV;%8s&-=6_WXO+=D%rRe ztJoz|aN3NYrmBR3S}_T`SV}@776pV+ZQ0vS{1j++gBVC18`#uoiI8i>bX8~r06zme zaCbM(NN?_+Q_E&qO_Oi3y;%mdO``T$U2dO4seQ&mlSipIs5+=s3hh%bw@;ezQ45#^ zM}wX?79V>1FvK81lP`-(8?9{S^Abjz>|ODSOz}ngG1xoeTd*My(BVY9&<>BZ=EQP!PR+|#8$1iRZ)U`J zLmVMx$zZor{3*mh12JjD>AZb7)xHlWJlOYMSrhuBZev$DT=`Y7HL)}mII(qiAVoe8 z{Z^tEbgg|}T!I@(^p)3!XEcSsN!3jEU&o?c>8$f2Hp;a;f2m~Mlx=S&%w~?^pRUt+ zr>seDCGa1Gqq3zUCDVW?7OqV%7T>S&EmB2YoCRVyGWK@PGrL^85qY?p%2bkeP(Wl$ zSu@!Kf`l6!Bar#Xi?f}@9%_f3HNRBqp4owe4{z|{*)fXzNWCTu0vE4z4Z8p>3P7zm zY0`6yrZ6(C33-ZIudpkXVeLhnv(RB#DA%Hw8p{JORtww;jRRvaoA}aaCWH`=AdG!1aWfq3!--p4oL!SBI^(rFAROR5*Gy^smVdLDjLeZ2i< z>An3#qqkprUvIxa6~EIuZ#XO*I4xR@(Mg|9K!@XpyI)G0TfmB=C(W%?{Q9f-tx%z* zhDsUqRLO5=mHeitz@=BgC&+$oc^ixRMc$Nt_OaNH@$eJodzZoA!@#X<%4^_!?n2KMjT>eUYb}M?AlKAlF% z=f4v3g74k=XoLz6#;D-TrsB6=r3_1`z`@LhXfg7U&H&(?Dny0+*iQf2xK$UX6 zW$=z$N{*}KReKKt^ym|MtN8Vm{FHU~kl5U#oC~SYGLE`354aJkbvK?vdiGJm49sXf zX`CSSk4kzbdZ!~y^7gY&R`DyURyI?-(h%Nw=UKoShv(0o5C3uTp|ZS%QeHUiVcuot zn5se}Ccs|hm`}y;kvENwI;u2Iuaw{(|#)3;788znCdS801pr9WJ+GFMrv z;-ws0Rk>{N%e!ok8$~*^n=TCqnp*L>}C#9nG zXwzA|<2&Z6)M*ZHID3SOUzCbpP8C0hyL<6S9u>H2a-F)B*K6;wI#MO>85MrWtpb-< z#c!U<_%TPtZ?1};YTqKfa_SUU!Z?9HTqm2phf2#weGA z8-F?yxvyuxZC^$c7k8X?6M=g8jaTvOCHX1&6WtB3XSe!Wt&&E#cU(X6^6U%zz2UN{ z!NHcc=e)F;8eDU4xXNm9ao%ttGMqBM5#D}|Q7ZG?0cvyPf!=fEL27Wx-f$^uaDyc{ zx3Z7-jtkS|UTtx>ieGN;yxB9W_;nAE@VW6DF%~%3ga7RzD)ZzsGXE>-c043cx3Nc1 zS?4)AxW*LMn%GfJ#V>=3-ybUTuV3VT%8iyHd#W1T5DCsL?qKh@zsmHu!5t(|H@>kS_Rb&mrC#N=T5YUe zL!R#VR;t0R@`hWk2Dd_jbEA2K;7)qO9ae)o;tltk8r*SjxC3f%zk0*%l;IR@*S=dV?jG;B z`&8ndlQ`ynMg_AV6Nofj&r#O=`bU=L`y39P_>XTxFx>8p|i+j7PGI>8FRN^NECv zE!pU<`}8n^C!g++cylf|I$Gi<9!!@H_82Z78fIm0+Yb1XM4k0Q9~6#1%T#K0q~)N2 z@2TrFIRHL|s(4VS384oCAd)cW> z4Z>G(a#m7$Sd2=8Lve$)T>tRp&dZJyNJ{+4Z5(Cqs)=NDm@XQagh9Zg7y998UrOu= zlExnX*vHD+?hHR=6CdLUL(YK~=OF>?_sz@diRa)8!_$al5(eVQKZPWGAqzqN-|ka- zvzz5v&eIzcpPST6&qgFg4k)DpwSvdO!e7;GP>V9aJ(yb?CM|c(J}iWS>?6GevrTLa z7=zFk>3EQQuUDe8;0^L+biEZ|^**9pU@dWYkI4r&Bm`30>y z4j!6@$dWEZ7%4>?^{q{?d)wB?0$1X(fzn_w#|uu>ix2FcoKr`Xq`VOrdnA;t?r(Oe2r!3Xd7&F;n3& zi#%p4Jm!$cTs%C+DZBGLNXeTP?=i&@?d@leko}ZAY-i-@Hb&WVs=?**hRdx6m&Y3} zQVlN38!oRJoZt=jiyB-$Z@Bj=aE_1OaDS@6*s8r5BoA69*MbMVCAl!Ly3)-3%)W;)eTUrp3b&IteJcf0xF1Zm8cyDS7MSZO*b`F$mT4C5j|Lw!?b5BG6txY0!)d@#{ z3sQi~!8`ejvhrUx{J}C`-Mk*tP`Nv&Zk(o~U;~W>maL$5?fH%MR+iYm|2LcEvJ#Ir ziHOn(M}afa-@XDkX-W#YCLhgVyr(PDJ?55f#YH<_v74JOFM(X7oUSuXK8zq;6I)$X z|F@O>aXbHHq>Ib+!f(JKtiZ$nUZ*H_D67voCk}ZEO^Xnso2Jke@V1n5l1s_!1bPa` z@rVrI)WUrE>((8uY~-8f*=?4sMt>6vVTo^`g1G0BJWynFPs8&=cTY&2Y40 z#L=Ye!;F2Z?i_qVS?a;#mgjomF%q;-I=W*QdQP|1tB zrcQ`xS`8pcO!LCxg#GMMlWLc+Ch&_W6d#A9RLxrSX5a9RLOcA3Zx{^FT)_Y9pqBcf zd??5J2+M)*=_fp=a@Sq zZqY(F%UaplijRHK>c|U%joi%MsJ;`q^8Gq7A75cPLVBfj!d>9Ne7k3n(obn!;G1sC zc!VvWc)r3N1ZvGjA7M46M0di0|Ju%WP-_`c*YE-w&;f^wxPGknqyf-yw0~y*tTwR? zMdkz>S&_)8N5r~3rR!2k-^EmZ75GNAB@>WRQG{ueTA-3aMVlV${vj&nSLyN?VPOa} z3fBpm+ZkI(I!UZF)uh^MBNx1qk{p0-4VXA2H9B5Y9_02_s-2eFqr+`oI@$h5iMB$nki6}bZB0R8G-G6b~3(8cv;`d2^jVUc1h{Ue}jFQe(xx@}uR{95< zVH59vB`h}pfuh+{@y=bs^6$JQ-+0mJ7X|%}qS?!V&Pz#Ec~*Qe0rjraa|x1K$is+X zLB`Fc_a;%;yOe6*5jGTIP&(nqBK8glf-W$dX#(!-!V~&3en$*c+S<9-_#(Sm_>pCZ zQ4fJ0HI3*&|3*QVT87h;Lv3OK4nc#av!_G4f6ShIhtj=m%bf}=et8pB;v9j=* z?fsxv9$I{L!f7d=%T^pZM&P{EqQu)g?2#0<{r<5f6gGOxm8HB4O7=?s7s_BK2cous zg6h~fat8sO$wyaN#JLEA%)B3)Fk67ejf91@u*M$&PdO`Kbz(!gkzBy1Tpfrqvfhns zxYXXPL_GBMB8sbDYq)qUx{2ic-@n3=CIUE%?QArww3Wr1+dxHfp8u4@GuyhB7Mbf&B?Y}gc_0P^siu8 z3SLs<2zt2}y3q^%dZLj{oGSso&E&8_!q8h<;CF1UroNzZO8%b8O6+hPX8`6$1UpUdD9nx)6eMPfv6~{ni1DQFw!}K$Ag;fIKo1>Dg^1H!(SD*aNcWM1!VY zcnKJ2>%`NgBdf!F%Tp`+81M{TrY}cC#K7`smS6LW|Df9@WRH*R`alVmX}5k2xXy=t zZl5mzTz3`WCO(pRU@bJOWmae; zyA@nk9i)K~6v-+@FvxZg&k_dTr>Tz?OmR*w%YX0t5TCh>G#-TONbMq=yh zKm}k&?1|rLWg(Y7=ajBjNduoh%iVo?Ww8yCBFn74%wBcjc?=p~;|w;j27JL(H1ME~ zCmcJ%@A5pE{oIJ+@nyS1n=e4|kQy^7ZIj&l>x7SpV&qc^qwq;V2YWEHSqJeQ3e<_W z8W5G8mjJCO@7MOjcuV#%bi#YY(FyMzC zW35mumJvayFijqfKB7YF&>uQMi%-cTyfxa^>er?C(5&g2k!-;Suz9h2@}NMkqd@h7 z5x{1D!6d!>@VcbMe}8=FITr~5_>`2>2Cxg`A8)cU^W;sq5l&XcFnj$0qC94=+~6b< z%CqESe~h9d?TMJT0opYK{gk0~Yq{nzGUv~Dpt0?*^2<*WimQMJBswXy21U*uwTXifL#onIe0uz-ae0G-8^n~eZ}xTNIe^6v-iTH2rp+aw`feg2a4vtMH}oz>S>qKFCH5vQ;OGu*U1 zN!^Z7?k6*Nc1!Y-O8ANF`>`uO%T*H}VSZ--zr@YjnUToMIVu1;q>$E}jo+)Fl#kH- z&zTo%*vg&+R9~nbhiY1hFsbVfU~NCNX)4Zuhg8$G7RNzjZRHPn2crJrE7ykb6)F1& z>+lr5;X%t3S0kP}{rY|A$S)WHtx7dHYDL%UgF->q8^8uGh{u(@M*TathJHdoxz?yO zU+`X|%En%IPHbFU{D@hevuup);&LOu+@HU3GHk2>bNSn^OC!e@0p)5&O?DmTvzLF0 z<|X}`0c@8~!D0Yf$0v-`3QS7Qr#V^!bZh9u%#QRRIkf>m*!)8W_Od?%SDeF!rMy{_ z7f|T$B&Ds995yo4F&8J)$*mA2wILqRL0$Sv1I$APMfSoqI4nWk_RAgByydA>WzE&j z^;>(N4cXhM_}Nta+N$`qQ}JuB;@3gNPfbpslL}mC6~8VjehDgmT~+*gsQB4c{JN?5 zbyx9o%1S8rzQGV&mecL*qnRWVsf5F1%Twml{@7biTr`mVxFYGx~aE8f#$}+UC^ybfSHMl_UG@N&ml=xKSIqi8=@ClLR z=}xoSy&G({dew>ZJYAWt^Ii&?j9fO3;hcTl`%!z^Ik^iC>melJ)ppvcww)p>^b}Re zpS_rO{tC-*Zt_r$H2FU_e>?70<7C#e?PgO+Kf8)w8E-$AT&I$6OL)WCopKFs^!x|; z&$4oSWnI{18BRApHCaztPSg#qI3aZB3sEf%Sx#MISvmf0atdn0y?H}E!=>}2 zbzts!pew>Gm@zY9ev68>U?)azYlwBBF(PMtTuxA;139!V3&Z;!Tt`sY73;HXaF?-W zBZUCyCN=BehQsZJ|9iX_;9Ul;Gvd&?ur9tQ0v0vL*MmFZw*>#Iz}-gJWc^rBeyba}_ks*D~whW1{{gSLoBo*7u=s9W|o zn3rw4%i2`ZTOCnd%I1o7f2J2h0ICm>?sf~|z$RqI!ynPkbibOx%BsEkHp|AXO&f%4 z6vC?QXcNGd9s}mn@0TO3%oIBn2a2T5+`vvQ9$gc}kv0w?yF^^J4B5kJZroK@tqO=+ z3OFGnf{e~&bK}nnI&0>3hQr%P_vaR0V(G-F0-eRGyYy3UWnEUC#>V}53LJx4at1bgef@%!vHl}b z=Cm&485WA7@61t+<+Z1DPhKEOj79-P&Ht)fP@A)7j}JAGJE`l02=j5fU*M8WH*vo*Ty>-Uc3C z0C_-th!BZqj1QQNwfdz_T{#VwwN@oE9mpGA6d<4^CojFi1OYGM7d)U>28u-KpM@Uz z$;$^?QGD~4Vu#P>?&|9EpYz(m((rMkTD=)xx-p;PA$hU5B0NH>b5EVgPJ6#CxEnLmn)-mGiosJv91 z##=?Pn6~WZjfbI>G;-HK0XRXgA9b(JMNI6ab|Vx->>yGZQwSgIe35w-Tm;A}elj6Z z>ciW^ZGa;+Kcn!Dh7(ugfv%C-MRaM_xj}3`%Rz~+qH`eA**@pI2=k|Z>7LmvtJtB= zCr8VrZOOt8k1qZR|A@mZ0j%J#4D;oGLNJjsSesK2dm=5*i~w!1FXsnYS&gB$57@-o z0D+3FW2jmfP#*oJP75l9iQV=Jyh%MDl#BKq@&YPN56vSis3}{x!Q#?4gTI>1_@54l zwjjS4G&Cjfm*xr1d0a{Y21!1TQ;h4WlBXM7S2Z}vlhzkbIc}acZEG#Wp4{ho+Wu5sz_EW|cFv<3eyG@=WxxtmBNs?#&OltXa-Pd-DFY9Me`Z=~sWv2AA?@;mE zDfubNP}s#&b}yUVDt>!Z{NBoCsKCdq5P7aU?Y~QTR>Iwp%h0`^_wrOo#z&{w2%eo! z`}Q#_@x^iso0^%eXr8}Hn&itJw1X@Na|-5IpfO*lhW3`fAGStUrS!J4X04Md+AJqh zx`T)Pj4UAMh$}cvZ1@R=WVVL->!AUyI^cP*R%hRbK+fiD)U5%|)D)si)OXR* zk0ldSbt0mX2@M8CTUp-?UHd}L<_^h0OS)uRXhM5&b0$15bey;Vc@b(Nk{<-^YvHXA zO$Zfg<0A@cb@B4QS6YvxH>O|kl$~og23qT!Qd5*9CC#OmkaQhD8(F&>VYjX9f%)rf zO4=n$q(uwQ!qU>tjy_-^(sn#XEI)0c0VG1uy()WjdO|UFztMZ&G%+bkfD)n|I7_77 zAk;-1p&lN|sVG5lH~dX3{p+Tqp>r%T(@gBV@hk;sjY54uvDm?Pt2=SZeST@gp<@!l zOEqSRF}gBtVmpd_pJHVJg=}?fmg6{!a!=62uC2TRa|{V%bkl5>mG?>;Q9uvBt#GBG zs2gV?Suz=U0hw6Bvv*(tTcxM4jduQy&;SHNKKKv39Oy9pgofmiL>Z%Xqf~FLG@XBw z%8uHoh_YKmJSa2*Y|IgWu_9fjd||UrFWib^iwKC1qrHWva5Su(g1qa_#pF(BZKwvhpunO&baLRf49~edK3?Ix5njk)A8Z(D{;cB^8e@i!& z)Z1Py@O3waj!FR13XLfZ85X1Mh!({j&^R+beI>F&8UYwySVB|4`G*FuW&OIH=l36o zimHc4g5wMJ9NQO$1~5-H8u&5A@xn3Oe5&s1y=Oo|h89B5&uKN#@FDHHg$SjAFA?R1 z5kl(sJ;NZf^&i8g{Fkun|0S#h&J&#J8Qp2gmlfxO@33vRnA*o#UMkw;{$L0;Vpq#H zta;p)mRJFXM})-3g&?X39)1RvpxZ69@*9cwS2&U+3&Q`oC^=|!=WK8QZ#p5w-kjz> z!k6PsEOHrd9C2ujaAHwB^huPULPxZT6sid#&bA_>1EQp0p*dBB{B6Z|WVBfhN~DV> zq((X5Pbqb*SqZw0^kY(gfp0ff>6h! z_gMpM;vpU<@d~BvkFc@!Pf$eYlbAjg5?u&`?3K_G^dsSl1JCEk?5r*@})_@CScX#|!POJ_X82SlkTZi7%SXtPN@;LP@Ced;mv>+2N z+QpeD6K6jcqa|cG>(zQV+1W}@P~j}kmw7*7g850M-Zp+RXe_l&3h1zT5R60JSZI7K zoeYKq0y^idUzp`PM1*#F6ljOMzz$seFCY2&=PMpHE|T)(OEbbGu|@_u=r|7v$+P zjO^-@s6Zp51EbiuBOhrNO6vi#x0~?j=Ry3X#SQH3nm9<~Oy_PmK?EC$(Vq{6!GWQ$ zDI6G-o{x?!=lixbU2Q=YDyJTuX7F9%NbxKfS!3y9&JdjO?o!MML3H~=BUa*2){^n8 z&2reBK^~cn?ANbn+E77^E*}kDqX4W{_`n+M;4I)t8-g;}_hT3aJ65PU9J{X_h597Jsi zFlJy04l)OY2p!-DDmwP7IEN}PIJ&6RRW#TTe*;v^L1PLD4n}<}X%{jSRyr-ms zM=}o(meLJH5*$K}BSdZ-+)IiR6l_0)vM99~48U$ZO{(W&C%MgxLIBMSocg}o5~mEs zBW<+B{Nx-J>R~F>nN+C3=HL(^0e;B&*YXc$5#7=A%VMCWydEF81x;tBf(mo6y#pe% zlQ~{k`7A*qPUs30LN`2k;qPy^8)wkH|L%MZw* z?A?A}E9*D5{w8WqCO$(dRYQ-w4}F%er3*_$bbK7Gu6H1Ww44vXT9gD?8o*Igf|>+w z((?*h%zN}AAqdZdup0>MjqtT_7JOGi*cp6(MYs>X?;u`QxZ#LLH(K5x>;>X=2Q1EL zG<5)10y)F=1nBKWn)ojQrZC`1qN^kRqxEafB5rfIM!?k${sE*Igbv&7s6{O;%p{&C0f=9||Ew9nwUUBt!udeH!|x7Dc&#VJk`R zkugXF_LcDEoExg))v1{hgFv$SXAa9G3`HpT;5uH8Bg6-@h!2b`bCc3N_}FQHa$wHw ztkC1l<-{p2Cg(N~k!t0iIrtt}wn|sf#fm-C0BEiNsUTve;ycQeqtpopfNG`zk%`FQ zOl<4bkP>|CR5U>#*Jb(klj51aXFSfCu$iSaZNd5h0q?@)-i2l?AT$xL$ly@Ewn9-& zS>O2?c3@k!JYwUfsASxj_))_gSg1Fb^;%XxLlMwKcTmhmg{(?(2r&!>!jwLIkb{xh zp7{8oKTc(J6lE2eN+H5*l$bD>9;paH*6069lpT^xlU(Lmu+IRZMGKTU)acm?qwr8 z8*qvr1yK2-h^~=8igZwsx+v1mgCT^>rE2~IZqU|xQU73~txD=PKOmS61YQM~iFfou zKgw_IJD-$Ed~5;Vl*!8=CUvEG$eFwLt9p1qsgp>;i%P zMqqORmf~=)*WW1gIA>)F5#|vpAKsCOtAGJW%QiI6u(Hk5Cs=IabQ$S+cci`DkseD! zN+C|9j(;1caA|NN>k`47AhPBYS&8l#PEhDcP8Nj-3wREtJ}IM2!xe%#MHm(mhQ96? zPEsh9PGl;D$YsQa@63{3JP$GMun8luii-?22b+ZMfL)3T3Kn|c3li0Fmri65SCjmA zINS298Y-pzwVM5H;tY6sRlkqmKrC0ahO>e8d=Nl8^RPQQopyvItu1Vc*vd^t)*61X z5oh)5_iMfatCs;7iyKj-D_C1Gfg|n{8Nw9JKskj9lX;(}D`3`>+e7%Vz_WSXG3ghd zeU|toZAJy=am}bu2iK^K(k4{Y+pITO7hBnuNsdo2MM&{8p%oo3(d05Uf}SM@Y~WN+ z3K~-qRFC8ULQkMkthO<+3ulAE`wX|T)Nb!u+QilbmJy5MblE_sCZlfACLK-Y@g1$d z{8P`rJ@#eG0w>nXK6LL+1M4c-6B!0CoCe-`eUCj@k>xKN8Hf#zkE6SGBsWWw47+WL$3t>!vdaW8{A>|EyQRUfj1WS8XFvKR;A$m3GNiWZ{aP{cDOEFD-1_^LUDSG z#KVsrXq@T2WjHLK-JM*yK8)l%c(Yep9T>uz$5DznQPcP!awWWT;=PN;W`CCQtp%iK zOXnMa9SqWWtqb$UU8|6FEVuCs_?5l&51>PSVe4`>F^J%^DB(wNTB@$nZ4^IX2n2kc zYUMENi;~@NK!xl& z)z`|Z=Bg#yM4D^rh4E7K@5f4vva%Nww_`$>oubQWj6*QGg-4Z(m8B|~b#xA9g+MfD z-nLq3z9evO)+e4vL&Qvj7DTacJ7*_I$B1j4Ipki$`%uZpZu_rGm%HIs_BqEU zosBb($^HU7#|lS}{GDIYFq0f>HvQ=7gzWgMUAP2=WG^oKPzK17fXsw>&SYmX*q>44 zf+r_#6kDeyBuqd!Xga#^)ptTOuuC>5ND<2dLb9*~o4BmN&xW(bd=yEac#iS`#7H{k zYo!Ymr`eMiusx5YeGdg;!}zvbf1463>d!hA;E1F79Hgfkrm)9<$^T2rWp~k}Sol&Q5KWe>5-2}eKw?88yI_-{_NL@5A<^egs3Ui`=asZ_bV zzW1P>aO2tR!^=cifY^Te2-aE>G}zVhWiys~qeB5Y^^lc5Jwf)+#`z#mryD=uz*yXT zS9iQOA=``aE=7GW-Xr0{@x2Xik<3s_0|Hp4DiRZx;lb~Y@MDi{ElU-%On`|;`1-TS zbDLEc2LT_>&KARmmAh~yS?o$4!V>&<;#i7r6Ehwxu@8rG)w^Q9v?^dEEI0)zoU#@I z@@*Hb{|z@hDRP*wkjMCz>%tE!3!OI(aE|84IGI8&U1*C%wu$YWIixVU%Yhu? zAWy8{gU65?FmCz~W)s`OUuugw%^{R7v?bx5KJm6(k1Q3wt)uI**fow?>~`x=J0$KD z`a#MenE1Rd995;IHiQmKS!_FKaC8 z`fOnbVnzS>IBYlbL${lF6Kf^I5gUGiqv^y!B>f!khHx|&6+hr%z)9A(DiK(K-ws$? z-)7ke%P;V59Y7a5pUv^FNBMa(Hy|rr>@-GHfH+3JdKaFMZ^I=$arxQAc4_(j{$W&mCv0E&{-X8bzX1fZs(AQ#heB$6p1Ogc0+vFpiAaVg}{-cFd8z61vtA}Tb` z$JWP~dx>}GFVisWZRKNg;wuNs!gve)!~?wKqZwl08-r$@qFt~*$B$2D z1!8AeFct+y#KgzN0A~s^*~v$mM;^wT@_YyH2yo+NeCzO?6>bc2Ylgc8fR*@97XWG7 z&Ih^;+rn~Ee0+~1!#icR^fkZyf+~1FZl0*!@UDd8~m>f zf7&kn1@AlXyA9ag_^t%pdgPkcM{n_;Mtu?%r6o@;gcU=aPjH*yHwIx3;O~Ir{W0`C zYxGzrF(kAdfnDGR0tt5FGz|f?6W@g3A-<_=Nx(Nvs^jpT8Q*o`p5l81-enM%TwNqI zTz=QV`x0FUz^w!%!}(;d{9_R z)yHZLS(A-l5|%1h8vXb2pd9Ze#fmW$LoqSm@5g`y}*V;7Isdv9*7m=Qri z0kX=D0E;=uPk^cwm>_Q!)|~6}z=qwif)OpnXV~gf;yA!@EIxj&uXxrYXd4fD+;do{ zxCKEbGcK-Cces#s9Xzk3xWEH^F9#p?>O_n<~yy?SyoJopN}2g`?$GS$Rn{W99_N27ktD_9zolA(Drdh zwc;1-<2eZ+9`R={u3nE7AH&;ZHq5{Qb|CAOG6(lO4`i+YMIomNUQxg_55?YLsi*bD zO&&p8c~Gemi8=UIWsp%Sdv@}Bx-hP|0;r4E8nedAE|#*PAGaeuy#9zQR~AE);o>~3 zKj8&ie|5%tHII`ATC(cy0zKMDev4X8M-vpf&fkB1DPR@ekG z)jJ{#baMTvaGGrMah8f1y?%8kw7y%wt zwSh;gTJ=$=xCf!o0TIYrE^k^58>aVWw!<+$;WC&wxx`acgRifj3fL_e`r6|n=Qs3_!vJh|X!Zz_p3Jc9P{pxTyNt;K>KL5FzIx}fuZVu(l3 zejfB!T+QO*zu3`pGQb+{y=+moBH|;yS7^rOe;hm)n)N6cbQ3vOR~1iC3X#8rB+`%un9`7A%gS~acB@l{qz|q;PJF9kdFn1#h=>`K^Y=h+wJQaui2LLGJ?&fjd)yS1m+<+j~tY1SqWucu@FAhZKuUvDY+;v#X zV2oDEFRIuEbJ_7qlVNon=3;~%`0P{E^bx-zAw-_GQVy{YYRN-h)qa-90Zs*+fK5&A zr=-!o4rK$n)94W(B}9q1=f#d$s04>8h_t45*(On@@kULqRK*_GIhj5;TBb|7pB4D* zSOs8(?v@WbX477N;VSnvdm&Svaf_?yu`aFxw^jwtsW)0dpQUmq)693TBXi$cf>1Qr;Rvey21r1T?IZhdq=`lS>{+7*M89}uKl12oSF{X z8gd;e@ul72bMcj3%|4Bq9&a_9HJ4<*QsmA4zqMK8yho~}&wklEzs`H9$~4q$(d_V% z_|FaB6>ofMcFWeQ#g%oQyW#tQ9Yv3R$3De7jRGodrikq4Cci9P|CUM{Q?v1Oou};H2SmxdyrXtdv!>2!lDC&g8!{lC1g@3Lc|#OFXW@#u#gI3M8cUXh0SeFb}( zO*93p-Cw2s+99t(Yffd__GlHqf|8#SUop9^-Qq6xvhm?KuTuY?_z35b?j4o#w^3v_ zo>1IB$GVV@QI6HT8M%)iYWLY4e|Xd4fS3&*Ka}}!$aY}d{A7DEiZXE7u2I6N*>h6U zDe!-yqu~Et9S^jHhIP5waRl?YRFbLj82jbBvcy|~GA!;|lm@h$JhxN68eyjp=GF$3 ze*a4xr&VyA@$|#|QRPmIAm6ib63e&PScUZ| zyGmuQJJZl|p>N?9 zBC#KxqNd5KHI~@oM-;yK9lqNLge>MAyrg-n50^QGB{A&T-Q~#*KutwPhem0&KlB&j zBMFZ9C6m9NOL<6hDQ9_0$?CXnIVVm!qk{TWvo4cxk0TwZKzf;wa;yLHv@*U(ZEB{s)|CeCM5q|Nmi5egzLf#L;7HP_u36np3-v zooRMkJ;ubld{}euL+$str$;}1U!|XZ@Spir&+j2oo7IuTZm3WS_XV^`B(p0#LIHcu zp;hvy;Qa8>e+Euy5CZ23J3kNCAQwUs$)6{@Fh`!+j-pGTdDBM!Gop2d} z0^6WmZMNu-Kcr!|_PGlD;>_DTrMKd+VI4I7j`Pm~vbaRuU&vk*n|`^+#)BSg=LMwZ(klP-v07sZt$3xv!<1u{AoALNqLXPW~97s+I@k^c!^Q6~2P zHV1a=mlU=wefa4sR^etASUKH3q(^%*Y{kwqh4D?SrWL+{IF>FQPTqy@MC=cG{KUhL zP5aVvHycwP0#>d|iO#!%d5{lFF6a=9gb<`X80&YP@D-8#an+;M?lD&O{QHKzxB{XV z(gDI?uLuaK3{0B$sDSmo1S^n#;SL;4aU@tz4j zB;AO0@P7l|KC}mq_Z9qy${5WhxNG=d8L*@9E(rf0@aqG&1TGbcib;4#6q$WENoJ@M zJ{GeHiuuNt$YkTEPkO-z6dUb8;D_LO7t0;CvL2Ps_q2&kL4!%qBUmutA=#xe;>%tW zBLILaoIHx#LdCv)Tn@=m07KR^4Y~tau}Xth2Ek?;bemOsa@>e&Atn=wp<@@!F4Rh3 zUn6v^34y9%Fly(cGYG*5{{tf$K-NgBT=17#`Fa~2*!>GO(`p$q|*>35mnqUqCO_w90Q^4^9d^; zN;lUNy1gfKjVW6i!!FjdIazFCH$W?^x)bH^Vr3G#@B<0V*k+gsG*WX9n?RQvBSSAj z9!3gXD)@WnogG=&tfm;^L511Z$veB+bpK*yU;W2Hr^;(=AhYZt>n6%&nc1@l0$KCa zjlIR=w9%|A0T}r6F)H{*&)W7+USVZp-%ZYsTW0`QX3D(=P+s~CFCekLug8mMo0tIL zlp4-5!alN;PPmXBd2=S30pA88BcAs5QhOOT_0)SStMhX9E=h7+nO+4aHfNrLENjwP zSsO<;2w>20j1qVYfZ6<~?YG|yA?MY#N9D@#C3txYByjOI7z)|le^=J{H z20@3Q0M`Fu&p2@bkUMEsYr4uZq{gT$LuHr;&nSbsAsU49f}B*MIJNZ`{cdFz`|pq` z%L)q60cOQo>R0ge2K0Yg-h0|{Q0wPsiDi3_MJ{3Q#|_$sL-=g*u(%7Q!*B)R(4TSH z$E)a5y5if?#Sn0Bkckc5F$*%`4?b)wZL=H;(g<6C3ghsf3HfHwI7}EZxmb&k%?R;l zi&mUkZ<%KhLO~?6C5Jqa%S;G^2O{=a^3QyV7~?x}Ciy&4NG_Sg$G!!i}Rk6!ZC;o|ZTAXTz7L@Imuh!T3vp#E%s?a~3_Pd*u_TEpj_v3&bYbJRg%YDu>+=oxGJl0$T?$_0RcuweY)2~N3f;W%34Ofiwii-4bFlaIrq3?h7*&*w9TK0s4BgUISz|l*@RV>) zeR%0Ku6?Pj;MY`|xOmiyVh!u$ah;GIz|kUmxo`M0cJKLRtk9gAWih+vJt)mxEulIg z2OzO{gZxlqqFh`opkKlGOUbebpVdp4n;y9lxKbV6fbglJ_Gyi!*3 ziPju^Iv%64g~c?*T7pOFD1@*zg@-I-Yd`-xiF&$-!1y@YQP~f76)pi-Nq{OZ-r4c) z3s((pCnzTc^wcHl@Lr0y*a08tn=?g%0`vi+lE+8EddhF#me?!{p;RJ7u!4pa^&tol zm@*DYLke~ws@r70LUP{ESjHiu19(HJXRJ8lS}blX-EQ0jvM2D=r;bMq1SIzF(a_3X z3d3gDxQchS&1q($bQ4$aS^1Y60sK{jRchyKpGJ)G{?&y;A_U7h6wGX z3qx@$W;ei7s6>Tk2%Xp^b*x12$;{Q(LIcd#ftW^32MmdoB5M6oU4MaC=RcibdLkL# zihN|g9`QT!L8~EWKE_Z!HrU=D;uj~t8t50ayf%1$>UfHZO`ZrKt>YPePU4@>>2osw zd_kX6_~)PWIh8(z_iL zsN4q!ffk~H*Jy@x!X*@#{Uws%;W{p;wVCD?Nkks$y?=#3?B(Ps7n{V+K7U^VI~TI3 zGbO9s%Q3LAx)VdKY~YU&Scbh!%Qc?wv^_t{kZDEL|Nq8+KasA4 zU_SH)fBX$evk34lz5_&(QDzSZuWZ5em(ONL>ohs_0Z=P^26q~6CR{PNVQ^XD*1(ZI z0BV_y;UE^E34x2lw`jo!L_YMorDhYWm2S>wD|<6)ZDpHfzS%bs>1D+oEfZ^BZu?*> zyBq#G*k&09D-CUtM|Nc)>%r$CviM2cSNqF}ZIKY+n`=m#3Bn-~GD&}hU+P>_d0Bb1 ztylm+n2d2~GII;`pBsF#K#6$VU%0rMQ}Wsqasc9(WCIjUiW zUXU&^vHL@U`(ZcfFSM2*OtVl(*tenrqQ?BQUj+veyeI{}M_`~yuz_;AuAf*9jhCjA z+YfQ24};p_f`62_48W4~8hQnvzy3%fM5jl#t%a~r2*XrU`y+HZE)Q^pQg;kt$up2m zgD#nJ%id=F&FHEdg|t3um`{$Oia;a$14>Gfl1KK(;BTEQ7o_RyR2NQ}7d`-tUD~}R z_CFz{O*~7OHi??E{Ue}b$Z!nnlG?kO<&5n83Esg5QBMJN6W@1r;Zj_0Aij7A_XAG+ z7Z2#E`%LkST1AU#hk`R3lNKN`p*_AMVJ;zQHvP**|Dt`OLM*<#&V>%n;5n+n9i72* zRf9V@gXgIRcXkHPR}Jn$!Jup*g(l#Sy&)~fwpWgemAZ9<@GtTPHlgC6+O0lhiWRj> z_u)_zh999Ync=)mBbDtJM1TUV*jmyUP143AP@tqn)p=KiDwz6@cjSjZN`I2PB@-La z6YKJ)b%+h{ThSLd2S~Ohad$1&A?xg5_r0trz!82+9*jv^ZPGMk%^%h&lIg?H2+Bii zuYe?Tw6)g*o8_R?tLhz-DeqrFx!gzUH2r|XyWh=UlU3x3+wIQkUlFo=4fuqBAOp5 z=b54Q<)BdNzkM}Xkil)dUrg(xyHXCYkLKr>LIY=((im?w?85OI>)G;#Nk{nPL{@V} zJ8=*f)eMEB?eJCj&)`bH5qsBzI}W!Ooy%f`i|g^=STmQt2Y-ydro`S0tgQHjxOkgo zkkhuS^uWXhvM&bV>?LEMoIG+DuTU~A-+t|i{y%d|n!t}sldhek( zQANiT0j3)Z1A)*>=p9T<@14*Cp@e2afB>cwYC;QvKoatPX75fq*&_M={;!^A?{vGf zv$L~(c6QbQZyKsgZt5`(VwewCv4U~{r;|qGn0RfhwV_crHHm~Q{Q=6_PnfZU-=3sy zNt7=$mqlojX|yt$9e;yQKpUI4FBWF``^KTuivU{e7!;xuNgD6h=f+j4u7~F?#>rao zJ*q38Tgdit`vK0{j{8JR^W(xEZJNM+YjNM)vaexkB0^!GM+uJQ!I9a6V{%Jbko8+dnd*qEP)Qg~Fn_1+Gx1 zK~)$CFf31Tok;w3Poqw^Urr-SLs zN0d!;aIyOANYK!?ETmIW+$HHJcb}OcpPFYyINn4Pln6l>`L=}w6rm#f&~CjpCf2}a zp304D1+DuvAdHgL2~{ac=6kN~J!?9$L3Q61HY6)eGriDM>W{F3EM)(IKA=f;YKCYL z;o8F$fV0}NVjrqtXV2GtqsvZHi!Zk1w5F?bbNt1tb(EW=E82TJHJlhU321l|#SR+~DNqASC>cqdsi3Hvh!<~UIc`lHr8S$TH# zRsRmwm05E&%$2J&&5I5)ZGRyVDsv^7;0j;BhwUr9Lu7B7pV$jI7cPLa#AdGu7C&#Vu(P*KjgI$$LW&ET_P!WO z#4BtJfjR#-*jNG^{r?P0Lcg6fW=T^Z53b67(tIctN%--3yupDJseT%q733Y0)Z@^) zzz5^eF5uD$X;|YyX@VwINg4nPtKi}1f!yF+gN}l4nMf=7MFgw`a7-$N2wx+LFp(Z( z5aMre=nxiQt;}+_XmN!3wLAL+@>{tJqtd3WVCu?v7go~b&;y*)YvlB@ho8rcvz{~w zV}T9*`u+vWexjOB*iel(OV%%&zqemjaI02tgfkqDtY3~pd^3yMb^{kmm4Dl&K3Tui zXpAamNb=hDKJE7K!}jQl|D~)80-f*$Jvbu?mexI9>V;|^>stBggenj@3giFZ<5$ie zKLq8t8|8>j0M_Q{oN8d(TF~y}Gmz1E)A1?A(X530SoesyXm;h$ha#AO$zt{9@TYEQ z3LJ^lL-8&ICr-e_$a;kAe1PNDFHX<5Tff70_>w(`Puf`Aubpx1cbD8DV2t#fOz9lk zA@Fl^jGbRLr?GW{H*n6S31E%Rf#sv0@TH4OY~kOthx0iNTlSztExCu2^E(yiA~o8n zB+$|Ed4@2NB2L0%n zXP4P|4qQutBbE|7OX6J>PCSK&%m63ts$lr_>_QBz^U3g%Sc(qM|DD~s*1%5JEM62F zs6+c4!Q~A~)ar=po<%6Wd%YoK;!h<Ve0Cb3_GcdZ3qNi9OzxYG(# z5RxWL#Z&O)6+1n=L=Q0lnd1GopHDYrN!13Ne%Opfwme(Qr_xUTwckRdO%gMA+S5Lj zHpUe{egadS9_@;01y}F>sgzdS>;FNnJxWT__9XGZYfgFo41C8)ogVEqXtd5S47$Sf z?EF#E-vcmr5pi4^u4}P}`tYRLh>32Nq+kYz0Ue+rISv0goR;gi@iaMr!-()OonsE- zKzncoUh!tIm?rC1-_R6Vd}dqk2=x#Obg0K#A8O87@P&tQe6irE*YL>y2#@%W@Nn&a z;Qx>C2zR)zkHwRI6Zqkn=gJ=+&UpT${QlRsN>=95arThA%V#Ro>qp%u^q!TwV?5$} z)2Dwc>Da5%b`+zn2Hww5m(9z^G2DwEv{g8qM;h{;kB46mFMAU5K8iZs4sseEaXXTy z=l;{!?6f4sdyC7YxE}Zlc=3z%;wO0VE9Av5PV!Ud!@bXAkolJci-wZi*Mk-_>I<*u zW`)n#CSOH{>hbN7XRkWkO9H&`-?iz1 zm%m4Pld-LxHLs5HE?Cbr6F%Wz;S>I!eZs%wC;ZEN!oTz<{40LKzmm&eUH*6Fb7E@0 z65jS09hF`2J@a46<*&w}-2LPUTg3(Ixpyo4fN$P!t8gSK=eJaT4nL}fp7qTEMJ?{< zk(O#tR2{!KhMa8ms{(m?);Z-ol!hPhNbj=;^S8Y;25XYj0TdIM@-<%U!lv7Ina`}yu@Lm>6?^t1z#9)L z?!nm+kLGiG;hNz80=)CW(Q1ZN>uAm=w#OeVx8{Np7`WLLoEw@(ZAbiG)oxv7GNuqe z;JtS66L<%%^BHTmPSqq+?sV}+X8?-Cs&@wB1=`4$=NOx!DXS|3;p1 zR()#UX<`BhMhYuNo$|M_9C3LB>6R2)M)fiJ?Vx4Uz1{g>R|!CIlb0@sc+7|><^X&z z9_z1K^qRihV9DL45F*hpM$^PbS*k!Xa*7- zB$zX%P|ae+H~TLUJCX<0e=WBLv5(4-C+5d47j|xEWiuzNgeY4nJ1Q%xL4Dw8o8c=s z+Ox94orgOBw;y?@H5AQ{#31}JvBgnSZ^B%61nhiTH%bh42BAnCtC4S(@Uq@a>s(_v z%%E&*SCZR}?O8Y{?BAH!gVf#qK=u%zG)5p_v)e7@qNVm*+u^W2u4~_UtR2G1%CLmi zAXQjio?P;;b>u)oY~zTh*CnewJV={NO!TZD5L6R28U8=-6?H&}J936qdSYW8H*_r| z6`q!Foj~{WQt!F20n{kH&_}y?jX1~*xqia#TCp_&xCZ$oeB?~#bY-$@@f_>LO$g!r zN)&j*+rQLac-@wwX!w+s=R)rP{AJjr1t2e#qy<^}JGrx=F;^Mmw8CNlPw$;|EY@;q zMwa*vWxl27R#=EG;VhynQ+kbX5?^V;DLjSKc!VtqmqpE*G~s)A4336iSxGCWOm7B? zK96vQA|1yA`PTCdG>-o}__**(sFnE2yo1vq^T0KiQ{~m|H&Gs+JjQG<=Q%AXjck3r zJdaV03G)1vWI7l9u;G9<;oJzehYIIFbq^9mkre8N@oqZ3C-2esIU*-5&S zI^iesy@m(0LI=W&`OkVhPfnG!zL)>LvUn7(11QDJlMe<_ z@F&|RWX?u}|2n*v0;vATbj--beL`#I>VxdyfY+tC1#Xz;`Bx0X;dgvVxh57t#qTZQ3I?tMmk0j|U6}>jaV-a#RaA;5 zSSgxP=hnqQ%9XbP#yYy!-U6LM;vWnuRzEx4Dsu(VZjmQhPrQvkFr;}0FGmOBz{lES zlElf9M)OSyl++xNdg9Vo5bK-`H$Ru|wKqnG3NHyyP*_L~g!jz7umcpcOCCB5vzmk; zK==j0!mk7a%Q{Xj^Lb7<1D!QUxWNB2W^xpQw*G{`mXGY*tc@kq62h(Fw0%5hI1Q|q z2Hvw^3-1lImn|?`{{|=$d{J+aC`+m|#l|kJ9MIV={z%~l;Vz|Ma^U(FKL8A9^5q;G zyY+ks)Sq_%zyuBxzvVJ=ZblpDlHpDG^U+|5Mf*L9m2ONbg$PdS97faQH$*~#-hZAi zn(I-cqJAoSjQzBA`!gF`HtI=r?A{SsfzEG`V_b3ag3=Cja%D_8|C(z@_dynU)2A8o z58yD~nwI^&5=SnAzv;C>(xXPs9uNtXsYB14|G=nez(?GEc?(L&KuDr91-;aSB=f9c z)>&|(qZBPK?ClGI^FNGAz!f5!)S3V+h$FFXLn`_{kd zzltL)-{*CzxX6_^>8gT6BA0A&LMPuRKb*C)B?r2m9Bk|9#>{%olEV@-y?2$x;2`_? zhsCw5`_bQ&g2>s=5H1wK*$Xi4^HXKk+t|{v37es?gR2sBMH5&PV{eBmIh76ysf$pO zxGF&>d?X?nTQ%tLQz+#gTLIIQXEL2zJS$HyRURC4LFJ*4K;a+6G7IRR4Y;MIz2FbD>~Nn!ckUwwiwJ~kTRi<`|%lu~ZC zv+lvjtTZ9doK?3`I@XZTkVw$;;jc;1GE7=>_MzQ+;pQbkgydmAPU~966auJHc+9Vu`fm4R0eOu;g8oMxP;h*~<4lbBbh?4iQ>Uemf7= zp}(wBQ#ux8$?HlGw#E9CI?T=0PyVBSI65P;5`2qp$0<_resP71oKvjjp2hA`i_Y1x z7ERJ9XM^DuVO%A(&kp#%8}G?@(>P6&RG2XE`3H_vMQL)s9%-z?o0Q^3QrEz>#*w^d z{HytMesfBT+c$B&f^`D#NTgiW*h|wkjzO+OILs zJGz>s8D%~){w^4B;xnC}jjc$i_l2}kD)sBW&DLN9%WM(cQo3{45)IBp1H4t~+OJ{S z%4S|*=i+p!H6q~mgfkPs$Rk(h+r{5#h{NCzs#{`X4N51&T+to!im*iCl0R66j}rV* zru;-+g<<}#37N!7%bN-D;#Pvs9g+`d&IK-5Yhz1Jw8ZrSbODVeAC0C_EcUmg^5R5} zR|o_;AqbC=EU_!gEe_<~Z0+?P7r-CBy-e-F5-kMa#mbg=-rd7L(h|K$xoekjancGE zD&)G7RU&O&TW2vb7vauf$;XvqZ&d8Y)!(XCT~4=vyvGo*q@@*4R132$m!buiJ*B16e;Z^$Jp zcJB)%nYoI7R+--i17Aa^=lH_d|4BBRbQzQ1tZSZgUi`eBE$A=nsjJopj(c8YWZvu- zRg&#gc*voWj!4H6vgXg5?726AddN~8%J~H~ACm6Uu>?=J+XkqtXKc}?H@*$G94s7~LTtrF!thYHT&?cBvgE`9W@ zqmHWNN%9b7Ev?b&95r2XN;Tgdvh65!I=N)oquNhdUwh*8envy6KnOg`Qj~Feq&-?{ z59)LhWH`@s8oOv$!v@Q1VYT1?b??M8o$6lGQDn#N_Wkd6%slca+a2@p3n9Wi%S@5Y zy3&aW_HDs3wgi2|sd6UZvzrwuug?sUv+3xgpY>?qp=_Zl6 z0jV9ke+Z|~2zrpb zK*)`MMXNDK_m&}SZ*0%f5GH3)2+0q0*61veq1qH!VGax*4=nz5IUE)Yg;>Os-%1@- z<7c;<`^EpdOoX| zXs4s$@--tQgFX%S9j8KAun|2}Yy0aFOyG__ia_iViR zRH;4!!1?@OD;u|XTU!k8B!dtNz=IYrSJra{`;R_HM_`<$+q|J2?9bYd9+HRa$l=3sgySN&DS6;dRPeeTDHslCqHWvwn5Ca14+{h+CZoMd| zx3QW&uW?E=C*aIs5=2Hm5=cb@7WaU2V#>F_$}OUfKEG!n$G&BAiU90%?Wz$|UCcbo z`TUVc1Pn^No)`4;3pw?m4Ipe-qPF)2mDLwYnnh1lExxp7g5js-?!MDPna zr7YgcRaYDh)J`f2vrM;1A$!N7VweH%AKd`5l(sar(SMTegiep1P|6uCGA{F!=N8OM z(qk^t&~XMrU}j*giscKnF%~=RN4sbM$}oR;&Kw_p9QH+4o|tVHUtyX=8O8a5&;IFD zfpDfrH5rbKUPXvhZ-~p1ERVB}fpx@X>)8(jZ0y>NSw_3K9>50Uq5zXr>}T#Jk~svv zexYKAGGUjo>$zo(IvYxZ`Qivfkfe8RoSe9M^LAmwAh_6aNNidFh>uT2QMaf)YlK)} zQ_G2PMyxQrq#2_@BMA5yLQ+QF_qq1{g*@bsTAC-F9wfme8Ldlq(4~Ytm8uBTjdf{4 z6r%7pt>u^99iVnp41RtrA;xDB{hY8aHOvDE8H|VI%C@zZ}Bl6 z1}(~*vXHVJJjK=){?e7R8h;}vI$<7wShdR|HP+=O++$Q6;YpFG)IvI1P>2qm7Zg}+diE-zG7=n?dNU&;%)p>>|d&AB)fV%&z@;}zrP-*qU3Qq1l5Du z0rc0Rz%&gna-jt0wC6m*F^%?h>E4h#sPG3#uD=rnShNC*z16=HyZ^K)E`V2*DoNoH zoi^9l%S72)3vghV_MhfkDG8?-U+gVlw|?*30Sta@#F+*O)`Rk`??{@xaYU;*W?JG0{LZK0VU~a+MWoC9%I>OJTv?jNU;#Sg| zjPH(14a8%JDy4O+f)Tf}uiyGzw8Bhz8ln^rKW&R^>l*`+nZ3T!9af^AIX}aV?&mX2 zan-PyOoiAKt{IrR3a$eF)6b*LaL&>BKCRD6L^wosV>i`}a%||y=xS_p@#kGoH?quu zhzM&g4v2cucI5g4u(aGEy#W$;?xK33su0CjZmy`HQI7mk!Ec7U2S?pPHMlo$=ixfR zjfS&;3v}Gdsz9A8|~sSsu9cG(acPko|qRmB!2a-55`!8GE(*uLJRTPK&-t$YpMnd`_H9n zP@bv*PtMF*{n8Gb3`56`J|ms^yV;8;X5Q}qGsJ9bkB8#oPC{2th3@y)n=2B!yoa5* z6OV73B;5fqJPWK*onP{ZSE#dOb^Z#uhVAxT!=~89)kB8H7NF$QXqR(-tFAp)0Nb3Y2hhx zP^#RfxMyvZis7|>DV6(Fi7Cmr_$%j_1ybckWgr<2{dB0aMevTtTZ=a}JMu4yZ|Waw zX7R6!Z<+_tJ!uL&{_-1yY5T1kocDG@jHYo(%klF0hc@{DJhjP(@pSY>KL0Je-+zSn zcZG+79*$qQkIfHl{lqqRbj`Hd`r&O_@cECo@a71Qki%4&8~&%UCO zS~D<2wrOEtxz0tPj@*eqJr3Na#z}ehhO;H>_8LcSBld*kapUyto`5roaGp%cIoZaB zZ+YC?g;T?2Xp~Q(B(kn?3?v3n-$b%CDgRC3B~(=WUGulWC`DhPnJbXfm<`_`DW2A4 zTT@C$>qw#iIgWDPTMDDg74tX-BU}Rj8biH>50S&^-p1#MaTtB3R&}4QUT6-8n0Wu# z45;-;qX5izwSXrscC2F+S@WhzCd?MivVwOb5YrV7LpxUhx`e)iDy7wq6aL)#Q2@>h zw;dG%<5y?z=j#V8C5v7<{C|B!4SuRPZ2eb#A$(3ZA;6+vB(y|gY0{ko>{`#EN!BT3 zs@}{7&KUU$My8U6VGE9wOW59&k$KR>X-%f#^)190Y-Hsv^?!jc9~+}Fw_xJxFB-{U zLMz}ln359nV-Es*l0q$fI~@2DRs%~QwsH*E%IP>ur*&miZr-<%qG~J0AhbqQQ1zj0 zu|YQW&HZK~ZRH51;cMpQuA!?Pmf}n+HW7QnH$=w+v7r16U-ExPAN*(b+|DFdda`Z; zZLCpAD=pkwQ;A;I9bG7g{~%&RuST%Zkm@W}9Ct7&s1v2I93Qvuz~z=fCwJMci_AbN zo%ML{6B_8tMZ{EBx*??_s0(x^_6imqbT=Dy5OnF(A&MH! zumaz+V-a70KaDZbu7ECO2ZJZI;fQIZ>?P9jO~a2_AUVohXCl^)hsFsJHckytZ!L7;9 zukQxCNJmdK&X-Cm8osM*aPIS9y41(PMj`5n_q@-ZSEWB2bFMs=uKx1MwIi~*3Xbxf z40i_ZEK(z6v}hIY)Y zX6MFIG)@)gs&z}m&iafmx|Fnwt$2nxpZTEc=Ae;9{?uz3c3ZD^s36}zCzVGswK+B1 zk{tb7;;4D;bVxerh9{52+B69(1*?j`tayq$rK#Gexhthh4bhEH6xp$(He^nAR{w=bm1B@eO_Iqx%MPXL>QZO>f93RP8C>=j?I7Y0HaF9 zD&-nI-a1W1+0C<)9B#^b5I)L2>p3xFELTO!pj}~}3q{>cIw3>(N)vif1nMI=KRnja zOR}x&g_r-^9Uk7~3I8e+Rjt8Y_n>&tayA<+4(3HZk>87-vUj0M!=-Pi_EY2&9&3N$ z6kp|2T~Wij_Y_?6lK+3_KIA;vIGK-ZkfnS4< zWP4j`ngv-OUdtD!$1r{frJ>3cg`Q%*v)4X0Wo`5+be+mzI}1pu-|P)XS`+!K7-i#a2 z%f{Y4y_X;<7KF!fWL(SMzZ7e5DT3?Mr zZ0mK4g-r;4I-JzGWv$H_S|p8OaSceQfOz9T1zi$IQ>saDf5N{qK<)!B0{^L0d*MA7 z@2c>72bdr6{}SGz_$JdxXW)+DyD0nvfpZ|%jZv2joafA@V&93icLs-t96+6!>F1Z-mS zz8(b$Nb9*%K@O>aD6mpqO>EYnyNh9vY+sY6lKeplXScJG!v4tWBjIqx$i@>D@iIMe zY(djsjN(7oIB-Q|16Xf$MfJl#0Wh)ev z3c1luJOHBW$i-fwL2HwZy=c&QhFxSTe9T3Zf^H=dJf!~cGG9&w{~$b0*tk& zHN6JaROr+~*Ph9Cv=b zx+u!!J#;gbe6lM_3==CTevKmUdwdn_Q(soW$j!5l_?0LgRQXFq#`bT&JWxzm`OA#v zi+~DfIVM&#qD)8Bue}Fq;5K*_cg9*5KM?;^kCyK)%8_ z;1<5XVGQ+`Z+zUiEk=3nicsWJf21*c`KJhTKUi?kr*rp<Fz-}aS;rvgwj$e34FTO+zGqOU1pB=WbNByrC zf_gH1yysl<^~`3&mPS_f?5+w}T0MKDw~H%WvEAvj6>Zu#5hox747hh?>~$N22dp0! zbCOrLM@_LSyydIk_SwbG@M3FLEbD|yO?$!m?DaY8IG*)e>jTX)pOdKXn&fZMA`*^) zTWoZ2pSrAEtK+>%?jc`YO z@n<<9cM{FqMD0j>JsX#Pi<)acwb0qhiUn_hGP|rPAtuRsc)A5NA&8;-yDa3S5 zbkS+Vs+f%8dC?zC0$d95Koi|i_K$b@6HioUHnm(9MY!_tJAPv_iYcI}H2WhOJm%k< zY2oLw2J&_m*0t{Qh#L!5d&U(Clb7e3N)Ti}kGQC16j#SPz*AJ;xQ-DU@aKn>EPl$2 zhv;MFb$22v4^8>VBox@fCFRy$IA?kW8OoRnMhOeSB6j1@HDxI;EP{t0n{@m1Z`N(B zdCArHzxyblaVUB-^H^3F< zZa*6D^)Fr0bMvTIaoOsmt3G?IQ61a)>1=8J?^@?tc~u1;G+f`9^FgYYn;!-pW%I<4 zweF1=+8?I+h>c($Yovzn0;c>3hGIv(V^M5hR_c`jY4&NUEZlr05W0Af#O+!6%ELVP znos6=4&PBE>K2NEMDgrrndL#E6LI&er0Wg8vyLBZ7Tliwn>cqRNIuoyw@Qf=23^-WiN&G;Z#WS znXF;n>xC50T`%0SAt7FAGj6{mS3A=BG(rKo>j!JTbmTEsNZk6$vmMdy3AH6_A=IE- zRD+_U!h~a>GvzkE3~a>Yzwe?TuOGSyE2a`}wLTLO<9qbI!gm1lV@(#V_>-CYjh_HH zguFi$Bje3PN!23!H4MSN!U=$*9!y*Or~uW2grL!F=*YLRuf`WMjsxs{&-aNKF!+|8 zaq2x9{ZA6h*u5WLFS0IS*IT929E%nX8p&d&6i(}f6G%m>=R~+4TNS?VEt|Q!N+#;L zycY5L;6cI#Z$ za&pNv%3!w-L<^_z7|HHDXLH5D>Kd*Wj!SI#{Z4fgvEk*Qy(X&M!TG~sh>|ZFc-zfd zhrc0Kco|<5e{~(EqWn}HmcqQ(VIKC0IxK~GuftN9_c|fN(V#P z#kb}XE>i&+S&g)qZ8kRVr+In!z)s_L15}Dn;nhYg%wYN7`n~usyf3UN1{^ruvJAHb zV8TFkl<-oU6fPlY$N-C>2@5|;^lsc3x0=N-`+A?dfhx303Q-chxP72~8E8cIYH=si zMX!5|Bj$W+jN@USC|fDad)Z21-pf`BbC<2RzR0b=pkZhTqZ2!6KKfz~s`Xh7ew?N9 zU1OtWY?%jc%dMEYD>_Ts365GaDZ}uoK!@-+BRh2e zv&J^|?eka+JSW29nDNHxr7(TM6W~bE|NK<1!8>YrBg-9s2GxS)hVDwpUr!%%-QZ1$ z&O$UFo&0dW6-|hcNiT(2<|%Eeqf=Yh5FIjn4=7X%MVuo-^1asi{K*;!b6cr;i^ecW@1Ysz6(d5Z}feH zvy)1odO}5_B}gSLIdhM|#L>uK+>$j3k0s|CVo52Ilq84LW2OH7WqNjF9QS zOFAPy!~#=^%xG5SA(&I;L;{l5BZ+MwM{3)f^MLtHEk0db4m2iq?f!m%9q)y^tJh;TiAdse!iA`d= z%Gub*ZSA_-t=pv#KE{~X=Xrf_8u#w%nkDSk1#%oxZoAMN-X9%wr-pDM>u zbm%;BTu9uvNG?Nx<5;-$NDX*!B~uxP#)mje>07m z03bVD4Y(vY8sBIxM#ad-VRUI0e582ezK{Y3zhDY+sTNRh%@u!QBB z7yM!$pl#c!d5n#DfUxZ>DT;?QCp*h3AINEk%G~W=A_7GpWFqwNEUkM2A>CLcNbmxkyXbjKP+wI zUyqn$NewK=Jk6+430HwD4p$V>zs7qcoFD#2!qJ+g5#CSn7I9mOkHQ)aXANdITR(p| zfJ$@m!G#6*ftX_rHWtG2Y9`Lc_%Ev)Wn(8Be|J4V!hVvcm<}gseZ;E z`6fGjBy55XXq?@U05^ov6@NY&qTrWQ21Oc^N+AMvt*ydZJRC0xOJ=K*m&MB%+T=`{ z9G?Le>0b0Zyd9m+TvI3M+Pb7XKor0%)?(Ymbb<#RF9^fXZiAbAqekNH$MDI)h-w_YYp{Lf5lncC*CZ<4(9&s+3egxKy}ua5T^DinrA% zbHY&;jEKESlTkAZ>hvX6Fw;kT{S5k@H&<~#-{{5XY;5D3LP>UOnr9t>T;*NWvrDOt zl&t#z#^lVbME*+^G0z=}WK0sDV8S6HUmbq6!1l|#arllOBT%^5mUB^3cFzoMe?=i* zwa}t0(D-k~Ne<$enO#3xx}lAguC+A*3ztkxr(JF4_&G^6o%lp5o0q^RSn$;&T6{eg zGV9mj?B%$A!`$Kp5-Y?2kk$aaSUPA01E6zvLgxNVS<5ZTg|osDiVK)JwqFw$!Q*Ap$~7bJfgjvB)txY=+g;h&B-Y-w>7mb-Y< zQe+w&b)OC43gdri;FyPs@(=!t4t(eYe~?hV9}QOlY;A`b7=4w0}o`$HJZcXnm$jX_u-vh!qT4s;@|e?OWN1{p!1IWIC@r=veVOT6W0+gqNe z6W{iKh&+`6fE+&uQVP-IKC$o+Bhb`-Su@tgYTY{i47Y|6ntVW$yfh~x)=Z5XfTcE| zDh)5&9%z2WW~!58I_G6ZR~_`lEE&1gAgq* z+k{zCyv1kx#B z=Nl!U!9ziLK;;34eG^f6c*c!GoJ!NZ%+En(9ZHfD<8LgVS3*#=-MaZU7W;567I1|T zo@W~5GQKfkto_gVrpo;e-S86{8XgudB!I_hF%j%o^R^vafw^_+z)1FLa0ppbq8VhG zU;$U9a~HH=!MTBls3y{31v5;}k*YlGcKJzWwTwbAz**0PMqjuan7Lyu8lFhM>k(XQ zIDa&b6R3?v@P8K^>4s4w;+K;F88;yo2~S0dx!=$3DzB_OV4g@~exLs;NP4a0?ZH zEO?oDmycxb<_mjdV+$MP`j(D;@UzdfAETUI?5LG4#Db+2mmMDUy4t<(<|!+6>vwwk zCm_o-t`H6b-qddi6(mp3HMXN7`Ff<~lC`?$?HXY&-=*`6D^!x=daT*K=rk|mN~<1e zIKs2rd2r>$*bYsLV6xnZ^b=U5~hDrTuPI-dtyrRet>1Ku_6*#$l0p zpoUX)pFPr;OO~xYX$kX^w_q>$yqxP67H~t^BtN0XN@Yp*YSj9{E;;%CKOO1+i;go6 z3ecL(lcs7eon`MUU;y@n!)0CB{4@?f zFFbbZp)Z#CsU4CV=j_T)!Y8Y4nD57KzIu@Zt8ZEH!4ChbaLR0}0RCG$IeURt++BuL z(?3IWEQrM_8&}v^)gJT8;QlZk9x4<@IA&Y#dQ`Ge_cOrvX$Q!dmpXg$!5DYZUDY~! z(C`}zz*u&|_ohi4#is*BoWqxQk{{MCsHXXmN$NDKW59N!=A6&<_pPjdC%1#gZLrDfdDqAc>mk-cmz3^ z6<(=Cx(cGsfkvGHK~rTw6eS2^4IB9VZ>6jYB-%XciQqo(udXLTd8u8i{S^BHs=DKt zlf6t`dI_HCe4>9;-ARD~S>{i69@1fVIxlYa`4d1_XfDp{iJzhTBY3c-ohR30NBZ9$ z067Z zJ{wiytKkY;RVRLWfpgUGsDf67v-WUOG%aU_)BsH^>DY4EUA-Xm9ZU_7hz}JK2(5|b z9CGb5%5#naHAUV4DO8(54(!pnQLRt`2;$_mOf}z-7QR|PWFo7) ziuMUdV;sLq^+c$MIOVT_R(9h4NegRw^>{lhX$;Zf9c$65kWOUxMCc!=2~+V&b)`OB zB>b+!k7izf!%YVPUGXjow*~%{5T1$uQTPv0q|XMpx%giTZUEdBe2ahLVZ^rCojTE- zu;$pks5ZA#^6l688)3?7U~`jpI8fR>f!lbe0joRy^k9G`ZT1m}KTS@*2tjqJN1@UF ziMaFHz&h?8c-6-8)a-|O73u6TYBq}XfQZ*U?oz~?yBjXy`1Oz4J_mjyVIYgv;UJ}c zB7bA^qYXFEGr4l-i#E13T0G5oGe*ymoOO0JK6SL{%hJm8le(gD>pJhlVA&EoI}KI&3dEh#cQE{Vq!~ z0|9L{U);cfG~4fA0?G!goh;@{p3?^@h!qvfVOw@tZ`<-8!>Ra$?3-Dsd0Q6s6=K zuqH_;_GU@b&Yz8m->esd2?wb(*I|!=0~ylK+SrhAbpO}|rW}yu_~7;;a6JBt@*WJ( z2CQC%Z>b7CT>hM2yjZy_Zeb$OuV(lA4xk4Kln6s*o#I;$kgb;fG?|dDO*c&BkOxLx zPXgp@K+5A@DvJFlv_wv+*}&*7-EZVFcr z?ieaCHOvrTqAgEMrlp&>bsQ&0htBl&o-g<@-E#LfLB0z4I;1c4{rir!u{9fg?_+~D zmrxCoAl~UnOiw!l8pp2^$$HQgS=6T#Euee zhRC>juj3M|w;0)NwxAVg+J*Y>w%Sp>S>8HC zxKHo|^fclEYLA}tVAZ^2F}SIkm(VaL%_(SbV6&Q)dkwPq{#qfSI=oV;w`XtP94*DF zRbSlJy*EOAWqBZ@qN4G)0^Z^H{sV8C(TQYEg^#a74d8)ov6^@ZwI~_;iXqjJ4ByqM z4G*htSSpQ?Z1lLqXzRQTKH74E4mXX|08*ahaDr%%&OjCDFZy~2Eb3K)YBev9BFi^}()qu0OeSL_$+x$gco^j#UKxp{ZBGFN2jkd)Jp+Hdm@FU=74 z9%N+??8qqv68l}DQiMEJOdXmKjI%!00tTTc{%6IX=82y^Iey|0^*jHLw-%Dn2)+Jiyjq{nQC8Q9Zfxs`kB|sk zR6*;@sx+NI22k|MaShr$r`_8_C?x8!d=afM-lO0i!llF2g*yx<{)LBGSdXm7VS}mT z``!?7mhHNyK5Pzf!-{u0wt+=?H}6f(dU?=o^a0tBBljsA*MM)QlZ8UI;Y{^VzCM5j zyF>t>Qp{>nDiF>MjSH0S2%K~5m%kGUsKF3MgdT^ zqG&l)wglm#Or!6o+jT6MeD_5xOupaSr|~VA&E}yr)zY&Lsaic!x`~bmI{}!+@*Kvm zUUwF=!pta~-~1Lql5J5v-`0`qL_Z)@>cmFxb)xqFQax6ARuB55{!Y(@psM=u-)YqO zWL5b@8V0VeMrp8dFMH&Z`*V%pZcMk7X74g6;OYp{c=N(yH3a*~bx=Pzp3UNmp1?z+ zlN!$g8l0$&Mex2OCd^%`5IkqNl2MR)^trA+T<^A11XV()3DiZ7v-acly!d(1->FYv zTrO#pY1eqSd3aWm(|Pp8js`q7$wH6A%UI)RDAB0yhn4ZdGo9Cj5cFl0 zZ#8nI?+Ncdf3K!X8QVNyg{@qAku?v(HZQV|&n0>dK20FRy@9@keW;YQ66MSlqJcz=Y0-Ep7c_>RH56x#kbc;l8~ zzL155Aig&@1%ncFllVmK5#F_cYXM+l@xKdTcH(^=-?Yt^fHxgKUx@#afcp{u2jJZV z?~iyt1g`yXbUdB5Th_sk_W0k536^|O9(Q}Epd{{0b8d<|qqC+{AThAJkUX&Tz8q}&(JtV@lAj@5dK|3>h^Yz4jhS& z&BS7xMqfb3Mi+z`(X$N)9DK)j>Iv=frLNP}mZ zH9n|K5Ff)6WIVWGh7ML@!E!pBDCThIz#NS*1o2sYzsb?!Vfbp1pe7(=5Ao?@^9k2^ zf_0jNMOgr?aXvhx(Eo#cmHz0J{#+C zpN@frqc1ExAt>>I?PA;^U$U)hDLXNS5}-4Pm2z=pJDfDQk*u0ux*?AJ7F8e;p?J* z;00iGHbYc5Uk0SSiL|kVW{vCH#ij(R5mJy}VJIF*`PEIz`w z(Ro~zMbo`bd2DQO(G73y;%S6JS#gmt8mL0_YC zhP1qK8`$t-w;&U{Q2fbFT%U);yyAR*q{bMgzxvw@H%M<0Y_WB`HZLH}j zeN8t`x}FYWfJK|DZ7s@6LyQbRz~zJgd3-N{BjNmgyh(|D4O}@mrn_+SD>kM5Z%>f6 zBEzi)AezBXg!>jiR=iKZb%1*XN9rkLnl%D%9o}TnmE;mb;cmdsj`s`)Ry^a_(R}vr#q%7rjpEA|wcbBR+{ZoJ zDxPud`n^{V#Z~Y{#zvee^Tftxj=2O&A9TwpysBn2hKA)b&26-=6du=xxZ0k=WYj$a zd!FaSWE(rxs~hx4=$2EBvz>yP<$RH}mTSRloF{p$n1U#5?`5`{Ux=r1ws(PkY`tc_ z7=`#+mWnb!58V9O!vn;$Wn=#OJ0{k^Vy&ZlqBVV>fr70)yRVv!rL-%I`|xNS)HpjR zsN&f8CMyn#Kfo8%Pn{fz{ba}8{b*%AtA_hu zWfIX|_NaqoIfWXZB2V$?CmeyUd951u-}cAVb7imdb$MRzna(SerkDOm@92n9koyj` z%&L)#E>Ao!U3j!ysWy|=?%H417rG=L-ROVY=6 zX?pZF=!}leh-YFYj_urIW9vHiYiG9}(L3z$gk_kk4@N$-v4FL!-`lP04Lay8cR>I~ zine(ZZ&6K~J73rh;qmmOuJHHMXbp~T99^DDTcAx}?TYz>d@h#v&ol$RsnFXUfbnhE zjxY9JWz`Q1T!pE+PF5SQ0yyfT3c@XfI|IVI<9z_m2`BEsBdLdyWKaBoUUSI!$FFVd z&k64=cIzfiY%fZ}#Af(LaOJ0wVG%Du>@2`I?C2|j z1T0P6YGa+NeiWBlsgDzz>z4R%mc(F-uyKZAY zJSu+8U6xdaBBD}nO)Mfs!X0qpW;`^>gDG}0N0rPmeKgDm{-k~&M%aYa6$*9r=xe8K zEdQYIBJ9?c#!z840KlaJF>U$~3rY`cTc0*p?|z3GJY;WgV@!n(EV@3jyfi*O_Agv5v2#D~Q)AI4Hrx|DImfW2o5 zm1VOt%~75Vpp1V3*9ng53hA7RBu@w9zCb)p@(@lhN0m&Na5=*gqPIWs0qc9>!;zdn zVMO||$gHj~85>0V%X-_}c|`2U#X;Df!IZr7WV$kYBoP}b%mD)AXtd9rVg$6La!u^^ zz~EcktpfohUGzLWd%8=rrfVp2+=@#!XMGPNtjDi#YzylR&0@0vL`I26+PCF5A$jnNe!CCjaCC7(B z2nRMz;=YTE+^q^za$~=&h~w>=3aMWKrU(O2nNk|>*=-l! zV2lgWgZ0C@{M~|Z-#ADQGU^}qz0D`}DjfZh~p5SpZc^q1;{ zCTS4;B|2mPs@XCC6`l-0oKQ}HNpnc*I0ejRP$u=iE;IiwAx%7#2T%UmFk+*aWZ|P1-PLoXihGPiG5*C4_ysy#m zDc)V`cV+l70E&qZi`8g88Ws}ghf+TLQpn#RY()_h-CCDzZLORHm(sfMdX7tOS(0iT z^-43fN)2z7GR@RvC7PFe(tMB8EWwXg(Y%ak9wyOD{sv*2H=3#8OOj<5UQe3cGA(a3 z8+gl-_)Kj=!`p;RGqoyCbEt+ll2Boln|2ytv&K`vCSvHJ7E5wa%u*ycE}sn2JARV} zcd8$*FwR4q7oUt2{RXQDbDE^I`qnq&&oXp*Pk1=}%gQs|Fi7VlrlzRWydnj>&n zX1ulhEV~|f5{7A&4H#-Nw7khg8>LylwT_nC34)URz>J98*!HdPqz4R<$m#H83}ISf z6QwPss+H0-vex=HP@P%6w%r;WmQ(6qSs>;7h)~nZ@u1h?#Pg5vHnXC-bnYeNjF523 zd2XlRi2Pr0sIf-0nH8P0OJ}uLZg@q&OCml}Nr={pw8TNrYSBbV{2Fa*xPmzrw0Z!3 z$=b4{Z%q8+%eR(lyk2sn4*oPHVD+oaUARuF=f|YJj}iGnh}x zVE<^=#n4~LXOudhG>@V(aYDlAhtnxb3V+#`&01v*#Zpn;n4|hY`78|=17|I%i4<0& z&|`$nc!mjE@Wg^4cKC=5FwmEA80U5l0EFr!TfBSA=hn??GC6owmZKf$_?%8nOH{6b z#o5MnYZ|#}QD{)=DQJoEpk=E>OP7dtM{Ml(=W}KdEpi$D5iz+%7Fq~grp3h;-dER` z`J&WoDF@Sgmn_HXCpX;A^7S8;<$?xMj3TmNieVeDj>Mg357LU-*r?$672LD|@MhbK zz@BK9y<(xVyk_wj2Q-pSu7{si@^kA*CqeZ?T0`i3K3C{Z8jcP!Wjgf?QWv62nMNO4 z=PbPVd5W3%^U-h_L??})-ZYg$gze}{g&p+RiATy*`0+NVwgE(FwT@AUgdkpqrSQH_ z^Opxe=VwStq12ZVmxd;N+Ji;Uzz|P$G0yW$#lA);`YFsW=M$$pAUBr z|Km}~Is)bx-gV(dBYrIWd0W8$w}9INM>_?#@!kZ#L^wL*QxEYr<4rf&i1+ZvmeRI{Wz%ZpLis zUAeB!DEvXuMme* zkyK17g$TP)b^)wZ@iWQdPRx(=z$Wa59}43sfsO^Jum>IxJ_oU)-`owfu_86cLpU%V z;08?!(N6Qn6?g;Uvl-k*J(62dU8V;pb*-!CqFdkG&7aUf?i&Eq#v&SvIG zP3JkAyKT!|rJr1P2 z8}+h)B)PEYaqy96hR4T2BVuuz@U{>%2C>%-E@E0gY}z%mbfQKVW>g4$=8e$V`!#Ke zQ0G@ygE*l{gP+lzf=-A&uv^WGU|!ockhb0*JTk&A_JDslku|#Z&Qmx~b??WYA;E^H zA$cWO#oEsAkb=!CQUNlIN`sH%OHhZ|>+Fb@T(R}rBCoOMB1Rz!&)y(=voss)pE_@? zT{Lq%ynJUPs;Ydiy33bBc=-m>R!+p1N2?S4S5_J6x`mT}q2|e1##xt%NE@eVf>^Fx zfiIyY(|de9ySNH4Mw}4|Vv~x@!^x9pIS;`iB-w<;9q$kiC!L;181KC91#5PITKB`? z72rr;LJgKE_2`L*$W52FxlEDY{c(woRRytv&G&Ca7tZhi9>L)cM!zkjfW3t4}a!0gWlQ6nv)kI`F1He@6 zn$HP;MaX{dK6pDvwzyVkUm)9xa2(gc$r``5ygKNGgGfIl02Btk95ojWb5j)L+7kh1 zLN+>l{&qOwneyX9JHFIuf`C9qh*#rsUEAUaI;zW24fkVX@GWH0-_lV$y5u5 ze1lEO6e?L3JNiU-F&aS@y{lPftI2u`E`+q`C1P=iE{Fw9-35~{mfv4=flXit$k7Pg z5OQ{mfHR$F0Wtm3BD;Qt`X%6aB^$mcrJs!zuDKSc!oG&5(tOobWR1l)r;Yvk;u548 zselQmzMam0lOFlcG#3{Rq4b2qc=#DImeCgM5%M@nk8knN2*>aYTjZ}O02tGRsBOaOmqS(t?kDI4+P z@;^*dq;-IB4&X)Wu&9#54lwJiH)k->lPA}tR77<1$#sle~MiUyMfm`anx8l(7`}3gO&AcYTw*XP~|dhd~?b_kPZO>lDb376Hb{?y&Q)hd(*U_8!IuzzIwn z79ar9r-eLx%=dk9@b+ZkFMVXuX)+PO>%u=E>JjDT4&?=6t0hvzrFgNbHyVy+h5QcS zqND)1ZBlOb!O>wKGU!OToB>DmMcj#p(U44Wg&%;gs8QH}DJIlnh2M*y>O5%wB7_zI zG;Kwu?oy^^B2$i8c$jb(QKRZM_I_mjFYVTeSWeTFH)Sy%CRVcTVoZ#>maT++=tLx| zNv26O%C>!#lMz(5PWu?_v}2>aPx4iaGbH#lBvafWhk3DDVx>=a+4{4h4cp}B>avhp zk*$EkApbFV;hceZj;}zIpVh&}6}a_?t%&FXQ?`obKa&3D0WdX?&Tuv0Xur-n0B2if zBVNF*;bzvud^^I%oaQP)cIzPxLgpYun2QGnwlRgrG$pzxWkxn6lL?c4u8-|n>pWPT zn+FKwtoW&RT((c?qc0kPG!Zx-f&MJyt+<7sz_=BJOSHniMHcy)!%R(_N$Df}ebP2@ z@daNOJOg>uMe<^KMfzSG^` ztLb}<`+F^YuXBH|r|%8!?~U}m$^E^VzPGr)x6=1E_xE=C-r@cZr0)RbJCzEM+Nw&P zM9uNnX~3ioUNJ&f9rY$0bSDsDcyb)6y{ueb@-*e(E)*L%wT8 z71x1PQnt7lO1Yn>T+OX-t&V?Jz9UHOSHcTUZ|7;1`-MHz*$KW&eZLx~vTvx)kKpBO zt9u{PU#X)%qGL#<(IN|vTyjizI$B3}LF$*?>tb#4kVqe0o{zq?ngLFdRCs_)rO0Kqy2_7yhZAMHM|GcBvUuUtvG z!>leJWfy>CI1RwhCp5o+K%BaGbc_4IPCitG`m=jtk=`tM`jzD+GQwz7HExpwOoDJ9_u%?xO@Ogob42M6GQ zRQ_)w%0g5~6O9?u?vAJY)^fDkgIS%91#fFN1)~v}B-SL;$O?*Sbd<4u1F8d9p3o8@ z+yEA#sP*trRYI|6_{n&%tPI7Jpfl>?HZD@r6G0D+us7G%{@14+l@4bW?Ivl-s2=8~aYsU_`=XrjAynIl0tsRX<(r6@& zMk8xIPF&K5mMuZtd1wNN?_K+Jrn1A)R_XmOyxeE{hsSZA4}-O0EjS?)er}pO)!-+U_K$AO*(59SJ^5dUR(#6|i>7s6WKS zK$hbkC=c)VO0I$8!ieg5ryQ^3t7?@peL)>rhXwRr|A8&qwqPD4f^0aD7w|OIplOE{ zPk#hj7n!;l(LtZ=JPeIc70tr#+(oH|9Vi)n64$8+HWS>pDJ5-4p$&#ha-}L=v>{bH z?c-HjBl<0DRZPRdY#ElxZ#AhicNnC2DOxmL{yAtyuhP5pl5|~~NqMfFDL_1j*6Ejm;Og(-j`<2qa zhG{R6T|R!(3EV(+e8qGN&4Ia+D)VMRXB|7&r#X>5Oz@(MF>J_@aQN?-3QM=q2k)Pk z4&W-e4pMFs-iQBVn|#%Xo~-tSI7NC{s7;8!s7%CH)IRBLGGTq|65y>Dd%|Si`uxmm zn3?51Srpe6Z2q;hw`+b5ceKfm1vlx;j}83d%5$A-?&C7SWR;N(DNW)FzVB zT$Qkx#HR3(jK_YEHmMINEvEuy^vz6Erg#j_P4 z;_!TeP#+;4zsaVA*l{cZsl>^AkmRJ;2QR4abtt5DE2LAx2E0K_(6gpb4AfjJeGbBF zxRKN$gX(V{Xl74G8R7MJs9rb=smC=JBfSs(0|#@e3)kV02qY*&fAC5btDtg_&cD-} zbJ*%H|0g`(SH<^RQ>FO4KaCH~>~dtDFv)yCr?jm{-b&jV{+B3H+E(GOuo)Eu-LD7B zd8@?-GrQ)0Aqnb33@^$+o)bIqSO4zfb3|x^%8(BPfEIh!aT%;XuAdnso$*%=q=E_C zP(&{&BY(A$?q^P*Op*5rJOa|UFTAC^b$*gYvea)t%knlX(u-f|jv8A===Rx%?F1qh z+3q{iZ;Y8W>wN>Fy{SYY;m4QD>-I0jRrfct|HSqIzF;)l4r2UuCJU=sX-&MNIpq-z zQ)fP+EyB}2qLH$SCL7{B{PEKZJAlAhAuW7DO<^eNJM|B4n!I6g{YDVJi=k-R2~hO^ zQH5fZ)c+|*d>Ml;yNC)sTQ>9bIP}4n)CXxCu7D%gl<{@6_f$*T`qw0{>1sdR>aYFbED&qeQ4)Z9`^xPo} zLet8hL_#)WVqz+5qELN=WU|jniD7CWP`5vd*658VF%m=AkAOM4LfnNv(1wr}FM;}; zmi0+KgP|l~UX9x{)i+AA5fheEo}X&MbK|7WP#I1^5>f*uPzPYG{SKTo4OZGnbaEkz zO|#2oO0^&!tI_8~0Lj0Uy))>H0(b1Kw2|&GfjS#p`-LCP+jg9JH9Fb&n%0$1eP&3ZuDWZ3j-GGNKA|+o3GVR)_8>X>sUoNoPxg2lWqA zUUp+vr{9rFJdMKwdMx}@=EPrN8$<;gu@@8=`W2CiozRzKLiAN)^t&E9ePZ^@=qmqExJ$-As4=T zG0*LbpNq7E&02IC=O?#Pws9V4r7)vZR-Ad$!RMZKVOUo9)5-0q(<(c?ri=NJRHlYp zH_rS!_Xr|KvGXP7+0gebZ}I}2jW(Ed?77XdOwK`IJojviKBRHec=$I~BgR9|9?U-V zC+>|@HjlT6Cm>w;7>K=P&;AD=%FXM^wnuK*$B&3f{Hx+F?$g^evItx8v%)|YvioWD zuWjmwDluijH1o#&)lkH4J2?$IDi@WUdu`)z1&EM`%9s~_61SiQxl(^KUeYwh5f^tD zH6J#Jz6b}w5WLOPz$`DR%}dh`J`0=Iu`w&%v3&==HaE10HXzRwd})SfES`x7O~E6L*AHF?|tWX<-r$)1L^+Mxvnelaj&WY~WT3VTko$ zo0L;y#4(haZh`*1oSCvWCod8Zyh`NX1qly{hHy@;SRctW=ZKc{lAve3h~LBym{DFR zNhF}`zA1G=KElxs)rHRCTuy?;NwD}0MGux>Gw^z zhfd8oYP|I9QIXVeRFQovUV@7oaV@s$m3=T!x{*re)WlVt&1_Tl5*Vtc;0xPc|9xFK zmvDCO^u~T-0`2Xe^CfBPXdjeHu`Y;vSff@4+QxvQvy=I zOY&?d0gD&y{u99j)*`B`0jaanSI$>LAu14!Ybr%I@N9ZtjHt`f)bG!-%9r)$&==+X z!t#KLL;yGQ1&gVyU9M6^z=<(cA!j)f-#FE_ecEMQaI5N73maNeS5;Z}Vx(b}o5oHt zEs*4ZyTTit=N0;)IxX-N8kD`M)?y)R*mCVInvDo8qG=*WeNTn?5;7Ywii`Mt4^Jz;!-F1| zw|Z(8~~JD%^&v_17d&xckUW3%a$Vx zCLA?e=iO})1<=kayv{QYjZUMIG|Iia^t_AA`%*-n73WWg->F;t@+p@&c8++LKCP(| z`4Xu}nnTI%wzWx^Pz7>o?p?;^shyLKLc^;fmjs7oTu}jrb7E3kBMY z3e$U;S=qFm*i@t=Nz(PJbcmVSh*pqW5niErw5-tP#<_6TbMge7%~&cW&%J0QOo;jo zabF3)N{C{W(k|Mk3Q|G)e(7>t?2k_}+uHgRjzT;RCjJg*zZDPpC}yLKbGI5EinKKUkurYU`Po_VCk$aw z$~Qjkpyd7j-4i!FKSxw1>~+CX@HQ^3u0Ie?!j2P&G(FO>goa)CftFh}N++Y<*5I4H znfpGh_`8`69U3{tB2GoTR17V3PG3$eu%OjMSnG&|@r|`Q5S)U7($2h8(2*WL?u$lB_G_ov z-M(`OHd`-5e#X&M7{S;nUmwx^CT`vB@7@oWeLKb1Dz_O6b#UZsr79ci*roC_$aaonx7sZrmXwR^>ph?O>BuwV(@dVDypkg!~XkK^tH{wtlG z?p_~-8^No0+kjgl0D?B#GI3)SGg~`84HjP_qJHI$dbhVXaA|V)H@T;YUX%l$&A40Z zfFQeUTn8S8WHHElL**CZH*2yfbQWuneCse|v%K)7IcYX(&*5nuVlra!gCPb( ziQc_nF*BRfO|{TsIxP{bvMzP1r&gKe<+Sc$Yll@>!?I}Zol4J(^rKW)+>Rs|Uf(34 zjdMFeD=wJX(gow;Vg96?o4a)#Wk+kQ|C(3RQXPEQo2)gmrsqX@*z+?v=cUS#4O8b9 z{c>-0&TE4`uc-f0E(g^PGS~82Av!x}nl_0B>-0td0v;okoxKX_;m-D5tK;WNI#p9n z1XFfLK5LK<&e=Rr-iKf6_1R&}e-unh`TpN&-t3^cROU1fz(DItGsQ?WJ19!#SR@(} zGRK2*IN@Of*H-AwCKs$*9Hn)#Xb(kVDsdSEQz@z;N@wSek-N*cH?vZsD(tbC4mdJj z#;ap#{ItEe0pVQ(9GqKf@5BGn4!vDzY1DSw3U+Qs*E7G?d<4-EPIOS345i-0Gxn`8 z0;ef|Tjo8?V%jdZ!@uMU?T}L)5LSwj+rQ4AXVk3r&uQ&`r6NQ7FX#DIKmRu@k00bp zDVg5>|I&saCqupzlc6*#o!amnicRvv*Nr>F5{_X6Eqxl1tn&R0k?iBeaiu_|tm~wm zI;tm9S@l7fi?9KKCX4)LS70F*9vllM7Okc(C_>V(#+YdXNgD1u5eXwu(+U@1w!Nq+uIJ)(3O>XBkHeVH}^ev#qM)soov zbw`$8y-1zjh3sAB9^jKmRK5u{-X?_bW$yA*tCGxuVCu#+rEsm3|PfW zG3Dn^c>nN>P1@lk17@KfUUU7Dq}t1(*nprj5YWFV2>F)aghRRYWL^U@A|i z9B)>OJ4bAHv3J{7q#oTc_FMp%cdvSUq@R|3=^1(u(~`j@dq4$?yI<5oTg>lawb|JH zPt$C)g@!Lq?3J&!Zsk=5*{$YhW`CtKsglc>!D@^MIKU=#4p{_Zod#}dY$DcFOf3`! zN3)4Be}-U&K&uou*CHx}B8bN+aCeSUB7{9X;r@=y7-(_A&$(H*6Ge3XZ8*?nLeET> zHncDCrCe!s-~adS6~vaq_B^M)>rIjKjmviFgyMq1i)st9q0>hW>MvAbsCnVX=^U!_)Pn)Sf{9)Wn zy^C#%b(Ea1lU; z)j2MT%+fN%kq$Lu+?!0|?DlZ3ZE}o5(%isJ;VIW)Tru$CAW{-$z$@7G@@mIik8K$< zCm0;XO^anstC6d|!EP#{BrtJx6}U|$i1;Ox!XI#)N+^vNyME4#-Fi@srvF^EB$OdQ zQkI~--4sU9h5EyI=cE_(fCZ6`H&=%GnD2#T8RF(;61Q0WE8J`u&ZTWQkI~(9AF+mh z16jqA&OIat`9!OHqgy2+xGes7=>mkxct*5fs=J9XY{!vxEulA6+x6rkaL|5#9Xzul zq~LuX0*&c3Br}8q7#~D3m=b<>poIg)?Qe#4!@}#{hIpJq*Etg*Q~_KV>jgtnxhaGg ziU|;^5-EP{+|wz6_`0s)|RPfq&*D>wOvu1srhL^66P6u^-~4yWMhcG?sTXi7cRLMMc8-Hb|$t-D*gP z=MM{14Z9zRx8xSL#Ri8>f?{MR%n2S-U|QJ z9(ti6-dU$I2?ON{4K-@dQMrXil%O&FiNzml6rkDcg0Sw zKBsTQO0L|L)d?LjNCtFap=~9dd=ubC6%V-oy`pJ}L=86HDKoUool;|Oz~R-Mgi5dr z*9t}QVvAd9gYWGk{2heIZ9sKTgh;DftzZUfAQ@R8E6g9xylGaG->)a#uV_-d%I3za zo%FM`-$Zg>XiCLxhChkBz|VY}V<%qHG%XPqw;zHtY!H1Bj-b~j?skP~l@3E+glT{w z8KUBQR&)kj_zfVqi=MhXd;W4q6jR3rR>m+dSEYSELh~}3-Mtq$3)_Y%dIT-GEtt^)5Pt^h#;be_Ir4F zIX&=vg=E$nbtVKz z1G_8SX~+D*G1j*Lj}4-pl3~nrjP*(dMt#n6D!~F^mL()~1w;hbez!&hx7eooq25cp zsS;`x1l*vRDfXRmp$*_N&>SSUvrE~o(1@O)u0Ps&wy%s|8Fv;8pKt&~E90;$=<~`9b zp*xS-^I-GV|5b~f*j}tK&J2b6w1_4L8o2?O1p(7!e)}wK_LBaGTdzGWXRGP9M>=D@ahu_jxr2b-09MKjY(O_0(?mE0SX9XFv9*djKY z8DF0axfvn$CpvTDSKhWo>v9`Ic;xV4tk>q!Vl#YmsslJ7+H!A^$;`@cT!4MUvXn9y zu*G*ox8@#mw9)>chD=}Vfog%?&4{N!zv*fJ9_<7>AMd^8K;P*d*NDEW`_{}h4ow-K0nbk%sXK8KPir+a@8n`1_fQvmjLnIA4VsD;aXF7^HqW@x%#xQ^sw`btf>eQp zPJ_S3bzW%UCU0`vw5cln9fa3>bH1BmeekRzj79gNH`rK?X z1OzP!q{bGyqMd~<_~XG0n@XM#!#E~i7&Nt>EAk`Q^)^K2;+VP=y4wVpR0M$$RQ2HK z8Oq69@y|^Dovpj0#P|ECTI73v(5{7M7JD>kqeVQ2D18v_IKgGlQy!oZ4o_RY6z6!U z5kftY*S8tQ(}ZhmmFaZJ^?ZErQ)upd-o%E%t&0LLTI(z zP3z|hqaG82Lq8v;0YOWS*#nq=ZoB)6K9v0}`XQ%s&H^u7I4k}xq3d!sS%X_UYFDX% zyU7v7?~?xc$a2`stSei>L2Mu*<$iG%6F5(!H_P_qMG`;9uW_~(kt)%tA9%6URP6%3 z@9u{aCe*d0;@sEuA0zI@UK+#!#nJ^i0l3P!TY6Jm*jMkVIEz4>ub`CMsa;Cc3cl~I zH=@C3bY6MIvTp)H%K#Z4+_sVbnE8Wi|hcML0F^`XGR@t zSvSMjbb(K(XuhRKf1oi9ni(N|t?WEzWu~hjKWQ|MIj`NNbvoHU)BgJ>(2YVT90GN5 zmtlqGsWJ+^Q7K-2DxJ^=FA0b7N$aP;{pVKv#Jx(ls8j206dzHRZ9H4x68jPVbTq_+ z+G!q5;|=<*!W1Hb3Vo3plj%;IrYX(rYS-i2pkTbI!%f${MwJ_r5d+BqN_`vsk8V$w z6Sop-pEa{#7n;H?3ttVnWhb~i3cuot7=Yv5sAxY>;h2|ih77^{&fw0;75ae&5B7)I zJuiD2l_L)sj`_C0jSG@7{!~1xBG93$vIvb4NC+K8+&U0Klj=?M9l?TdAHjwo)&r0x z^mfY&u(k5R?j9Zs%^nJi6H9<)U=+x9`)B1Gt))| zdB8IR@Vg5=Kp!l;R_=Or3~sr%vs%*O5>04%x=wn32_--HnQ!9~@)J=CNpzjH-EqaJ z;a*BJ;{C*B2R-m5)Pc;C7$y!_t>=&>M9wr{Za8N2(z9dim=(5}$--USbxS?pdKxfx zcsd!z-gcj@=BIo#p^PZlJMkf35l={FIOnBjliXj>g}du0HO5HmDIm~ZRd6XQ^N9frCjY!u<=~?MxTKN6$ zTDz>bR8}3Y5KIPl=X$wQH?Utz5BBbGPna~ zK@l-gY+~mbnhtvKH2`&~u;8{HSzCIsdJB?UvLBaCjhrfyWB#fTSedm?{(+-9oN=+;I=PEt>+U{g07*kb!H5B)v&{sG5I;&e!Ueh=| zJM()iW?H)4f5F+J4H*$Y2myR*ys1BTrmSae&L&+mv-5d==qzGm!04he4^xcA+X{pe z2zus||HDHZw7AG{mc1xqlr|FFS|J{V1pl}z%7gsR;2)K9U-3IzvpD-ya|9hF(T0Y% zh^AV41nf~5Qn3C}z^jmA0m3NAvBe1FJbE1B>3#*WtO~$45{wloOMIJ!_#TLh!+UeY zH^h5Uyu0BE&5xo9(hSEt)g?wN#Yn{U!t)gZ3D9i#UI5=uBGBoV=SW)>p)7vW1%vAl zw-9hNixe9G7={MDsEBO*(3XAqygKd~WJZ`VVHH*vVe;pM)$$J#cnNFpBb-$l`lN*T z6AW^$JI(Y5aV!(c&Cex1rAUZ=dt@WG7XjjBL>knc^(0jLjw#=oxNX(9t~m9`=hf%> zr^Aol^IR`30lZ2Q+ibwlM%B2%*0~PpP<`g+ts(viD7OCest)pcRg>iAhM7hph!Ot8 zpLq6d_=i9-mNM5ezlF6|fmvdjRI-TCh(hV8K)t;PtBn^xthlGuT1T zRq2w4`;g9riYBZ)JP`qn)EGhkwK3FfSCtTZA%RNhiE`kgJ$Pr*u$F7Yx?)qJ5ld@( z#?{YX(TPAvnocUiJu#i@mmXQ*^yD7g6O%L5o~&+( z0^Z_V%-pm(A%Q9qxI6C10g+$4LJ4%K6nv6g^-Fv*>w1Kzcz`B<8r&k;9saqim#gz9 z@x-IV3eCY2ODVyC^n5Gp7MBnwQDo=z$lFJTxbeFbG(k^82Y%ngHxIlQN8CC*HzETHeenJaarBGk-V_en=PWnNkJr7mF5sWraL>;AvI^h@|7)mm(PexEPA&qMt3Zp2RU>o4u z7mQKd!AnFt}eO7~A|nXP4+ zO=dRPtxyVC))4;PNcffJQ1F{Fni8_0JjoN;`S)ioVceJPQAkl<8DSto8-!vAlq1=x znBvLm{!#(oWa{dbd->p647g~z_GK96M_aYRSSpF0oxU80W8&(GB`|wjpprB5V!w^M z`@}SfEW2BOU$vSroPG4=AHuM&Pr0v{u8^A@2a-mKhmy=}&9=mB7O@FFzzG(wD3C&X zeFyOThO)%ff`Z)x&UtQQRD-LXR6OkE^Jc$&ZuXY3*0X2O8cg;hM6S4~V3iQ4U?B)5 z3+_hY_-Qxm!K9pzv6$Le9qvl^+v%rkb3yuV6^Ge~^m+Am^u=OY&C0FNW2$AEsmC7KJg@TcvnN*c$szMu(=H}(D(`w=dqpAjbVp$A^pnVg}B^1+F zDO4r!ljbYq5yR~VRKjrHRQJR0uVH(8Hkl4)aPo*`X9#LGnsJz#QWNy$_`qw zIqY#f*FUm27N$~bAg{PNcu6=;&^G$3w*HL>>D@XHuc#6(XJFwV;pbo~>)cGgQMS%L zPt}S**K|r7fgqcOj`Z&Q>gyjQPf9nypvpR3J{8U`yuS4tI-B0EK3EIZ{|>A`s5D z2x|~98Yyf@)e?bb!&UI4C0i(-G?PA#cd;*C40@JtP|uZS7P)CeYl~@~N^kR~8x>EW zeT{+@+>Ddhdgj+@&pyf>U~^yVVErJh|c7DAUQ z)&`sr{s;B!jj_@jGuzqc`+eNZg;>6UfxXju)gKMu#~)Nm0Y_dmxXR`oa`c4b*SHC& z2``pE;7%1$gCwl|-rr->F_`Lmli>NVcJyTG z??b-Vp3X~H_rL}^3fGM$H9B|H!BnrY{CcsZ311o@eFJ=8`P!BtuONJ*NTN96+J%Cm zh;K?`+_(IwTD1sMm8xN zCyor>MAjGsUE*#@aVqX>g7QXfuLjnLGVFL*H9vN7PQ!8*7Xxn^D!8=D>eAY4kSLx7 zH@oR;I-yeXt{E1JG}$2|-quqUMw)&a@` zhkDjix$5I0vv-qW{}*4d!CZ@Jq*6V;Q&4Ph)3{XBL;?|sYw`Sx=QXozMMYou!bR@z zKTk=6an1Ec%JBlAQa$o11Ee>FO4uZQR|(1V{i5SLf5Z39h>rA9s^V_a_sjT>QD_Uj zU%|Ud*os$ArIxh8ep+E0e%V#wr@?=qYAF+4P4|3*GH30ng0EQ0i-XAycL zs1Qg#(Q;!DLUjaM)i1`g6`q~(BwHbpV@pwIB5mOKDboT$Q;5!#T_fz^QYeLJc7k#LGmY7eF*)6JGv)Q=E*%Qe)GFHsvnQ$_|U!Rf9WO#Qyk#s7O}64{p(_a0!QJ+K~v7SRG&H zWFHxY?U~!(XW+OBzDV`y%}VxidnA@7P~6hz%E(Byb?tMo`l`02zsvhKs`NgC&oP_o z-^InYc^j9sh##>Al=_M%Zu{VUC7d;{x%a+!6JNCUE};GY(*=}#C&Uj1b(~A2ZJP+~XejRiRNB#N~LhB3J(UjkUY-R|AM5 zc`X2?4nHi|8c(}p%4~Qqjvy|;AEhuKH0xM^X4`vk*R97{ET)}GF7LF~dtf6SyZYvE z2riOSiPtQq`AT60-~-~?Qb{!lwDp6oFD&Lrrq4)Io7v!s^N(1>IAT#7i8Sfv2NpE4 zUP-aJYpe_~22kTWVT|i>%RP2&zhF0494{%e2c8b|wf-fUPsw~2fWBWo!% ztk`Qk?v2{K=M*&EbY=ik?1!KjwQ|XO2%l>a)o6oC_-N2DlW*1UW~Pq~kC6P`ka`UV zd-J@4OPkqW_dl_S*#M|jO8IlMM~N_Q@WJ{fy-E>3qoZrnjVx$A2I+WU@5rju<}>c4 zS|J^=8QZ=r-RpP)&;~Wi0NvEcZO8cCkCCsdk`q4KlmWqyK(Hr!`&XCu;#>lD5A}tr zzHnl9?z^km+)4L1KHSRHX|AaZ(Sw^xMzl8-ev&@QB1r++kF?FSPoIZx04XUz+p zg@@P?Ky3Hap1GOnZFe}R08jY0;Ima1^2*2(-c;@P<~{i@)T8-W|odvgq9g7~~XI?vgH#QtG9K z;?^=*1L8_zN@{(Ks%3LtjP~LBdUWvpz~BTI>ofPQ!~LudWpdzjx*($(p0)a z2~ivREJ`)A2A4ybMI=3=#u|qD^kn1nw{Iz~my(?-eHnu!u6FEW;XI)c4k8b5b&(xz zU8%{b-oZhG0WMXJH!xdoU*BP7efLxYWgYNEsdFl-(W$6_4R-%$AdWk=TCm9?mLXW@ z>I>2e2aumr9cI0()rkHQao5)DJ&%o))CJ8fqJk5!55T-571`^LOMkCxE_b!?lg2Js zvpG?~b~W4BLp*>%O^K^xdDrI+7vcm1Dht%@Sk%l^vAMG0q%D9`f7f6;I!pdRSshI0 zw4n`7;pQo1oO=i)0YToa>mdR2o<1dV!%zS?^E%!63F#+oM&ldlbACtDtHA4V4}k%W zod(y7V7W>j(1F3dWzlQ_XjTNu54}h7sooMgpZn+?25(ltecV_xGw1ki3M@Fo5ur}$ z2*w!wrp#&D#Z)Fd037@~Kg7ew-B?e_hXKft?D2VzQtK9))fILpNH}rnj?(DRHn5qK zJoYkmU^!Pj&^zd|cf23q)D;M1el-kFnj6kTTG|~eh42dDDndO3S_hM?rzv6%ZzT$P6>6{k61Y^=9Y9iDk{~#3b^mMc&?|MI}Bw zXSctanP%7D^>KFtJ^&esI&ZzR>|_@shxOz;j?z+BgM`&%2En_3^*rOC@DC=8ShUWP zDoHp@tfuF7YjCUo5AeZ1zx2YA=QOV&bv&$dxxj5aq;L(QI&Fj-BqU$s>iNjR4MF^2 zpgVGR34V8nfyRu}3HhQ3{LE zx7Y-b9t7ec(dEhM(i=SaxlnEt2wcr}b}wjVKO=J%6tx<&o`NT*wd|}TpPIddY%V_<>N)SM;yzuYYVmj z%QXP#4I1kcRFs{NsmEVqjx?(N^)9e^A_U&d)B8BA)0($*gXEwi{?3){iSK7(blBA_ z(&3L7i#P(`F@`A9jOk+t6h5?SQ`%@s7q^jCf%ovnbhUq^_a3{8Jen?)L1>S#1Hptq zTz4ITEYm6?kQ=?ic+!o#(-FkU_!A`TfWAy)qi$w(2O|jE@f+kVoL3k#_67xB|3eo5 zc(aEE$Cby;c`Z%|7SkY&jYyG7q_okZ)w&Y|QnB0{KSq;WI#3KA7wK+6jg7jb!OKP# zk=CcEGp*M843D5D*5|}(;LTw+SoV2`4t!wYcjHRbu-Z*lj+HeSRyR<_Hl}Kfh!rU?qrRt1Q zCGv~3-ykKp>1T&R{zT4NqsIWwHQ(x&$PTWl1_b28{SoCdk#fO`m2z2>P#flQBWfQ? zvxs>q7v2`E{L_0j=hBl)t$-F$S85Icqb#~H z4R)AjVifEXVgj$&h<6gMMSyq_o^V&v_At)gR55z=l_r>)oap1N-}M+q_57klG2DEL z9nI-mH=>%eAT{!zM&#h^>WA@5xI;zc=XGyH6EoYbF5eq=Y*f#oSzr&MiD~8oUp=sTBr%U1$kh?-ut3g0hFJj=#1hyDAUx$3+W?+ zhlWojKVkc zU9=Ya`Do-a7Emhc3dZuRp|x5>Lz}1A0wONsD^Bz&Y9gm`z`hsF*$eNa{mKn2-|-}~ zozYO_eMZ=W_XWtw3!yB64sqnCsukYJuZ|YD$|9}>@Qy_o4GQi6?^ncc0p2_a_^-GE z*uU{|4e|Yvb^v}C18h$GE(7?wz~PDfFW|Wfc-A6r4Zbr3lA@!KmL?+9m#j#$1Yr_z zG{tj1(mcTT?RftKalS}X8|m*N9}{qC@!kS)`SCoAxc7K|!t*D--9o$pPwHID5&l6I z1Mqzio)3Um%mJdp4O!WYgSISY_GpgZCyTfc6^XfAEN16f+1tjYu%a4z=jkzvI2s>R zDrrGSj3$jkSy}vs@~~2RoqPmW0+F6YW#fkHOCbv&n^aG#HX=6ad#QC+$fm5UpkYi6 z@DWW`4ena3vQJ&f`j#MGzkdRAQZYB7P#S`SNoCM+KL^svD=RA;+yE=DGk;y*2kUKom(#64I)5*Aer3P8VmC^rw9$H9 zQa0)g!NPeIU{+Y9DxV=(BE4yR>sMk$4r&NYFCUv$VD}U;JRLJp_D~755(`VFmR&Z-;c4C6P}0<5$#m}7^=dKkK#^BBP^pk@cJ)sO1l~LzcU@dGRiK9 zmDu0?lDL=<7<@UsMphuOMji|Zv<1Nq%)he<@3fOA4ZqR`pWySZx(p&5LxF|k_+w;u zat17vq1oTlryR#SZ3`HD67TRj!c8;MAbA(yac}t`NnZr`pfV-ib%nV{Fz+}FeGx7Z zJ@b>S6M>ZDE)!w!6;9Zx6HekSob3zgzg$d)(Slr$OQ;$GS=7CnKe$^Q zFilbM2b@U+{yktaMq@zA+z)dPH`PEo2_h^aRDc}ZX8=}AXU<%OnMEr=QryZ&&jOf@ z9qfbISWQZ8@JJd!e7p}S?c7TdQY_&^s&})e=QA^j+9E1B zCa)wcWhG2Vb7}psaaggoSrlmz@4@22rN(IRIjvz>mQUmujS|_eOm1{ya-+oLipU4^#O6E++&(!pZn69fA;&=k z^_;&I8&mxZ+u;tZ5C_($1K|6J>t$_b_DAdFsu*AJ-3e1RtvS|9JFYXz?+wVW(?;UZ z%%l8n#Vz8aF9b=O7zQ7qJDSGdmzbIA8;}E!k2?a7i5(OREaEOe+JzZS960TO8CUTG zwkxjbX25=MMmo$As%@#tvu=Yo*uoD_|k(d-Sh3cs7{Y2cJ1J= zRT;FB@RJLUn;~~9ooF$s(tG~?P;y}MIH%=&u zs{yJCkXmrdv;j%tY(!8)buV(`8Sdv?_IjH|97#Y@AK)rAsl}*52(o3a8Emm9r&Jr4K1$#F+~k7Gk1|9o3_Sd|kVX-P`#1i|~h zU(Lc))8mbmtMc*|zFG&a%f*Uv>d4clypdX+4cjCIDYY{dlx0YB{Wdc@xT-$@ya_<& zY}}$un`TNIZHNiy(6)94H`wNEhI!%0ZN=ag?4v~ZnWR3j^*;4v>0*m`RF1p!Y)%BK zcFzRt?`%SxbJZH`*+6sbl+9^-Hf&X?ch|%OqymWtZZ%kddq+;rzXzQGqU>q22&e4u z_D<&O+yZ;H>SmkSjjhR8Ll?~sXHNCJ4OporjnOg)_y-O=~F`0>318DD-#EY9Yb zCvO+81L5KC1ORqQEz-xbfgP>=f_(;@j7sAC0h=;nws5iMLm+2Xmq zGl;t1-ELtCxcj@}4A0)^`O zp*NPNwVRw14zssMaiN*U@@LgpZ7YVdFZIj@pvEFQIV0do6 z)&uuYjvAgLCmXA`v&(9CAr!|t4GH8ZZ0qKh017%uDAC=0?nfF3Qr|bSh_rxVEsph^ zEl-tHT)O^(m&XbhL8owu+JraWV~zz#^+8R%P~c%Z zT2?f(qR|z+EMj$>TRebj|TU1 z16EIbHG0BWh1!76#o3gORW5>Xnko9a{c`$B+S29p(%vDhb+9Zk_$mZC8^+wKqf z$W#EkX@`5%nQUfFEOBSJ3q5W$5Y%KAG9`V+FeH%9z&QG@2U}CHe|6S-P@foRH01OD zRRKrHZ-O84;AyG?^(3CCt?@-txQ=zV-;r*#a{lrlsyvM4_9Wf{0dkk5jQ?Ex_ROT0;ZBz>ZO2hRiwE$OkPJKn zxQutgttNae8(&c`W_R{?g5|{P&2>gw#9KUOaJS@s zW>#ukUz>&N#BtxSCpH~W>fQLxIY};_R4_fuUAM}8?D?GEJKG|X5j=fH-a&LqX~-;I zJ26!iS1IoucjwhX-f@7^XlDfoS5Z8ErIQz%kUVgaq(74SOfX7F{aI4Zs)TC*RSDPe zSGa*c&<(lRMgK>8ET|_WT-GA8?Y6U>qun=?3%)nMp1sWMUOfA~f6n-_XOc&WOybh- zze}gjes`WTz6de{ha7Q^E0{@K;Y{Kp$HW8QyMp zPo^kRobXKo%#c?(DKA%>TWfhg3w$sp1fW#A!)ZKhITkn>kL zZI948+&-7E%P3Z_!}q81Ohv^f-@<)KMydEl1j#X#v%fxf;Xx)cEK`4X$9T^qesro& zCmOx&b;P%_RMt(H1W5F$6+@xl)sgO;Z(1pBk5O8>@>r?FJ@6nP4o3YRVcrQ8uNN+3 zo~5#pFA=5f9}XGJA)gSWk|6!v6X*j@AzUGC*~6H!pV;b{9(OTM*M$bOh^9@KI~W^j zz^s9gi0}wOzE0aL#KS1_^CX^XeBXp`@Uo;3_v4RJ z+I&+>o4Ps{ynKo;6t8bXH_HYdHrh7lTjekX$pM4X{trcg(QgjC$ai|xDpr|1*MD+4Xq09KLsbG zG$9z`cK`X|CQSg&>aF82jeU-xO=-ZO$+y^$eAI-!NPcj8yHv?GQOUQ(G*&$bU`_jd zTg!b*B+?{B)8KYZ7MKC(?@jeQnG%3V<dYw$NHIk61;!qL2Qu%S=T#1 z-k?nVfCs-e?K=XfflhXNA2JWe$5ZebcN?ck~T7!jnMQ>vv*l1YPEf~xhs^B zIoY!)%N+T;R(OR}D&aN$N@cRsnF-MvZEwP0EeD^LtV*w>t>QJPzojuLy|2;2&U`-zne;o&$$3y#A=9Jbk1~|o8N6B-7 ze;Y&8iVEnfe2&KD5iHZcgD@NhncrjDZ!#wcKM)nK^wB1~L6ITC-_pZ9;T=8H3GeCQ z?n+v4p}$EBt}u775=7-bQ~T{aCLZw_@Z}0u0+wbm^0|Yc7C(Cs3u09zI%rcp>2j z-iZf7u-7>q6BG|xmlZ%t4;JWqsv&C_yq`{f`-j4qiPpHZ|3{nLNqA32IDq#D5RoKv zt0QzppiS>4h#LWM)dBGR@SAo%rz6b3dm_FqM+gJ#ZG^XoqlHjqeAgjfoQxMuoEowy zK@DjW;AQY<73+IJX*+jcBxEkFS(G*+Jy8Q7C^bsj*UOoQnvlJQF`XN zt3NLNqT7I$xr;h_B`IyBN4#(S#f0alR;3g5acmC|PempdTRZBF%jj*dZC^e@MnvF)G zeYsK9zLUzoAW-~S2mivPxgNoxh&dD8KtH#?z>S}kol z>O~<_yu4kdd}MnV3Y~$mNHPq=#@Fc3Zz>_0&vXgR?j~D#cn)O z@I)%KK-BALqp8&+dR{%oTfpt^Ke^EYG3of5Q_eKjqo5O>N3}LHTbn5C0ptb9e`+LZ zj=B{qpMdpT&^_GS@*X>MN*jqss~0l&_cWPU`I7s3I^=_Fe~8}8E#FhnwMefKjbN(e z=P7t26&Ur0cS?35nbJaEu@4qRX~Wm4-4xY5oF{-f6}= z4kC4>jzE&JZMI`!4m#}GADUoJK!C-M;t8NgfObY`h4=mlBuvlaITay4-pQV42j0a8 z_#@G0XHOc(LFDPfd!d9WQSNp!OwD92CX*_A``1+0fT?HpVUHn)$asiO8LJvjy-g*! zpY5;joQ3B4s?LIi$O)R#Mq?)UtoyAGdkCmp(y|jA=<>8j-vLB-9?AKT7}nXP@UF0F zP0dU!UK)EbbTPOLL%i;Q2^)6+%-HRF687N81&b`Mf`l(9jK5y)NhE5*N}13|27N^C zU-J3|v5dtid<7OrY~IHleZVO_j_J{m;Uo_HeVwq$k|)`tB!lFkU4E+{sF%}ltRx={ zzFai?no#$TUl}AEoLNGDLPT9sN(LO%e$tO1$;Q~|mxW6%88KC^OwoTr%w@^1<$?-} z6TE>4Hb?|Z*n)U9$z&L0G92>JAKOMeA>sXBE5wiEkFX~Vu$R?T@>gU|a{ZUu%~(l( zPL*Ug#HMMeF2Y{CbncR8SUHroj6TgmJSmq#~ct zp*Kx$o(H>0`C{I?Tf}lMVt4b7R}qw`(OW}NB+8ACY~QDeNiwJKX<;u+XL?9?65T&k zwXpbuEF7dN;O9f@vU}fG28fSHtV(rjd?u_Lyft*I)_oF6lFJ@P-Vm5?Tm9tz7rP&AxDrsL zlvYa4W1OLq8*b+&32ymTyaUv94%OEsN8qX#n`Z{t72E@qaJ zwHmf}n^3%5JAK0bx`(Ta4exOHxdO+EDs?Icuns=*gPVcZi#fOeSVK4zndGFG7ElfU zoWxi7y9T5#1k?wb_(*o^n=+>`J1Dmq*2Y^Y zK17PofB%Ki%*rP|8V;jQiq9^^SK1c6%gmN#F%^Z;g;V_TWl`&(OUYF#2aHY-uatZZ zIaAU4pN;#ep1QTVeF#)k<51vd*Am^^_I?LJ?O5{)vmr4L<&i_m`|+n|uxb#8+{})f zfhj&G#iL)S6m!6vo_yU)v->{NfYpPQ(D@H%dnYF(({7D?d-_&z&1x_)Ah9Sx91xY$<5M-L3 z9cf$(`lV7`Kf}PGH}W-xvm&E>Z}RKYsRPV3T`osO?b>akg7!6hx^D`>cwCJbTawv? zO=At<*anr>wueK&Z&_+t#C#ltiYlnlnLL?K|G<~r+E-3k9cv4%pux9DZDJbWOzOm+ zB!>tWyBcnNDc%D|=~=r@rL1OlbG_Rr$!n=o##(DI&v^M?r{O24$(s2A@cF|NJwKW4 zDVWCh01RMeBSy{%E<>&j>qR9RJ+vm~g?iSleJ5{}h`inhh11!WhhDI0b+nV91%dF{ z>>*2Z9WP6X=5BkLdsE+$Sg;1zuezp_UJKA3B@w8NsIB(lc?aPLYNHFDVs=Do6IHHj zt=vEw$54@BgXoKJ6GE6@eCowsum0z%X^KkF14QyC#rf3(Khd`;l}^e}g_#%e6qgMc z0$9)BoityfQ-FG-H5X6{o&c57bNPc**EOa1slX}C-reV^hPZA08>zyP3hNNS3%5Xl zH}G{S?mHB>2e15aTDs|)u8r9mvVtGKV11YQ^W>%6lp>Npql&lYMxM0dyuS8tehsqD%03UR1Jl2_*ZnR0Zb`j0FFyFYi=&}?XY12O&rYxB zN-d%*p$@lT=LUzg6>TxfbivaIWkL(YlY`%x`28O52hae%_#TCC51=J_3~V|N9P&YD zj>7MrfT@e`H1LeVa~N>q5?@76gyDdxgJ(rN@ldozS~5_ki$3ook2K^l6L^DwCkk<7 z?7ScEH}Reau;1~180nrNegoh;0QUmK^}_q#h>rpt3~|E%`w#GV0e2E_LZ5` zaSUqC5`r(WkTwx+MJa7QY7TF!C-uGQ$+<6z!;u@>XQEqYnDjM178nALKoq4GypWKo zLuXI1PeZ&3la5XE_`>%_1KUhNugTE2W_G?%7ETD2a;auCT ze-C*sn@z}qbYQmjR~HN+@CElftpoTg$W-S7pl6!gjQ+6eUFfz%JddyLGKKJxksoCO zUDXcwa$^*$F?=sjtOgM4YT1js03@qgxkTsJrxryNE&hdU$XwEDv45gYKIV6L+DpDZ z;<5b-2|+G->Ag*M5s^2Zgb|BB7=qJ%D2_xl>l%Fy4Lt~WEgkf|kx%>K0oGe6?EC~ga(`fZa(*Y(*+cyWs?YV37 zz*rS9Dx5188Ui^SvuFdMTb_3?c@m)x8|DKeMsY4+@MTsyQ^<8n>9QkT>A7ek_HoVb zLt;-N!yp6^HUsh+cXdTuxLl7`C*bH%Iz2}mOThqE>&SoyF#W4rpc9PMI0zpSe1O8> zCHx6Bq`$YpJ3#P91Zr&f(p58vxVl^R>;Z8K$}oVnYC0Q6@>@qm;T}yHlk6{DV>w~dxjZ2i)N82 za0sNZh$w?+Bnp?AoJuSJwstBvAL_xI22b*_`mtAUZV*ed3gt_IX)nkcU&1&RXH54; zyII6T+}f8gJ5vIQ7Y@9TcqTmT5^u5h%A4X}ghP+I+nzW7C~CABK`WN?p=-F`;qDl^ zdJ%vuEjAU~O_!;2Z#}XUFy!kyf|B*`()v6|s_e)=(ZQ%7u||%gFrcdQq;n$H4FF-) zKGY}(ObO|&+#ZU4-oP@W?Kv}Ug!qA5@$%yMxwDCF!oy|eNng=Qg8LKzT}A{y7Tayb zRWX?(a5NK`CjvDf407p$DE;kXeY#UI9!$8{nwS3e%G$WoQ0$HL*s5@_pr5Z@!1nWM z!EaX>@~zG_p29k2cTc3K=$d1IK(m%o_euVywkdl-%#H5`EgWeWO>RN4(qdZv0h4W` zBF`%ECro#_bmEez1NDkV=dKMCA0ytN#ram4;Tg^Q%M-!v%-JG%_J%!mXgYI{VBk** zGVj&3fxi<-rTKh6Er2!gStsSkw+F#3IA-029Mnur&*k!2)OILYnw zo_P7q@5jx|R6M+tMbt@o76v|lHM_ac=ZN@$Tl(^j;?#pBOzHCbJ;Z{v=CZWbM$MjT=EY~FM|O03#Vai9`95k?*ms!n z+UdUC>}IN56vqtVLcM$ZKwy_6#h_RePZPM-7==BLVVB=i3sk=Q_8)vm#)s_Vd?Ccc zjO_2tK6GO?bvoR`0`{Ipj&_xB^(8W=AigY>Xg<4`?(1RlS-cj({S| zt!v7GdY&m!3qaqvg)#5Av~A~~1?d-lQtZQ)c#g|SFjmKRmktk$Z!RbNapsxYOp*)9 z0E61tJp7v8#dJZ**BFWJu8W{NsH(Uk;P|jX^hLOh znkM>a?c5emZ`v;`1|ae;sRx9{J;4JHR@WBb!K(h4+ywTeG67_-LIm8wiUy7lR0*B{ z)Uw46V>>v+<2AtRIqVUoHBMC@a6VXQ<2t(^820V=bqq283ndDzM9QXU2q}Y zkd>59lo2@_xJj861##X)oGQVG=h-%@8nkxZ2f^XZSe4jb+}wp z$@g_YNm-(V_S}R!C_Ey{xsax@QDS?Y%tDqp&uECNN;ERXG)o^=x7i^Th?BQSu7V&U zt{uW}2>B39Z9rfaBG5g-Ko3=dAE#*T(_??YmB>=#csLK$1SR!icRWE*74l>%hjGtkng&5PCHSCbB@c*KJ$OIu@q(dOqa4{ zVgp(_6Fbh|Gou+>^%?K(NVh>tFE38M%X%=ZWTiS#xm%O5_>}nBseHmK*&f50M(Y+r zkfFZhyVIP~T1RJ+Hm=C8G8YUc0_Ish!9cWYj-|Y9&%Mbg0$a~2K$8NKy67m88>z_Qm zgFLVaVTf=klLRBta~I=47RVJT4)^^=j5@}eKVCT8g6pp2Gb)eKhAk1SfL(4Q1BG@mm82w)H;_IC8RL4A-$bt<=y0 zcX?lG0X#k-P9@|=Zh&7fDv)c;Cx(_A0(dfh)3Da839b~Brt?%g$p7d1muo2hVo#TR z1Kby^f`fo}@8Y~T2l=exS8O>xM4VO-B)nlOQn-EGG@ora@-H6e-)JoaTtia6#S<=% z{xj-_<{+@fDgkjC_HFPmoh&tZ z*@1WDoa$={Z~yqMWIfjqa8&j+20yIJ!yDxcl63bJcjZb{W#EhH(-w134u>{z<;nlG ze`h8e?EIY0i%P4#&pX8l;0&4X$uXLN#;+*Up9kyMv}rg~yx8oG@k_oB?*B3O-f>P9 z-y3i?$tKxCSy*=I3}x2~VW|RHdhZ=+0fEq@UnC$U?6P!FdKHi=y>|quQUn3%D7}Lq zDk2I3!uvdPZ`!hcf4+acZ$6*7_h#yuGiPSboH=vm3?L*Wk-E;KnHu6f7S4h38T*(? zHaSI2YuXyDMVTyZ{>CX0OlMa3T0DFzcH|tb6xP~vQ#NHNag}TAtU^3kvgz&TgK)6q zGo#dA2}q$NAc6WmIw&xFJ7&M6mfyFzVU5TtPV`+)gJw-hHCiD>5Ifn3;sTUs^1@H& zWf-DB)0@+IF?yFm#>#DYh(fI%hB$1)&Qm+X2-SuglRTP;xvmII{6@!O?)nG5C=R*Z3qlS|b z$XzLkheayOSjF?p%|C!4|E|vsxFaytIHsmWPhK1Z)-8?t`s!vj90seC8Fe#y$Q()) zDrGD9^RjC|XkuccC3i*lSJ&roqa{0!3azqI@?o5*I;^2P5 zf3PRgD%_W7uBQ0D0spFS=@8~<01ulzi(aza*Dk}RrrrRtS|X+TO_+Fb^gg=owmB9Yn5mBtJx{sr_ z4%ZhzJgcT-lSssu#RKJ>>Gzq5==_1XQh03ikdu~+1>Ba@ zBkT}N)qndkJyfhxMdpbq)WoN&6egNfs)mC#TiUh2X;f~s`0M$2a>5;!pY(O>Pg%Y} zy-^G0e}YJ&`<^+}Bj=h_DGhLki2m<~+?K~;v^lIS?E;Eg-NwzAmy1}n^j0N>p&TYky9@Pz_44f_LN!xSxOp3q zBf`Ymu3K9{OKffxXf*GK)FLoFH6;SDCfcTd^{rzbMH_ca!*}abiAl>!DTn;@YVI8M z+e(Mqml-zDxipDU{^B~V_=oA{I$9v`9iAvHUNcR;(#zik^cx>fn$~y{%)|K4O$5eO zU%qqB!PoChhTP}{g|MGigmaW)E}rYdc$iX> zRy7npL=+oZ{yxnw6EcfZgHYAP12W1)W-aVjF7CFEF)7sib|L;zb z7mR>*fs`11Vl?Hk6dJ(VHzRBLS1k16oV2YeoQ>;*AqIs6K`~aOyD(OA8b*(-c&hH4 zCekqZ%>DDnMI`a^@g=_EizRQmt(Iaeii}3 z;`%dIBP>&`B9|SD5y)|Yz%bY5o$4;Y_(MZk@6en2|CWvd=q*iJO=Dj2jr)PL=3N5? z`MtaL^3k8!@EVPtMbZ?PwE;9Wnr*wP(S-J5+7~}(B=;KGu0|w0Iqn~ZTa1)*@U9F; zOMy+`NK0{e^Q6YtptWD{-@&bWqeo^hTkbpW21kHrkgkwe``{}VEGk>i)q(LfqlYVP zVBY=KC2f_?-+f;I^PQ1@Kn_yF*y!PMJWvzWFW)uB$W^&$H0V`z$9utveVVA6Ha#vO z`)yb?utfu}KnL@cBnvplYH=A1>RBZ5}F31P1d@Y0}^STY5Ih z`}yR!mYfAeO6D#aA8#z}0Ia(V#{ak!hA2=`$u=V=kvl5nTS-LbJ9YAWTs%(Kh{7%&qK+;k!jJx~*tZ#Dlvdt?<=7l>_98e)!h;pL zA%=ZSX@peama<^Q45I6X6Q2k*YGyZ#*SXu(z}B^4EgZWLG>{A@09SLo%fd~Ei-B{j zz=QX>4?q7oY)>@JRc|qDR9n>iFjQ-j()^IerfCHIgK_t!a?HEjWD-mb*k_xxNOO_a z{b3ZWPuz^CUqipbS&N^5|Ix=$P(Cr{=7KK9A`pv^XbLQBdc`$u1GmU{(dYFx7; zu%ZlPYGm6hHZ}>`D~TJYyX2L-xX6TUu@;>lTm4b)POQ2pdT7N%ar;3YOj5qvpMOTB zCcrI%8w6J#Nr;6#aA)CK;y;%=@8O&0s&nAG3BKixoK{(R0(Wr#k-4n;jP)-ck^GIb zcg3OVQ;k?UbVlKlpp>6LCJ{WE^mnCAuNghLTWN0OeuRv*ykLJD;_n3~M@cKWeSW z1AmywvZ_yp>RP-upd{R}iM0)v;v~|ER#{*s@IJaJ)?cxpcboXR<~nS1jbB;r1DE3@ z0<5x)Q10)C*T4|SmvM2&VLt`|92Z|MoiK^HH~)EI3UcR$vlidmri;g3-@yp`EA6<3 z2t%1ptLt23IeGcWDNfO`)cWSQr3*pP7!OQ_D?qTkv#0EOe2KWX zfeu6%n}x(#501^&3T`2sgCbT^#`R(`aoFd6w0{DL6&^nyS)71f)3%GBxa_NOQ-V=( zqJ6wKB{ab|7@=m8UK%|)x5_@om~d6JNnd!ECdNROzduk<-sJqOToss_u!{0M*U+Md zlPzJ#H9n04@*q{OUVZ)yF)-ggY!on10`a6g$Rv%7%X-SrpZFbM78@Gnoh<&kbpuBJ zyp>%Ee^#yn94np|Z)%uP6Q(7cgB%r(3%5bR%0muCR&jpb2Saf4>(?1zQgkC(hm1{b z93&K1H~&1FP&YpHD{fSRev&Uqr%g9HIK}#|8=h(h7X2Z~C67U2GUwwLziawQyz*5R z_5tz4IscRfVw9A`aonVIAX;5`h$+T{SpdT6bJEfkaTh)u*g zvr%Ok(Qi!e@^RzRs9zRc78``G4U8Bh4+^M4i5ctzA`Dg zJlJX=A!fz6X)gScnE&O)E~4w|O%U#6HtW(IP76KZ2s2mG=g_!v8taZ*29STW;wE-% z;`OVn_ed74)<6CX`(kEsvqbUwpt|*D&lJSVQY2QKNngcdUrHE=+ebxkDSCPzBp{hn+POagz+ zqL!uC$C{u@eoAe1vv}}i9y;oGQD>mCQ<{D79RzkeF#Dn-2ZI9eg_PH~wcO(rQ78WS z4BNIChzp6(gV`24e&=WEK8u4^8ty{8xGUUC)a%!%jCk4Ui@XwXVeM*AI9>vdd;~X= zs7Fae5?Pz!C=MhcIo9Ek3Td5=4~wvGdKXDE>izMdeGaY^F@D(FKK0$&9cXvEoa2*s zYqv2=MNDbu8?-N=-F)k9jwvGMNb`Y?>Jn8!lxxXo>_W_c_ug2TUIK!?{d3hxU_Kk7 z24Nl={XYG9e_v83dU13MwbSV96uw}P(DYdRIjYcFqDj9UWEBDu;7;in;yAwmZUCHP zDIS4Tfua1`uPdZh+?3iocSzVq=3hAzy=sNGTD8Q;mpRthXTO8Mz(xYv z#nE2kg1z(KdtqGntEVJ=6%qw14*JYtM;i8nRDEo+hJ(Pdil!^I^TOPxmSdmUy$pke zQCY5yNjcCbdxNgBVf-`M`P#}^uj&<{dF!J5=6Tx+}w zOn}LA+ZP&v&|Y=7$2&y>_j}DW2}5!cF%}XVE)130c9TNps8HWH*m~2mJ*1{?R|Y^g z4$1qwQi_0@h&W?3MyV*X#r-?vNKk!ziWg2gTE!RZ`r#D%r#Y-p(K9ll$#c&K15QX< z#Zbq^x=wLB*Fzj8=lLj6VBgDcbuou_524Z@SXBn#F+{w+Sf-df$Zs%0DPt^(xo(R> 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≠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

D{sUPAbhRMr5BY&7D1po2J4rAV3m0k~0a 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%0D3t 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%0A1f1Xrv@)Ra5- z14qeN9nq*+o~NTcf1_PgV&?OV4&xAz>w$P4A8RVh<$8Y-$XL2-7pEJ_6MOqkB^&l5 z*kf#rZjK!c$s3AiV}>xx8Opc^>v6aUv~_K=Mqs(XxfJw9)@YL`KOb7)pDK~MF11#M z?EytHJSUt{lHJft?aBZ(&r{iw$)0$v^qEYiJS$egxfg)e6Q9T6JZ=j;h5a&k=GZEX zALoXNu2#&sm2oZSHsvg*gSCF9Rgh4|l3t*#J6jlyh-TgcF!jcHX&c;OsC!n1R-|q!VpG%8+8#qb zvSL{>w28^xt*GP$yUs!?L;4Mz#ga%(P|8(=PNt}%N=B#s!ET+U+q^`?NCg8^q4lPEgjgkQOSJB=5`)f$`aK@-&cgaZz*h*HTRS!4j= zM1}3ta3C6RdP1)*SFhqKbL9iU`U%d|M_bN)U|>0S$$wp~r2cwQaef#1bA{LT6YNNs zZ;F)`M}tu(+Ai_c+0jG*BkDImWMybiiNS1>US}<^vH+z_ zXjNzWRb>G*ClV&`OEDn?Fk_dxI{h;NEIuk6JB#!$%Fja8e&-q_r2X?~ zFvQ|Gy-@}(H+GN8A5>1r4N*pZm5PpUJZtvs`Vb9991=hGo#F;Gq}{e3xET7vj%g;?O!Cv$i$oW2vLN3?rhE1VrS30&l<~{Cw2M zF4yn_?E!_xr^#9x*DHS>V{$xVjf!N7>iiWVxpT;ZL@zT;QVU)o$vJTpAHRE#U0(_z zsjc3EIv;pNrafEII@~N^e)UAwm)S^<@j(OW| zM*B~c+8WP=C2w0b{)b}`Z_*#Y=dKf7q6L0CX!+W&hm`VC!gcU;_+LUQZ8f09BUM1O zl^{Qb_zEp;6KtQyLV8$dk;;n||9GIfJ`ku0)fd2iMBCy_M66rea6}9zEIX{e+s3%G z&)h|bMIEjLm|7A2Dpj;ujEOa{TR?++`s7U;Tk4P=oeZInYRxN_CC=1bh;uVw@VDCj4o_Cbml^(#wS5VM*8Nn-%fDRrdjz@YG-FDBopwx(Se>guk)Hwy zXtm$iS(aDGrMJk!khZUxBG*0ppq+S;M_>5?x~5kEV#tnJoy|KMTP&nz4$K@6nAYMj1C7WxqLVZxVeb$DFXgXx|OR?H2&31EY~D z?O5#uMNl!bKa4iJgNm6QRxO(i>Z$E{1)B3oeaQ*ASszqjW8E?;1NUfQw9K1YC`B#g zYJi+HC6qP2D!VR*dPWOgt%j>noYO(%#8};-?HogIrn@3$;NNv|sZrBz0rEF!Khw`VH9e9_N zA5lpT{bVS|Dyt@7Mp?$nrTweMA6At4Mk^8hG9=t`Jh1Q)#JHT-F9 zuF9nV_RK>11`J@}XM+;I!NBdmw}J{Kx9=pM!N6oJeS;+*0t$B4y|OQCSphv%GqS7A zLnV5=oLund8!lY=>@?`x%P?Ba;`=iDoZW&JsG_>?I1iluj&r z8Jt>lpihCJb143)Y4ZSuu`=Yu*{sk(KV$-Xl;7ZTMl;g(NciL&pM!FIT+WB(Flrok z5%SMJ?rGjTE_ah5+OK%_C@hmWJCk0P4t&Ht2@(TmFPi3U@%4*12a;?wG>`pU=D;Vb z1I%w-B{C-&w=&FeG)-%im0V}27o0>8+k=M9Jo;LjMQdD#ASX+R(tVIGmKDc(CyK-z zfgGpwPMG_L&=zqXK49{g~;I$z_!vqxV?HyRck*hTI;paVNhq8wCiW`ok+bR(M(0J zfb?x>3t0-tK@a!5xQ!5ojBPt2_hC!62_uPsKbWosB4EiV3&(HPK*G9D

N?9S~LT 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®_IY{J)Qh1|V!LouP)5H2_De^02 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

*!YocH^lJa!`@wZE}8re)I@m|vYC25 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

WvzS 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

h}c| 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�D#=c{@At&sy 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%0DKe|1V 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 z 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�&%{GX)G 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