From a4f2654d0b4f344be6589da81055a7c71605d970 Mon Sep 17 00:00:00 2001 From: Konstantin Dyachenko Date: Sat, 28 Mar 2026 12:54:41 +0700 Subject: [PATCH] Update HotReload --- .../com.singularitygroup.hotreload/.gitignore | 7 + .../Documentation.meta | 8 + .../Documentation/Documentation.pdf | Bin 0 -> 33649 bytes .../Documentation/Documentation.pdf.meta | 7 + .../Editor/Attribution/Attribution.cs.meta | 9 +- .../Editor/Attribution/VSAttribution.cs.meta | 9 +- .../Editor/BugReport.meta | 3 + .../Editor/BugReport/BugReportWindowAPI.cs | 34 + .../BugReport/BugReportWindowAPI.cs.meta | 11 + .../BugReport/HotReloadBugReportWindow.cs | 616 ++++++++++++++++++ .../HotReloadBugReportWindow.cs.meta | 14 + .../BugReport/HotReloadBugReportWindow.uss | 218 +++++++ .../HotReloadBugReportWindow.uss.meta | 12 + .../BugReport/HotReloadBugReportWindow.uxml | 78 +++ .../HotReloadBugReportWindow.uxml.meta | 10 + .../Editor/CLI/CliUtils.cs | 34 + .../Editor/CLI/CliUtils.cs.meta | 9 +- .../Editor/CLI/FallbackCliController.cs.meta | 9 +- .../Editor/CLI/HotReloadCli.cs | 2 +- .../Editor/CLI/HotReloadCli.cs.meta | 9 +- .../Editor/CLI/ICliController.cs.meta | 9 +- .../Editor/CLI/LinuxCliController.cs.meta | 9 +- .../Editor/CLI/OsxCliController.cs.meta | 9 +- .../Editor/CLI/StartArgs.cs.meta | 7 - .../Editor/CLI/WindowsCliController.cs.meta | 9 +- .../DefaultCompileChecker.cs.meta | 7 - .../CompileChecker/ICompileChecker.cs.meta | 7 - .../LegacyCompileChecker.cs.meta | 7 - .../Editor/Constants.cs | 5 +- .../Editor/Constants.cs.meta | 7 - .../Editor/Demo/EditorDemo.cs.meta | 7 - .../Editor/EditorCodePatcher.cs | 23 +- .../Editor/EditorCodePatcher.cs.meta | 7 - .../Editor/EditorIndicationState.cs | 6 +- .../Editor/EditorIndicationState.cs.meta | 9 +- .../Editor/GitUtil.cs.meta | 7 - .../Editor/Helpers/AssemblyOmission.cs.meta | 9 +- .../Editor/Helpers/BuildInfoHelper.cs.meta | 9 +- .../Editor/Helpers/EditorWindowHelper.cs.meta | 7 - .../Editor/Helpers/GUIHelper.cs | 39 +- .../Editor/Helpers/GUIHelper.cs.meta | 9 +- .../HotReloadSuggestionsHelper.cs.meta | 9 +- .../Editor/Helpers/HotReloadTimelineHelper.cs | 66 +- .../Helpers/HotReloadTimelineHelper.cs.meta | 9 +- .../Editor/Helpers/Spinner.cs | 2 +- .../Editor/Helpers/Spinner.cs.meta | 9 +- .../Helpers/UnitySettingsHelper.cs.meta | 9 +- .../HotReloadAttributeProcessor.cs.meta | 7 - .../Editor/HotReloadEventPopup.cs | 4 + .../Editor/HotReloadEventPopup.cs.meta | 9 +- .../Editor/HotReloadOverlay.cs | 82 +-- .../Editor/HotReloadOverlay.cs.meta | 9 +- .../Editor/HotReloadPrefs.cs | 17 +- .../Editor/HotReloadPrefs.cs.meta | 7 - .../Editor/HotReloadSettingsEditor.cs.meta | 7 - .../Editor/HotReloadState.cs.meta | 9 +- .../Editor/HotReloadToolbar.cs | 83 +++ .../Editor/HotReloadToolbar.cs.meta | 3 + .../Editor/Icon_Player.png.meta | 7 - .../Editor/InspectorFreezeFix.cs.meta | 9 +- .../Editor/Installation/DownloadUtility.cs | 1 + .../Installation/DownloadUtility.cs.meta | 9 +- .../Installation/ExponentialBackoff.cs.meta | 9 +- .../Installation/InstallUtility.cs.meta | 7 - .../Installation/ServerDownloader.cs.meta | 9 +- .../Editor/Installation/UpdateUtility.cs.meta | 9 +- .../Localization/AboutTranslations.cs.meta | 9 +- .../Localization/BugReportTranslations.cs | 190 ++++++ .../BugReportTranslations.cs.meta | 3 + .../Editor/Localization/CommonTranslations.cs | 3 + .../Localization/CommonTranslations.cs.meta | 9 +- .../Localization/DialogTranslations.cs.meta | 9 +- .../Localization/ErrorTranslations.cs.meta | 9 +- .../Localization/LicenseTranslations.cs.meta | 9 +- .../Editor/Localization/Localization.cs | 4 +- .../Editor/Localization/Localization.cs.meta | 9 +- .../Localization/MenuItemsTranslations.cs | 2 + .../MenuItemsTranslations.cs.meta | 7 - .../MiscellaneousTranslations.cs.meta | 9 +- .../Localization/OnDeviceTranslations.cs.meta | 9 +- .../RegistrationTranslations.cs.meta | 9 +- .../Localization/SettingsTranslations.cs.meta | 9 +- .../SuggestionsTranslations.cs.meta | 8 +- .../Localization/TimelineTranslations.cs | 33 +- .../Localization/TimelineTranslations.cs.meta | 9 +- .../Localization/UITranslations.cs.meta | 7 - .../Localization/UtilityTranslations.cs.meta | 7 - .../BuildGenerateBuildInfo.cs.meta | 9 +- .../PlayerBuild/HotReloadBuildHelper.cs.meta | 9 +- .../PostbuildModifyAndroidManifest.cs.meta | 9 +- .../PostbuildSendProjectState.cs.meta | 7 - .../PrebuildIncludeResources.cs.meta | 7 - .../ProjectGeneration/FileIOProvider.cs.meta | 7 - .../ProjectGeneration/GUIDProvider.cs.meta | 7 - .../Editor/ProjectGeneration/IFileIO.cs.meta | 9 +- .../ProjectGeneration/IGUIDGenerator.cs.meta | 9 +- ...loadProjectGenerationPostProcessor.cs.meta | 9 +- .../ProjectGenenerationPostProcessor.cs.meta | 9 +- .../ProjectGeneration/ProjectGeneration.cs | 98 +-- .../ProjectGeneration.cs.meta | 7 - .../ProjectGenerationFlag.cs.meta | 9 +- .../ProjectGeneration/ProjectPart.cs.meta | 9 +- .../SolutionGuidGenerator.cs.meta | 9 +- .../Util/FileSystemUtil.cs.meta | 7 - .../Util/StringUtils.cs.meta | 9 +- .../RequiredSettingChecker.cs.meta | 9 +- .../{Icn_Stop.png => Hot_Reload_Icn_Stop.png} | Bin ....png.meta => Hot_Reload_Icn_Stop.png.meta} | 7 - .../{Icn_play.png => Hot_Reload_Icn_play.png} | Bin ....png.meta => Hot_Reload_Icn_play.png.meta} | 7 - ...ert_info.png => Hot_Reload_alert_info.png} | Bin ...ng.meta => Hot_Reload_alert_info.png.meta} | 7 - ...patch.png => Hot_Reload_applied_patch.png} | Bin ...meta => Hot_Reload_applied_patch.png.meta} | 7 - .../{close.png => Hot_Reload_close.png} | Bin ...ose.png.meta => Hot_Reload_close.png.meta} | 7 - .../{error.png => Hot_Reload_error.png} | Bin ...ror.png.meta => Hot_Reload_error.png.meta} | 7 - .../{events.png => Hot_Reload_events.png} | Bin ...ts.png.meta => Hot_Reload_events.png.meta} | 7 - ...osed.png => Hot_Reload_foldout_closed.png} | Bin ...eta => Hot_Reload_foldout_closed.png.meta} | 7 - ...t_open.png => Hot_Reload_foldout_open.png} | Bin ....meta => Hot_Reload_foldout_open.png.meta} | 7 - ...e.png => Hot_Reload_icon_check_circle.png} | Bin ... => Hot_Reload_icon_check_circle.png.meta} | 7 - ...k.png => Hot_Reload_icon_circle_black.png} | Bin ... => Hot_Reload_icon_circle_black.png.meta} | 7 - ...ay.png => Hot_Reload_icon_circle_gray.png} | Bin ...a => Hot_Reload_icon_circle_gray.png.meta} | 7 - ...eload_icon_loading_star_light_mode_96.png} | Bin ...d_icon_loading_star_light_mode_96.png.meta | 124 ++++ ...png => Hot_Reload_icon_warning_circle.png} | Bin ...> Hot_Reload_icon_warning_circle.png.meta} | 7 - .../{infos.png => Hot_Reload_infos.png} | Bin ...fos.png.meta => Hot_Reload_infos.png.meta} | 7 - .../{logo.png => Hot_Reload_logo.png} | Bin ...logo.png.meta => Hot_Reload_logo.png.meta} | 7 - .../Editor/Resources/Hot_Reload_red_dot.png | Bin 0 -> 213 bytes ...t.png.meta => Hot_Reload_red_dot.png.meta} | 20 +- .../{refresh.png => Hot_Reload_refresh.png} | Bin ...h.png.meta => Hot_Reload_refresh.png.meta} | 7 - .../Resources/Hot_Reload_report_bug.png | Bin 0 -> 426 bytes .../Resources/Hot_Reload_report_bug.png.meta | 116 ++++ .../{blue.png => Hot_Reload_status_blue.png} | Bin ...g.meta => Hot_Reload_status_blue.png.meta} | 7 - ...{green.png => Hot_Reload_status_green.png} | Bin ....meta => Hot_Reload_status_green.png.meta} | 7 - .../{grey.png => Hot_Reload_status_grey.png} | Bin ...g.meta => Hot_Reload_status_grey.png.meta} | 7 - .../{red.png => Hot_Reload_status_red.png} | Bin ...ng.meta => Hot_Reload_status_red.png.meta} | 7 - ...d.png => Hot_Reload_status_undetected.png} | Bin ... => Hot_Reload_status_undetected.png.meta} | 7 - ...ellow.png => Hot_Reload_status_yellow.png} | Bin ...meta => Hot_Reload_status_yellow.png.meta} | 7 - .../{warning.png => Hot_Reload_warning.png} | Bin ...g.png.meta => Hot_Reload_warning.png.meta} | 7 - .../Logo_HotReload_DarkMode.png.meta | 7 - .../Logo_HotReload_LightMode.png.meta | 7 - .../icon_loading_star_light_mode_96.png.meta | 131 ---- .../Editor/Resources/red_dot.png | Bin 4838 -> 0 bytes .../Editor/Resources/report_bug.png | Bin 763 -> 0 bytes .../Editor/Resources/report_bug.png.meta | 134 ---- .../Editor/ServerHealthCheck.cs.meta | 9 +- ...gularityGroup.HotReload.Editor.asmdef.meta | 7 - ...rityGroup.HotReload.EditorDependencies.dll | Bin 370176 -> 370688 bytes ...roup.HotReload.EditorDependencies.dll.meta | 7 - .../Editor/Versioning/PackageUpdateChecker.cs | 1 + .../Versioning/PackageUpdateChecker.cs.meta | 7 - .../Editor/Versioning/SemVer.cs.meta | 7 - .../GUI/Buttons/OpenDialogueButton.cs.meta | 9 +- .../Window/GUI/Buttons/OpenURLButton.cs.meta | 7 - .../Editor/Window/GUI/EditorTextures.cs.meta | 9 +- .../Editor/Window/GUI/IGUIComponent.cs.meta | 7 - ...AndroidAppToMakeHttpRequestsOption.cs.meta | 7 - .../Options/Base/HotReloadOptionBase.cs.meta | 7 - .../GUI/Options/Base/OptionInterfaces.cs.meta | 9 +- .../GUI/Options/ExposeServerOption.cs.meta | 7 - .../GUI/Options/IncludeInBuildOption.cs.meta | 7 - .../GUI/Tabs/Base/HotReloadTabBase.cs.meta | 7 - .../GUI/Tabs/Helpers/RedeemLicenseHelper.cs | 12 +- .../Tabs/Helpers/RedeemLicenseHelper.cs.meta | 9 +- .../Window/GUI/Tabs/HotReloadAboutTab.cs | 6 +- .../Window/GUI/Tabs/HotReloadAboutTab.cs.meta | 7 - .../GUI/Tabs/HotReloadOptionsSection.cs.meta | 7 - .../Editor/Window/GUI/Tabs/HotReloadRunTab.cs | 23 +- .../Window/GUI/Tabs/HotReloadRunTab.cs.meta | 7 - .../Window/GUI/Tabs/HotReloadSettingsTab.cs | 27 +- .../GUI/Tabs/HotReloadSettingsTab.cs.meta | 9 +- .../Editor/Window/HotReloadWindow.cs | 26 +- .../Editor/Window/HotReloadWindow.cs.meta | 7 - .../Editor/Window/ShowOnStartupEnum.cs.meta | 7 - .../Window/Styles/HotReloadWindowStyles.cs | 12 + .../Styles/HotReloadWindowStyles.cs.meta | 7 - .../HotReload.code-workspace.meta | 7 - .../LICENSE.md.meta | 7 - .../README.md.meta | 9 +- .../Runtime/AppCallbackListener.cs.meta | 9 +- .../Runtime/BuildInfo.cs.meta | 9 +- .../Runtime/Burst/JobHotReloadUtility.cs.meta | 9 +- .../Runtime/BurstChecker.cs.meta | 9 +- .../Runtime/CodePatcher.cs | 1 + .../Runtime/CodePatcher.cs.meta | 7 - .../Demo/Scenes/HotReloadBasicDemo.unity.meta | 7 - .../Demo/Scenes/HotReloadBurstDemo.unity.meta | 7 - .../HotReloadBurstDemoSettings.lighting.meta | 7 - .../Demo/Scripts/HotReloadBasicDemo.cs.meta | 7 - .../Scripts/HotReloadBurstJobsDemo.cs.meta | 7 - .../Runtime/Demo/Scripts/IDemo.cs.meta | 9 +- .../Runtime/HotReloadPrompts.prefab.meta | 7 - .../Runtime/HotReloadSettingsHelper.cs.meta | 9 +- .../Runtime/HotReloadSettingsObject.cs.meta | 7 - .../Runtime/HttpClientUtils.cs.meta | 9 +- .../Runtime/IServerHealthCheck.cs.meta | 9 +- .../Runtime/InstallQRDialog.cs.meta | 9 +- .../Runtime/IpHelper.cs.meta | 9 +- ...ityGroup.HotReload.RuntimeDependencies.dll | Bin 3047424 -> 3048960 bytes ...oup.HotReload.RuntimeDependencies.dll.meta | 7 - ...HotReload.RuntimeDependencies2019.dll.meta | 7 - ...HotReload.RuntimeDependencies2020.dll.meta | 7 - ...HotReload.RuntimeDependencies2022.dll.meta | 7 - ...ityGroup.HotReload.RuntimeDependencies.dll | Bin 3047424 -> 3048960 bytes ...oup.HotReload.RuntimeDependencies.dll.meta | 7 - ...HotReload.RuntimeDependencies2019.dll.meta | 7 - ...HotReload.RuntimeDependencies2020.dll.meta | 7 - ...HotReload.RuntimeDependencies2022.dll.meta | 7 - .../Localization/CommonTranslations.cs.meta | 9 +- .../Localization/DialogTranslations.cs.meta | 9 +- .../Localization/ErrorTranslations.cs.meta | 9 +- .../Localization/LoggingTranslations.cs.meta | 7 - .../Localization/MenuItemTranslations.cs | 2 + .../Localization/MenuItemTranslations.cs.meta | 9 +- .../Localization/SettingTranslations.cs.meta | 9 +- .../Runtime/Localization/Translations.cs | 7 +- .../Runtime/Localization/Translations.cs.meta | 9 +- .../Localization/UtilityTranslations.cs.meta | 9 +- .../Runtime/MethodCompatiblity.cs.meta | 7 - .../MethodPatchResponsesConverter.cs.meta | 9 +- .../Runtime/MethodUtils.cs.meta | 7 - .../MonoBehaviours/ConnectionDialog.cs.meta | 9 +- .../Runtime/MonoBehaviours/Prompts.cs.meta | 9 +- .../Runtime/MonoBehaviours/QuestionDialog.cs | 1 + .../MonoBehaviours/QuestionDialog.cs.meta | 9 +- .../Runtime/MonoBehaviours/RetryDialog.cs | 1 + .../MonoBehaviours/RetryDialog.cs.meta | 9 +- .../Runtime/MonoMethod.cs.meta | 7 - .../Runtime/MultiplayerPlaymodeHelper.cs.meta | 9 +- .../OSX/HotReloadNativeHelper.dylib.meta | 7 - .../Runtime/OnHotReloadDispatch.cs.meta | 9 +- .../Runtime/PackageConst.cs | 9 +- .../Runtime/PackageConst.cs.meta | 7 - .../Runtime/PatchServerInfo.cs.meta | 7 - .../Runtime/PersistencePaths.cs.meta | 7 - .../Runtime/PlayerCodePatcher.cs.meta | 9 +- .../Runtime/PlayerEntrypoint.cs.meta | 9 +- .../Runtime/Public/HotReloadLogging.cs.meta | 7 - .../Runtime/Public/InvokeOnHotReload.cs.meta | 7 - .../Public/InvokeOnHotReloadLocal.cs.meta | 9 +- .../Runtime/Public/Log.cs.meta | 9 +- .../Runtime/Public/LogLevel.cs.meta | 7 - ...Group.HotReload.Runtime.Public.asmdef.meta | 7 - .../Runtime/RequestHelper.cs | 24 +- .../Runtime/RequestHelper.cs.meta | 7 - .../Runtime/ServerHandshake.cs.meta | 9 +- .../Runtime/ServerHealthCheck.cs.meta | 9 +- ...ularityGroup.HotReload.Runtime.asmdef.meta | 7 - .../Runtime/SymbolResolver.cs.meta | 7 - .../SymbolResolvingFailedException.cs.meta | 7 - .../Runtime/TaskExtensions.cs.meta | 7 - .../Runtime/ThreadUtility.cs.meta | 9 +- .../Runtime/UnityHelper.cs.meta | 9 +- .../Server/hot-reload-config.graphql.meta | 7 - .../linux-x64/hotreload-start-script.sh.meta | 7 - .../Server/linux-x64/terminal-run.sh.meta | 7 - .../Third Party Notices.md.meta | 7 - .../package.json | 2 +- .../package.json.meta | 7 - 278 files changed, 2027 insertions(+), 1896 deletions(-) create mode 100644 Packages/com.singularitygroup.hotreload/.gitignore 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/BugReport.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/BugReport/BugReportWindowAPI.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/BugReport/BugReportWindowAPI.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/BugReport/HotReloadBugReportWindow.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/BugReport/HotReloadBugReportWindow.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/BugReport/HotReloadBugReportWindow.uss create mode 100644 Packages/com.singularitygroup.hotreload/Editor/BugReport/HotReloadBugReportWindow.uss.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/BugReport/HotReloadBugReportWindow.uxml create mode 100644 Packages/com.singularitygroup.hotreload/Editor/BugReport/HotReloadBugReportWindow.uxml.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/HotReloadToolbar.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/HotReloadToolbar.cs.meta create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Localization/BugReportTranslations.cs create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Localization/BugReportTranslations.cs.meta rename Packages/com.singularitygroup.hotreload/Editor/Resources/{Icn_Stop.png => Hot_Reload_Icn_Stop.png} (100%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{Icn_Stop.png.meta => Hot_Reload_Icn_Stop.png.meta} (91%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{Icn_play.png => Hot_Reload_Icn_play.png} (100%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{Icn_play.png.meta => Hot_Reload_Icn_play.png.meta} (91%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{alert_info.png => Hot_Reload_alert_info.png} (100%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{alert_info.png.meta => Hot_Reload_alert_info.png.meta} (92%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{applied_patch.png => Hot_Reload_applied_patch.png} (100%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{applied_patch.png.meta => Hot_Reload_applied_patch.png.meta} (92%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{close.png => Hot_Reload_close.png} (100%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{close.png.meta => Hot_Reload_close.png.meta} (92%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{error.png => Hot_Reload_error.png} (100%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{error.png.meta => Hot_Reload_error.png.meta} (92%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{events.png => Hot_Reload_events.png} (100%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{events.png.meta => Hot_Reload_events.png.meta} (92%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{foldout_closed.png => Hot_Reload_foldout_closed.png} (100%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{foldout_closed.png.meta => Hot_Reload_foldout_closed.png.meta} (92%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{foldout_open.png => Hot_Reload_foldout_open.png} (100%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{foldout_open.png.meta => Hot_Reload_foldout_open.png.meta} (92%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{icon_check_circle.png => Hot_Reload_icon_check_circle.png} (100%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{icon_check_circle.png.meta => Hot_Reload_icon_check_circle.png.meta} (88%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{icon_circle_black.png => Hot_Reload_icon_circle_black.png} (100%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{icon_circle_black.png.meta => Hot_Reload_icon_circle_black.png.meta} (93%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{icon_circle_gray.png => Hot_Reload_icon_circle_gray.png} (100%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{icon_circle_gray.png.meta => Hot_Reload_icon_circle_gray.png.meta} (93%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{icon_loading_star_light_mode_96.png => Hot_Reload_icon_loading_star_light_mode_96.png} (100%) create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/Hot_Reload_icon_loading_star_light_mode_96.png.meta rename Packages/com.singularitygroup.hotreload/Editor/Resources/{icon_warning_circle.png => Hot_Reload_icon_warning_circle.png} (100%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{icon_warning_circle.png.meta => Hot_Reload_icon_warning_circle.png.meta} (88%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{infos.png => Hot_Reload_infos.png} (100%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{infos.png.meta => Hot_Reload_infos.png.meta} (92%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{logo.png => Hot_Reload_logo.png} (100%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{logo.png.meta => Hot_Reload_logo.png.meta} (92%) create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/Hot_Reload_red_dot.png rename Packages/com.singularitygroup.hotreload/Editor/Resources/{red_dot.png.meta => Hot_Reload_red_dot.png.meta} (88%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{refresh.png => Hot_Reload_refresh.png} (100%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{refresh.png.meta => Hot_Reload_refresh.png.meta} (92%) create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/Hot_Reload_report_bug.png create mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/Hot_Reload_report_bug.png.meta rename Packages/com.singularitygroup.hotreload/Editor/Resources/{blue.png => Hot_Reload_status_blue.png} (100%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{blue.png.meta => Hot_Reload_status_blue.png.meta} (89%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{green.png => Hot_Reload_status_green.png} (100%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{green.png.meta => Hot_Reload_status_green.png.meta} (92%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{grey.png => Hot_Reload_status_grey.png} (100%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{grey.png.meta => Hot_Reload_status_grey.png.meta} (92%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{red.png => Hot_Reload_status_red.png} (100%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{red.png.meta => Hot_Reload_status_red.png.meta} (92%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{undetected.png => Hot_Reload_status_undetected.png} (100%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{undetected.png.meta => Hot_Reload_status_undetected.png.meta} (91%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{yellow.png => Hot_Reload_status_yellow.png} (100%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{yellow.png.meta => Hot_Reload_status_yellow.png.meta} (92%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{warning.png => Hot_Reload_warning.png} (100%) rename Packages/com.singularitygroup.hotreload/Editor/Resources/{warning.png.meta => Hot_Reload_warning.png.meta} (92%) delete mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/icon_loading_star_light_mode_96.png.meta delete mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/red_dot.png delete mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/report_bug.png delete mode 100644 Packages/com.singularitygroup.hotreload/Editor/Resources/report_bug.png.meta diff --git a/Packages/com.singularitygroup.hotreload/.gitignore b/Packages/com.singularitygroup.hotreload/.gitignore new file mode 100644 index 0000000..84edfd6 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/.gitignore @@ -0,0 +1,7 @@ +# do not include HotReloadSettingsObject inside the upm package. +# (needs to be editable by the user) +# (only created on first Android build) +/Resources/HotReloadSettingsObject.asset +/Resources/HotReloadSettingsObject.asset.meta +/Resources.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..577af0c --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Documentation/Documentation.pdf.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8999c2c2d9cadcb44a617a5df023bfa1 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Editor/Attribution/Attribution.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Attribution/Attribution.cs.meta index a0d7e00..8a36764 100644 --- a/Packages/com.singularitygroup.hotreload/Editor/Attribution/Attribution.cs.meta +++ b/Packages/com.singularitygroup.hotreload/Editor/Attribution/Attribution.cs.meta @@ -1,10 +1,3 @@ fileFormatVersion: 2 guid: 67658aafb8404f0eb9496812ba4bb8a4 -timeCreated: 1678721795 -AssetOrigin: - serializedVersion: 1 - productId: 254358 - packageName: Hot Reload | Edit Code Without Compiling - packageVersion: 1.13.17 - assetPath: Packages/com.singularitygroup.hotreload/Editor/Attribution/Attribution.cs - uploadId: 870414 +timeCreated: 1678721795 \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/Attribution/VSAttribution.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/Attribution/VSAttribution.cs.meta index d5b0f71..d9256b0 100644 --- a/Packages/com.singularitygroup.hotreload/Editor/Attribution/VSAttribution.cs.meta +++ b/Packages/com.singularitygroup.hotreload/Editor/Attribution/VSAttribution.cs.meta @@ -1,10 +1,3 @@ fileFormatVersion: 2 guid: d7493a30e78d4ec783ead20baea2c4d2 -timeCreated: 1678721534 -AssetOrigin: - serializedVersion: 1 - productId: 254358 - packageName: Hot Reload | Edit Code Without Compiling - packageVersion: 1.13.17 - assetPath: Packages/com.singularitygroup.hotreload/Editor/Attribution/VSAttribution.cs - uploadId: 870414 +timeCreated: 1678721534 \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/BugReport.meta b/Packages/com.singularitygroup.hotreload/Editor/BugReport.meta new file mode 100644 index 0000000..97408ac --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/BugReport.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ea93d0fb53fe44419e8a20d4701918ef +timeCreated: 1773924481 \ No newline at end of file diff --git a/Packages/com.singularitygroup.hotreload/Editor/BugReport/BugReportWindowAPI.cs b/Packages/com.singularitygroup.hotreload/Editor/BugReport/BugReportWindowAPI.cs new file mode 100644 index 0000000..f4d4f03 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/BugReport/BugReportWindowAPI.cs @@ -0,0 +1,34 @@ +using System; +using System.Threading.Tasks; +using UnityEngine; + +namespace SingularityGroup.HotReload.Editor { + internal static class ReportWindowAPI { + public static void OpenBugReport(string title = null, string description = null) { + HotReloadBugReportWindow.Open( + ReportMode.BugReport, + discordUrl: Constants.DiscordInviteUrl, + contactUrl: Constants.ContactURL, + email: HotReloadPrefs.LicenseEmail, + details: description, + title: title + ); + } + + public static void OpenFeedback( + Func> submitHandler = null, + string discordUrl = null, + string contactUrl = null, + string title = null, + string email = null, + string feedback = null + ) { + HotReloadBugReportWindow.Open( + ReportMode.Feedback, + discordUrl: Constants.DiscordInviteUrl, + contactUrl: Constants.ContactURL, + email: HotReloadPrefs.LicenseEmail + ); + } + } +} diff --git a/Packages/com.singularitygroup.hotreload/Editor/BugReport/BugReportWindowAPI.cs.meta b/Packages/com.singularitygroup.hotreload/Editor/BugReport/BugReportWindowAPI.cs.meta new file mode 100644 index 0000000..d2f7770 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/BugReport/BugReportWindowAPI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8a7505b2e85b481479de6861e72e954a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.singularitygroup.hotreload/Editor/BugReport/HotReloadBugReportWindow.cs b/Packages/com.singularitygroup.hotreload/Editor/BugReport/HotReloadBugReportWindow.cs new file mode 100644 index 0000000..d4125a6 --- /dev/null +++ b/Packages/com.singularitygroup.hotreload/Editor/BugReport/HotReloadBugReportWindow.cs @@ -0,0 +1,616 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using UnityEditor; +using UnityEngine; +using UnityEditor.UIElements; +using UnityEngine.UIElements; +using SingularityGroup.HotReload.Editor.Localization; +using Application = UnityEngine.Application; +#if UNITY_2021_3_OR_NEWER +using System.IO; +using System.IO.Compression; +using SingularityGroup.HotReload.Editor.Cli; +using SingularityGroup.HotReload.EditorDependencies; +using CompressionLevel = System.IO.Compression.CompressionLevel; +#endif + +namespace SingularityGroup.HotReload.Editor { + + internal enum ReportMode { + BugReport, + Feedback + } + + internal class HotReloadBugReportWindow : EditorWindow { + static List SeverityChoices => new List { + Translations.BugReport.SeverityNormal, + Translations.BugReport.SeverityLow, + Translations.BugReport.SeverityHigh, + }; + + static List FrequencyChoices => new List { + Translations.BugReport.FrequencyFirstTime, + Translations.BugReport.FrequencySometimes, + Translations.BugReport.FrequencyAlways, + }; + + [SerializeField] ReportMode _mode = ReportMode.BugReport; + + [SerializeField] VisualTreeAsset visualTree; + [SerializeField] StyleSheet styleSheet; + + string _discordUrl; + string _contactUrl; + + TextField _titleField; + PopupField _severityPopup; + PopupField _frequencyPopup; + TextField _emailField; + IMGUIContainer _detailsContainer; + [SerializeField] string _detailsText = ""; + [SerializeField] string _emailText = ""; + [SerializeField] string _titleText = ""; + Label _detailsLabel; + Label _validationLabel; + Button _submitButton; + VisualElement _severitySection; + VisualElement _frequencySection; + ScrollView _scrollView; + VisualElement _detailsSlot; + + VisualElement _successScreen; + VisualElement _failureScreen; + Label _failureErrorLabel; + Button _tabBugReport; + Button _tabFeedback; + + bool _isOnResultScreen; + + static Vector2 GetMinSize(ReportMode mode) { + return mode == ReportMode.Feedback + ? new Vector2(420, 500) + : new Vector2(420, 620); + } + + #region Public API + /// + /// Opens the window with the given mode and configuration. + /// Prefer using for a cleaner call site. + /// + public static HotReloadBugReportWindow Open( + ReportMode mode, + string discordUrl = null, + string contactUrl = null, + string title = null, + string email = null, + string details = null + ) { + var wnd = GetWindow(utility: true); + wnd._mode = mode; + wnd._discordUrl = discordUrl; + wnd._contactUrl = contactUrl; + wnd.titleContent = new GUIContent( + mode == ReportMode.Feedback + ? Translations.BugReport.WindowTitleFeedback + : Translations.BugReport.WindowTitleBugReport); + wnd.minSize = wnd.maxSize = GetMinSize(mode); + + wnd._titleText = title; + wnd._emailText = email; + wnd._detailsText = details; + + wnd.RebuildUI(); + return wnd; + } + + /// + /// Prefills form fields on an already-open window. Null values are ignored. + /// + public void Prefill() { + if (_titleText != null && _titleField != null) { + _titleField.SetValueWithoutNotify(_titleText); + } + if (_emailText != null && _emailField != null) { + _emailField.SetValueWithoutNotify(_emailText); + } + } + #endregion + + void OnEnable() { + RebuildUI(); + } + + bool HasUnsavedFormContent() { + if (_isOnResultScreen) { + return false; + } + if (!string.IsNullOrWhiteSpace(_titleField.value)) { + return true; + } + if (!string.IsNullOrWhiteSpace(_detailsText) && _detailsText != Translations.BugReport.PlaceholderDetails) { + return true; + } + + return false; + } + + void OnDestroy() { + if (_detailsContainer != null && _detailsSlot != null) { + _detailsSlot.Remove(_detailsContainer); + _detailsContainer = null; + } + if (!HasUnsavedFormContent()) { + return; + } + + bool discard = EditorUtility.DisplayDialog( + Translations.BugReport.DiscardDialogTitle, + Translations.BugReport.DiscardDialogMessage, + Translations.BugReport.DiscardDialogConfirm, + Translations.BugReport.DiscardDialogCancel); + + if (!discard) { + _emailText = _emailField.value; + _titleText = _titleField.value; + EditorApplication.delayCall += () => { + Open(_mode, _discordUrl, _contactUrl); + }; + } else { + _detailsText = null; + _emailText = null; + _titleText = null; + } + } + + void RebuildUI() { + DetachCallbacks(); + if (visualTree == null) { + Log.Warning($"Could not open bug report. Please reach out to our support: {_contactUrl}"); + return; + } + + rootVisualElement.Clear(); + visualTree.CloneTree(rootVisualElement); + if (styleSheet != null) { + rootVisualElement.styleSheets.Add(styleSheet); + } + + QueryElements(); + AttachIMGUIContainers(); + ApplyTranslations(); + CreatePopupFields(); + ApplyMode(); + SetupSubmit(); + SetupResultScreenButtons(); + FixSingleLineFieldAlignment(_titleField); + FixSingleLineFieldAlignment(_emailField); + Prefill(); + AttachCallbacks(); + + ShowFormView(); + } + + void AttachIMGUIContainers() { + _detailsSlot = rootVisualElement.Q("details-field-slot"); + // Build the IMGUI textarea and inject it + _detailsContainer = new IMGUIContainer(DrawDetailsField); + _detailsSlot.Add(_detailsContainer); + } + + void QueryElements() { + _titleField = rootVisualElement.Q("title-field"); + _emailField = rootVisualElement.Q("email-field"); + _detailsLabel = rootVisualElement.Q