diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/.codely-bridge-commit b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/.codely-bridge-commit new file mode 100644 index 0000000..050cd6a --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/.codely-bridge-commit @@ -0,0 +1 @@ +47f3110000c95eee5cd83c827e0f1f11585f7ae1 diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/.gitattributes b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/.gitattributes similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/.gitattributes rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/.gitattributes diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/CHANGELOG.md b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/CHANGELOG.md similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/CHANGELOG.md rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/CHANGELOG.md diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/CHANGELOG.md.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/CHANGELOG.md.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/CHANGELOG.md.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/CHANGELOG.md.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/AssemblyInfo.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/AssemblyInfo.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/AssemblyInfo.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/AssemblyInfo.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/AssemblyInfo.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/AssemblyInfo.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/AssemblyInfo.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/AssemblyInfo.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ActionRouter.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ActionRouter.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ActionRouter.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ActionRouter.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ActionRouter.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ActionRouter.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ActionRouter.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ActionRouter.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/AssetListeningGuard.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/AssetListeningGuard.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/AssetListeningGuard.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/AssetListeningGuard.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/AssetListeningGuard.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/AssetListeningGuard.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/AssetListeningGuard.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/AssetListeningGuard.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/AsyncTaskRunner.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/AsyncTaskRunner.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/AsyncTaskRunner.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/AsyncTaskRunner.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/AsyncTaskRunner.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/AsyncTaskRunner.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/AsyncTaskRunner.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/AsyncTaskRunner.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/BackgroundCommandPump.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/BackgroundCommandPump.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/BackgroundCommandPump.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/BackgroundCommandPump.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/BackgroundCommandPump.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/BackgroundCommandPump.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/BackgroundCommandPump.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/BackgroundCommandPump.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/BridgeUpdateRestartPrompt.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/BridgeUpdateRestartPrompt.cs similarity index 98% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/BridgeUpdateRestartPrompt.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/BridgeUpdateRestartPrompt.cs index 6761890..411e41b 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/BridgeUpdateRestartPrompt.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/BridgeUpdateRestartPrompt.cs @@ -30,6 +30,8 @@ namespace UnityTcp.Editor.Helpers static BridgeUpdateRestartPrompt() { + if (EditorAutomationGuard.ShouldSkipBridgeAutoStart()) return; + EditorApplication.delayCall += TryShowPendingPrompt; } diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/BridgeUpdateRestartPrompt.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/BridgeUpdateRestartPrompt.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/BridgeUpdateRestartPrompt.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/BridgeUpdateRestartPrompt.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/CommandContext.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/CommandContext.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/CommandContext.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/CommandContext.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/CommandContext.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/CommandContext.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/CommandContext.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/CommandContext.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/CompilationHelper.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/CompilationHelper.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/CompilationHelper.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/CompilationHelper.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/CompilationHelper.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/CompilationHelper.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/CompilationHelper.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/CompilationHelper.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/CoroutineRunner.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/CoroutineRunner.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/CoroutineRunner.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/CoroutineRunner.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/CoroutineRunner.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/CoroutineRunner.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/CoroutineRunner.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/CoroutineRunner.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/DetachedJobs.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/DetachedJobs.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/DetachedJobs.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/DetachedJobs.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/DetachedJobs.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/DetachedJobs.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/DetachedJobs.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/DetachedJobs.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/DialogWatcher.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/DialogWatcher.cs similarity index 99% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/DialogWatcher.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/DialogWatcher.cs index c1b1290..79a9718 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/DialogWatcher.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/DialogWatcher.cs @@ -113,6 +113,8 @@ namespace UnityTcp.Editor.Helpers static DialogWatcher() { + if (EditorAutomationGuard.ShouldSkipBridgeAutoStart()) return; + // Force main-thread-only static init NOW, on this ([InitializeOnLoad]) thread, // before any watcher thread exists: the Windows watcher thread reads // UnityTcpBridge.IsRunning in Notify, and if that were the bridge's first touch its diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/DialogWatcher.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/DialogWatcher.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/DialogWatcher.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/DialogWatcher.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/EditorAutomationGuard.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/EditorAutomationGuard.cs new file mode 100644 index 0000000..19a39be --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/EditorAutomationGuard.cs @@ -0,0 +1,34 @@ +using System; +using UnityEngine; +using UnityEngine.Rendering; + +namespace UnityTcp.Editor.Helpers +{ + /// + /// Restricts bridge auto-start to the main Editor process and supported automation runs. + /// Set to opt in when integration tests need the bridge. + /// + internal static class EditorAutomationGuard + { + internal const string AllowBridgeInBatchEnvVar = "UNITY_TCP_ALLOW_BATCH"; + + internal static bool IsAutomatedEditorRun() + => Application.isBatchMode + || SystemInfo.graphicsDeviceType == GraphicsDeviceType.Null; + + internal static bool ShouldSkipBridgeAutoStart() + => EditorProcessGuard.ShouldSkipEditorAutoStart() + || (IsAutomatedEditorRun() + && string.IsNullOrWhiteSpace( + Environment.GetEnvironmentVariable(AllowBridgeInBatchEnvVar))); + + internal static bool ShouldSkipBridgeAutoStart( + bool isAssetImportWorker, + bool isSecondaryEditor, + bool isAutomatedEditorRun, + bool allowBridgeInBatch) + => isAssetImportWorker + || isSecondaryEditor + || (isAutomatedEditorRun && !allowBridgeInBatch); + } +} diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/EditorAutomationGuard.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/EditorAutomationGuard.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/EditorAutomationGuard.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/EditorAutomationGuard.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ExecPath.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ExecPath.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ExecPath.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ExecPath.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ExecPath.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ExecPath.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ExecPath.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ExecPath.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/GameObjectSerializer.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/GameObjectSerializer.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/GameObjectSerializer.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/GameObjectSerializer.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/GameObjectSerializer.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/GameObjectSerializer.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/GameObjectSerializer.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/GameObjectSerializer.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobContext.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobContext.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobContext.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobContext.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobContext.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobContext.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobContext.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobContext.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobControl.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobControl.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobControl.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobControl.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobControl.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobControl.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobControl.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobControl.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobRegistry.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobRegistry.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobRegistry.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobRegistry.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobRegistry.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobRegistry.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobRegistry.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobRegistry.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobRunnerBase.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobRunnerBase.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobRunnerBase.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobRunnerBase.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobRunnerBase.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobRunnerBase.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JobRunnerBase.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JobRunnerBase.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JsonCommandHelper.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JsonCommandHelper.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JsonCommandHelper.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JsonCommandHelper.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JsonCommandHelper.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JsonCommandHelper.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/JsonCommandHelper.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/JsonCommandHelper.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/MacModalDialogScanner.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/MacModalDialogScanner.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/MacModalDialogScanner.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/MacModalDialogScanner.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/MacModalDialogScanner.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/MacModalDialogScanner.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/MacModalDialogScanner.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/MacModalDialogScanner.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/MainThreadHelper.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/MainThreadHelper.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/MainThreadHelper.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/MainThreadHelper.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/MainThreadHelper.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/MainThreadHelper.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/MainThreadHelper.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/MainThreadHelper.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ModalDialogScanner.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ModalDialogScanner.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ModalDialogScanner.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ModalDialogScanner.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ModalDialogScanner.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ModalDialogScanner.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ModalDialogScanner.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ModalDialogScanner.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/PortManager.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/PortManager.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/PortManager.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/PortManager.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/PortManager.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/PortManager.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/PortManager.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/PortManager.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/Response.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/Response.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/Response.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/Response.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/Response.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/Response.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/Response.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/Response.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/SelectionPayloadBuilder.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/SelectionPayloadBuilder.cs new file mode 100644 index 0000000..af2235d --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/SelectionPayloadBuilder.cs @@ -0,0 +1,135 @@ +using System.Linq; +using Codely.Newtonsoft.Json.Linq; +using UnityEditor; +#if UNITY_2021_2_OR_NEWER +using UnityEditor.SceneManagement; +#else +using UnityEditor.Experimental.SceneManagement; +#endif +using UnityEngine; + +namespace UnityTcp.Editor.Helpers +{ + /// + /// Builds the standard Unity selection payload shared by + /// and + /// 's get_selection action, + /// keeping the two callers in sync without duplicating logic. + /// + public static class SelectionPayloadBuilder + { + /// + /// Constructs a describing the current Unity Editor selection. + /// The caller is responsible for wrapping the result (e.g. in + /// or directly broadcasting it as a notification). + /// + public static JObject Build() + { + var assetGUIDs = Selection.assetGUIDs; + var assetPaths = assetGUIDs?.Select(AssetDatabase.GUIDToAssetPath).ToArray(); + + string activeAssetPath = Selection.activeObject != null + ? AssetDatabase.GetAssetPath(Selection.activeObject) + : null; + string activeAsset = string.IsNullOrEmpty(activeAssetPath) + ? null + : activeAssetPath.Replace('\\', '/'); + + bool isSubAsset = Selection.activeObject != null + && AssetDatabase.IsSubAsset(Selection.activeObject); + string activeAssetFileId = string.IsNullOrEmpty(activeAsset) + ? null + : Selection.activeObject.FormatLocalFileId(); + string activeAssetGuid = string.IsNullOrEmpty(activeAsset) + ? null + : Selection.activeObject.GetAssetGuid(); + + var activeGo = Selection.activeGameObject; + var goSource = activeGo != null && activeGo.scene.IsValid() + ? PrefabUtility.GetCorrespondingObjectFromSource(activeGo) + : null; + string sourcePrefabGuid = goSource != null + ? AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(goSource)) + : null; + + var payload = new + { + activeObject = Selection.activeObject?.name, + activeObjectKind = Selection.activeObject.GetKind(), + activeAsset = activeAsset, + // Decimal string: Tuanjie fileIDs can exceed JS Number / Int32. + activeAssetLocalId = activeAssetFileId, + activeAssetGuid = activeAssetGuid, + activeSelectedSubAsset = isSubAsset && !string.IsNullOrEmpty(activeAssetFileId) + ? (object)new + { + type = Selection.activeObject.GetType().Name, + name = Selection.activeObject.name, + fileId = activeAssetFileId, + } + : null, + activeGameObject = activeGo?.name, + activeGameObjectScenePath = GetSceneOrPrefabPath(activeGo), + // instanceID always refers to the GameObject, never Transform/component. + // Decimal string: Unity 6.5 EntityId can exceed JS Number / 2^53. + activeInstanceID = activeGo.FormatStableInstanceId() ?? "0", + activeGameObjectFileId = activeGo.FormatLocalFileId(), + activeGameObjectGuid = activeGo.FormatGlobalObjectGuid(), + // Prefab instance children: fileId is the source-prefab local id, + // not a scene YAML id. Pair with these to grep the prefab file. + activeGameObjectIsPrefabInstanceChild = goSource != null, + activeGameObjectSourcePrefabGuid = string.IsNullOrEmpty(sourcePrefabGuid) ? null : sourcePrefabGuid, + activeGameObjectSourcePrefabFileId = goSource.FormatLocalFileId(), + activeTransform = Selection.activeTransform?.name, +#if UNITY_2020_1_OR_NEWER + count = Selection.count, +#else + count = Selection.objects?.Length ?? 0, +#endif + objects = Selection.objects + .Where(obj => obj != null) + .Select(obj => new + { + name = obj.name, + type = obj.GetType().FullName, + instanceID = obj.FormatStableInstanceId(), + }) + .ToList(), + gameObjects = Selection.gameObjects + .Where(go => go != null) + .Select(go => new + { + name = go.name, + path = go.GetHierarchyPathWithIndex(), + instanceID = go.FormatStableInstanceId(), + kind = go.GetKind(), + fileId = go.FormatLocalFileId(), + guid = go.FormatGlobalObjectGuid(), + componentNames = go.GetComponentTypeNames(), + }) + .ToList(), + assetGUIDs = assetGUIDs, + assetPaths = assetPaths, + }; + + return JObject.FromObject(payload); + } + + /// + /// Returns the scene or prefab asset path that owns , + /// normalised to forward-slashes. Returns null for null input. + /// + public static string GetSceneOrPrefabPath(GameObject go) + { + if (go == null) return null; + if (go.scene.IsValid() && !string.IsNullOrEmpty(go.scene.path)) + return go.scene.path.Replace('\\', '/'); + string stagePath = InstanceIdExtensions.GetPrefabStageAssetPath( + PrefabStageUtility.GetPrefabStage(go)); + if (!string.IsNullOrEmpty(stagePath)) + return stagePath.Replace('\\', '/'); + string assetPath = AssetDatabase.GetAssetPath(go); + return string.IsNullOrEmpty(assetPath) ? null : assetPath.Replace('\\', '/'); + } + } +} diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/SelectionPayloadBuilder.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/SelectionPayloadBuilder.cs.meta new file mode 100644 index 0000000..be0ebf2 --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/SelectionPayloadBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 00ca19b90d0118744b3dae38cfcd149f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ServerPathResolver.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ServerPathResolver.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ServerPathResolver.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ServerPathResolver.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ServerPathResolver.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ServerPathResolver.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ServerPathResolver.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ServerPathResolver.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ShaderVariantApi.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ShaderVariantApi.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ShaderVariantApi.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ShaderVariantApi.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ShaderVariantApi.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ShaderVariantApi.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/ShaderVariantApi.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/ShaderVariantApi.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/StateComposer.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/StateComposer.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/StateComposer.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/StateComposer.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/StateComposer.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/StateComposer.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/StateComposer.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/StateComposer.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/StepJob.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/StepJob.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/StepJob.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/StepJob.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/StepJob.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/StepJob.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/StepJob.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/StepJob.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/StepJobRunner.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/StepJobRunner.cs similarity index 97% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/StepJobRunner.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/StepJobRunner.cs index f379684..5f9d356 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/StepJobRunner.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/StepJobRunner.cs @@ -143,9 +143,22 @@ namespace UnityTcp.Editor.Helpers // Set from any thread when state changed outside the tick (a cross-thread detach); // consumed by Tick on the main thread, which owns persistence. private static volatile bool _saveRequested; + private static bool _initialized; static StepJobRunner() { + if (EditorAutomationGuard.ShouldSkipBridgeAutoStart()) return; + + EnsureInitialized(); + } + + // Main-thread only. Explicit bridge/job starts need restoration too, even + // when InitializeOnLoad deliberately skipped auto-start in this domain. + internal static void EnsureInitialized() + { + if (_initialized) return; + // Set before Load: a restored job's OnRestored may enroll another job. + _initialized = true; Load(); // Pending markers persist but only step jobs survive the reload; retire the rest so no // client is left polling a job that no longer exists. @@ -171,6 +184,7 @@ namespace UnityTcp.Editor.Helpers bool detached = false) { if (job == null) throw new ArgumentNullException(nameof(job)); + EnsureInitialized(); var ctx = new JobContext(requestId, name, detached); var entry = new Entry @@ -490,9 +504,8 @@ namespace UnityTcp.Editor.Helpers { Save(); _entries.Clear(); - Load(); - DetachedJobs.ReconcilePending( - _entries.Where(e => e.Detached).Select(e => e.JobId).ToList()); + _initialized = false; + EnsureInitialized(); } private static void Load() diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/StepJobRunner.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/StepJobRunner.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/StepJobRunner.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/StepJobRunner.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/TelemetryHelper.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/TelemetryHelper.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/TelemetryHelper.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/TelemetryHelper.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/TelemetryHelper.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/TelemetryHelper.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/TelemetryHelper.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/TelemetryHelper.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/UnityStateDirtyHook.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/UnityStateDirtyHook.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/UnityStateDirtyHook.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/UnityStateDirtyHook.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/UnityStateDirtyHook.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/UnityStateDirtyHook.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/UnityStateDirtyHook.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/UnityStateDirtyHook.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/Vector3Helper.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/Vector3Helper.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/Vector3Helper.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/Vector3Helper.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/Vector3Helper.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/Vector3Helper.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/Vector3Helper.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/Vector3Helper.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/Win32ModalDialogScanner.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/Win32ModalDialogScanner.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/Win32ModalDialogScanner.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/Win32ModalDialogScanner.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/Win32ModalDialogScanner.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/Win32ModalDialogScanner.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/Win32ModalDialogScanner.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/Win32ModalDialogScanner.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/WriteGuard.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/WriteGuard.cs similarity index 97% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/WriteGuard.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/WriteGuard.cs index 6e6f8c3..dd386e0 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/WriteGuard.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/WriteGuard.cs @@ -55,24 +55,17 @@ namespace UnityTcp.Editor.Helpers "create", "modify", "delete", - "add_component", "remove_component", "set_component_property" }, ["manage_asset"] = new HashSet(StringComparer.OrdinalIgnoreCase) { - "import", "ensure_prefab_variant", "create", - "modify", - "delete", - "duplicate", - "move" + "modify" }, ["manage_scene"] = new HashSet(StringComparer.OrdinalIgnoreCase) { - "ensure_scene_open", - "ensure_scene_saved", "create", "load", "save" diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/WriteGuard.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/WriteGuard.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/WriteGuard.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Helpers/WriteGuard.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Icons.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Icons.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Icons.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Icons.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/EditorBusyProxy.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/EditorBusyProxy.cs new file mode 100644 index 0000000..f3e31e2 --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/EditorBusyProxy.cs @@ -0,0 +1,16 @@ +namespace UnityTcp.Editor.Native +{ + // Managed code only enables the feature; native window probes decide when to show. + internal static class EditorBusyProxy + { + internal const bool BusyWindowEnabled = true; + + internal static void Refresh() + { +#if UNITY_EDITOR_WIN + try { NativeUnityTcpBridgeAPI.NTB_SetEditorBusyProxyEnabled?.Invoke(BusyWindowEnabled ? 1 : 0); } + catch { /* Optional UI must not interrupt bridge startup. */ } +#endif + } + } +} diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/EditorBusyProxy.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/EditorBusyProxy.cs.meta new file mode 100644 index 0000000..0b8baf8 --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/EditorBusyProxy.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: ff8b1598a9bb4fbd8067e7245bc1f68d diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeDllLoader.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeDllLoader.cs similarity index 95% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeDllLoader.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeDllLoader.cs index c4aef90..ef3d281 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeDllLoader.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeDllLoader.cs @@ -169,6 +169,13 @@ namespace UnityTcp.Editor.Native static NativeDllLoader() { + if (EditorAutomationGuard.ShouldSkipBridgeAutoStart()) return; + + RegisterCleanupHandlers(); + } + + private static void RegisterCleanupHandlers() + { #if UNITY_2020_1_OR_NEWER UnityEditor.PackageManager.Events.registeringPackages -= OnPackagesRegistering; UnityEditor.PackageManager.Events.registeringPackages += OnPackagesRegistering; @@ -264,6 +271,8 @@ namespace UnityTcp.Editor.Native private static void RegisterLogCallback() { if (!IsLoaded) return; + // Explicit starts need cleanup too, even when bridge auto-start is disabled. + RegisterCleanupHandlers(); try { _logCallback = (level, message) => @@ -351,6 +360,8 @@ namespace UnityTcp.Editor.Native { if (_handle == IntPtr.Zero) return; OnUnload?.Invoke(reason); + // Stop/join native workers even when no managed bridge subscribed to OnUnload. + NativeUnityTcpBridgeHost.StopServer(reason); UnregisterLogCallback(); PlatformFree(_handle); _handle = IntPtr.Zero; @@ -369,6 +380,7 @@ namespace UnityTcp.Editor.Native NativeUnityTcpBridgeAPI.NTB_ResumeManagedCommandProcessing = null; NativeUnityTcpBridgeAPI.NTB_NotifyAll = null; NativeUnityTcpBridgeAPI.NTB_SetStreamPort = null; + NativeUnityTcpBridgeAPI.NTB_SetEditorBusyProxyEnabled = null; SetLogCallback = null; SessionState.EraseString(HandleKey); } @@ -405,7 +417,7 @@ namespace UnityTcp.Editor.Native { if (!CheckAbiVersion()) return false; - return + bool resolved = Resolve("NTB_StartBridge", ref NativeUnityTcpBridgeAPI.NTB_StartBridge) && Resolve("NTB_StopWithReason", ref NativeUnityTcpBridgeAPI.NTB_StopWithReason) && Resolve("NTB_Stop", ref NativeUnityTcpBridgeAPI.NTB_Stop) && @@ -421,6 +433,13 @@ namespace UnityTcp.Editor.Native Resolve("NTB_NotifyAll", ref NativeUnityTcpBridgeAPI.NTB_NotifyAll) && Resolve("NTB_SetStreamPort", ref NativeUnityTcpBridgeAPI.NTB_SetStreamPort) && Resolve("Log_SetCallback", ref SetLogCallback); + if (!resolved) return false; + +#if UNITY_EDITOR_WIN + // The busy-Editor proxy is optional; failure to bind it must not disable commands. + ResolveOptional("NTB_SetEditorBusyProxyEnabled", ref NativeUnityTcpBridgeAPI.NTB_SetEditorBusyProxyEnabled); +#endif + return true; } private static bool CheckAbiVersion() @@ -464,6 +483,14 @@ namespace UnityTcp.Editor.Native return true; } +#if UNITY_EDITOR_WIN + private static void ResolveOptional(string symbol, ref T del) where T : Delegate + { + IntPtr ptr = GetProcAddress(_handle, symbol); + del = ptr == IntPtr.Zero ? null : Marshal.GetDelegateForFunctionPointer(ptr); + } +#endif + private static string PluginPathUnder(string packageRoot) { if (string.IsNullOrEmpty(packageRoot)) return null; diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeDllLoader.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeDllLoader.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeDllLoader.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeDllLoader.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeUnityTcpBridgeAPI.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeUnityTcpBridgeAPI.cs similarity index 95% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeUnityTcpBridgeAPI.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeUnityTcpBridgeAPI.cs index dceab08..6363892 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeUnityTcpBridgeAPI.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeUnityTcpBridgeAPI.cs @@ -61,6 +61,9 @@ namespace UnityTcp.Editor.Native // NTB_StartBridge — safe to call at any time. internal delegate void SetStreamPortDelegate(int streamPort); + // Optional Windows busy-Editor proxy; unavailable UI must not block commands. + internal delegate void SetEditorBusyProxyEnabledDelegate(int enabled); + internal static GetAbiVersionDelegate NTB_GetAbiVersion; internal static StartBridgeDelegate NTB_StartBridge; internal static StopDelegate NTB_Stop; @@ -76,6 +79,7 @@ namespace UnityTcp.Editor.Native internal static ResumeManagedCommandProcessingDelegate NTB_ResumeManagedCommandProcessing; internal static NotifyAllDelegate NTB_NotifyAll; internal static SetStreamPortDelegate NTB_SetStreamPort; + internal static SetEditorBusyProxyEnabledDelegate NTB_SetEditorBusyProxyEnabled; #endif } } diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeUnityTcpBridgeAPI.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeUnityTcpBridgeAPI.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeUnityTcpBridgeAPI.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeUnityTcpBridgeAPI.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeUnityTcpBridgeHost.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeUnityTcpBridgeHost.cs similarity index 99% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeUnityTcpBridgeHost.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeUnityTcpBridgeHost.cs index ef72f6f..868b8bf 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeUnityTcpBridgeHost.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeUnityTcpBridgeHost.cs @@ -52,6 +52,7 @@ namespace UnityTcp.Editor.Native try { #if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX || UNITY_EDITOR_LINUX + EditorBusyProxy.Refresh(); // After a domain reload the managed side restarts but the native server // remains bound to its existing port. Probe first so we attach to the // existing listener instead of relying solely on NTB_StartBridge's idempotency. diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeUnityTcpBridgeHost.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeUnityTcpBridgeHost.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeUnityTcpBridgeHost.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeUnityTcpBridgeHost.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeAPI.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeAPI.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeAPI.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeAPI.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeAPI.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeAPI.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeAPI.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeAPI.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.AddComponent.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.AddComponent.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.AddComponent.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.AddComponent.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.AddComponent.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.AddComponent.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.AddComponent.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.AddComponent.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.AdvancedDropdownPopup.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.AdvancedDropdownPopup.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.AdvancedDropdownPopup.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.AdvancedDropdownPopup.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.AdvancedDropdownPopup.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.AdvancedDropdownPopup.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.AdvancedDropdownPopup.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.AdvancedDropdownPopup.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Composite.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Composite.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Composite.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Composite.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Composite.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Composite.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Composite.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Composite.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Cursor.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Cursor.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Cursor.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Cursor.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Cursor.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Cursor.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Cursor.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Cursor.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.DragAndDrop.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.DragAndDrop.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.DragAndDrop.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.DragAndDrop.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.DragAndDrop.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.DragAndDrop.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.DragAndDrop.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.DragAndDrop.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.IconSelector.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.IconSelector.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.IconSelector.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.IconSelector.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.IconSelector.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.IconSelector.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.IconSelector.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.IconSelector.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Json.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Json.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Json.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Json.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Json.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Json.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Json.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Json.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.NewInputSystem.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.NewInputSystem.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.NewInputSystem.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.NewInputSystem.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.NewInputSystem.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.NewInputSystem.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.NewInputSystem.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.NewInputSystem.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.ObjectSelector.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.ObjectSelector.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.ObjectSelector.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.ObjectSelector.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.ObjectSelector.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.ObjectSelector.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.ObjectSelector.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.ObjectSelector.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.PaneOptions.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.PaneOptions.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.PaneOptions.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.PaneOptions.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.PaneOptions.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.PaneOptions.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.PaneOptions.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.PaneOptions.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Panel.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Panel.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Panel.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Panel.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Panel.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Panel.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.Panel.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.Panel.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.PopupDock.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.PopupDock.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.PopupDock.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.PopupDock.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.PopupDock.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.PopupDock.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.PopupDock.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.PopupDock.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.PopupMenu.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.PopupMenu.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.PopupMenu.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.PopupMenu.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.PopupMenu.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.PopupMenu.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.PopupMenu.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.PopupMenu.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.TabDrag.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.TabDrag.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.TabDrag.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.TabDrag.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.TabDrag.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.TabDrag.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.TabDrag.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.TabDrag.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.cs similarity index 99% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.cs index 39e894f..b00e9cc 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.cs @@ -68,11 +68,9 @@ namespace UnityTcp.Editor.Native [UnityEditor.InitializeOnLoadMethod] private static void OnDomainReload() { - // Register cleanup handler for the NEXT domain reload so we can null the - // native log callback before C# delegates are garbage-collected. Without - // this the old DLL instance's background threads would call a dangling - // function pointer and crash. - AssemblyReloadEvents.beforeAssemblyReload += OnBeforeAssemblyReload; + if (EditorAutomationGuard.ShouldSkipBridgeAutoStart()) return; + + EnsureReloadCleanupRegistered(); // Listen for play mode changes to force-repaint GameView immediately // after exiting play mode, preventing a multi-second frame stall. @@ -233,6 +231,28 @@ namespace UnityTcp.Editor.Native private static void OnBeforeAssemblyReload() { +#if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX + try + { + CleanupBeforeAssemblyReload(); + } + finally + { + // Window cleanup must not prevent releasing the native callback. + // Clear native first; keep the delegate rooted if that call fails. + try + { + NativeWindowBridgeAPI.NWB_SetLogCallback(null); + s_NativeLogCallbackRegistered = false; + s_NativeLogCallback = null; + } + catch (Exception) { } + } +#endif + } + + private static void CleanupBeforeAssemblyReload() + { #if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX // Notify browser that domain reload is imminent SendDataChannelMessage("{\"type\":\"domain_reload\"}"); @@ -296,16 +316,6 @@ namespace UnityTcp.Editor.Native s_OffscreenActive = false; s_OffscreenLoopRegistered = false; - // Null the log callback — this is the ONLY C# delegate the native - // side holds. NWB_SetLogCallback is an atomic store, never blocks. - try - { - NativeWindowBridgeAPI.NWB_SetLogCallback(null); - s_NativeLogCallbackRegistered = false; - s_NativeLogCallback = null; - } - catch (Exception) { } - // NOTE: Do NOT call NWB_StopServer or NWB_StopCapture here. // The native singleton keeps the HTTP server, WebRTC session, // and offscreen mode alive across domain reload. Benefits: @@ -1013,6 +1023,9 @@ namespace UnityTcp.Editor.Native private static void RegisterNativeLogCallback() { #if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX + // Install cleanup before handing any delegate to native, including + // explicit starts where OnDomainReload was skipped by the guard. + EnsureReloadCleanupRegistered(); if (s_NativeLogCallbackRegistered) return; try { @@ -1032,6 +1045,12 @@ namespace UnityTcp.Editor.Native #endif } + private static void EnsureReloadCleanupRegistered() + { + AssemblyReloadEvents.beforeAssemblyReload -= OnBeforeAssemblyReload; + AssemblyReloadEvents.beforeAssemblyReload += OnBeforeAssemblyReload; + } + /// /// Register EditorApplication.update polling for offscreen capture requests. /// diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/NativeWindowBridgeHost.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeHost.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/StreamingMaskWindow.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/StreamingMaskWindow.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/StreamingMaskWindow.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/StreamingMaskWindow.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/StreamingMaskWindow.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/StreamingMaskWindow.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Native/StreamingMaskWindow.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/StreamingMaskWindow.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/AgentInputNotifier.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/AgentInputNotifier.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/AgentInputNotifier.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/AgentInputNotifier.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/AgentInputNotifier.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/AgentInputNotifier.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/AgentInputNotifier.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/AgentInputNotifier.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/ConsoleLogChangedNotifier.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/ConsoleLogChangedNotifier.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/ConsoleLogChangedNotifier.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/ConsoleLogChangedNotifier.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/ConsoleLogChangedNotifier.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/ConsoleLogChangedNotifier.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/ConsoleLogChangedNotifier.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/ConsoleLogChangedNotifier.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/SceneHierarchyNotifier.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/SceneHierarchyNotifier.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/SceneHierarchyNotifier.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/SceneHierarchyNotifier.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/SceneHierarchyNotifier.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/SceneHierarchyNotifier.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/SceneHierarchyNotifier.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/SceneHierarchyNotifier.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/SelectionChangedNotifier.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/SelectionChangedNotifier.cs new file mode 100644 index 0000000..b0500f2 --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/SelectionChangedNotifier.cs @@ -0,0 +1,57 @@ +using System; +using Codely.Newtonsoft.Json.Linq; +using UnityEditor; +using UnityTcp.Editor.Helpers; + +namespace UnityTcp.Editor.Notifier +{ + /// + /// Broadcasts the current Editor selection to notifier clients whenever it + /// changes. The emitted payload mirrors the structure returned by + /// 's get_selection action. + /// + [InitializeOnLoad] + public static class SelectionChangedNotifier + { + private const string EventType = "selection_changed"; + + private static bool _flushScheduled; + + static SelectionChangedNotifier() + { + if (EditorAutomationGuard.ShouldSkipBridgeAutoStart()) return; + + Selection.selectionChanged += OnSelectionChanged; + } + + private static void OnSelectionChanged() => ScheduleFlush(); + + private static void ScheduleFlush() + { + if (_flushScheduled) return; + _flushScheduled = true; + EditorApplication.delayCall += Flush; + } + + private static void Flush() + { + _flushScheduled = false; + try + { + if (!UnityTcpBridge.IsRunning) return; + + JObject payload = BuildSelectionPayload(); + if (payload == null) return; + + UnityTcpBridge.NotifyAll(EventType, payload); + } + catch (Exception e) + { + try { CodelyLogger.LogError($"[SelectionChangedNotifier] flush failed: {e.Message}"); } catch { } + } + } + + private static JObject BuildSelectionPayload() => SelectionPayloadBuilder.Build(); + + } +} diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/SelectionChangedNotifier.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/SelectionChangedNotifier.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/SelectionChangedNotifier.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Notifier/SelectionChangedNotifier.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Serialization.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Serialization.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Serialization.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Serialization.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Serialization/UnityTypeConverters.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Serialization/UnityTypeConverters.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Serialization/UnityTypeConverters.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Serialization/UnityTypeConverters.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Serialization/UnityTypeConverters.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Serialization/UnityTypeConverters.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Serialization/UnityTypeConverters.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Serialization/UnityTypeConverters.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteCSharpScript.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteCSharpScript.cs similarity index 99% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteCSharpScript.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteCSharpScript.cs index f05d81a..13fac55 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteCSharpScript.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteCSharpScript.cs @@ -1694,8 +1694,7 @@ namespace UnityTcp.Editor.Tools // Builds the response returned for a successfully executed one-shot script — whether it // completed synchronously or (via ScheduleTask/ScheduleCoroutine) on a later frame. `stopwatch` // was started when the command came in, so elapsed_ms is the real end-to-end time either way. - // Only the one-shot path reaches this (HandleSessionExecution builds its own response), so - // session_status is always "oneshot" here. + // Only the one-shot path reaches this (HandleSessionExecution builds its own response). static object BuildScriptSuccessResponse(object result, List logs, System.Diagnostics.Stopwatch stopwatch, object recordingResponse = null) { @@ -1703,9 +1702,7 @@ namespace UnityTcp.Editor.Tools var data = new Dictionary { { "result", formatted }, - { "return_type", SafeTypeName(result) }, { "elapsed_ms", stopwatch.ElapsedMilliseconds }, - { "session_status", "oneshot" }, { "logs", logs }, { "log_count", logs.Count }, }; diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteCSharpScript.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteCSharpScript.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteCSharpScript.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteCSharpScript.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteCustomTool.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteCustomTool.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteCustomTool.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteCustomTool.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteCustomTool.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteCustomTool.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteCustomTool.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteCustomTool.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteMenuItem.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteMenuItem.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteMenuItem.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteMenuItem.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteMenuItem.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteMenuItem.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteMenuItem.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteMenuItem.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteScriptCommand.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteScriptCommand.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteScriptCommand.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteScriptCommand.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteScriptCommand.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteScriptCommand.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ExecuteScriptCommand.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ExecuteScriptCommand.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/Jobs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/Jobs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/Jobs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/Jobs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/Jobs/EditorStepJobs.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/Jobs/EditorStepJobs.cs similarity index 98% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/Jobs/EditorStepJobs.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/Jobs/EditorStepJobs.cs index 94d3d40..ff8d524 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/Jobs/EditorStepJobs.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/Jobs/EditorStepJobs.cs @@ -52,9 +52,10 @@ namespace UnityTcp.Editor.Tools.Jobs { ["status"] = "completed", ["pipeline_kind"] = "compile", - // Default pipeline calls include the complete post-compile console, so callers no - // longer need a second unity_console.get. If inclusion was explicitly disabled or - // the internal read failed, retain the compatibility hint for a manual fallback. + // Default pipeline calls include the effective post-compile Console view and + // report whether Collapse is active, so callers no longer need a second + // unity_console.get. If inclusion was explicitly disabled or the internal read + // failed, retain the compatibility hint for a manual fallback. ["requires_console_validation"] = !consoleReadSucceeded, ["console"] = console, // False means compilation never started while we watched. The counts below are then diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/Jobs/EditorStepJobs.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/Jobs/EditorStepJobs.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/Jobs/EditorStepJobs.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/Jobs/EditorStepJobs.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/Jobs/PackageStepJobs.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/Jobs/PackageStepJobs.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/Jobs/PackageStepJobs.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/Jobs/PackageStepJobs.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/Jobs/PackageStepJobs.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/Jobs/PackageStepJobs.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/Jobs/PackageStepJobs.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/Jobs/PackageStepJobs.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageAsset.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageAsset.cs similarity index 89% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageAsset.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageAsset.cs index 23b8e16..5d5d2dd 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageAsset.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageAsset.cs @@ -31,12 +31,8 @@ namespace UnityTcp.Editor.Tools new Dictionary> { { "ensure_prefab_variant", EnsurePrefabVariant }, - { "import", p => ReimportAsset(p["path"]?.ToString(), p["properties"] as JObject) }, { "create", CreateAsset }, { "modify", p => ModifyAsset(p["path"]?.ToString(), p["properties"] as JObject) }, - { "delete", p => DeleteAsset(p["path"]?.ToString()) }, - { "duplicate", p => DuplicateAsset(p["path"]?.ToString(), p["destination"]?.ToString()) }, - { "move", p => MoveOrRenameAsset(p["path"]?.ToString(), p["destination"]?.ToString()) }, { "search", SearchAssets }, { "get_info", p => GetAssetInfo( p["path"]?.ToString(), @@ -97,35 +93,6 @@ namespace UnityTcp.Editor.Tools // --- Action Implementations --- - private static object ReimportAsset(string path, JObject properties) - { - if (string.IsNullOrEmpty(path)) - return Response.Error("'path' is required for reimport."); - if (!TryResolveAssetPath(path, out string fullPath, out var pathError)) - return pathError; - bool ghostDesync; - if (!AssetExists(fullPath, out ghostDesync)) - return BuildAssetNotFoundResponse($"Asset not found at path: {fullPath}", fullPath, ghostDesync); - - try - { - if (properties != null && properties.HasValues) - { - return Response.Error( - "Modifying importer properties is not supported. Call import without properties to force reimport." - ); - } - - AssetDatabase.ImportAsset(fullPath, ImportAssetOptions.ForceUpdate); - // AssetDatabase.Refresh(); // Usually ImportAsset handles refresh - return Response.Success($"Asset '{fullPath}' reimported.", GetAssetData(fullPath)); - } - catch (Exception e) - { - return Response.Error($"Failed to reimport asset '{fullPath}': {e.Message}"); - } - } - private static object CreateAsset(JObject @params) { string path = @params["path"]?.ToString(); @@ -518,146 +485,6 @@ namespace UnityTcp.Editor.Tools } } - private static object DeleteAsset(string path) - { - if (string.IsNullOrEmpty(path)) - return Response.Error("'path' is required for delete."); - if (!TryResolveAssetPath(path, out string fullPath, out var pathError)) - return pathError; - bool ghostDesync; - if (!AssetExists(fullPath, out ghostDesync)) - return BuildAssetNotFoundResponse($"Asset not found at path: {fullPath}", fullPath, ghostDesync); - - try - { - bool success = AssetDatabase.DeleteAsset(fullPath); - if (success) - { - // AssetDatabase.Refresh(); // DeleteAsset usually handles refresh - return Response.Success($"Asset '{fullPath}' deleted successfully."); - } - else - { - // This might happen if the file couldn't be deleted (e.g., locked) - return Response.Error( - $"Failed to delete asset '{fullPath}'. Check logs or if the file is locked." - ); - } - } - catch (Exception e) - { - return Response.Error($"Error deleting asset '{fullPath}': {e.Message}"); - } - } - - private static object DuplicateAsset(string path, string destinationPath) - { - if (string.IsNullOrEmpty(path)) - return Response.Error("'path' is required for duplicate."); - - if (!TryResolveAssetPath(path, out string sourcePath, out var sourceError)) - return sourceError; - bool ghostDesync; - if (!AssetExists(sourcePath, out ghostDesync)) - return BuildAssetNotFoundResponse($"Source asset not found at path: {sourcePath}", sourcePath, ghostDesync); - - string destPath; - if (string.IsNullOrEmpty(destinationPath)) - { - // Generate a unique path if destination is not provided - destPath = AssetDatabase.GenerateUniqueAssetPath(sourcePath); - } - else - { - if (!TryResolveAssetPath(destinationPath, out destPath, out var destError)) - return destError; - if (AssetExists(destPath)) - return Response.Error($"Asset already exists at destination path: {destPath}"); - // Ensure destination directory exists - EnsureDirectoryExists(Path.GetDirectoryName(destPath)); - } - - try - { - bool success = AssetDatabase.CopyAsset(sourcePath, destPath); - if (success) - { - // AssetDatabase.Refresh(); - return Response.Success( - $"Asset '{sourcePath}' duplicated to '{destPath}'.", - GetAssetData(destPath) - ); - } - else - { - return Response.Error( - $"Failed to duplicate asset from '{sourcePath}' to '{destPath}'." - ); - } - } - catch (Exception e) - { - return Response.Error($"Error duplicating asset '{sourcePath}': {e.Message}"); - } - } - - private static object MoveOrRenameAsset(string path, string destinationPath) - { - if (string.IsNullOrEmpty(path)) - return Response.Error("'path' is required for move/rename."); - if (string.IsNullOrEmpty(destinationPath)) - return Response.Error("'destination' path is required for move/rename."); - - if (!TryResolveAssetPath(path, out string sourcePath, out var sourceError)) - return sourceError; - if (!TryResolveAssetPath(destinationPath, out string destPath, out var destError)) - return destError; - - bool ghostDesync; - if (!AssetExists(sourcePath, out ghostDesync)) - return BuildAssetNotFoundResponse($"Source asset not found at path: {sourcePath}", sourcePath, ghostDesync); - if (AssetExists(destPath)) - return Response.Error( - $"An asset already exists at the destination path: {destPath}" - ); - - // Ensure destination directory exists - EnsureDirectoryExists(Path.GetDirectoryName(destPath)); - - try - { - // Validate will return an error string if failed, empty string if successful - string validateError = AssetDatabase.ValidateMoveAsset(sourcePath, destPath); - if (!string.IsNullOrEmpty(validateError)) - { - return Response.Error( - $"Failed to move/rename asset from '{sourcePath}' to '{destPath}': {validateError}" - ); - } - - // MoveAsset returns an empty string on success, or an error message on failure - string moveError = AssetDatabase.MoveAsset(sourcePath, destPath); - if (string.IsNullOrEmpty(moveError)) - { - // AssetDatabase.Refresh(); // MoveAsset usually handles refresh - return Response.Success( - $"Asset moved/renamed from '{sourcePath}' to '{destPath}'.", - GetAssetData(destPath) - ); - } - else - { - return Response.Error( - $"Failed to move/rename asset from '{sourcePath}' to '{destPath}': {moveError}" - ); - } - } - catch (Exception e) - { - return Response.Error($"Error moving/renaming asset '{sourcePath}': {e.Message}"); - } - } - private static object SearchAssets(JObject @params) { string searchPattern = @params["searchPattern"]?.ToString(); @@ -1050,7 +877,7 @@ namespace UnityTcp.Editor.Tools /// /// Recursively ensures an Assets/ folder chain exists via AssetDatabase.CreateFolder. /// - private static void EnsureDirectoryExists(string directoryPath) + internal static void EnsureDirectoryExists(string directoryPath) { if (string.IsNullOrEmpty(directoryPath)) return; diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageAsset.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageAsset.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageAsset.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageAsset.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageBake.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageBake.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageBake.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageBake.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageBake.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageBake.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageBake.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageBake.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageDialog.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageDialog.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageDialog.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageDialog.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageDialog.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageDialog.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageDialog.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageDialog.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageEditor.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageEditor.cs similarity index 94% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageEditor.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageEditor.cs index 4b182a0..6f0ebe5 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageEditor.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageEditor.cs @@ -498,68 +498,11 @@ namespace UnityTcp.Editor.Tools return Response.Error($"Error setting active tool: {e.Message}"); } } - /// - /// Returns the hierarchy path of a GameObject (e.g. "Root/Child/Grandchild"). - /// Kept consistent with SelectionChangedNotifier so the `path` field has identical - /// semantics in get_selection responses and selection_changed notifications. - /// - private static string GetGameObjectPath(UnityEngine.GameObject obj) - { - if (obj == null) return string.Empty; - - var path = obj.name; - var parent = obj.transform != null ? obj.transform.parent : null; - while (parent != null) - { - path = $"{parent.name}/{path}"; - parent = parent.parent; - } - return path; - } private static object GetSelection() { try { - string activeAssetPath = Selection.activeObject != null - ? AssetDatabase.GetAssetPath(Selection.activeObject) - : null; - string activeAsset = string.IsNullOrEmpty(activeAssetPath) - ? null - : Path.GetFullPath(activeAssetPath).Replace('\\', '/'); - - var selectionInfo = new - { - activeObject = Selection.activeObject?.name, - activeAsset = activeAsset, - activeGameObject = Selection.activeGameObject?.name, - activeTransform = Selection.activeTransform?.name, - activeInstanceID = InstanceIdExtensions.ActiveSelectionInstanceId(), -#if UNITY_2020_1_OR_NEWER - count = Selection.count, -#else - count = Selection.objects?.Length ?? 0, -#endif - objects = Selection - .objects.Select(obj => new - { - name = obj?.name, - type = obj?.GetType().FullName, - instanceID = obj?.GetStableInstanceId(), - }) - .ToList(), - gameObjects = Selection - .gameObjects.Select(go => new - { - name = go?.name, - path = GetGameObjectPath(go), - instanceID = go?.GetStableInstanceId(), - }) - .ToList(), - assetGUIDs = Selection.assetGUIDs, // GUIDs for selected assets in Project view - assetPaths = Selection.assetGUIDs?.Select(AssetDatabase.GUIDToAssetPath).ToArray(), - }; - - return Response.Success("Retrieved current selection details.", selectionInfo); + return Response.Success("Retrieved current selection details.", SelectionPayloadBuilder.Build()); } catch (Exception e) { diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageEditor.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageEditor.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageEditor.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageEditor.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageGameObject.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageGameObject.cs similarity index 96% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageGameObject.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageGameObject.cs index 1a556f8..e798563 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageGameObject.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageGameObject.cs @@ -7,7 +7,11 @@ using Codely.Newtonsoft.Json; // Added for JsonSerializationException using Codely.Newtonsoft.Json.Linq; using UnityEditor; using UnityEditor.Compilation; // For CompilationPipeline +#if UNITY_2021_2_OR_NEWER using UnityEditor.SceneManagement; +#else +using UnityEditor.Experimental.SceneManagement; +#endif using UnityEditorInternal; using UnityEngine; using UnityEngine.SceneManagement; @@ -51,8 +55,7 @@ namespace UnityTcp.Editor.Tools @params, ActionHandlers.Keys, out var action, - out var resolveError, - ActionAliases)) + out var resolveError)) { return resolveError; } @@ -154,7 +157,6 @@ namespace UnityTcp.Editor.Tools } else if ( action == "delete" - || action == "add_component" || action == "remove_component" || action == "get_components" ) // Added get_components here too @@ -169,15 +171,9 @@ namespace UnityTcp.Editor.Tools } // --- End Prefab Redirection Check --- - return ActionRouter.Route(@params, ActionHandlers, ActionAliases); + return ActionRouter.Route(@params, ActionHandlers); } - private static readonly Dictionary ActionAliases = - new Dictionary - { - { "set_component_properties", "set_component_property" }, - }; - private static readonly Dictionary> ActionHandlers = new Dictionary> { @@ -193,10 +189,8 @@ namespace UnityTcp.Editor.Tools { "find", p => FindGameObjects(p, p["target"], SearchMethodOf(p)) }, { "list_children", p => ListChildren(p, p["target"], SearchMethodOf(p)) }, { "get_components", GetComponentsAction }, - { "add_component", p => AddComponentToTarget(p, p["target"], SearchMethodOf(p)) }, { "remove_component", p => RemoveComponentFromTarget(p, p["target"], SearchMethodOf(p)) }, { "set_component_property", p => SetComponentPropertyOnTarget(p, p["target"], SearchMethodOf(p)) }, - { "select", p => SelectGameObject(p, p["target"], SearchMethodOf(p)) }, }; private static string SearchMethodOf(JObject p) @@ -558,21 +552,20 @@ namespace UnityTcp.Editor.Tools finalPrefabPath += ".prefab"; } + // Validate the prefab path stays within Assets/ before creating any files. + // ManageAsset.TrySanitizeAssetPath uses Path.GetFullPath to reject ".." escapes. + if (!ManageAsset.TrySanitizeAssetPath(finalPrefabPath, out string sanitizedPrefabPath, out var prefabPathError)) + return prefabPathError; + finalPrefabPath = sanitizedPrefabPath; + try { - // Ensure directory exists using the final saving path - string directoryPath = System.IO.Path.GetDirectoryName(finalPrefabPath); - if ( - !string.IsNullOrEmpty(directoryPath) - && !System.IO.Directory.Exists(directoryPath) - ) - { - System.IO.Directory.CreateDirectory(directoryPath); - AssetDatabase.Refresh(); // Refresh asset database to recognize the new folder - CodelyLogger.Log( - $"[ManageGameObject.Create] Created directory for prefab: {directoryPath}" - ); - } + // Ensure directory exists using AssetDatabase API so Unity registers + // the folder (creates .meta) without needing a manual Refresh(). + string assetDir = System.IO.Path.GetDirectoryName(finalPrefabPath)?.Replace('\\', '/'); + if (!string.IsNullOrEmpty(assetDir)) + ManageAsset.EnsureDirectoryExists(assetDir); + // Use SaveAsPrefabAssetAndConnect with the final saving path finalInstance = PrefabUtility.SaveAsPrefabAssetAndConnect( newGo, @@ -967,63 +960,6 @@ namespace UnityTcp.Editor.Tools } } - /// - /// Selects one or more GameObjects in the Unity Editor. - /// This sets Selection.activeGameObject (for single) or Selection.objects (for multiple). - /// - private static object SelectGameObject(JObject @params, JToken targetToken, string searchMethod) - { - if (targetToken == null) - { - // Clear selection if no target specified - Selection.activeGameObject = null; - Selection.objects = new UnityEngine.Object[0]; - return Response.Success("Selection cleared.", new { selectedCount = 0 }); - } - - bool selectAll = @params?["selectAll"]?.ToObject() ?? false; - List targets = FindObjectsInternal(targetToken, searchMethod, selectAll, @params); - - if (targets.Count == 0) - { - return Response.Error( - $"Target GameObject(s) ('{targetToken}') not found using method '{searchMethod ?? "default"}'." - ); - } - - if (targets.Count == 1) - { - // Single selection - Selection.activeGameObject = targets[0]; - return Response.Success( - $"Selected GameObject '{targets[0].name}'.", - new - { - selectedCount = 1, - selected = new[] - { - new { name = targets[0].name, instanceID = targets[0].GetStableInstanceId() } - } - } - ); - } - else - { - // Multiple selection - Selection.objects = targets.ToArray(); - Selection.activeGameObject = targets[0]; // First one becomes active - var selectedInfo = targets.Select(go => new { name = go.name, instanceID = go.GetStableInstanceId() }).ToList(); - return Response.Success( - $"Selected {targets.Count} GameObjects.", - new - { - selectedCount = targets.Count, - selected = selectedInfo - } - ); - } - } - private static object FindGameObjects( JObject @params, JToken targetToken, @@ -1689,63 +1625,6 @@ namespace UnityTcp.Editor.Tools } } - private static object AddComponentToTarget( - JObject @params, - JToken targetToken, - string searchMethod - ) - { - GameObject targetGo = FindObjectInternal(targetToken, searchMethod); - if (targetGo == null) - { - return Response.Error( - $"Target GameObject ('{targetToken}') not found using method '{searchMethod ?? "default"}'." - ); - } - - string typeName = null; - JObject properties = null; - - // Allow adding component specified directly or via componentsToAdd array (take first) - if (@params["componentName"] != null) - { - typeName = @params["componentName"]?.ToString(); - properties = @params["componentProperties"]?[typeName] as JObject; // Check if props are nested under name - } - else if ( - @params["componentsToAdd"] is JArray componentsToAddArray - && componentsToAddArray.Count > 0 - ) - { - var compToken = componentsToAddArray.First; - if (compToken.Type == JTokenType.String) - typeName = compToken.ToString(); - else if (compToken is JObject compObj) - { - typeName = compObj["typeName"]?.ToString(); - properties = compObj["properties"] as JObject; - } - } - - if (string.IsNullOrEmpty(typeName)) - { - return Response.Error( - "Component type name ('componentName' or first element in 'componentsToAdd') is required." - ); - } - - var addResult = AddComponentInternal(targetGo, typeName, properties); - if (addResult != null) - return addResult; // Return error - - EditorUtility.SetDirty(targetGo); - // Use the new serializer helper - return Response.Success( - $"Component '{typeName}' added to '{targetGo.name}'.", - Helpers.GameObjectSerializer.GetGameObjectData(targetGo) - ); // Return updated GO data - } - private static object RemoveComponentFromTarget( JObject @params, JToken targetToken, @@ -2009,15 +1888,12 @@ namespace UnityTcp.Editor.Tools } break; case "by_path": - // Path is relative to scene root or rootSearchObject - Transform foundTransform = rootSearchObject - ? rootSearchObject.transform.Find(searchTerm) - : GameObject.Find(searchTerm)?.transform; - if ( - foundTransform != null - && (searchInactive || foundTransform.gameObject.activeInHierarchy) - ) - results.Add(foundTransform.gameObject); + GameObject foundByPath = FindByHierarchyPath( + searchTerm, + rootSearchObject, + searchInactive); + if (foundByPath != null) + results.Add(foundByPath); break; case "by_tag": var searchPoolTag = rootSearchObject @@ -2149,8 +2025,8 @@ namespace UnityTcp.Editor.Tools break; } } - GameObject objByPath = GameObject.Find(searchTerm); - if (objByPath != null && (searchInactive || objByPath.activeInHierarchy)) + GameObject objByPath = FindByHierarchyPath(searchTerm, null, searchInactive); + if (objByPath != null) { results.Add(objByPath); break; @@ -2185,20 +2061,132 @@ namespace UnityTcp.Editor.Tools return results.Distinct().ToList(); // Ensure uniqueness } - // Helper to get all scene objects efficiently + // Helper to get all scene objects, including Prefab Stage preview objects. private static IEnumerable GetAllSceneObjects(bool includeInactive) { - // SceneManager.GetActiveScene().GetRootGameObjects() is faster than FindObjectsOfType() - var rootObjects = SceneManager.GetActiveScene().GetRootGameObjects(); var allObjects = new List(); + CollectSceneObjects(SceneManager.GetActiveScene(), includeInactive, allObjects); + var stage = PrefabStageUtility.GetCurrentPrefabStage(); + if (stage != null && stage.scene.IsValid() + && stage.scene != SceneManager.GetActiveScene()) + { + CollectSceneObjects(stage.scene, includeInactive, allObjects); + } + return allObjects; + } + + private static void CollectSceneObjects( + Scene scene, + bool includeInactive, + List allObjects) + { + if (!scene.IsValid()) return; + var rootObjects = scene.GetRootGameObjects(); foreach (var root in rootObjects) { + if (root == null) continue; allObjects.AddRange( root.GetComponentsInChildren(includeInactive) .Select(t => t.gameObject) ); } - return allObjects; + } + + private static IEnumerable GetSearchRoots() + { + var roots = new List(); + if (SceneManager.GetActiveScene().IsValid()) + roots.AddRange(SceneManager.GetActiveScene().GetRootGameObjects()); + var stage = PrefabStageUtility.GetCurrentPrefabStage(); + if (stage != null && stage.scene.IsValid() + && stage.scene != SceneManager.GetActiveScene()) + { + roots.AddRange(stage.scene.GetRootGameObjects()); + } + return roots.Where(go => go != null); + } + + /// + /// Resolves a hierarchy path that may contain same-name ordinals + /// (e.g. Root/Cube[1]/Child). Does not use GameObject.Find, so inactive + /// objects and Prefab Stage contents are included. + /// + private static GameObject FindByHierarchyPath( + string path, + GameObject rootSearchObject, + bool searchInactive) + { + if (string.IsNullOrEmpty(path)) return null; + var segments = path.Replace('\\', '/').Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); + if (segments.Length == 0) return null; + + IEnumerable start; + if (rootSearchObject != null) + { + start = new[] { rootSearchObject.transform }; + } + else + { + start = GetSearchRoots().Select(go => go.transform); + } + + IEnumerable current = start; + for (int s = 0; s < segments.Length; s++) + { + string segment = segments[s]; + string name; + int ordinal; + if (!InstanceIdExtensions.TryParseHierarchySegment(segment, out name, out ordinal)) + return null; + + bool firstSegmentFromRoots = s == 0 && rootSearchObject == null; + var matches = new List(); + if (firstSegmentFromRoots) + { + foreach (var root in current) + { + if (root != null && root.name == name) + matches.Add(root); + } + } + else + { + foreach (var parent in current) + { + if (parent == null) continue; + for (int i = 0; i < parent.childCount; i++) + { + var child = parent.GetChild(i); + if (child.name == name) + matches.Add(child); + } + } + } + + Transform picked = null; + if (ordinal >= 0) + { + if (ordinal < matches.Count) + picked = matches[ordinal]; + } + else if (matches.Count == 1) + { + picked = matches[0]; + } + else if (matches.Count > 1) + { + // No suffix: generated paths only omit [N] when the name is unique. + // Fall back to the first match for older paths. + picked = matches[0]; + } + + if (picked == null) return null; + if (!searchInactive && !picked.gameObject.activeInHierarchy) return null; + current = new[] { picked }; + } + + var found = current.FirstOrDefault(); + return found != null ? found.gameObject : null; } /// @@ -3620,6 +3608,9 @@ namespace UnityTcp.Editor.Tools spriteRenderer.sprite = sprite; EditorUtility.SetDirty(prefab); + // SavePrefabAsset persists in-place prefab changes atomically, + // matching the pattern used in ManageAsset.ModifyAsset (L456-458). + PrefabUtility.SavePrefabAsset(prefab); AssetDatabase.SaveAssets(); return new @@ -3672,7 +3663,6 @@ namespace UnityTcp.Editor.Tools "create", "modify", "delete", - "add_component", "remove_component", "set_component_property", }; @@ -3684,7 +3674,6 @@ namespace UnityTcp.Editor.Tools string opId = op["id"]?.ToString() ?? "unknown"; var opAction = op["action"]?.ToString()?.ToLower(); if (string.IsNullOrEmpty(opAction)) continue; - if (opAction == "set_component_properties") opAction = "set_component_property"; if (!writeOps.Contains(opAction)) { return Response.Error( @@ -3704,7 +3693,6 @@ namespace UnityTcp.Editor.Tools string opId = op["id"]?.ToString() ?? "unknown"; string opAction = op["action"]?.ToString()?.ToLower(); if (string.IsNullOrEmpty(opAction)) continue; - if (opAction == "set_component_properties") opAction = "set_component_property"; // Only validate deterministic targeting for write ops that can take target/parent. if (!writeOps.Contains(opAction)) continue; @@ -3959,7 +3947,6 @@ namespace UnityTcp.Editor.Tools "create", "modify", "delete", - "add_component", "remove_component", "set_component_property", }; @@ -4007,8 +3994,6 @@ namespace UnityTcp.Editor.Tools continue; } - if (opAction == "set_component_properties") opAction = "set_component_property"; - if (opAction == "batch" || opAction == "create_batch" || opAction == "edit_batch") { return Response.Error($"Op '{opId}' invalid: nested batch is not allowed"); diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageGameObject.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageGameObject.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageGameObject.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageGameObject.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageGameView.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageGameView.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageGameView.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageGameView.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageGameView.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageGameView.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageGameView.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageGameView.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageInput.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageInput.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageInput.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageInput.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageInput.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageInput.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageInput.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageInput.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageJob.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageJob.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageJob.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageJob.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageJob.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageJob.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageJob.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageJob.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManagePackage.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManagePackage.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManagePackage.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManagePackage.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManagePackage.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManagePackage.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManagePackage.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManagePackage.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageScene.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageScene.cs similarity index 75% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageScene.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageScene.cs index 3316f78..a667fb2 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageScene.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageScene.cs @@ -125,6 +125,18 @@ namespace UnityTcp.Editor.Tools relativeDir = "Scenes"; // Default relative directory } + // Guard against path traversal (e.g. "Assets/../../../etc") by reusing + // ManageAsset.TrySanitizeAssetPath which calls Path.GetFullPath and verifies + // the canonical path stays under Application.dataPath. + if (!string.IsNullOrEmpty(relativeDir)) + { + if (!ManageAsset.TrySanitizeAssetPath( + "Assets/" + relativeDir.TrimStart('/'), + out _, + out string dirErr)) + return Response.Error(dirErr); + } + if (!ActionRouter.TryResolve( new JObject { ["action"] = action }, ValidActions, @@ -151,17 +163,18 @@ namespace UnityTcp.Editor.Tools ? null : Path.Combine("Assets", relativeDir, sceneFileName).Replace('\\', '/'); - // Ensure directory exists for 'create' - if (action == "create" && !string.IsNullOrEmpty(fullPathDir)) + // Ensure directory exists for 'create' using AssetDatabase API so the + // folder gets a .meta file and Unity registers it immediately. + if (action == "create" && !string.IsNullOrEmpty(relativeDir)) { try { - Directory.CreateDirectory(fullPathDir); + ManageAsset.EnsureDirectoryExists("Assets/" + relativeDir.TrimStart('/')); } catch (Exception e) { return Response.Error( - $"Could not create directory '{fullPathDir}': {e.Message}" + $"Could not create directory 'Assets/{relativeDir}': {e.Message}" ); } } @@ -174,32 +187,16 @@ namespace UnityTcp.Editor.Tools private static readonly string[] ValidActions = { - "ensure_scene_open", - "ensure_scene_saved", "create", "load", "save", "get_hierarchy", - "get_active", - "get_build_settings", }; private static Dictionary> BuildActionHandlers( string path, string name, string relativePath, string fullPath, int? buildIndex) => new Dictionary> { - { "ensure_scene_open", _ => - { - if (string.IsNullOrEmpty(path)) - return Response.Error("'path' parameter is required for 'ensure_scene_open' action."); - string ensureScenePath = path.Replace('\\', '/'); - if (!ensureScenePath.StartsWith("Assets/", StringComparison.OrdinalIgnoreCase)) - ensureScenePath = "Assets/" + ensureScenePath.TrimStart('/'); - if (!HasAllowedSceneExtension(ensureScenePath)) - return Response.Error("'path' must end with '.unity' or '.scene' for scene files."); - return EnsureSceneOpen(ensureScenePath); - } }, - { "ensure_scene_saved", _ => EnsureSceneSaved() }, { "create", _ => { if (string.IsNullOrEmpty(name) || string.IsNullOrEmpty(relativePath)) @@ -226,14 +223,6 @@ namespace UnityTcp.Editor.Tools try { CodelyLogger.Verbose("[ManageScene] get_hierarchy: exiting"); } catch { } return gh; } }, - { "get_active", _ => - { - try { CodelyLogger.Verbose("[ManageScene] get_active: entering"); } catch { } - var ga = GetActiveSceneInfo(); - try { CodelyLogger.Verbose("[ManageScene] get_active: exiting"); } catch { } - return ga; - } }, - { "get_build_settings", _ => GetBuildSettingsScenes() }, }; private static object CreateScene(string fullPath, string relativePath) @@ -291,8 +280,21 @@ namespace UnityTcp.Editor.Tools return Response.Error($"Scene file not found at '{relativePath}'."); } + Scene activeScene = EditorSceneManager.GetActiveScene(); + if (activeScene.path.Equals(relativePath, StringComparison.OrdinalIgnoreCase)) + { + return Response.Success( + "Scene already active.", + new + { + path = relativePath, + name = Path.GetFileNameWithoutExtension(relativePath), + } + ); + } + // Check for unsaved changes in the current scene - if (EditorSceneManager.GetActiveScene().isDirty) + if (activeScene.isDirty) { // Optionally prompt the user or save automatically before loading return Response.Error( @@ -329,8 +331,23 @@ namespace UnityTcp.Editor.Tools ); } + string scenePath = SceneUtility.GetScenePathByBuildIndex(buildIndex); + Scene activeScene = EditorSceneManager.GetActiveScene(); + if (activeScene.path.Equals(scenePath, StringComparison.OrdinalIgnoreCase)) + { + return Response.Success( + $"Scene at build index {buildIndex} is already active.", + new + { + path = scenePath, + name = Path.GetFileNameWithoutExtension(scenePath), + buildIndex = buildIndex, + } + ); + } + // Check for unsaved changes - if (EditorSceneManager.GetActiveScene().isDirty) + if (activeScene.isDirty) { return Response.Error( "Current scene has unsaved changes. Please save or discard changes before loading a new scene." @@ -339,7 +356,6 @@ namespace UnityTcp.Editor.Tools try { - string scenePath = SceneUtility.GetScenePathByBuildIndex(buildIndex); EditorSceneManager.OpenScene(scenePath, OpenSceneMode.Single); return Response.Success( $"Scene at build index {buildIndex} ('{scenePath}') loaded successfully.", @@ -375,10 +391,10 @@ namespace UnityTcp.Editor.Tools if (!string.IsNullOrEmpty(relativePath) && currentScene.path != relativePath) { // Save As... - // Ensure directory exists - string dir = Path.GetDirectoryName(fullPath); - if (!Directory.Exists(dir)) - Directory.CreateDirectory(dir); + // Ensure directory exists using AssetDatabase API (gets .meta, no traversal risk). + string assetDir = Path.GetDirectoryName(relativePath)?.Replace('\\', '/'); + if (!string.IsNullOrEmpty(assetDir)) + ManageAsset.EnsureDirectoryExists(assetDir); saved = EditorSceneManager.SaveScene(currentScene, relativePath); finalPath = relativePath; @@ -393,6 +409,13 @@ namespace UnityTcp.Editor.Tools "Cannot save an untitled scene without providing a 'name' and 'path'. Use Save As functionality." ); } + if (!currentScene.isDirty) + { + return Response.Success( + $"Scene '{currentScene.name}' already saved.", + new { path = currentScene.path, name = currentScene.name } + ); + } saved = EditorSceneManager.SaveScene(currentScene); } @@ -415,63 +438,6 @@ namespace UnityTcp.Editor.Tools } } - private static object GetActiveSceneInfo() - { - try - { - try { CodelyLogger.Verbose("[ManageScene] get_active: querying EditorSceneManager.GetActiveScene"); } catch { } - Scene activeScene = EditorSceneManager.GetActiveScene(); - try { CodelyLogger.Verbose($"[ManageScene] get_active: got scene valid={activeScene.IsValid()} loaded={activeScene.isLoaded} name='{activeScene.name}'"); } catch { } - if (!activeScene.IsValid()) - { - return Response.Error("No active scene found."); - } - - var sceneInfo = new - { - name = activeScene.name, - path = activeScene.path, - buildIndex = activeScene.buildIndex, // -1 if not in build settings - isDirty = activeScene.isDirty, - isLoaded = activeScene.isLoaded, - rootCount = activeScene.rootCount, - }; - - return Response.Success("Retrieved active scene information.", sceneInfo); - } - catch (Exception e) - { - try { CodelyLogger.LogError($"[ManageScene] get_active: exception {e.Message}"); } catch { } - return Response.Error($"Error getting active scene info: {e.Message}"); - } - } - - private static object GetBuildSettingsScenes() - { - try - { - var scenes = new List(); - for (int i = 0; i < EditorBuildSettings.scenes.Length; i++) - { - var scene = EditorBuildSettings.scenes[i]; - scenes.Add( - new - { - path = scene.path, - guid = scene.guid.ToString(), - enabled = scene.enabled, - buildIndex = i, // Actual build index considering only enabled scenes might differ - } - ); - } - return Response.Success("Retrieved scenes from Build Settings.", scenes); - } - catch (Exception e) - { - return Response.Error($"Error getting scenes from Build Settings: {e.Message}"); - } - } - private static object GetSceneHierarchy() { try @@ -551,98 +517,6 @@ namespace UnityTcp.Editor.Tools } } - // --- Ensure Methods (Idempotent Operations) --- - - /// - /// Ensures a scene is open. Idempotent. - /// - private static object EnsureSceneOpen(string scenePath) - { - try - { - var writeCheck = WriteGuard.CheckWriteAllowed($"ensure_scene_open({scenePath})"); - if (writeCheck != null) return writeCheck; - - if (!File.Exists(scenePath)) - return Response.Error($"Scene file not found: {scenePath}"); - - Scene activeScene = SceneManager.GetActiveScene(); - if (activeScene.path.Equals(scenePath, StringComparison.OrdinalIgnoreCase)) - { - return new - { - success = true, - message = $"Scene is already active.", - data = new { scenePath = activeScene.path, dirty = activeScene.isDirty } - }; - } - - Scene loadedScene = EditorSceneManager.OpenScene(scenePath, OpenSceneMode.Single); - if (!loadedScene.IsValid()) - return Response.Error($"Failed to open scene: {scenePath}"); - - return new - { - success = true, - message = $"Scene opened.", - data = new { scenePath = loadedScene.path, dirty = loadedScene.isDirty } - }; - } - catch (Exception e) - { - return Response.Error($"Failed to ensure scene open: {e.Message}"); - } - } - - /// - /// Ensures the active scene is saved. Idempotent. - /// - private static object EnsureSceneSaved() - { - try - { - Scene activeScene = SceneManager.GetActiveScene(); - if (!activeScene.IsValid()) - return Response.Error("No active scene."); - - if (!activeScene.isDirty) - { - return new - { - success = true, - message = "Scene already saved.", - data = new { scenePath = activeScene.path, dirty = false } - }; - } - - // An untitled scene has no path; SaveScene would open a native - // "Save Scene" file dialog that blocks the editor thread and hangs - // automated/yolo mode. Fail fast instead of triggering the dialog. - if (string.IsNullOrEmpty(activeScene.path)) - return Response.Error( - "Cannot ensure-save an untitled scene (no path). Use the 'save' action with a 'name' and 'path' first." - ); - - var writeCheck = WriteGuard.CheckWriteAllowed($"ensure_scene_saved"); - if (writeCheck != null) return writeCheck; - - bool saved = EditorSceneManager.SaveScene(activeScene); - if (!saved) - return Response.Error($"Failed to save scene."); - - return new - { - success = true, - message = "Scene saved.", - data = new { scenePath = activeScene.path, dirty = false } - }; - } - catch (Exception e) - { - return Response.Error($"Failed to ensure scene saved: {e.Message}"); - } - } - /// /// Counts total GameObjects in a hierarchy. Uses an iterative traversal to avoid stack overflows on deep hierarchies. /// diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageScene.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageScene.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageScene.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageScene.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageScreenshot.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageScreenshot.cs similarity index 99% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageScreenshot.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageScreenshot.cs index b5afd28..4c3d4e4 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageScreenshot.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageScreenshot.cs @@ -59,7 +59,7 @@ namespace UnityTcp.Editor.Tools /// startDelay (float, 0-5) – Seconds to wait before capture starts /// (default 0). /// start_game_view_recording: - /// durationSeconds (float, 1-15) – Recording duration in real-time seconds (default 4). + /// durationSeconds (float, 1-8) – Recording duration in real-time seconds (default 5). /// fps (int, 5-30) – Capture frame rate: how many frames per second are /// grabbed from the Game View (default 15). Higher values /// capture more visual detail. @@ -372,6 +372,14 @@ namespace UnityTcp.Editor.Tools p, Mp4RecordingOwner.Split, out handle, out error); } + internal static float ResolveMp4DurationSeconds(JObject p) + { + return Mathf.Clamp( + AsFloat(p?["durationSeconds"] ?? p?["duration_seconds"]) ?? 5f, + 1f, + 8f); + } + private static bool TryBeginOwnedGameViewMp4Recording( JObject p, Mp4RecordingOwner owner, out Mp4RecordingHandle handle, out object error) { @@ -399,8 +407,7 @@ namespace UnityTcp.Editor.Tools return false; } - float duration = Mathf.Clamp( - AsFloat(p?["durationSeconds"] ?? p?["duration_seconds"]) ?? 4f, 1f, 15f); + float duration = ResolveMp4DurationSeconds(p); int fps = Mathf.Clamp(AsInt(p?["fps"]) ?? 15, 5, 30); int encodeFps = Mathf.Clamp(AsInt(p?["encodeFps"] ?? p?["encode_fps"]) ?? fps, 1, 30); float startDelay = Mathf.Clamp( @@ -1959,6 +1966,8 @@ namespace UnityTcp.Editor.Tools [InitializeOnLoadMethod] private static void ScheduleStaleCaptureWindowCleanup() { + if (EditorAutomationGuard.ShouldSkipBridgeAutoStart()) return; + AssemblyReloadEvents.beforeAssemblyReload -= CleanupRecordingBeforeDomainExit; AssemblyReloadEvents.beforeAssemblyReload += CleanupRecordingBeforeDomainExit; EditorApplication.quitting -= CleanupRecordingBeforeDomainExit; diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageScreenshot.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageScreenshot.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageScreenshot.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageScreenshot.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageShader.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageShader.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageShader.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageShader.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageShader.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageShader.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageShader.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageShader.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageWindowBridge.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageWindowBridge.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageWindowBridge.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageWindowBridge.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageWindowBridge.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageWindowBridge.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ManageWindowBridge.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ManageWindowBridge.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/PlatformMp4Encoder.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/PlatformMp4Encoder.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/PlatformMp4Encoder.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/PlatformMp4Encoder.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/PlatformMp4Encoder.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/PlatformMp4Encoder.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/PlatformMp4Encoder.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/PlatformMp4Encoder.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL/Repl.ApiHelper.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL/Repl.ApiHelper.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL/Repl.ApiHelper.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL/Repl.ApiHelper.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL/Repl.ApiHelper.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL/Repl.ApiHelper.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL/Repl.ApiHelper.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL/Repl.ApiHelper.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL/Repl.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL/Repl.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL/Repl.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL/Repl.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL/Repl.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL/Repl.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL/Repl.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL/Repl.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL/ReplGuard.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL/ReplGuard.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL/ReplGuard.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL/ReplGuard.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL/ReplGuard.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL/ReplGuard.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/REPL/ReplGuard.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/REPL/ReplGuard.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ReadConsole.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ReadConsole.cs similarity index 78% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ReadConsole.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ReadConsole.cs index 04a9656..72db070 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ReadConsole.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ReadConsole.cs @@ -26,6 +26,7 @@ namespace UnityTcp.Editor.Tools private static MethodInfo _endGettingEntriesMethod; // Renamed from _stopGettingEntriesMethod, trying End... private static MethodInfo _clearMethod; private static MethodInfo _getCountMethod; + private static MethodInfo _getEntryCountMethod; private static MethodInfo _getEntryMethod; private static PropertyInfo _consoleFlagsProperty; private static MethodInfo _setConsoleFlagMethod; @@ -86,6 +87,14 @@ namespace UnityTcp.Editor.Tools if (_getCountMethod == null) throw new Exception("Failed to reflect LogEntries.GetCount"); + _getEntryCountMethod = logEntriesType.GetMethod( + "GetEntryCount", + staticFlags, + null, + new[] { typeof(int) }, + null + ); + _getEntryMethod = logEntriesType.GetMethod("GetEntryInternal", staticFlags); if (_getEntryMethod == null) throw new Exception("Failed to reflect LogEntries.GetEntryInternal"); @@ -155,6 +164,7 @@ namespace UnityTcp.Editor.Tools _getCountMethod = _getEntryMethod = null; + _getEntryCountMethod = null; _consoleFlagsProperty = null; _setConsoleFlagMethod = null; _setFilteringTextMethod = null; @@ -184,9 +194,13 @@ namespace UnityTcp.Editor.Tools CodelyLogger.LogError( "[ReadConsole] HandleCommand called but reflection members are not initialized. Static constructor might have failed silently or there's an issue." ); - return Response.Error( + string requestedAction = (@params?["action"]?.ToString() ?? "get").ToLowerInvariant(); + object initializationError = Response.Error( "ReadConsole handler failed to initialize due to reflection errors. Cannot access console logs." ); + return requestedAction == "get" || requestedAction == "set_collapse" + ? AddCollapseStatus(initializationError, ReadCollapseState()) + : initializationError; } return ActionRouter.Route(@params, ActionHandlers, defaultAction: "get"); @@ -197,6 +211,7 @@ namespace UnityTcp.Editor.Tools { { "clear", ClearAction }, { "get", GetAction }, + { "set_collapse", SetCollapseAction }, }; private static object ClearAction(JObject @params) @@ -207,36 +222,90 @@ namespace UnityTcp.Editor.Tools private static object GetAction(JObject @params) { - var types = - (@params["types"] as JArray)?.Select(t => t.ToString().ToLower()).ToList() - ?? new List { "error", "warning", "log" }; - int? count = @params["count"]?.ToObject(); - string filterText = @params["filterText"]?.ToString(); - string sinceTimestampStr = @params["sinceTimestamp"]?.ToString(); - string format = (@params["format"]?.ToString() ?? "detailed").ToLower(); - bool includeStacktrace = - @params["includeStacktrace"]?.ToObject() ?? true; - - if (types.Contains("all")) + try { - types = new List { "error", "warning", "log" }; + var types = + (@params["types"] as JArray)?.Select(t => t.ToString().ToLower()).ToList() + ?? new List { "error", "warning", "log" }; + int? count = @params["count"]?.ToObject(); + string filterText = @params["filterText"]?.ToString(); + string sinceTimestampStr = @params["sinceTimestamp"]?.ToString(); + string format = (@params["format"]?.ToString() ?? "detailed").ToLower(); + bool includeStacktrace = + @params["includeStacktrace"]?.ToObject() ?? true; + + if (types.Contains("all")) + { + types = new List { "error", "warning", "log" }; + } + + if (!string.IsNullOrEmpty(sinceTimestampStr)) + { + CodelyLogger.LogWarning( + "[ReadConsole] Filtering by 'since_timestamp' is not currently implemented." + ); + } + + bool? effectiveCollapse = ReadCollapseState(); + if (!effectiveCollapse.HasValue) + { + return AddCollapseStatus( + Response.Error( + "Console collapse state is unavailable because UnityEditor.LogEntries.consoleFlags could not be reflected." + ), + null + ); + } + + object response = GetConsoleEntries( + types, + count, + filterText, + format, + includeStacktrace, + effectiveCollapse.Value + ); + return AddCollapseStatus(response, effectiveCollapse.Value); } - - if (!string.IsNullOrEmpty(sinceTimestampStr)) + catch (Exception e) { - CodelyLogger.LogWarning( - "[ReadConsole] Filtering by 'since_timestamp' is not currently implemented." + return AddCollapseStatus(Response.Error(e.Message), ReadCollapseState()); + } + } + + private static object SetCollapseAction(JObject @params) + { + bool? current = ReadCollapseState(); + JToken token = @params["collapse"]; + if (token == null || token.Type != JTokenType.Boolean) + { + return AddCollapseStatus( + Response.Error("collapse must be true or false for set_collapse action"), + current ); } - return GetConsoleEntries(types, count, filterText, format, includeStacktrace); + try + { + bool effective = SetCollapseState(token.ToObject()); + return AddCollapseStatus( + Response.Success(effective ? "Console collapse enabled." : "Console collapse disabled."), + effective + ); + } + catch (Exception e) + { + return AddCollapseStatus(Response.Error(e.Message), ReadCollapseState()); + } } /// - /// Reads the complete post-compile console for start_compilation_pipeline and - /// normalizes the public command response into a stable nested payload. Keeping this - /// adapter here ensures the standalone console tool and the compilation pipeline use the - /// exact same filtering, formatting, truncation and full-log-file behavior. + /// Reads the effective post-compile Console view for + /// start_compilation_pipeline. The result intentionally respects the + /// persistent Unity Console Collapse state: collapsed entries represent groups + /// and include occurrence counts. Keeping this adapter here ensures the + /// standalone Console tool and compilation pipeline use the same filtering, + /// formatting, truncation, Collapse, and full-log-file behavior. /// internal static JObject ReadForCompilationPipeline() { @@ -278,6 +347,7 @@ namespace UnityTcp.Editor.Tools CopyIfPresent(response, result, "totalCount"); CopyIfPresent(response, result, "returnedCount"); CopyIfPresent(response, result, "fullLogFile"); + CopyIfPresent(response, result, "collapse"); if (!readSuccess) { @@ -374,10 +444,19 @@ namespace UnityTcp.Editor.Tools int? count, string filterText, string format, - bool includeStacktrace + bool includeStacktrace, + bool effectiveCollapse ) { - return GetConsoleEntriesFromIndex(0, types, count, filterText, format, includeStacktrace); + return GetConsoleEntriesFromIndex( + 0, + types, + count, + filterText, + format, + includeStacktrace, + effectiveCollapse + ); } /// @@ -389,9 +468,17 @@ namespace UnityTcp.Editor.Tools int? count, string filterText, string format, - bool includeStacktrace + bool includeStacktrace, + bool effectiveCollapse ) { + if (effectiveCollapse && _getEntryCountMethod == null) + { + return Response.Error( + "Console collapse counts are unavailable because UnityEditor.LogEntries.GetEntryCount could not be reflected." + ); + } + List formattedEntries = new List(); SafeEndGettingEntries(); @@ -457,24 +544,39 @@ namespace UnityTcp.Editor.Tools // line before the stack start, not only the first line. SplitMessageAndStack(message, out string messageOnly, out string embeddedStack); string stackTrace = includeStacktrace ? embeddedStack : null; + int occurrenceCount = effectiveCollapse + ? (int)_getEntryCountMethod.Invoke(null, new object[] { i }) + : 1; object formattedEntry; switch (format) { case "plain": - formattedEntry = messageOnly; + formattedEntry = effectiveCollapse + ? $"[x{occurrenceCount}] {messageOnly}" + : messageOnly; break; case "json": case "detailed": default: - formattedEntry = new - { - type = unityType.ToString(), - message = messageOnly, - file = file, - line = line, - stackTrace = stackTrace, - }; + formattedEntry = effectiveCollapse + ? (object)new + { + type = unityType.ToString(), + message = messageOnly, + file = file, + line = line, + stackTrace = stackTrace, + count = occurrenceCount, + } + : new + { + type = unityType.ToString(), + message = messageOnly, + file = file, + line = line, + stackTrace = stackTrace, + }; break; } @@ -507,7 +609,9 @@ namespace UnityTcp.Editor.Tools return new { success = true, - message = $"Console has {totalCount} entries, showing first {returnLimit}. Full log saved to temp file.", + message = effectiveCollapse + ? $"Console has {totalCount} collapsed log groups, showing first {returnLimit}. Full log saved to temp file." + : $"Console has {totalCount} entries, showing first {returnLimit}. Full log saved to temp file.", data = truncatedEntries, truncated = true, totalCount = totalCount, @@ -518,10 +622,10 @@ namespace UnityTcp.Editor.Tools } var finalEntries = count.HasValue ? formattedEntries.Take(count.Value).ToList() : formattedEntries; - return Response.Success( - $"Retrieved {finalEntries.Count} log entries.", - finalEntries - ); + string successMessage = effectiveCollapse + ? $"Retrieved collapsed log groups: {finalEntries.Count}." + : $"Retrieved {finalEntries.Count} log entries."; + return Response.Success(successMessage, finalEntries); } private sealed class ConsoleUiBypassRestore : IDisposable @@ -557,26 +661,70 @@ namespace UnityTcp.Editor.Tools private static int ReadConsoleFlags() { if (_consoleFlagsProperty == null) return 0; - try { return (int)_consoleFlagsProperty.GetValue(null, null); } - catch { return 0; } + return (int)_consoleFlagsProperty.GetValue(null, null); + } + + private static bool? ReadCollapseState() + { + if (_consoleFlagsProperty == null) return null; + try + { + return (ReadConsoleFlags() & ConsoleFlagCollapse) != 0; + } + catch + { + return null; + } + } + + private static bool SetCollapseState(bool collapse) + { + if (_setConsoleFlagMethod == null || _consoleFlagsProperty == null) + throw new InvalidOperationException( + "Console collapse is unavailable because the required UnityEditor.LogEntries APIs could not be reflected." + ); + + SafeEndGettingEntries(); + _setConsoleFlagMethod.Invoke(null, new object[] { ConsoleFlagCollapse, collapse }); + bool? effective = ReadCollapseState(); + if (!effective.HasValue) + throw new InvalidOperationException("Failed to read Console collapse state after setting it."); + return effective.Value; + } + + private static JObject AddCollapseStatus(object response, bool? collapse) + { + JObject result = response as JObject ?? JObject.FromObject(response); + result["collapse"] = collapse.HasValue + ? JToken.FromObject(collapse.Value) + : JValue.CreateNull(); + return result; } private static ConsoleUiBypassRestore BeginConsoleUiBypass() { int savedFlags = ReadConsoleFlags(); string savedFilter = _getFilteringTextMethod?.Invoke(null, null) as string; + var restore = new ConsoleUiBypassRestore(savedFlags, savedFilter); if (_setConsoleFlagMethod == null) - return new ConsoleUiBypassRestore(savedFlags, savedFilter); + return restore; - SafeEndGettingEntries(); - _setConsoleFlagMethod.Invoke(null, new object[] { ConsoleFlagCollapse, false }); - _setConsoleFlagMethod.Invoke(null, new object[] { ConsoleFlagLogLevelLog, true }); - _setConsoleFlagMethod.Invoke(null, new object[] { ConsoleFlagLogLevelWarning, true }); - _setConsoleFlagMethod.Invoke(null, new object[] { ConsoleFlagLogLevelError, true }); - if (_setFilteringTextMethod != null) - _setFilteringTextMethod.Invoke(null, new object[] { string.Empty }); + try + { + SafeEndGettingEntries(); + _setConsoleFlagMethod.Invoke(null, new object[] { ConsoleFlagLogLevelLog, true }); + _setConsoleFlagMethod.Invoke(null, new object[] { ConsoleFlagLogLevelWarning, true }); + _setConsoleFlagMethod.Invoke(null, new object[] { ConsoleFlagLogLevelError, true }); + if (_setFilteringTextMethod != null) + _setFilteringTextMethod.Invoke(null, new object[] { string.Empty }); - return new ConsoleUiBypassRestore(savedFlags, savedFilter); + return restore; + } + catch + { + restore.Dispose(); + throw; + } } private static void SafeEndGettingEntries() diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ReadConsole.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ReadConsole.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ReadConsole.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ReadConsole.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixAmbiguousReference.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixAmbiguousReference.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixAmbiguousReference.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixAmbiguousReference.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixAmbiguousReference.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixAmbiguousReference.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixAmbiguousReference.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixAmbiguousReference.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingAssemblyReference.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingAssemblyReference.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingAssemblyReference.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingAssemblyReference.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingAssemblyReference.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingAssemblyReference.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingAssemblyReference.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingAssemblyReference.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingBrace.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingBrace.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingBrace.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingBrace.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingBrace.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingBrace.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingBrace.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingBrace.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingImports.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingImports.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingImports.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingImports.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingImports.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingImports.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingImports.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingImports.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingParenthesis.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingParenthesis.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingParenthesis.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingParenthesis.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingParenthesis.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingParenthesis.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingParenthesis.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingParenthesis.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingSemicolon.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingSemicolon.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingSemicolon.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingSemicolon.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingSemicolon.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingSemicolon.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingSemicolon.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingSemicolon.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingSquareBracket.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingSquareBracket.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingSquareBracket.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingSquareBracket.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingSquareBracket.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingSquareBracket.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixMissingSquareBracket.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixMissingSquareBracket.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixUnqualifiedUnityStaticMethod.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixUnqualifiedUnityStaticMethod.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixUnqualifiedUnityStaticMethod.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixUnqualifiedUnityStaticMethod.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixUnqualifiedUnityStaticMethod.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixUnqualifiedUnityStaticMethod.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/FixUnqualifiedUnityStaticMethod.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/FixUnqualifiedUnityStaticMethod.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/ScriptFixContext.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/ScriptFixContext.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/ScriptFixContext.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/ScriptFixContext.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/ScriptFixContext.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/ScriptFixContext.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/ScriptFixContext.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/ScriptFixContext.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/ScriptFixProvider.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/ScriptFixProvider.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/ScriptFixProvider.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/ScriptFixProvider.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/ScriptFixProvider.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/ScriptFixProvider.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/ScriptFixProvider.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/ScriptFixProvider.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/ScriptSyntaxUtils.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/ScriptSyntaxUtils.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/ScriptSyntaxUtils.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/ScriptSyntaxUtils.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/ScriptSyntaxUtils.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/ScriptSyntaxUtils.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/ScriptFix/ScriptSyntaxUtils.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/ScriptFix/ScriptSyntaxUtils.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/TmpEssentialsAutoImporter.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/TmpEssentialsAutoImporter.cs similarity index 98% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/TmpEssentialsAutoImporter.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/TmpEssentialsAutoImporter.cs index bdd755e..a60c926 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/TmpEssentialsAutoImporter.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/TmpEssentialsAutoImporter.cs @@ -29,6 +29,8 @@ namespace UnityTcp.Editor.Tools static TmpEssentialsAutoImporter() { + if (EditorAutomationGuard.ShouldSkipBridgeAutoStart()) return; + // Only re-arm across the post-install domain reload if a tool install // requested it. No-op for every other editor load. if (SessionState.GetBool(PendingKey, false)) diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/TmpEssentialsAutoImporter.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/TmpEssentialsAutoImporter.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/TmpEssentialsAutoImporter.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/TmpEssentialsAutoImporter.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/VirtualInputDevices.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/VirtualInputDevices.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/VirtualInputDevices.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/VirtualInputDevices.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/VirtualInputDevices.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/VirtualInputDevices.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/VirtualInputDevices.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/VirtualInputDevices.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/_InternalAssetListening.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/_InternalAssetListening.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/_InternalAssetListening.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/_InternalAssetListening.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/_InternalAssetListening.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/_InternalAssetListening.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/_InternalAssetListening.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/_InternalAssetListening.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/_InternalStateDirtyNotifier.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/_InternalStateDirtyNotifier.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/_InternalStateDirtyNotifier.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/_InternalStateDirtyNotifier.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/_InternalStateDirtyNotifier.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/_InternalStateDirtyNotifier.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Tools/_InternalStateDirtyNotifier.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Tools/_InternalStateDirtyNotifier.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/UnityTcp.Editor.asmdef b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/UnityTcp.Editor.asmdef similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/UnityTcp.Editor.asmdef rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/UnityTcp.Editor.asmdef diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/UnityTcp.Editor.asmdef.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/UnityTcp.Editor.asmdef.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/UnityTcp.Editor.asmdef.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/UnityTcp.Editor.asmdef.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/UnityTcpBridge.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/UnityTcpBridge.cs similarity index 97% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/UnityTcpBridge.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/UnityTcpBridge.cs index fa5f941..ded0015 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/UnityTcpBridge.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/UnityTcpBridge.cs @@ -33,6 +33,7 @@ namespace UnityTcp.Editor // SessionState (not EditorPrefs): a manual stop must survive domain reloads but be // forgotten when the editor process exits, so a relaunch starts the bridge again. private const string ManualStopKey = "UnityTcp.ManualStop"; + private const string ResumeAfterReloadKey = "UnityTcp.ResumeAfterReload"; public static event Action OnClientPlatformsChanged; // Heartbeat file writing lives entirely in native (configured via // NativeUnityTcpBridgeHost.StartOrAttach); this just gates how often @@ -85,7 +86,10 @@ namespace UnityTcp.Editor // Register the FindObjectByInstruction delegate for UnityEngineObjectConverter UnityTcp.Editor.Serialization.UnityEngineObjectConverter.FindObjectByInstruction = ManageGameObject.FindObjectByInstruction; - if (EditorAutomationGuard.ShouldSkipBridgeAutoStart()) + // Auto-start eligibility does not revoke an already-running bridge's + // reload lifecycle (including explicit starts in secondary Editors). + if (EditorAutomationGuard.ShouldSkipBridgeAutoStart() + && !SessionState.GetBool(ResumeAfterReloadKey, false)) { return; } @@ -185,6 +189,8 @@ namespace UnityTcp.Editor // command on the worker thread could otherwise be the store's first toucher // and silently lose everything persisted across the last reload. DetachedJobs.EnsureLoaded(); + // Restore and reconcile jobs before the worker can serve manage_job. + StepJobRunner.EnsureInitialized(); // A modal dialog may block afterAssemblyReload. // Initialize DialogWatcher on Unity's main thread before starting the command worker; @@ -219,6 +225,7 @@ namespace UnityTcp.Editor // modal-dialog escape path are ready, even if afterAssemblyReload is blocked. CodelyLogger.Log("ResumeManagedCommandProcessing"); NativeUnityTcpBridgeHost.ResumeManagedCommandProcessing(); + SessionState.EraseBool(ResumeAfterReloadKey); CodelyLogger.Log($"Codely-Bridge: Native Codely Bridge running on port {currentUnityPort}. (OS={Application.platform}, server={serverVer})"); } @@ -235,6 +242,7 @@ namespace UnityTcp.Editor // generic "stopped". public static void Stop(bool isManualStop = false, string reason = null) { + SessionState.EraseBool(ResumeAfterReloadKey); if (isManualStop) SessionState.SetBool(ManualStopKey, true); if (!isRunning) return; @@ -632,6 +640,9 @@ namespace UnityTcp.Editor // Heartbeat/status helpers private static void OnBeforeAssemblyReload() { + if (isRunning) + SessionState.SetBool(ResumeAfterReloadKey, true); + // Best-effort: a REPL session is about to be silently wiped by this reload (its static // fields don't survive), so tell clients before that happens. Native send is async and // reload timing can cut it off, so this is a courtesy, not the only way a client learns diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/UnityTcpBridge.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/UnityTcpBridge.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/UnityTcpBridge.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/UnityTcpBridge.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Windows.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Windows.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Windows.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Windows.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Windows/README_Windows.md b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Windows/README_Windows.md similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Windows/README_Windows.md rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Windows/README_Windows.md diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Windows/README_Windows.md.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Windows/README_Windows.md.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Windows/README_Windows.md.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Windows/README_Windows.md.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Windows/TcpBridgeControlWindow.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Windows/TcpBridgeControlWindow.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Windows/TcpBridgeControlWindow.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Windows/TcpBridgeControlWindow.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Windows/TcpBridgeControlWindow.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Windows/TcpBridgeControlWindow.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Windows/TcpBridgeControlWindow.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Windows/TcpBridgeControlWindow.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/fonts.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/fonts.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/fonts.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/fonts.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/fonts/FiraMono-Regular.ttf b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/fonts/FiraMono-Regular.ttf similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/fonts/FiraMono-Regular.ttf rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/fonts/FiraMono-Regular.ttf diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/fonts/FiraMono-Regular.ttf.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/fonts/FiraMono-Regular.ttf.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/fonts/FiraMono-Regular.ttf.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/fonts/FiraMono-Regular.ttf.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/fonts/Inter.ttc.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/fonts/Inter.ttc.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/fonts/Inter.ttc.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/fonts/Inter.ttc.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/fonts/NotoSans-Regular.ttf b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/fonts/NotoSans-Regular.ttf similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/fonts/NotoSans-Regular.ttf rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/fonts/NotoSans-Regular.ttf diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/fonts/NotoSans-Regular.ttf.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/fonts/NotoSans-Regular.ttf.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/fonts/NotoSans-Regular.ttf.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/fonts/NotoSans-Regular.ttf.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common/Codely.Common.asmdef b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/Codely.Common.asmdef similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common/Codely.Common.asmdef rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/Codely.Common.asmdef diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common/Codely.Common.asmdef.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/Codely.Common.asmdef.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common/Codely.Common.asmdef.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/Codely.Common.asmdef.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common/CodelyLogger.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/CodelyLogger.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common/CodelyLogger.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/CodelyLogger.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common/CodelyLogger.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/CodelyLogger.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common/CodelyLogger.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/CodelyLogger.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/EditorProcessGuard.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/EditorProcessGuard.cs new file mode 100644 index 0000000..d5a9d14 --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/EditorProcessGuard.cs @@ -0,0 +1,58 @@ +using UnityEditor; +using UnityEngine; +using UnityEngine.Rendering; + +namespace UnityTcp.Editor.Helpers +{ + /// Restricts editor auto-start hooks to the main Editor process. + public static class EditorProcessGuard + { + public static bool ShouldSkipEditorAutoStart() + => ShouldSkipEditorAutoStart(IsAssetImportWorkerProcess(), IsSecondaryEditorProcess()); + + public static bool ShouldSkipEditorUiAutoStart() + => ShouldSkipEditorUiAutoStart( + IsAssetImportWorkerProcess(), + IsSecondaryEditorProcess(), + Application.isBatchMode, + SystemInfo.graphicsDeviceType == GraphicsDeviceType.Null); + + internal static bool ShouldSkipEditorAutoStart( + bool isAssetImportWorker, + bool isSecondaryEditor) + => isAssetImportWorker || isSecondaryEditor; + + internal static bool ShouldSkipEditorUiAutoStart( + bool isAssetImportWorker, + bool isSecondaryEditor, + bool isBatchMode, + bool isNullGraphics) + => ShouldSkipEditorAutoStart(isAssetImportWorker, isSecondaryEditor) + || isBatchMode + || isNullGraphics; + + private static bool IsAssetImportWorkerProcess() + { +#if UNITY_2020_2_OR_NEWER + return AssetDatabase.IsAssetImportWorkerProcess(); +#elif UNITY_2019_3_OR_NEWER + return UnityEditor.Experimental.AssetDatabaseExperimental.IsAssetImportWorkerProcess(); +#else + return false; +#endif + } + + private static bool IsSecondaryEditorProcess() + { +#if UNITY_2021_1_OR_NEWER + return UnityEditor.MPE.ProcessService.level == UnityEditor.MPE.ProcessLevel.Secondary; +#elif UNITY_2020_2_OR_NEWER + return UnityEditor.MPE.ProcessService.level == UnityEditor.MPE.ProcessLevel.Slave; +#elif UNITY_2020_1_OR_NEWER + return Unity.MPE.ProcessService.level == Unity.MPE.ProcessLevel.UMP_SLAVE; +#else + return false; +#endif + } + } +} diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/EditorProcessGuard.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/EditorProcessGuard.cs.meta new file mode 100644 index 0000000..56664f3 --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/EditorProcessGuard.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dc7862ec0c2d46b9adf01c6023c35fa3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/InstanceIdExtensions.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/InstanceIdExtensions.cs new file mode 100644 index 0000000..9055c48 --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/InstanceIdExtensions.cs @@ -0,0 +1,314 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +#if UNITY_2021_2_OR_NEWER +using UnityEditor.SceneManagement; +#else +using UnityEditor.Experimental.SceneManagement; +#endif + +namespace UnityTcp.Editor.Helpers +{ + /// + /// Central compatibility surface for Unity's instance-id → EntityId + /// migration (Unity 6000.5 / Unity 6.5). + /// + /// Unity 6.5 deprecated every -based identity API with an + /// error-level obsolete attribute (CS0619) in favour of 64-bit EntityId + /// overloads that do not exist on earlier versions: + /// Object.GetInstanceID() -> Object.GetEntityId() + /// Selection.activeInstanceID -> Selection.activeEntityId + /// EditorUtility.InstanceIDToObject(int) -> EditorUtility.EntityIdToObject(EntityId) + /// AssetDatabase.GetAssetPath(int) -> AssetDatabase.GetAssetPath(Object) + /// + /// These helpers speak so the full 64-bit EntityId value is + /// carried losslessly and can be reconstructed exactly (no 32-bit truncation). + /// On pre-6.5 Unity the legacy int instance id widens implicitly to + /// long, so call sites see a single consistent type across versions. The + /// only version-specific code lives in the two conversion helpers at the bottom. + /// + public static class InstanceIdExtensions + { + // ---- producers: Object / Selection -> long id ------------------------- + + /// + /// Returns the object's stable instance id as a , or 0 if + /// the object is null/destroyed. Prefer this over GetInstanceID(). + /// + public static long GetStableInstanceId(this Object obj) + { + if (obj == null) return 0; +#if UNITY_6000_5_OR_NEWER + return ToLong(obj.GetEntityId()); +#else +#pragma warning disable CS0618 + return obj.GetInstanceID(); +#pragma warning restore CS0618 +#endif + } + + /// Active selection instance id, or 0 if nothing is selected. + public static long ActiveSelectionInstanceId() + { +#if UNITY_6000_5_OR_NEWER + return ToLong(Selection.activeEntityId); +#else +#pragma warning disable CS0618 + return Selection.activeInstanceID; +#pragma warning restore CS0618 +#endif + } + + // ---- consumers: long id -> Object / path ------------------------------ + + /// Resolves an instance id to its , or null. + public static Object InstanceIdToObject(long instanceId) + { +#if UNITY_6000_5_OR_NEWER + return EditorUtility.EntityIdToObject(ToEntityId(instanceId)); +#else +#pragma warning disable CS0618 + return EditorUtility.InstanceIDToObject((int)instanceId); +#pragma warning restore CS0618 +#endif + } + + /// + /// Resolves an instance id to its , or null. + /// Same lookup as ; kept for existing call sites. + /// + public static Object ObjectFromInstanceId(long instanceId) + => InstanceIdToObject(instanceId); + + /// + /// Persistent YAML fileID. Uses + /// (ulong) so Tuanjie does not truncate values above Int32 + /// (e.g. 60588083669363838 must not become -2068059010). + /// Returns 0 if the object is not yet written to disk. + /// + public static long GetLocalFileId(this Object obj) + { + if (obj == null) return 0; + var gid = GlobalObjectId.GetGlobalObjectIdSlow(obj); + return unchecked((long)gid.targetObjectId); + } + + /// + /// Decimal string of , or null when unknown. + /// Wire this rather than a JSON number: values above 2^53 are not safe + /// in JavaScript. + /// + public static string FormatLocalFileId(this Object obj) + { + if (obj == null) return null; + ulong id = GlobalObjectId.GetGlobalObjectIdSlow(obj).targetObjectId; + return id == 0 ? null : id.ToString(); + } + + /// + /// Decimal string of , or null when 0. + /// Wire this rather than a JSON number: Unity 6.5 EntityId values + /// can exceed JavaScript's 2^53-safe integer range. + /// + public static string FormatStableInstanceId(this Object obj) + { + if (obj == null) return null; + long id = obj.GetStableInstanceId(); + return id == 0 ? null : id.ToString(); + } + + /// + /// Selection kind for CLI routing: + /// staged / sceneInstance / subAsset / projectAsset. + /// + public static string GetKind(this Object obj) + { + if (obj == null) return null; + if (obj is GameObject go) + { + if (PrefabStageUtility.GetPrefabStage(go) != null) + return "staged"; + if (go.scene.IsValid() && !string.IsNullOrEmpty(go.scene.path)) + return "sceneInstance"; + } + if (AssetDatabase.IsSubAsset(obj)) + return "subAsset"; + if (!string.IsNullOrEmpty(AssetDatabase.GetAssetPath(obj))) + return "projectAsset"; + return null; + } + + /// + /// Prefab asset path for a stage. Unity 2019 exposes + /// prefabAssetPath; 2020.1+ renamed it to assetPath. + /// + public static string GetPrefabStageAssetPath(PrefabStage stage) + { + if (stage == null) return null; +#if UNITY_2020_1_OR_NEWER + return stage.assetPath; +#else + return stage.prefabAssetPath; +#endif + } + + /// + /// GUID from so staged prefab + /// objects still resolve to the source prefab, not an empty asset path. + /// + public static string FormatGlobalObjectGuid(this Object obj) + { + if (obj == null) return null; + string guid = GlobalObjectId.GetGlobalObjectIdSlow(obj).assetGUID.ToString(); + if (!IsEmptyGuid(guid)) return guid; + + // Staged / scene objects sometimes yield an all-zero assetGUID. + // Fall back to the prefab or scene asset path. + string path = null; + if (obj is GameObject go) + { + var stage = PrefabStageUtility.GetPrefabStage(go); + string stagePath = GetPrefabStageAssetPath(stage); + if (!string.IsNullOrEmpty(stagePath)) + path = stagePath; + else if (go.scene.IsValid() && !string.IsNullOrEmpty(go.scene.path)) + path = go.scene.path; + } + if (string.IsNullOrEmpty(path)) + path = AssetDatabase.GetAssetPath(obj); + if (string.IsNullOrEmpty(path)) return null; + guid = AssetDatabase.AssetPathToGUID(path); + return IsEmptyGuid(guid) ? null : guid; + } + + private static bool IsEmptyGuid(string guid) + { + return string.IsNullOrEmpty(guid) || guid == "00000000000000000000000000000000"; + } + + /// + /// Hierarchy path with same-name ordinal only when a parent has more than + /// one child of the same name (e.g. Cube, Sphere, Cube → second Cube is Cube[1]). + /// The index is among same-name siblings, not Transform.GetSiblingIndex(). + /// + public static string GetHierarchyPathWithIndex(this GameObject go) + { + if (go == null) return ""; + var segments = new List(); + var t = go.transform; + while (t != null) + { + var parent = t.parent; + string seg = t.name; + if (parent != null && HasSameNameSibling(parent, t)) + seg = $"{t.name}[{GetSameNameOrdinal(parent, t)}]"; + segments.Insert(0, seg); + t = parent; + } + return string.Join("/", segments); + } + + /// + /// 0-based index of among siblings that share its name. + /// + public static int GetSameNameOrdinal(Transform parent, Transform self) + { + int ordinal = 0; + for (int i = 0; i < parent.childCount; i++) + { + var child = parent.GetChild(i); + if (child.name != self.name) continue; + if (child == self) return ordinal; + ordinal++; + } + return ordinal; + } + + /// + /// Parses a path segment produced by . + /// is -1 when the name is unique (no suffix). + /// + public static bool TryParseHierarchySegment(string segment, out string name, out int ordinal) + { + name = segment ?? ""; + ordinal = -1; + if (string.IsNullOrEmpty(segment)) return false; + int close = segment.LastIndexOf(']'); + int open = segment.LastIndexOf('['); + if (open > 0 && close == segment.Length - 1 && close > open + 1) + { + int n; + if (int.TryParse(segment.Substring(open + 1, close - open - 1), out n) && n >= 0) + { + name = segment.Substring(0, open); + ordinal = n; + } + } + return true; + } + + public static string[] GetComponentTypeNames(this GameObject go) + { + if (go == null) return new string[0]; + var comps = go.GetComponents(); + var names = new List(comps.Length); + for (int i = 0; i < comps.Length; i++) + { + if (comps[i] != null) + names.Add(comps[i].GetType().FullName); + } + return names.ToArray(); + } + + private static bool HasSameNameSibling(Transform parent, Transform self) + { + int count = 0; + for (int i = 0; i < parent.childCount; i++) + { + if (parent.GetChild(i).name != self.name) continue; + count++; + if (count > 1) return true; + } + return false; + } + + /// Asset GUID from path, or null if the object is not an asset. + public static string GetAssetGuid(this Object obj) + { + if (obj == null) return null; + string guid = obj.FormatGlobalObjectGuid(); + if (!string.IsNullOrEmpty(guid)) return guid; + string path = AssetDatabase.GetAssetPath(obj); + if (string.IsNullOrEmpty(path)) return null; + guid = AssetDatabase.AssetPathToGUID(path); + return string.IsNullOrEmpty(guid) ? null : guid; + } + + /// Asset path for an instance id, or "" if it is not an asset. + public static string AssetPathFromInstanceId(long instanceId) + { + var obj = InstanceIdToObject(instanceId); + return obj != null ? AssetDatabase.GetAssetPath(obj) : ""; + } + +#if UNITY_6000_5_OR_NEWER + // ---- the ONLY version-specific conversions ---------------------------- + // Both are pure 64-bit bit reinterpretations of EntityId.ToULong (the + // canonical numeric form of an EntityId, which this project already uses), + // so ToEntityId is an exact inverse of ToLong with no loss of information. + + /// Reinterprets an EntityId as a 64-bit . + internal static long ToLong(EntityId entityId) + => unchecked((long)EntityId.ToULong(entityId)); + + /// + /// Exact inverse of : rebuilds the EntityId from + /// its 64-bit numeric form via EntityId.FromULong (the counterpart of + /// EntityId.ToULong), so an id survives a round-trip through storage or + /// the wire without loss. + /// + internal static EntityId ToEntityId(long instanceId) + => EntityId.FromULong(unchecked((ulong)instanceId)); +#endif + } +} diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common/InstanceIdExtensions.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/InstanceIdExtensions.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common/InstanceIdExtensions.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Common/InstanceIdExtensions.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Layout.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Layout.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Layout.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Layout.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Layout/Tuanjie AI Mode.wlt b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Layout/Tuanjie AI Mode.wlt similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Layout/Tuanjie AI Mode.wlt rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Layout/Tuanjie AI Mode.wlt diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Layout/Tuanjie AI Mode.wlt.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Layout/Tuanjie AI Mode.wlt.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Layout/Tuanjie AI Mode.wlt.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Layout/Tuanjie AI Mode.wlt.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/Cn.Tuanjie.Codely.Editor.asmdef b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/Cn.Tuanjie.Codely.Editor.asmdef similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/Cn.Tuanjie.Codely.Editor.asmdef rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/Cn.Tuanjie.Codely.Editor.asmdef diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/Cn.Tuanjie.Codely.Editor.asmdef.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/Cn.Tuanjie.Codely.Editor.asmdef.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/Cn.Tuanjie.Codely.Editor.asmdef.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/Cn.Tuanjie.Codely.Editor.asmdef.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyEventTracker.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyEventTracker.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyEventTracker.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyEventTracker.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyEventTracker.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyEventTracker.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyEventTracker.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyEventTracker.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyIpcManager.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyIpcManager.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyIpcManager.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyIpcManager.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyIpcManager.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyIpcManager.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyIpcManager.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyIpcManager.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyIpcServer.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyIpcServer.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyIpcServer.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyIpcServer.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyIpcServer.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyIpcServer.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyIpcServer.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyIpcServer.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyLayoutInstaller.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyLayoutInstaller.cs similarity index 99% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyLayoutInstaller.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyLayoutInstaller.cs index efa2231..401b57a 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyLayoutInstaller.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyLayoutInstaller.cs @@ -16,6 +16,8 @@ namespace Cn.Tuanjie.Codely.Editor static CodelyLayoutInstaller() { + if (EditorProcessGuard.ShouldSkipEditorUiAutoStart()) return; + EditorApplication.delayCall += InstallCodelyLayout; } diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyLayoutInstaller.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyLayoutInstaller.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyLayoutInstaller.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyLayoutInstaller.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyToolbar.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyToolbar.cs similarity index 97% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyToolbar.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyToolbar.cs index 4921231..0cbca19 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyToolbar.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyToolbar.cs @@ -33,6 +33,7 @@ using UnityEditor; using UnityEditor.UIElements; using UnityEngine; using UnityEngine.UIElements; +using UnityTcp.Editor.Helpers; namespace UnityTcp.Editor.Windows { @@ -43,6 +44,8 @@ namespace UnityTcp.Editor.Windows static CodelyToolbar() { + if (EditorProcessGuard.ShouldSkipEditorUiAutoStart()) return; + EditorApplication.delayCall += AttachToToolbar; EditorApplication.update += EnsureAttached; } @@ -150,4 +153,4 @@ namespace UnityTcp.Editor.Windows } } #endif -#endif \ No newline at end of file +#endif diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyToolbar.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyToolbar.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyToolbar.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyToolbar.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyWindow.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyWindow.cs similarity index 97% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyWindow.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyWindow.cs index 98b9239..ca92d2f 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyWindow.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyWindow.cs @@ -14,10 +14,28 @@ using System.Threading.Tasks; using Unity.InternalBridge; using UnityEditor; using UnityEditor.PackageManager; +#if UNITY_2021_2_OR_NEWER +using UnityEditor.SceneManagement; +#else +using UnityEditor.Experimental.SceneManagement; +#endif using UnityEngine; using UnityTcp.Editor.Helpers; namespace Cn.Tuanjie.Codely.Editor { + /// + /// Describes a sub-object (e.g. a Mesh or Material) selected inside a + /// container asset file (FBX, atlas texture). Only present when the + /// selection is a sub-asset; never present for top-level asset files. + /// + [Serializable] + public class DropItemSelected + { + public string type; // C# type name, e.g. "Mesh", "Material" + public string name; // Object name as shown in the Project window + public string fileId; // decimal YAML fileID (GlobalObjectId.targetObjectId) + } + /// /// 用于序列化选中对象信息 /// @@ -27,6 +45,28 @@ namespace Cn.Tuanjie.Codely.Editor public string path; public string type; public string name; + public string guid; // Asset GUID (stable across sessions) + /// + /// Decimal string of the YAML fileID (GlobalObjectId.targetObjectId). + /// Empty for GameObjects (use instanceId). String on the wire so values + /// above Int32 / JS Number.MAX_SAFE_INTEGER are not truncated. + /// + public string fileId; + /// Non-null when the selected object lives inside a container + /// file (sub-asset). Carries type + name + fileId of the sub-object so + /// callers can distinguish e.g. "Material #25" inside an FBX from the + /// top-level FBX asset. + /// + public DropItemSelected selected; + public string hierarchyPath; + public long instanceId; + /// staged | sceneInstance | subAsset | projectAsset + public string kind; + /// Persistent YAML fileID of a GameObject (GlobalObjectId.targetObjectId). + public string goFileId; + /// Persistent GUID of a GameObject's source asset/scene. + public string goGuid; + public string[] componentNames; } [Serializable] @@ -43,6 +83,8 @@ namespace Cn.Tuanjie.Codely.Editor [InitializeOnLoadMethod] private static void RegisterReloadEvents() { + if (TauriUtils.IsAutomatedEditorRun()) return; + if (s_reloadEventsRegistered) { return; @@ -883,15 +925,7 @@ namespace Cn.Tuanjie.Codely.Editor foreach (var obj in selectedObjects) { if (obj == null) continue; - var itemData = new DropItemData { name = obj.name, type = obj.GetType().Name }; - string assetPath = AssetDatabase.GetAssetPath(obj); - if (!string.IsNullOrEmpty(assetPath)) - itemData.path = Path.GetFullPath(assetPath); - else if (obj is UnityEngine.GameObject go) - itemData.path = GetGameObjectPath(go); - else - itemData.path = obj.name; - dropItems.Add(itemData); + dropItems.Add(BuildDropItem(obj)); } return dropItems.Count > 0 ? dropItems : null; } @@ -989,6 +1023,8 @@ namespace Cn.Tuanjie.Codely.Editor private void OnEnable() { + if (TauriUtils.IsAutomatedEditorRun()) return; + ApplyTitleIcon(); if (string.IsNullOrEmpty(GetCodelyRunnable())) @@ -4066,28 +4102,7 @@ namespace Cn.Tuanjie.Codely.Editor foreach (var obj in DragAndDrop.objectReferences) { if (obj == null) continue; - - var itemData = new DropItemData - { - name = obj.name, - type = obj.GetType().Name - }; - - string assetPath = AssetDatabase.GetAssetPath(obj); - if (!string.IsNullOrEmpty(assetPath)) - { - itemData.path = Path.GetFullPath(assetPath); - } - else if (obj is UnityEngine.GameObject go) - { - itemData.path = GetGameObjectPath(go); - } - else - { - itemData.path = obj.name; - } - - dropItems.Add(itemData); + dropItems.Add(BuildDropItem(obj)); } } @@ -4135,31 +4150,59 @@ namespace Cn.Tuanjie.Codely.Editor } } - /// - /// Get the hierarchical path of a GameObject in the scene - /// - private static string GetGameObjectPath(UnityEngine.GameObject obj) + private static DropItemData BuildDropItem(UnityEngine.Object obj) { - if (obj == null) return ""; + var itemData = new DropItemData { name = obj.name, type = obj.GetType().Name, kind = obj.GetKind() }; + string assetPath = AssetDatabase.GetAssetPath(obj); - // For GameObjects in a scene, return the scene asset path (relative to project root) - var scene = obj.scene; - if (scene.IsValid() && !string.IsNullOrEmpty(scene.path)) + if (obj is UnityEngine.GameObject go + && (string.IsNullOrEmpty(assetPath) + || PrefabStageUtility.GetPrefabStage(go) != null + || (go.scene.IsValid() && !string.IsNullOrEmpty(go.scene.path)))) { - return scene.path; + itemData.path = GetSceneOrPrefabPath(go); + itemData.hierarchyPath = go.GetHierarchyPathWithIndex(); + itemData.instanceId = go.GetStableInstanceId(); + itemData.goFileId = go.FormatLocalFileId() ?? ""; + itemData.goGuid = go.FormatGlobalObjectGuid() ?? ""; + itemData.componentNames = go.GetComponentTypeNames(); + if (string.IsNullOrEmpty(itemData.path)) + itemData.path = itemData.hierarchyPath; + return itemData; } - // Fallback to hierarchy path if scene is not valid - var path = obj.name; - var parent = obj.transform.parent; - - while (parent != null) + if (!string.IsNullOrEmpty(assetPath)) { - path = $"{parent.name}/{path}"; - parent = parent.parent; + itemData.path = assetPath.Replace('\\', '/'); + itemData.guid = obj.GetAssetGuid(); + itemData.fileId = obj.FormatLocalFileId() ?? ""; + if (AssetDatabase.IsSubAsset(obj) && !string.IsNullOrEmpty(itemData.fileId)) + { + itemData.selected = new DropItemSelected + { + type = obj.GetType().Name, + name = obj.name, + fileId = itemData.fileId, + }; + } + return itemData; } - return path; + itemData.path = obj.name; + return itemData; + } + + private static string GetSceneOrPrefabPath(UnityEngine.GameObject go) + { + if (go == null) return ""; + if (go.scene.IsValid() && !string.IsNullOrEmpty(go.scene.path)) + return go.scene.path.Replace('\\', '/'); + string stagePath = InstanceIdExtensions.GetPrefabStageAssetPath( + PrefabStageUtility.GetPrefabStage(go)); + if (!string.IsNullOrEmpty(stagePath)) + return stagePath.Replace('\\', '/'); + string assetPath = AssetDatabase.GetAssetPath(go); + return string.IsNullOrEmpty(assetPath) ? "" : assetPath.Replace('\\', '/'); } diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyWindow.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyWindow.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyWindow.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyWindow.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyWindowDocker.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyWindowDocker.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyWindowDocker.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyWindowDocker.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyWindowDocker.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyWindowDocker.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/CodelyWindowDocker.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/CodelyWindowDocker.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/DrillWindow.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/DrillWindow.cs similarity index 99% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/DrillWindow.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/DrillWindow.cs index fde146c..05ae616 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/DrillWindow.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/DrillWindow.cs @@ -162,6 +162,8 @@ namespace Cn.Tuanjie.Codely.Editor private void OnEnable() { + if (TauriUtils.IsAutomatedEditorRun()) return; + if (!_eventTrackedOnEnable) { _eventTrackedOnEnable = true; diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/DrillWindow.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/DrillWindow.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/DrillWindow.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/DrillWindow.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/EditorWindowNativeHandleHelper.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/EditorWindowNativeHandleHelper.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/EditorWindowNativeHandleHelper.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/EditorWindowNativeHandleHelper.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/EditorWindowNativeHandleHelper.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/EditorWindowNativeHandleHelper.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/EditorWindowNativeHandleHelper.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/EditorWindowNativeHandleHelper.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/Icons.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/Icons.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/Icons.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/Icons.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/InternalBridge.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/InternalBridge.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/InternalBridge.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/InternalBridge.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/InternalBridge/UnityConnectSession.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/InternalBridge/UnityConnectSession.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/InternalBridge/UnityConnectSession.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/InternalBridge/UnityConnectSession.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/InternalBridge/UnityConnectSession.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/InternalBridge/UnityConnectSession.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/InternalBridge/UnityConnectSession.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/InternalBridge/UnityConnectSession.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/MacOSWebViewBridge.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/MacOSWebViewBridge.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/MacOSWebViewBridge.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/MacOSWebViewBridge.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/MacOSWebViewBridge.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/MacOSWebViewBridge.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/MacOSWebViewBridge.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/MacOSWebViewBridge.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/NativeBrowserAPI.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/NativeBrowserAPI.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/NativeBrowserAPI.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/NativeBrowserAPI.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/NativeBrowserAPI.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/NativeBrowserAPI.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/NativeBrowserAPI.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/NativeBrowserAPI.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/NativeWindowHelper.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/NativeWindowHelper.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/NativeWindowHelper.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/NativeWindowHelper.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/NativeWindowHelper.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/NativeWindowHelper.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/NativeWindowHelper.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/NativeWindowHelper.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/TauriUtils.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/TauriUtils.cs similarity index 97% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/TauriUtils.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/TauriUtils.cs index 454dfa1..282ea9b 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/TauriUtils.cs +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/TauriUtils.cs @@ -35,15 +35,14 @@ namespace Cn.Tuanjie.Codely.Editor #region Automation / Headless Detection /// - /// True when the editor is running unattended — batch mode or with a null graphics device - /// (CI / QA automation harnesses). The auto-open windows must stay closed in these - /// environments: creating an forces native window + + /// True when this is not the main interactive Editor — a worker/secondary process, batch + /// mode, or a null graphics device (CI / QA automation harnesses). Auto-open windows stay + /// closed in these environments: creating an forces native window + /// graphics-surface creation, which fails with a SUCCEEDED(hr) native assertion that /// flips otherwise-passing automated test runs to an overall FAIL. /// internal static bool IsAutomatedEditorRun() - => Application.isBatchMode - || SystemInfo.graphicsDeviceType == UnityEngine.Rendering.GraphicsDeviceType.Null; + => EditorProcessGuard.ShouldSkipEditorUiAutoStart(); #endregion diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/TauriUtils.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/TauriUtils.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/TauriUtils.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/TauriUtils.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/WebView2Host.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/WebView2Host.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/WebView2Host.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/WebView2Host.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/WebView2Host.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/WebView2Host.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/WebView2Host.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/WebView2Host.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/WindowHostStabilityPolicy.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/WindowHostStabilityPolicy.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/WindowHostStabilityPolicy.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/WindowHostStabilityPolicy.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/WindowHostStabilityPolicy.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/WindowHostStabilityPolicy.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/WindowHostStabilityPolicy.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/WindowHostStabilityPolicy.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/WindowResourcePreservationPolicy.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/WindowResourcePreservationPolicy.cs similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/WindowResourcePreservationPolicy.cs rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/WindowResourcePreservationPolicy.cs diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/WindowResourcePreservationPolicy.cs.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/WindowResourcePreservationPolicy.cs.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Tauri/WindowResourcePreservationPolicy.cs.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Tauri/WindowResourcePreservationPolicy.cs.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Codely.Newtonsoft.Json.dll b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Codely.Newtonsoft.Json.dll similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Codely.Newtonsoft.Json.dll rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Codely.Newtonsoft.Json.dll diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Codely.Newtonsoft.Json.dll.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Codely.Newtonsoft.Json.dll.meta new file mode 100644 index 0000000..5bc4f71 --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Codely.Newtonsoft.Json.dll.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: 5bcc56c16573f0945aeefcb157e22736 +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 0 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + userData: + assetBundleName: + assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Codely.Roslyn.README.md b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Codely.Roslyn.README.md similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Codely.Roslyn.README.md rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Codely.Roslyn.README.md diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Codely.Roslyn.README.md.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Codely.Roslyn.README.md.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Codely.Roslyn.README.md.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Codely.Roslyn.README.md.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Codely.Roslyn.dll.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Codely.Roslyn.dll.meta new file mode 100644 index 0000000..4268954 --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Codely.Roslyn.dll.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: 38389b47caeb4d7493c8ef1fd954ab6a +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 1 + validateReferences: 0 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: AnyOS + userData: + assetBundleName: + assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Linux.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Linux.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Linux.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Linux.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Linux/x86_64.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Linux/x86_64.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Linux/x86_64.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Linux/x86_64.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Linux/x86_64/libNativeTcpBridge.so b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Linux/x86_64/libNativeTcpBridge.so similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Linux/x86_64/libNativeTcpBridge.so rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Linux/x86_64/libNativeTcpBridge.so diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Linux/x86_64/libNativeTcpBridge.so.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Linux/x86_64/libNativeTcpBridge.so.meta new file mode 100644 index 0000000..2537b45 --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Linux/x86_64/libNativeTcpBridge.so.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: abb8725b95ae4fd49e8f90016252dc0c +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: Linux + userData: + assetBundleName: + assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser.dll b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser.dll similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser.dll rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser.dll diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser.dll.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser.dll.meta new file mode 100644 index 0000000..e93a809 --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser.dll.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: 0e1e756d3d2df9149ba70839ab1b645f +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: Windows + userData: + assetBundleName: + assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/CMakeLists.txt b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/CMakeLists.txt similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/CMakeLists.txt rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/CMakeLists.txt diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/CMakeLists.txt.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/CMakeLists.txt.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/CMakeLists.txt.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/CMakeLists.txt.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/build.ps1 b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/build.ps1 similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/build.ps1 rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/build.ps1 diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/build.ps1.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/build.ps1.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/build.ps1.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/build.ps1.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/include.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/include.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/include.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/include.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/include/NativeBrowser.h b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/include/NativeBrowser.h similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/include/NativeBrowser.h rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/include/NativeBrowser.h diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/include/NativeBrowser.h.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/include/NativeBrowser.h.meta new file mode 100644 index 0000000..93656e0 --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/include/NativeBrowser.h.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 952eec9c9781d7c478a1057764a499ea +PluginImporter: + externalObjects: {} + serializedVersion: 3 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + Any: + enabled: 0 + settings: {} + Editor: + enabled: 0 + settings: + DefaultValueInitialized: true + userData: + assetBundleName: + assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/BrowserInstance.cpp b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/BrowserInstance.cpp similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/BrowserInstance.cpp rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/BrowserInstance.cpp diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/BrowserInstance.cpp.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/BrowserInstance.cpp.meta similarity index 53% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/BrowserInstance.cpp.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/BrowserInstance.cpp.meta index b9a66eb..32099fe 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/BrowserInstance.cpp.meta +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/BrowserInstance.cpp.meta @@ -13,31 +13,11 @@ PluginImporter: platformData: Any: enabled: 0 - settings: - Exclude Editor: 0 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 + settings: {} Editor: - enabled: 1 + enabled: 0 settings: - CPU: x86_64 DefaultValueInitialized: true - OS: Windows - Linux64: - enabled: 0 - settings: - CPU: None - Win: - enabled: 0 - settings: - CPU: None - Win64: - enabled: 0 - settings: - CPU: x86_64 - OS: Windows userData: assetBundleName: assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/BrowserInstance.h b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/BrowserInstance.h similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/BrowserInstance.h rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/BrowserInstance.h diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/BrowserInstance.h.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/BrowserInstance.h.meta similarity index 53% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/BrowserInstance.h.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/BrowserInstance.h.meta index 39c0159..ba252a4 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/BrowserInstance.h.meta +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/BrowserInstance.h.meta @@ -13,31 +13,11 @@ PluginImporter: platformData: Any: enabled: 0 - settings: - Exclude Editor: 0 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 + settings: {} Editor: - enabled: 1 + enabled: 0 settings: - CPU: x86_64 DefaultValueInitialized: true - OS: Windows - Linux64: - enabled: 0 - settings: - CPU: None - Win: - enabled: 0 - settings: - CPU: None - Win64: - enabled: 0 - settings: - CPU: x86_64 - OS: Windows userData: assetBundleName: assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/NativeBrowser.cpp b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/NativeBrowser.cpp similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/NativeBrowser.cpp rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/NativeBrowser.cpp diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/NativeBrowser.cpp.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/NativeBrowser.cpp.meta similarity index 53% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/NativeBrowser.cpp.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/NativeBrowser.cpp.meta index 83452a1..b8c34bb 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/NativeBrowser.cpp.meta +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/NativeBrowser.cpp.meta @@ -13,31 +13,11 @@ PluginImporter: platformData: Any: enabled: 0 - settings: - Exclude Editor: 0 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 + settings: {} Editor: - enabled: 1 + enabled: 0 settings: - CPU: x86_64 DefaultValueInitialized: true - OS: Windows - Linux64: - enabled: 0 - settings: - CPU: None - Win: - enabled: 0 - settings: - CPU: None - Win64: - enabled: 0 - settings: - CPU: x86_64 - OS: Windows userData: assetBundleName: assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/STAThread.cpp b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/STAThread.cpp similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/STAThread.cpp rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/STAThread.cpp diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/STAThread.cpp.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/STAThread.cpp.meta similarity index 53% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/STAThread.cpp.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/STAThread.cpp.meta index f0519e3..97df4d7 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/STAThread.cpp.meta +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/STAThread.cpp.meta @@ -13,31 +13,11 @@ PluginImporter: platformData: Any: enabled: 0 - settings: - Exclude Editor: 0 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 + settings: {} Editor: - enabled: 1 + enabled: 0 settings: - CPU: x86_64 DefaultValueInitialized: true - OS: Windows - Linux64: - enabled: 0 - settings: - CPU: None - Win: - enabled: 0 - settings: - CPU: None - Win64: - enabled: 0 - settings: - CPU: x86_64 - OS: Windows userData: assetBundleName: assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/STAThread.h b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/STAThread.h similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/STAThread.h rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/STAThread.h diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/STAThread.h.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/STAThread.h.meta similarity index 53% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/STAThread.h.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/STAThread.h.meta index e913d56..a0b77f2 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/STAThread.h.meta +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/STAThread.h.meta @@ -13,31 +13,11 @@ PluginImporter: platformData: Any: enabled: 0 - settings: - Exclude Editor: 0 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 + settings: {} Editor: - enabled: 1 + enabled: 0 settings: - CPU: x86_64 DefaultValueInitialized: true - OS: Windows - Linux64: - enabled: 0 - settings: - CPU: None - Win: - enabled: 0 - settings: - CPU: None - Win64: - enabled: 0 - settings: - CPU: x86_64 - OS: Windows userData: assetBundleName: assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/WndProcHook.cpp b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/WndProcHook.cpp similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/WndProcHook.cpp rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/WndProcHook.cpp diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/WndProcHook.cpp.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/WndProcHook.cpp.meta similarity index 53% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/WndProcHook.cpp.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/WndProcHook.cpp.meta index 3871464..1708779 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/WndProcHook.cpp.meta +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/WndProcHook.cpp.meta @@ -13,31 +13,11 @@ PluginImporter: platformData: Any: enabled: 0 - settings: - Exclude Editor: 0 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 + settings: {} Editor: - enabled: 1 + enabled: 0 settings: - CPU: x86_64 DefaultValueInitialized: true - OS: Windows - Linux64: - enabled: 0 - settings: - CPU: None - Win: - enabled: 0 - settings: - CPU: None - Win64: - enabled: 0 - settings: - CPU: x86_64 - OS: Windows userData: assetBundleName: assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/WndProcHook.h b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/WndProcHook.h similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/WndProcHook.h rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/WndProcHook.h diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/WndProcHook.h.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/WndProcHook.h.meta similarity index 53% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/WndProcHook.h.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/WndProcHook.h.meta index 1220d11..5556bac 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/src/WndProcHook.h.meta +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/src/WndProcHook.h.meta @@ -13,31 +13,11 @@ PluginImporter: platformData: Any: enabled: 0 - settings: - Exclude Editor: 0 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 + settings: {} Editor: - enabled: 1 + enabled: 0 settings: - CPU: x86_64 DefaultValueInitialized: true - OS: Windows - Linux64: - enabled: 0 - settings: - CPU: None - Win: - enabled: 0 - settings: - CPU: None - Win64: - enabled: 0 - settings: - CPU: x86_64 - OS: Windows userData: assetBundleName: assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/include.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/include.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/include.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/include.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/include/WebView2.h b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/include/WebView2.h similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/include/WebView2.h rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/include/WebView2.h diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/include/WebView2.h.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/include/WebView2.h.meta similarity index 53% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/include/WebView2.h.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/include/WebView2.h.meta index f98701f..68a8d2c 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/include/WebView2.h.meta +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/include/WebView2.h.meta @@ -13,31 +13,11 @@ PluginImporter: platformData: Any: enabled: 0 - settings: - Exclude Editor: 0 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 + settings: {} Editor: - enabled: 1 + enabled: 0 settings: - CPU: x86_64 DefaultValueInitialized: true - OS: Windows - Linux64: - enabled: 0 - settings: - CPU: None - Win: - enabled: 0 - settings: - CPU: None - Win64: - enabled: 0 - settings: - CPU: x86_64 - OS: Windows userData: assetBundleName: assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/lib.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/lib.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/lib.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/lib.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/lib/x64.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/lib/x64.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/lib/x64.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/lib/x64.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/lib/x64/WebView2LoaderStatic.lib.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/lib/x64/WebView2LoaderStatic.lib.meta similarity index 53% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/lib/x64/WebView2LoaderStatic.lib.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/lib/x64/WebView2LoaderStatic.lib.meta index 70d9052..c0245cd 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/vendor/webview2/lib/x64/WebView2LoaderStatic.lib.meta +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeBrowser/vendor/webview2/lib/x64/WebView2LoaderStatic.lib.meta @@ -13,31 +13,11 @@ PluginImporter: platformData: Any: enabled: 0 - settings: - Exclude Editor: 0 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 + settings: {} Editor: - enabled: 1 + enabled: 0 settings: - CPU: x86_64 DefaultValueInitialized: true - OS: Windows - Linux64: - enabled: 0 - settings: - CPU: None - Win: - enabled: 0 - settings: - CPU: None - Win64: - enabled: 0 - settings: - CPU: x86_64 - OS: Windows userData: assetBundleName: assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeIpcClient.dll b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeIpcClient.dll similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeIpcClient.dll rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeIpcClient.dll diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeIpcClient.dll.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeIpcClient.dll.meta new file mode 100644 index 0000000..fee4e6b --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeIpcClient.dll.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: 2cb1ee4cdb45fae41a791bcdb59188ac +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: Windows + userData: + assetBundleName: + assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeTcpBridge.dll b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeTcpBridge.dll new file mode 100644 index 0000000..1762dce Binary files /dev/null and b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeTcpBridge.dll differ diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeTcpBridge.dll.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeTcpBridge.dll.meta new file mode 100644 index 0000000..5ff5190 --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeTcpBridge.dll.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: c0f1e4f2a8f94f8f8fd7b6a90d7b6e3c +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: x86_64 + DefaultValueInitialized: true + OS: Windows + userData: + assetBundleName: + assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeWindowBridge.dll b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeWindowBridge.dll similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeWindowBridge.dll rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeWindowBridge.dll diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeWindowBridge.dll.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeWindowBridge.dll.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeWindowBridge.dll.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/NativeWindowBridge.dll.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/datachannel.dll b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/datachannel.dll similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/datachannel.dll rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/datachannel.dll diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/datachannel.dll.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/datachannel.dll.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/datachannel.dll.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/datachannel.dll.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/libcrypto-3-x64.dll.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/libcrypto-3-x64.dll.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/libcrypto-3-x64.dll.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/libcrypto-3-x64.dll.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/libssl-3-x64.dll b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/libssl-3-x64.dll similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/libssl-3-x64.dll rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/libssl-3-x64.dll diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/libssl-3-x64.dll.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/libssl-3-x64.dll.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/libssl-3-x64.dll.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/Win/libssl-3-x64.dll.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebView.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebView.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebView.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebView.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebView/WebViewPlugin.mm b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebView/WebViewPlugin.mm similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebView/WebViewPlugin.mm rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebView/WebViewPlugin.mm diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebView/WebViewPlugin.mm.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebView/WebViewPlugin.mm.meta similarity index 82% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebView/WebViewPlugin.mm.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebView/WebViewPlugin.mm.meta index 7795b44..0577453 100644 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebView/WebViewPlugin.mm.meta +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebView/WebViewPlugin.mm.meta @@ -16,19 +16,17 @@ PluginImporter: second: enabled: 0 settings: - Exclude Android: 1 Exclude Editor: 0 Exclude Linux64: 1 Exclude OSXUniversal: 1 + Exclude PlayableAds: 1 + Exclude VisionOS: 1 + Exclude WebGL: 1 + Exclude WeixinMiniGame: 1 Exclude Win: 1 Exclude Win64: 1 Exclude iOS: 1 - - first: - Android: Android - second: - enabled: 0 - settings: - CPU: ARMv7 + Exclude tvOS: 1 - first: Any: second: @@ -47,7 +45,7 @@ PluginImporter: second: enabled: 0 settings: - CPU: AnyCPU + CPU: x86_64 - first: Standalone: OSXUniversal second: @@ -69,21 +67,17 @@ PluginImporter: - first: VisionOS: VisionOS second: - enabled: 1 + enabled: 0 settings: {} - first: iPhone: iOS second: enabled: 0 - settings: - AddToEmbeddedBinaries: false - CPU: AnyCPU - CompileFlags: - FrameworkDependencies: + settings: {} - first: tvOS: tvOS second: - enabled: 1 + enabled: 0 settings: {} userData: assetBundleName: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebView/build-webview.sh b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebView/build-webview.sh similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebView/build-webview.sh rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebView/build-webview.sh diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebView/build-webview.sh.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebView/build-webview.sh.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebView/build-webview.sh.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebView/build-webview.sh.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle.meta new file mode 100644 index 0000000..bdf496a --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle.meta @@ -0,0 +1,28 @@ +fileFormatVersion: 2 +guid: d2d8d6e91e1ac2043b37ba01ada2eaff +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + DefaultValueInitialized: true + OS: OSX + userData: + assetBundleName: + assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle/Contents.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle/Contents.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle/Contents.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle/Contents.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle/Contents/Info.plist b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle/Contents/Info.plist similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle/Contents/Info.plist rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle/Contents/Info.plist diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle/Contents/Info.plist.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle/Contents/Info.plist.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle/Contents/Info.plist.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle/Contents/Info.plist.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle/Contents/MacOS.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle/Contents/MacOS.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle/Contents/MacOS.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle/Contents/MacOS.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle/Contents/MacOS/WebViewPlugin b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle/Contents/MacOS/WebViewPlugin similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle/Contents/MacOS/WebViewPlugin rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle/Contents/MacOS/WebViewPlugin diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle/Contents/MacOS/WebViewPlugin.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle/Contents/MacOS/WebViewPlugin.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle/Contents/MacOS/WebViewPlugin.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/WebViewPlugin.bundle/Contents/MacOS/WebViewPlugin.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libNativeTcpBridge.dylib b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libNativeTcpBridge.dylib similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libNativeTcpBridge.dylib rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libNativeTcpBridge.dylib diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libNativeTcpBridge.dylib.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libNativeTcpBridge.dylib.meta new file mode 100644 index 0000000..36ad5ac --- /dev/null +++ b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libNativeTcpBridge.dylib.meta @@ -0,0 +1,29 @@ +fileFormatVersion: 2 +guid: 3487f8a0f6484a4a98f04907037a4fae +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 0 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 0 + settings: {} + - first: + Editor: Editor + second: + enabled: 1 + settings: + CPU: AnyCPU + DefaultValueInitialized: true + OS: OSX + userData: + assetBundleName: + assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libNativeWindowBridge.dylib b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libNativeWindowBridge.dylib similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libNativeWindowBridge.dylib rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libNativeWindowBridge.dylib diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libNativeWindowBridge.dylib.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libNativeWindowBridge.dylib.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libNativeWindowBridge.dylib.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libNativeWindowBridge.dylib.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libcrypto.3.dylib b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libcrypto.3.dylib similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libcrypto.3.dylib rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libcrypto.3.dylib diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libcrypto.3.dylib.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libcrypto.3.dylib.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libcrypto.3.dylib.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libcrypto.3.dylib.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libdatachannel.dylib.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libdatachannel.dylib.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libdatachannel.dylib.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libdatachannel.dylib.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libssl.3.dylib b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libssl.3.dylib similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libssl.3.dylib rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libssl.3.dylib diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libssl.3.dylib.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libssl.3.dylib.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libssl.3.dylib.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Plugins/macOS/libssl.3.dylib.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/README.md b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/README.md similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/README.md rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/README.md diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/README.md.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/README.md.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/README.md.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/README.md.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/package.json b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/package.json similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/package.json rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/package.json diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/package.json.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/package.json.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/package.json.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/package.json.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/fix-meta-guids.ps1 b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/fix-meta-guids.ps1 similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/fix-meta-guids.ps1 rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/fix-meta-guids.ps1 diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/fix-meta-guids.ps1.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/fix-meta-guids.ps1.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/fix-meta-guids.ps1.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/fix-meta-guids.ps1.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/fix-meta-guids.sh b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/fix-meta-guids.sh similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/fix-meta-guids.sh rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/fix-meta-guids.sh diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/fix-meta-guids.sh.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/fix-meta-guids.sh.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/fix-meta-guids.sh.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/fix-meta-guids.sh.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/validate-meta-guids.bat b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/validate-meta-guids.bat similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/validate-meta-guids.bat rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/validate-meta-guids.bat diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/validate-meta-guids.bat.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/validate-meta-guids.bat.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/validate-meta-guids.bat.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/validate-meta-guids.bat.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/validate-meta-guids.sh b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/validate-meta-guids.sh similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/validate-meta-guids.sh rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/validate-meta-guids.sh diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/validate-meta-guids.sh.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/validate-meta-guids.sh.meta similarity index 100% rename from .codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/scripts/validate-meta-guids.sh.meta rename to .codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/scripts/validate-meta-guids.sh.meta diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/.codely-bridge-commit b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/.codely-bridge-commit deleted file mode 100644 index 16fa161..0000000 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/.codely-bridge-commit +++ /dev/null @@ -1 +0,0 @@ -785dea6a36da9d495b10bb73b7478e176ddd08fa diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/EditorAutomationGuard.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/EditorAutomationGuard.cs deleted file mode 100644 index 7f1a54d..0000000 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Helpers/EditorAutomationGuard.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; -using UnityEngine; -using UnityEngine.Rendering; - -namespace UnityTcp.Editor.Helpers -{ - /// - /// Detects unattended editor runs (CI / UTR batchmode) and gates bridge auto-start. - /// Set to opt in when integration tests need the bridge. - /// - internal static class EditorAutomationGuard - { - internal const string AllowBridgeInBatchEnvVar = "UNITY_TCP_ALLOW_BATCH"; - - internal static bool IsAutomatedEditorRun() - => Application.isBatchMode - || SystemInfo.graphicsDeviceType == GraphicsDeviceType.Null; - - internal static bool ShouldSkipBridgeAutoStart() - => IsAutomatedEditorRun() - && string.IsNullOrWhiteSpace(Environment.GetEnvironmentVariable(AllowBridgeInBatchEnvVar)); - } -} diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/SelectionChangedNotifier.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/SelectionChangedNotifier.cs deleted file mode 100644 index dee4294..0000000 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Bridge/Notifier/SelectionChangedNotifier.cs +++ /dev/null @@ -1,119 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using Codely.Newtonsoft.Json.Linq; -using UnityEditor; -using UnityEngine; -using UnityTcp.Editor.Helpers; - -namespace UnityTcp.Editor.Notifier -{ - /// - /// Broadcasts the current Editor selection to notifier clients whenever it - /// changes. The emitted payload mirrors the structure returned by - /// 's get_selection action. - /// - [InitializeOnLoad] - public static class SelectionChangedNotifier - { - private const string EventType = "selection_changed"; - - private static bool _flushScheduled; - - static SelectionChangedNotifier() - { - Selection.selectionChanged += OnSelectionChanged; - } - - private static void OnSelectionChanged() => ScheduleFlush(); - - private static void ScheduleFlush() - { - if (_flushScheduled) return; - _flushScheduled = true; - EditorApplication.delayCall += Flush; - } - - private static void Flush() - { - _flushScheduled = false; - try - { - if (!UnityTcpBridge.IsRunning) return; - - JObject payload = BuildSelectionPayload(); - if (payload == null) return; - - UnityTcpBridge.NotifyAll(EventType, payload); - } - catch (Exception e) - { - try { CodelyLogger.LogError($"[SelectionChangedNotifier] flush failed: {e.Message}"); } catch { } - } - } - - private static JObject BuildSelectionPayload() - { - var assetGUIDs = Selection.assetGUIDs; - var assetPaths = assetGUIDs?.Select(AssetDatabase.GUIDToAssetPath).ToArray(); - - string activeAssetPath = Selection.activeObject != null - ? AssetDatabase.GetAssetPath(Selection.activeObject) - : null; - string activeAsset = string.IsNullOrEmpty(activeAssetPath) - ? null - : Path.GetFullPath(activeAssetPath).Replace('\\', '/'); - - var payload = new - { - activeObject = Selection.activeObject?.name, - activeAsset = activeAsset, - activeGameObject = Selection.activeGameObject?.name, - activeTransform = Selection.activeTransform?.name, - activeInstanceID = InstanceIdExtensions.ActiveSelectionInstanceId(), -#if UNITY_2020_1_OR_NEWER - count = Selection.count, -#else - count = Selection.objects?.Length ?? 0, -#endif - objects = Selection.objects - .Where(obj => obj != null) - .Select(obj => new - { - name = obj.name, - type = obj.GetType().FullName, - instanceID = obj.GetStableInstanceId(), - }) - .ToList(), - gameObjects = Selection.gameObjects - .Where(go => go != null) - .Select(go => new - { - name = go.name, - path = GetGameObjectHierarchyPath(go), - instanceID = go.GetStableInstanceId(), - }) - .ToList(), - assetGUIDs = assetGUIDs, - assetPaths = assetPaths, - }; - - return JObject.FromObject(payload); - } - - private static string GetGameObjectHierarchyPath(GameObject obj) - { - if (obj == null) return string.Empty; - - var path = obj.name; - var parent = obj.transform != null ? obj.transform.parent : null; - while (parent != null) - { - path = $"{parent.name}/{path}"; - parent = parent.parent; - } - return path; - } - } -} diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common/InstanceIdExtensions.cs b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common/InstanceIdExtensions.cs deleted file mode 100644 index 1e31b88..0000000 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Editor/Common/InstanceIdExtensions.cs +++ /dev/null @@ -1,118 +0,0 @@ -using UnityEngine; -using UnityEditor; -using UnityEditorInternal; - -namespace UnityTcp.Editor.Helpers -{ - /// - /// Central compatibility surface for Unity's instance-id → EntityId - /// migration (Unity 6000.5 / Unity 6.5). - /// - /// Unity 6.5 deprecated every -based identity API with an - /// error-level obsolete attribute (CS0619) in favour of 64-bit EntityId - /// overloads that do not exist on earlier versions: - /// Object.GetInstanceID() -> Object.GetEntityId() - /// Selection.activeInstanceID -> Selection.activeEntityId - /// EditorUtility.InstanceIDToObject(int) -> EditorUtility.EntityIdToObject(EntityId) - /// InternalEditorUtility.GetObjectFromInstanceID(int) - /// -> InternalEditorUtility.GetObjectFromEntityId(EntityId) - /// AssetDatabase.GetAssetPath(int) -> AssetDatabase.GetAssetPath(EntityId) - /// - /// These helpers speak so the full 64-bit EntityId value is - /// carried losslessly and can be reconstructed exactly (no 32-bit truncation). - /// On pre-6.5 Unity the legacy int instance id widens implicitly to - /// long, so call sites see a single consistent type across versions. The - /// only version-specific code lives in the two conversion helpers at the bottom. - /// - public static class InstanceIdExtensions - { - // ---- producers: Object / Selection -> long id ------------------------- - - /// - /// Returns the object's stable instance id as a , or 0 if - /// the object is null/destroyed. Prefer this over GetInstanceID(). - /// - public static long GetStableInstanceId(this Object obj) - { - if (obj == null) return 0; -#if UNITY_6000_5_OR_NEWER - return ToLong(obj.GetEntityId()); -#else - return obj.GetInstanceID(); -#endif - } - - /// Active selection instance id, or 0 if nothing is selected. - public static long ActiveSelectionInstanceId() - { -#if UNITY_6000_5_OR_NEWER - return ToLong(Selection.activeEntityId); -#else -#pragma warning disable CS0618 - return Selection.activeInstanceID; -#pragma warning restore CS0618 -#endif - } - - // ---- consumers: long id -> Object / path ------------------------------ - - /// Resolves an instance id to its , or null. - public static Object InstanceIdToObject(long instanceId) - { -#if UNITY_6000_5_OR_NEWER - return EditorUtility.EntityIdToObject(ToEntityId(instanceId)); -#else -#pragma warning disable CS0618 - return EditorUtility.InstanceIDToObject((int)instanceId); -#pragma warning restore CS0618 -#endif - } - - /// - /// Resolves an instance id via InternalEditorUtility (used for objects - /// that will not return, e.g. some scene objects). - /// - public static Object ObjectFromInstanceId(long instanceId) - { -#if UNITY_6000_5_OR_NEWER - return InternalEditorUtility.GetObjectFromEntityId(ToEntityId(instanceId)); -#else -#pragma warning disable CS0618 - return InternalEditorUtility.GetObjectFromInstanceID((int)instanceId); -#pragma warning restore CS0618 -#endif - } - - /// Asset path for an instance id, or "" if it is not an asset. - public static string AssetPathFromInstanceId(long instanceId) - { -#if UNITY_6000_5_OR_NEWER - return AssetDatabase.GetAssetPath(ToEntityId(instanceId)); -#else -#pragma warning disable CS0618 - return AssetDatabase.GetAssetPath((int)instanceId); -#pragma warning restore CS0618 -#endif - } - -#if UNITY_6000_5_OR_NEWER - // ---- the ONLY version-specific conversions ---------------------------- - // Both are pure 64-bit bit reinterpretations of EntityId.ToULong (the - // canonical numeric form of an EntityId, which this project already uses), - // so ToEntityId is an exact inverse of ToLong with no loss of information. - - /// Reinterprets an EntityId as a 64-bit . - internal static long ToLong(EntityId entityId) - => unchecked((long)EntityId.ToULong(entityId)); - - /// - /// Exact inverse of : rebuilds the EntityId from - /// its 64-bit numeric form via EntityId.FromULong (the counterpart of - /// EntityId.ToULong), so an id survives a round-trip through storage or - /// the wire without loss. - /// - internal static EntityId ToEntityId(long instanceId) - => EntityId.FromULong(unchecked((ulong)instanceId)); -#endif - } -} diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Codely.Newtonsoft.Json.dll.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Codely.Newtonsoft.Json.dll.meta deleted file mode 100644 index bd185ae..0000000 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Codely.Newtonsoft.Json.dll.meta +++ /dev/null @@ -1,95 +0,0 @@ -fileFormatVersion: 2 -guid: 5bcc56c16573f0945aeefcb157e22736 -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 1 - isExplicitlyReferenced: 0 - validateReferences: 0 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude ArmLinux: 1 - Exclude ArmLinuxServer: 1 - Exclude Editor: 0 - Exclude EmbeddedLinux: 1 - Exclude HMIAndroid: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude QNX: 1 - Exclude WeixinMiniGame: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - EmbeddedLinux: EmbeddedLinux - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - HMIAndroid: HMIAndroid - second: - enabled: 0 - settings: - AndroidSharedLibraryType: Executable - CPU: ARMv7 - - first: - QNX: QNX - second: - enabled: 0 - settings: - CPU: AnyCPU - SDK: AnySDK - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Codely.Roslyn.dll.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Codely.Roslyn.dll.meta deleted file mode 100644 index 7e03924..0000000 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Codely.Roslyn.dll.meta +++ /dev/null @@ -1,95 +0,0 @@ -fileFormatVersion: 2 -guid: 38389b47caeb4d7493c8ef1fd954ab6a -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 1 - isExplicitlyReferenced: 1 - validateReferences: 0 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude ArmLinux: 1 - Exclude ArmLinuxServer: 1 - Exclude Editor: 0 - Exclude EmbeddedLinux: 1 - Exclude HMIAndroid: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude QNX: 1 - Exclude WeixinMiniGame: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - EmbeddedLinux: EmbeddedLinux - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - HMIAndroid: HMIAndroid - second: - enabled: 0 - settings: - AndroidSharedLibraryType: Executable - CPU: ARMv7 - - first: - QNX: QNX - second: - enabled: 0 - settings: - CPU: AnyCPU - SDK: AnySDK - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU - userData: - assetBundleName: - assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Linux/x86_64/libNativeTcpBridge.so.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Linux/x86_64/libNativeTcpBridge.so.meta deleted file mode 100644 index ea12fc6..0000000 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Linux/x86_64/libNativeTcpBridge.so.meta +++ /dev/null @@ -1,89 +0,0 @@ -fileFormatVersion: 2 -guid: abb8725b95ae4fd49e8f90016252dc0c -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 1 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude ArmLinux: 1 - Exclude ArmLinuxServer: 1 - Exclude Editor: 0 - Exclude EmbeddedLinux: 1 - Exclude HMIAndroid: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude QNX: 1 - Exclude WeixinMiniGame: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - CPU: x86_64 - DefaultValueInitialized: true - OS: Linux - - first: - EmbeddedLinux: EmbeddedLinux - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - HMIAndroid: HMIAndroid - second: - enabled: 0 - settings: - AndroidSharedLibraryType: Executable - CPU: ARMv7 - - first: - QNX: QNX - second: - enabled: 0 - settings: - CPU: AnyCPU - SDK: AnySDK - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: x86 - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: x86_64 - userData: - assetBundleName: - assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser.dll.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser.dll.meta deleted file mode 100644 index 865039d..0000000 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser.dll.meta +++ /dev/null @@ -1,63 +0,0 @@ -fileFormatVersion: 2 -guid: 0e1e756d3d2df9149ba70839ab1b645f -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 1 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : - second: - enabled: 0 - settings: {} - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 0 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Editor: Editor - second: - enabled: 1 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: AnyOS - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: x86 - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: x86_64 - userData: - assetBundleName: - assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/include/NativeBrowser.h.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/include/NativeBrowser.h.meta deleted file mode 100644 index b72811a..0000000 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeBrowser/include/NativeBrowser.h.meta +++ /dev/null @@ -1,47 +0,0 @@ -fileFormatVersion: 2 -guid: 952eec9c9781d7c478a1057764a499ea -PluginImporter: - externalObjects: {} - serializedVersion: 3 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 1 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - Any: - enabled: 0 - settings: - Exclude Editor: 0 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 - Editor: - enabled: 1 - settings: - CPU: x86_64 - DefaultValueInitialized: true - OS: Windows - Linux64: - enabled: 0 - settings: - CPU: None - OSXUniversal: - enabled: 0 - settings: - CPU: None - Win: - enabled: 0 - settings: - CPU: None - Win64: - enabled: 0 - settings: - CPU: x86_64 - OS: Windows - userData: - assetBundleName: - assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeIpcClient.dll.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeIpcClient.dll.meta deleted file mode 100644 index 40c2f67..0000000 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeIpcClient.dll.meta +++ /dev/null @@ -1,63 +0,0 @@ -fileFormatVersion: 2 -guid: 2cb1ee4cdb45fae41a791bcdb59188ac -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 1 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : - second: - enabled: 0 - settings: {} - - first: - : Any - second: - enabled: 0 - settings: - Exclude Editor: 0 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Editor: Editor - second: - enabled: 1 - settings: - CPU: x86_64 - DefaultValueInitialized: true - OS: Windows - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: x86 - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: x86_64 - userData: - assetBundleName: - assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeTcpBridge.dll b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeTcpBridge.dll deleted file mode 100644 index c541cf6..0000000 Binary files a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeTcpBridge.dll and /dev/null differ diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeTcpBridge.dll.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeTcpBridge.dll.meta deleted file mode 100644 index a7e3501..0000000 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/Win/NativeTcpBridge.dll.meta +++ /dev/null @@ -1,89 +0,0 @@ -fileFormatVersion: 2 -guid: c0f1e4f2a8f94f8f8fd7b6a90d7b6e3c -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 1 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude ArmLinux: 1 - Exclude ArmLinuxServer: 1 - Exclude Editor: 0 - Exclude EmbeddedLinux: 1 - Exclude HMIAndroid: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude QNX: 1 - Exclude WeixinMiniGame: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - CPU: x86_64 - DefaultValueInitialized: true - OS: Windows - - first: - EmbeddedLinux: EmbeddedLinux - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - HMIAndroid: HMIAndroid - second: - enabled: 0 - settings: - AndroidSharedLibraryType: Executable - CPU: ARMv7 - - first: - QNX: QNX - second: - enabled: 0 - settings: - CPU: AnyCPU - SDK: AnySDK - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: x86 - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: x86_64 - userData: - assetBundleName: - assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle.meta deleted file mode 100644 index 056fa6e..0000000 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/WebViewPlugin.bundle.meta +++ /dev/null @@ -1,66 +0,0 @@ -fileFormatVersion: 2 -guid: d2d8d6e91e1ac2043b37ba01ada2eaff -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 1 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude ArmLinux: 1 - Exclude ArmLinuxServer: 1 - Exclude Editor: 0 - Exclude EmbeddedLinux: 1 - Exclude HMIAndroid: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude WeixinMiniGame: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - DefaultValueInitialized: true - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: None - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: None - userData: - assetBundleName: - assetBundleVariant: diff --git a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libNativeTcpBridge.dylib.meta b/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libNativeTcpBridge.dylib.meta deleted file mode 100644 index 9c5cb5b..0000000 --- a/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a/Plugins/macOS/libNativeTcpBridge.dylib.meta +++ /dev/null @@ -1,89 +0,0 @@ -fileFormatVersion: 2 -guid: 3487f8a0f6484a4a98f04907037a4fae -PluginImporter: - externalObjects: {} - serializedVersion: 2 - iconMap: {} - executionOrder: {} - defineConstraints: [] - isPreloaded: 0 - isOverridable: 1 - isExplicitlyReferenced: 0 - validateReferences: 1 - platformData: - - first: - : Any - second: - enabled: 0 - settings: - Exclude ArmLinux: 1 - Exclude ArmLinuxServer: 1 - Exclude Editor: 0 - Exclude EmbeddedLinux: 1 - Exclude HMIAndroid: 1 - Exclude Linux64: 1 - Exclude OSXUniversal: 1 - Exclude QNX: 1 - Exclude WeixinMiniGame: 1 - Exclude Win: 1 - Exclude Win64: 1 - - first: - Any: - second: - enabled: 0 - settings: {} - - first: - Editor: Editor - second: - enabled: 1 - settings: - CPU: AnyCPU - DefaultValueInitialized: true - OS: OSX - - first: - EmbeddedLinux: EmbeddedLinux - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - HMIAndroid: HMIAndroid - second: - enabled: 0 - settings: - AndroidSharedLibraryType: Executable - CPU: ARMv7 - - first: - QNX: QNX - second: - enabled: 0 - settings: - CPU: AnyCPU - SDK: AnySDK - - first: - Standalone: Linux64 - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: OSXUniversal - second: - enabled: 0 - settings: - CPU: AnyCPU - - first: - Standalone: Win - second: - enabled: 0 - settings: - CPU: x86 - - first: - Standalone: Win64 - second: - enabled: 0 - settings: - CPU: x86_64 - userData: - assetBundleName: - assetBundleVariant: diff --git a/Assets/Prefabs/第一章/弓箭手.prefab b/Assets/Prefabs/第一章/弓箭手.prefab index 2591e85..ffa2511 100644 --- a/Assets/Prefabs/第一章/弓箭手.prefab +++ b/Assets/Prefabs/第一章/弓箭手.prefab @@ -93,7 +93,7 @@ PrefabInstance: - target: {fileID: -7676612043611361953, guid: 7b0dd5b38a9cd144ea135f3743440958, type: 3} propertyPath: m_Materials.Array.size - value: 2 + value: 1 objectReference: {fileID: 0} - target: {fileID: -7676612043611361953, guid: 7b0dd5b38a9cd144ea135f3743440958, type: 3} diff --git a/Assets/Scenes/Chapter1/CoreBattleTest.scene b/Assets/Scenes/Chapter1/CoreBattleTest.scene index c8af05d..04409b0 100644 --- a/Assets/Scenes/Chapter1/CoreBattleTest.scene +++ b/Assets/Scenes/Chapter1/CoreBattleTest.scene @@ -2740,7 +2740,7 @@ Camera: far clip plane: 500 field of view: 113.4 orthographic: 1 - orthographic size: 18 + orthographic size: 16 m_Depth: -1 m_CullingMask: serializedVersion: 2 @@ -2766,13 +2766,13 @@ Transform: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 963194225} serializedVersion: 2 - m_LocalRotation: {x: 0.5, y: 0, z: 0, w: 0.8660254} - m_LocalPosition: {x: 0, y: 30, z: -2.8} + m_LocalRotation: {x: 0.45399043, y: 0, z: 0, w: 0.8910066} + m_LocalPosition: {x: 0, y: 30, z: -7.8} m_LocalScale: {x: 1, y: 1, z: 1} m_ConstrainProportionsScale: 0 m_Children: [] m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 60, y: 0, z: 0} + m_LocalEulerAnglesHint: {x: 54, y: 0, z: 0} --- !u!114 &963194229 MonoBehaviour: m_ObjectHideFlags: 0 diff --git a/CODELY.md b/CODELY.md index 6009789..a5c2850 100644 --- a/CODELY.md +++ b/CODELY.md @@ -89,6 +89,7 @@ - [2026-09-22 10:58:17] 2026-09-21 远程弹道视觉方案调整建议:普通远程弹道继续使用 Projectile.cs 处理锁敌、飞行、碰撞和伤害;火球等圆形视觉优先使用 SpriteRenderer 始终朝向摄像机,不强制使用 Quad,以避免贴图方向难调。若有明显尾焰,再拆分核心 billboard 与按飞行方向旋转的尾焰层。 - [2026-09-22 13:39:47] 2026-09-22 投射物斜向问题修复:UnitBase 发射普通攻击和技能投射物时,不再把骨骼下 attackPos.rotation 传给 Projectile 根节点,统一使用 Quaternion.identity;attackPos 只负责提供生成位置。原因是法师/弓箭手的 attackPos 挂在手骨骼下,会继承动画旋转导致火球和箭矢斜着出现。 - [2026-09-23 22:13:21] 2026-09-23 角色黑色描边系统:Outline_Black.mat(Assets/Shader/Outline.shader,反向外扩 + Cull Front)以 SkinnedMeshRenderer 的 materials[1] 挂在全部 10 个角色 Prefab(人类士兵/弓箭手/法师/盾卫/精锐士兵/弓箭猎人/狼人/石巨人/蓝色怪物/召唤师主角),武器(短剑/盾牌/大剑/弓)不加描边。关键坑:_OutlineWidth 是物体空间数值,会被物体缩放放大,所以网格局部尺寸很小的模型描边会巨大化——蓝色怪物网格局部尺寸仅 0.02(被缩放约 160x),已改用专用材质 Outline_Black_小比例.mat(_OutlineWidth=0.0002)。零厚度平面(盾牌/大剑/弓)无法用反向外扩描边,会整块变黑或不可见,这是武器不描边的原因。已实测描边能跟随骨骼动画姿势。Why: 后续新增或替换角色模型时若局部缩放与 1 相差较大,必须同步调整描边宽度,否则整个模型会被黑色吞没。 +- [2026-09-24 19:29:56] 2026-09-24 玩法定稿转向「塔防版」并取代拆家版主线:己方半场网格部署固定5个英雄(近战前/远程后),敌人从上方按波次进攻,英雄会走位自动交战(复用UnitBase,需加"格位锚点+追击上限leash"否则会一路推出去被逐个点掉);玩家战斗内只有两个操作——手动全屏技能 + 3选1增益卡(不拖拽、不补兵);场上5英雄同时全灭即判负(无基地/核心),英雄死亡20秒复活、每局2次看广告立即复活。卡牌稀有度 蓝<紫<橙<酒红(传奇),稀有度只加机制复杂度不加数值;主线固定难度卡点,刷碎片/金币可自由调难度;名义PVP本地段位有效;疲劳待定。Why: 用户多轮迭代后确定,此前拆家版/召唤师对决均已封存。How: 新战斗基于塔防版开发;拆家版存档分支、其设计文档作废;Phase1 只做战斗垂直切片不碰元成长。 ### Reference - [2026-09-09 12:23:17] 飞行物脚本 Projectile.cs 负责锁敌追踪、碰撞检测和伤害结算。箭矢预制体 ArrowProjectile_White.prefab 已配置 Projectile 组件和 CapsuleCollider(Is Trigger)。远程单位需在攻击动画松弦帧添加 OnAttackEffect Event,并在 UnitBase 中设置 attackType=RangedProjectile、projectilePrefab、projectileSpawnPoint。 diff --git a/Packages/manifest.json b/Packages/manifest.json index 45f8cae..2c3910b 100644 --- a/Packages/manifest.json +++ b/Packages/manifest.json @@ -1,7 +1,7 @@ { "dependencies": { "cn.tuanjie.ai.graph": "1.0.10", - "cn.tuanjie.codely.bridge": "file:../.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a", + "cn.tuanjie.codely.bridge": "file:../.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100", "com.qq.weixin.minigame": "https://gitee.com/wechat-minigame/minigame-tuanjie-transform-sdk.git", "com.unity.2d.sprite": "1.0.0", "com.unity.adaptiveperformance": "4.0.1", diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index b62ee28..fb53c44 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -31,7 +31,7 @@ "url": "https://packages.tuanjie.cn" }, "cn.tuanjie.codely.bridge": { - "version": "file:../.codely.packages/cn.tuanjie.codely.bridge@1.0.85-785dea6a", + "version": "file:../.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100", "depth": 0, "source": "local", "dependencies": { diff --git a/召唤之战 - 核心玩法拆家版.md b/召唤之战 - 核心玩法拆家版.md index 37164ad..c993652 100644 --- a/召唤之战 - 核心玩法拆家版.md +++ b/召唤之战 - 核心玩法拆家版.md @@ -1,4 +1,7 @@ # 召唤之战-核心玩法拆家版 + +> ⚠️ **本方案已作废(2026-09-24)**:主线玩法已改为「塔防版」,见《召唤之战-核心玩法塔防版.md》。本文档仅作历史记录,相关脚本封存保留作素材。 + > 版本:V1.2(2026-09-19 按当前实现更新战斗玩法) > 定位:竖版手机休闲即时战略小游戏 > 单局时长:1~3分钟 diff --git a/召唤之战-核心玩法塔防版.md b/召唤之战-核心玩法塔防版.md new file mode 100644 index 0000000..e15b5a2 --- /dev/null +++ b/召唤之战-核心玩法塔防版.md @@ -0,0 +1,258 @@ +# 召唤之战-核心玩法塔防版 + +> 版本:V1.0(2026-09-24 定稿) +> +> 定位:竖版手机**单机**休闲策略小游戏 +> +> 单局时长:2~4 分钟 +> +> 核心目标:在波次进攻中守住己方半场,出战英雄不被**同时全灭** +> +> 取代关系:本方案取代《召唤之战 - 核心玩法拆家版.md》(该文档已标记作废,拆家版存档到分支,脚本保留作素材) + +## 一、核心定位 + +一句话规则:**开局在己方半场网格部署固定英雄阵容 → 敌人从上方按波次进攻 → 英雄自动走位交战 → 玩家手动放全屏技能 + 选增益卡 → 撑过波次**。 + +- 英雄由 AI 自动走位和作战,玩家**不微操走位**; +- 玩家的全部操作只有两类:**手动释放全屏技能**、**从 3 选 1 中挑增益卡**; +- 与同类游戏的差异: + - 对比 PvZ:英雄**会走位**自动交战,不是站桩塔;有英雄死亡/复活与全灭判负; + - 对比皇室战争:**没有基地/推塔**,胜负只看英雄存活;没有实时 PVP 数据强一致。 + +## 二、单局战斗结构 + +```text +开局部署阶段 + 选择出战英雄(默认 5 个,可配置) + → 点到/拖到己方半场网格(默认近战在前、远程在后,也可手动摆) + → 点「开始」进入战斗 + +防守阶段(循环) + 敌人从上方按波次生成 → 英雄自动走位接敌 → 击杀计数累积 + → 每累计 N 个击杀 → 弹出 3 选 1 增益卡 + → 玩家在关键波次手动释放全屏技能 + → 英雄死亡 20 秒后复活;每局 2 次「看广告立即复活」 + +结束阶段 + 场上全部出战英雄同时全灭 → 濒死窗口(3~5 秒)→ 窗口结束仍全灭 → 本局失败 + 撑过本关全部波次 → 通关结算(碎片 / 金币 / 抽卡次数) +``` + +## 三、战场与部署 + +- 竖版 9:16;沿用现有正交俯视相机方案(约 43°,orthoSize 按取景微调); +- 战场为纵向长方形,敌人在 Z 轴正方向(上方)生成,己方在 Z 轴负方向(下方); +- **部署区 = 己方半场靠后的网格**,建议 6 列 × 3 行、格距约 2.5~3 米(Phase 1 建场景时按取景微调); +- 默认摆放规则:**近战在前排(靠近敌人一侧)、远程/法师在后排**; +- 出战英雄数量默认 5,数据结构支持可变(关卡/玩法可指定上限); +- 网格占位检测 + 吸附复用 `BattleSetupManager` 的布阵实现。 + +## 四、英雄行为规则 + +### 4.1 会走位自动交战 + +英雄复用 `UnitBase` 的寻敌 / 攻击 / 寻路逻辑(NavMesh + 根运动),会主动走向敌人开打。 + +### 4.2 格位锚点 + 追击上限(leash)—— 必须补的规则 + +因为英雄会走位、且没有基地,若完全用 `UnitBase` 现有的「视野内最近敌人就追」,英雄会一路推向敌人生成点,阵型瓦解、被逐个点掉。规则: + +- 每个英雄绑定**自己的初始格位作为锚点**; +- 英雄最多离开锚点 **6~8 米**(建议 7,待调); +- 超出上限 → 放弃追击、返回锚点待机; +- 复活后回到**自己的锚点格位**再重新接敌; +- 锚点机制做成 `UnitBase` 的**可选开关**(默认关闭),不影响旧场景。 + +### 4.3 目标锁定 + +沿用现有规则:无有效目标时才寻敌;锁定后保持;目标死亡 / 失活 / 离开攻击范围才解锁。英雄在本玩法中没有「使命建筑」,只做单位寻敌。 + +## 五、胜负判定 + +- **无基地 / 核心**,胜负只看英雄存活; +- **判负条件**:同一时刻场上**全部**出战英雄都处于死亡态; + - 4 死 1 活不算;英雄 20 秒后复活,因此判负通常发生在「一波把全部英雄同时打死」的瞬间; +- **濒死窗口**:全灭时不立即结束,进入 **3~5 秒(建议 4)** 窗口; + - 窗口内有英雄自然复活、或玩家使用「看广告立即复活」→ 继续本局; + - 窗口结束仍全灭 → 本局结束(失败); +- **看广告立即复活**:每局 **2 次**,可立即复活全部(或指定)英雄;Phase 1 先留接口,不接广告 SDK; +- **通关**:撑过本关全部波次即胜利。 + +## 六、波次系统 + +### 6.1 波次定义 + +- 每关由若干**波次**组成,波次用 ScriptableObject 描述(敌兵种类、数量、生成间隔、生成列); +- 复用封存的 `WaveSpawner` 作为基础; +- 波次之间可有短暂间歇(喘息 + 看增益卡)。 + +### 6.2 敌人构成方案 + +采用「**角色单位 + 小怪**」混合,但小怪不做多种模型——**1 个底模 + 大小 / 颜色 / 行为变体**: + +- 底模直接复用现有**蓝色怪物**(量产低价单位,已计划减面); +- 只调三个参数:**体型档位、颜色 tint、攻击方式**; +- 精英波直接用现有 9 个角色;**Boss 复用现有大体型单位(如石巨人)加配件**,不新做模型。 + +| 变体 | 体型 | 颜色 | 行为 | 出现章节 / 用途 | +|---|---|---|---|---| +| 快速兵 | 小 (0.7x) | 绿 | 近战、移速快、血少 | 第 1 章起,前期杂兵 | +| 远程兵 | 中 (1.0x) | 蓝 | 远程投射 | 第 1 章起,逼英雄不能站桩 | +| 自爆兵 | 小 (0.8x) | 红 | 冲脸自爆 AOE | 第 2 章起,反扎堆 | +| 重甲兵 | 大 (1.3x) | 灰 | 高血、低速 | 第 2 章起,前排肉 | +| 辅助兵 | 中 (1.0x) | 黄 | 给周围加速 / 回血 | 第 3 章起 | +| 精英 | 大 (1.5x) | 紫 | 复用现有角色 | 各章精英波 | +| Boss | 特大 (2.0x) | 酒红 | 石巨人 + 配件 | 章节关底 | + +> 章节差异靠**新行为**(飞行、治疗、护盾)而不是新模型,控制制作量。 +> +> 注意:蓝色怪物网格局部缩放极小(约 0.02,被放大上百倍),做描边 / 变体时需同步调整描边材质与缩放,否则描边会巨大化。 + +## 七、战斗内增益(3 选 1 特效卡) + +- **触发**:累计击杀达到阈值(建议每 20~30 个,待调)后弹出 3 选 1; +- **形式**:从卡池随机 3 张,玩家选 1,立即生效(可选持续到本局结束); +- **首版卡池(4 种)**:加攻击 / 回复血量 / 加攻速 / 加技能积攒速度; +- **后续扩展**:加射程、加暴击、召唤援军、短时无敌等; +- **注意**:增益卡**可以**加「技能积攒速度」,但**元成长升级不能加**——两者是两个独立数值字段,不要混用; +- 需要有**叠加上限 / 递减**,避免长局数值失控。 + +## 八、玩家技能系统(战斗主操作) + +- **获取**:只能通过**抽卡 / 签到**获得(不通过升级解锁); +- **首版技能**:全屏伤害、治疗、冰冻(范围 / 持续); +- **积攒**:**普攻命中积攒**(近战 / 远程都算)——这样「攻速增益」会间接加速技能,形成 build 联动;具体每次命中积攒量待调; +- **释放**:手动按钮,有 CD 或消耗满槽能量; +- 冰冻 / 眩晕复用现有 `StatusEffectController`。 + +## 九、元成长系统(Phase 2 起,Phase 1 不做) + +### 9.1 卡牌与稀有度 + +**稀有度 = 机制复杂度,不是数值强度**: + +| 边框 | 稀有度 | 定位 | 升级难度 | +|---|---|---|---| +| 蓝 | 普通 | 纯数值 | 低 | +| 紫 | 稀有 | 多一个技能效果 | 中 | +| 橙 | 史诗 | 改变技能形态 | 高 | +| 酒红 | 传奇 | 改变玩法规则 | 最高 | + +- 边框顺序:**蓝 < 紫 < 橙 < 酒红**(酒红 = 传奇); +- 稀有度只让卡「更好玩一点、更强一点」,主要靠**更难升级**来平衡。 + +### 9.2 碎片 / 解锁 / 升级 + +- **解锁**:需要 5 张碎片; +- **升级**:每级所需碎片递增,稀有度越高基数越大(具体曲线待定); +- **升级增加**:生命、普攻伤害、技能伤害、解锁新的技能效果; +- **升级不增加**:普攻积攒技能速度(这条杠杆只留给战斗内增益卡)。 + +### 9.3 抽卡 + +- **抽卡次数**:通关获得 1 次,**看广告翻倍**; +- **全屏技能只能抽卡 / 签到获取**; +- **传奇卡(酒红)**:主线**高难度复刷**才有概率掉落,或通过抽卡; +- 建议教学关直接送 1~2 个技能,保证玩家早期能体验技能系统。 + +### 9.4 难度滑条 + +- 每关可调**难度倍数**(建议 1.0x~3.0x); +- **主线推进用固定基线难度(卡点在这里)**; +- **刷碎片 / 金币可自由调难度,难度越高收益倍率越高**(传奇碎片只在高倍率掉); +- 两条线分开,避免「调低难度就绕过卡点」。 + +### 9.5 关卡章节 + +- 主线按章节推进,每章适当提升难度并解锁不同卡牌; +- 每章引入新机制(新敌兵行为),不只是数值放大; +- **大关**是卡点(获取 / 结算碎片的关键关),用于推动玩家升级、看广告。 + +### 9.6 无尽模式 + +- 按波次给**金币**(升级卡组的消耗来源); +- 波次无限递增,可调难度以适配高等级玩家; +- 定位:**金币来源**;主线复刷 → 碎片来源。 + +### 9.7 名义 PVP(异步竞技场) + +- 名义 PVP:不做数据强一致,不做邀请对战; +- 可获取「同等级玩家的阵容和摆放位置」(无后端时先用预设 + 随机偏移模拟); +- **结果可以对玩家有利**(甚至两边都赢),但**本地必须有段位 / 奖励变化**,否则玩家没有动力; +- 参考形态:异步竞技场(剑与远征式)。 + +### 9.8 疲劳系统 + +- 单机 + 无挂机奖励的前提下,硬锁疲劳意义不大、易显得纯惩罚; +- **建议**:要么不做;要么**只作用于无尽模式**,且用「收益衰减」(超过 N 次后金币 / 碎片打折)而不是「不能玩」。 + +## 十、数值基准 + +- 英雄基础属性沿用《角色数值设计.md》的 1 级基准表与升级成长建议; +- 敌人强度按「章节基线 × 难度倍数」计算; +- 波次强度建议曲线(待调):第 1 章 3~5 波,敌人数量与质量线性上升,末尾一波含精英 / Boss。 + +## 十一、UI 布局 + +```text +┌──────────────────────────────┐ +│ 顶部:波次进度 / 击杀计数 / 暂停 │ +│ │ +│ 战场(2.5D) │ +│ 上方:敌人生成区 │ +│ 下方:己方半场部署网格 │ +│ │ +├──────────────────────────────┤ +│ 技能按钮(全屏技能,CD / 能量) │ +└──────────────────────────────┘ +``` + +- 部署阶段:底部为出战英雄卡组 + 「开始」按钮; +- 战斗阶段:底部为全屏技能按钮;3 选 1 增益卡为战斗内弹窗(覆盖式); +- 单位头顶血条沿用 `WorldHealthBar`,伤害数字沿用 `DamageNumber`。 + +## 十二、开发落地 + +### 12.1 可直接复用 + +| 系统 | 现有实现 | +|---|---| +| 单位行为(寻敌 / 攻击 / 寻路 / 根运动) | `UnitBase` | +| 卡牌与升级数据 | `CharacterData` / `PlayerCharacterData` / `PlayerDataManager` | +| 能量 / 资源 | `ManaSystem` | +| 投射物 | `Projectile` | +| 血条与伤害数字 | `WorldHealthBar` / `DamageNumber` | +| 控制效果(冰冻 / 眩晕) | `StatusEffectController` | +| 网格布阵(吸附 / 占位) | `BattleSetupManager` | +| 波次刷怪 | `WaveSpawner`(封存中) | +| 相机 | `CameraFollow` / 现有正交相机方案 | +| 固定卡组与轮转 | `BattleDeckCycle` / `CastleSpawnManager` | + +### 12.2 需要新做 + +- 波次关卡数据(ScriptableObject:敌兵构成 / 间隔 / 生成列); +- 英雄格位锚点 + 追击上限(`UnitBase` 可选开关); +- 击杀计数 + 3 选 1 增益卡系统与卡池; +- 全屏技能按钮 + 普攻命中积攒能量; +- 胜负判定(全灭 + 濒死窗口 + 广告复活接口)。 + +### 12.3 封存 / 不再作为主线 + +- 拆家版:`AttackTargetController` 攻击标志、`CrystalMineCapture` 据点争夺、城堡拆家逻辑 —— 存档到分支,脚本保留作素材; +- `BuildingPlacementManager` / `Barracks` / `GoldMine` / `SummonerDuelManager` —— 封存素材。 + +### 12.4 分阶段 + +- **Phase 1(垂直切片,只做 1 个战斗场景)**:网格部署 5 英雄 + 3 波敌人 + 3 选 1 增益 + 全屏技能 + 胜负判定。**不碰**抽卡 / 碎片 / 升级 / 关卡 / 无尽 / PVP / 疲劳 / 广告 SDK。 +- **Phase 2**:元成长(碎片 / 升级 / 抽卡)+ 第一章关卡。 +- **Phase 3**:无尽 + 难度滑条。 +- **Phase 4**:名义 PVP、疲劳、签到、广告。 + +## 十三、待确认项 + +- 技能积攒:确认「普攻命中积攒」(当前建议); +- 追击上限 leash 数值(当前建议 7 米); +- 增益卡叠加上限与递减规则; +- 疲劳系统是否做(当前建议不做或只作用于无尽); +- 网格尺寸与相机取景(Phase 1 建场景时确定)。