@mflrevan/ucp 0.4.4 → 0.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (81) hide show
  1. package/README.md +1 -1
  2. package/bridge/com.ucp.bridge/CHANGELOG.md +145 -0
  3. package/bridge/com.ucp.bridge/CHANGELOG.md.meta +7 -0
  4. package/bridge/com.ucp.bridge/Editor/Bridge/BridgeServer.cs +583 -0
  5. package/bridge/com.ucp.bridge/Editor/Bridge/BridgeServer.cs.meta +2 -0
  6. package/bridge/com.ucp.bridge/Editor/Bridge.meta +8 -0
  7. package/bridge/com.ucp.bridge/Editor/Controllers/AssetController.cs +425 -0
  8. package/bridge/com.ucp.bridge/Editor/Controllers/AssetController.cs.meta +2 -0
  9. package/bridge/com.ucp.bridge/Editor/Controllers/AssetImportSupport.cs +355 -0
  10. package/bridge/com.ucp.bridge/Editor/Controllers/AssetImportSupport.cs.meta +2 -0
  11. package/bridge/com.ucp.bridge/Editor/Controllers/BuildController.cs +233 -0
  12. package/bridge/com.ucp.bridge/Editor/Controllers/BuildController.cs.meta +2 -0
  13. package/bridge/com.ucp.bridge/Editor/Controllers/CompilationController.cs +26 -0
  14. package/bridge/com.ucp.bridge/Editor/Controllers/CompilationController.cs.meta +2 -0
  15. package/bridge/com.ucp.bridge/Editor/Controllers/EditorController.cs +31 -0
  16. package/bridge/com.ucp.bridge/Editor/Controllers/EditorController.cs.meta +2 -0
  17. package/bridge/com.ucp.bridge/Editor/Controllers/EditorSettingsController.cs +527 -0
  18. package/bridge/com.ucp.bridge/Editor/Controllers/EditorSettingsController.cs.meta +2 -0
  19. package/bridge/com.ucp.bridge/Editor/Controllers/FileController.cs +141 -0
  20. package/bridge/com.ucp.bridge/Editor/Controllers/FileController.cs.meta +2 -0
  21. package/bridge/com.ucp.bridge/Editor/Controllers/HierarchyController.cs +326 -0
  22. package/bridge/com.ucp.bridge/Editor/Controllers/HierarchyController.cs.meta +2 -0
  23. package/bridge/com.ucp.bridge/Editor/Controllers/ImporterController.cs +209 -0
  24. package/bridge/com.ucp.bridge/Editor/Controllers/ImporterController.cs.meta +2 -0
  25. package/bridge/com.ucp.bridge/Editor/Controllers/LogsController.cs +409 -0
  26. package/bridge/com.ucp.bridge/Editor/Controllers/LogsController.cs.meta +2 -0
  27. package/bridge/com.ucp.bridge/Editor/Controllers/MaterialController.cs +354 -0
  28. package/bridge/com.ucp.bridge/Editor/Controllers/MaterialController.cs.meta +2 -0
  29. package/bridge/com.ucp.bridge/Editor/Controllers/ObjectReferenceResolver.cs +93 -0
  30. package/bridge/com.ucp.bridge/Editor/Controllers/ObjectReferenceResolver.cs.meta +2 -0
  31. package/bridge/com.ucp.bridge/Editor/Controllers/PackagesController.cs +503 -0
  32. package/bridge/com.ucp.bridge/Editor/Controllers/PackagesController.cs.meta +2 -0
  33. package/bridge/com.ucp.bridge/Editor/Controllers/PlayModeController.cs +188 -0
  34. package/bridge/com.ucp.bridge/Editor/Controllers/PlayModeController.cs.meta +2 -0
  35. package/bridge/com.ucp.bridge/Editor/Controllers/PrefabController.cs +260 -0
  36. package/bridge/com.ucp.bridge/Editor/Controllers/PrefabController.cs.meta +2 -0
  37. package/bridge/com.ucp.bridge/Editor/Controllers/ProfilerController.cs +1679 -0
  38. package/bridge/com.ucp.bridge/Editor/Controllers/ProfilerController.cs.meta +2 -0
  39. package/bridge/com.ucp.bridge/Editor/Controllers/PropertyController.cs +563 -0
  40. package/bridge/com.ucp.bridge/Editor/Controllers/PropertyController.cs.meta +2 -0
  41. package/bridge/com.ucp.bridge/Editor/Controllers/SceneChangeTracker.cs +166 -0
  42. package/bridge/com.ucp.bridge/Editor/Controllers/SceneChangeTracker.cs.meta +2 -0
  43. package/bridge/com.ucp.bridge/Editor/Controllers/SceneController.cs +318 -0
  44. package/bridge/com.ucp.bridge/Editor/Controllers/SceneController.cs.meta +2 -0
  45. package/bridge/com.ucp.bridge/Editor/Controllers/ScreenshotController.cs +125 -0
  46. package/bridge/com.ucp.bridge/Editor/Controllers/ScreenshotController.cs.meta +2 -0
  47. package/bridge/com.ucp.bridge/Editor/Controllers/ScriptController.cs +104 -0
  48. package/bridge/com.ucp.bridge/Editor/Controllers/ScriptController.cs.meta +2 -0
  49. package/bridge/com.ucp.bridge/Editor/Controllers/SnapshotController.cs +227 -0
  50. package/bridge/com.ucp.bridge/Editor/Controllers/SnapshotController.cs.meta +2 -0
  51. package/bridge/com.ucp.bridge/Editor/Controllers/TestRunnerController.cs +240 -0
  52. package/bridge/com.ucp.bridge/Editor/Controllers/TestRunnerController.cs.meta +2 -0
  53. package/bridge/com.ucp.bridge/Editor/Controllers/VcsController.cs +611 -0
  54. package/bridge/com.ucp.bridge/Editor/Controllers/VcsController.cs.meta +2 -0
  55. package/bridge/com.ucp.bridge/Editor/Controllers.meta +8 -0
  56. package/bridge/com.ucp.bridge/Editor/Protocol/CommandRouter.cs +53 -0
  57. package/bridge/com.ucp.bridge/Editor/Protocol/CommandRouter.cs.meta +2 -0
  58. package/bridge/com.ucp.bridge/Editor/Protocol/MessageTypes.cs +80 -0
  59. package/bridge/com.ucp.bridge/Editor/Protocol/MessageTypes.cs.meta +2 -0
  60. package/bridge/com.ucp.bridge/Editor/Protocol/MiniJson.cs +358 -0
  61. package/bridge/com.ucp.bridge/Editor/Protocol/MiniJson.cs.meta +2 -0
  62. package/bridge/com.ucp.bridge/Editor/Protocol.meta +8 -0
  63. package/bridge/com.ucp.bridge/Editor/Scripts/IUCPScript.cs +37 -0
  64. package/bridge/com.ucp.bridge/Editor/Scripts/IUCPScript.cs.meta +2 -0
  65. package/bridge/com.ucp.bridge/Editor/Scripts.meta +8 -0
  66. package/bridge/com.ucp.bridge/Editor/UCP.Bridge.Editor.asmdef +16 -0
  67. package/bridge/com.ucp.bridge/Editor/UCP.Bridge.Editor.asmdef.meta +7 -0
  68. package/bridge/com.ucp.bridge/Editor.meta +8 -0
  69. package/bridge/com.ucp.bridge/Runtime/UCP.Bridge.Runtime.asmdef +14 -0
  70. package/bridge/com.ucp.bridge/Runtime/UCP.Bridge.Runtime.asmdef.meta +7 -0
  71. package/bridge/com.ucp.bridge/Runtime.meta +8 -0
  72. package/bridge/com.ucp.bridge/Tests/Editor/ControllerSmokeTests.cs +1085 -0
  73. package/bridge/com.ucp.bridge/Tests/Editor/ControllerSmokeTests.cs.meta +2 -0
  74. package/bridge/com.ucp.bridge/Tests/Editor/UCP.Bridge.Editor.Tests.asmdef +12 -0
  75. package/bridge/com.ucp.bridge/Tests/Editor/UCP.Bridge.Editor.Tests.asmdef.meta +7 -0
  76. package/bridge/com.ucp.bridge/Tests/Editor.meta +8 -0
  77. package/bridge/com.ucp.bridge/Tests.meta +8 -0
  78. package/bridge/com.ucp.bridge/package.json +27 -0
  79. package/bridge/com.ucp.bridge/package.json.meta +7 -0
  80. package/package.json +2 -2
  81. package/scripts/install.js +4 -6
@@ -0,0 +1,260 @@
1
+ using System;
2
+ using System.Collections.Generic;
3
+ using System.Linq;
4
+ using UnityEditor;
5
+ using UnityEditor.SceneManagement;
6
+ using UnityEngine;
7
+ using UnityEngine.SceneManagement;
8
+
9
+ namespace UCP.Bridge
10
+ {
11
+ public static class PrefabController
12
+ {
13
+ public static void Register(CommandRouter router)
14
+ {
15
+ router.Register("prefab/status", HandleStatus);
16
+ router.Register("prefab/apply", HandleApply);
17
+ router.Register("prefab/revert", HandleRevert);
18
+ router.Register("prefab/unpack", HandleUnpack);
19
+ router.Register("prefab/create", HandleCreate);
20
+ router.Register("prefab/overrides", HandleOverrides);
21
+ }
22
+
23
+ private static object HandleStatus(string paramsJson)
24
+ {
25
+ var p = MiniJson.Deserialize(paramsJson) as Dictionary<string, object>;
26
+ if (p == null || !p.TryGetValue("instanceId", out var idObj))
27
+ throw new ArgumentException("Missing 'instanceId' parameter");
28
+
29
+ var go = EditorUtility.EntityIdToObject(Convert.ToInt32(idObj)) as GameObject;
30
+ if (go == null)
31
+ throw new ArgumentException($"GameObject not found: {idObj}");
32
+
33
+ bool isPrefab = PrefabUtility.IsPartOfAnyPrefab(go);
34
+ bool isInstance = PrefabUtility.IsPartOfPrefabInstance(go);
35
+ bool isRoot = PrefabUtility.IsOutermostPrefabInstanceRoot(go);
36
+ bool hasOverrides = PrefabUtility.HasPrefabInstanceAnyOverrides(go, false);
37
+
38
+ var result = new Dictionary<string, object>
39
+ {
40
+ ["name"] = go.name,
41
+ ["isPrefab"] = isPrefab,
42
+ ["isInstance"] = isInstance,
43
+ ["isRoot"] = isRoot,
44
+ ["hasOverrides"] = hasOverrides
45
+ };
46
+
47
+ if (isInstance)
48
+ {
49
+ var source = PrefabUtility.GetCorrespondingObjectFromSource(go);
50
+ if (source != null)
51
+ {
52
+ result["sourcePath"] = AssetDatabase.GetAssetPath(source);
53
+ result["sourceName"] = source.name;
54
+ }
55
+ }
56
+
57
+ return result;
58
+ }
59
+
60
+ private static object HandleApply(string paramsJson)
61
+ {
62
+ var p = MiniJson.Deserialize(paramsJson) as Dictionary<string, object>;
63
+ if (p == null || !p.TryGetValue("instanceId", out var idObj))
64
+ throw new ArgumentException("Missing 'instanceId' parameter");
65
+
66
+ var go = EditorUtility.EntityIdToObject(Convert.ToInt32(idObj)) as GameObject;
67
+ if (go == null)
68
+ throw new ArgumentException($"GameObject not found: {idObj}");
69
+
70
+ if (!PrefabUtility.IsPartOfPrefabInstance(go))
71
+ throw new ArgumentException("Object is not a prefab instance");
72
+
73
+ string assetPath = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(go);
74
+ PrefabUtility.ApplyPrefabInstance(go, InteractionMode.AutomatedAction);
75
+ EditorSceneManager.MarkSceneDirty(SceneManager.GetActiveScene());
76
+ SceneChangeTracker.RecordGameObjectChange(go, "Prefab");
77
+
78
+ return new Dictionary<string, object>
79
+ {
80
+ ["status"] = "ok",
81
+ ["assetPath"] = assetPath
82
+ };
83
+ }
84
+
85
+ private static object HandleRevert(string paramsJson)
86
+ {
87
+ var p = MiniJson.Deserialize(paramsJson) as Dictionary<string, object>;
88
+ if (p == null || !p.TryGetValue("instanceId", out var idObj))
89
+ throw new ArgumentException("Missing 'instanceId' parameter");
90
+
91
+ var go = EditorUtility.EntityIdToObject(Convert.ToInt32(idObj)) as GameObject;
92
+ if (go == null)
93
+ throw new ArgumentException($"GameObject not found: {idObj}");
94
+
95
+ if (!PrefabUtility.IsPartOfPrefabInstance(go))
96
+ throw new ArgumentException("Object is not a prefab instance");
97
+
98
+ PrefabUtility.RevertPrefabInstance(go, InteractionMode.AutomatedAction);
99
+ EditorSceneManager.MarkSceneDirty(SceneManager.GetActiveScene());
100
+ SceneChangeTracker.RecordGameObjectChange(go, "Prefab");
101
+
102
+ return new Dictionary<string, object>
103
+ {
104
+ ["status"] = "ok",
105
+ ["name"] = go.name
106
+ };
107
+ }
108
+
109
+ private static object HandleUnpack(string paramsJson)
110
+ {
111
+ var p = MiniJson.Deserialize(paramsJson) as Dictionary<string, object>;
112
+ if (p == null || !p.TryGetValue("instanceId", out var idObj))
113
+ throw new ArgumentException("Missing 'instanceId' parameter");
114
+
115
+ bool completely = false;
116
+ if (p.TryGetValue("completely", out var compObj))
117
+ completely = Convert.ToBoolean(compObj);
118
+
119
+ var go = EditorUtility.EntityIdToObject(Convert.ToInt32(idObj)) as GameObject;
120
+ if (go == null)
121
+ throw new ArgumentException($"GameObject not found: {idObj}");
122
+
123
+ if (!PrefabUtility.IsPartOfPrefabInstance(go))
124
+ throw new ArgumentException("Object is not a prefab instance");
125
+
126
+ var mode = completely
127
+ ? PrefabUnpackMode.Completely
128
+ : PrefabUnpackMode.OutermostRoot;
129
+
130
+ PrefabUtility.UnpackPrefabInstance(go, mode, InteractionMode.AutomatedAction);
131
+ EditorSceneManager.MarkSceneDirty(SceneManager.GetActiveScene());
132
+ SceneChangeTracker.RecordGameObjectChange(go, "Prefab");
133
+
134
+ return new Dictionary<string, object>
135
+ {
136
+ ["status"] = "ok",
137
+ ["name"] = go.name,
138
+ ["mode"] = mode.ToString()
139
+ };
140
+ }
141
+
142
+ private static object HandleCreate(string paramsJson)
143
+ {
144
+ var p = MiniJson.Deserialize(paramsJson) as Dictionary<string, object>;
145
+ if (p == null || !p.TryGetValue("instanceId", out var idObj))
146
+ throw new ArgumentException("Missing 'instanceId' parameter");
147
+ if (!p.TryGetValue("path", out var pathObj))
148
+ throw new ArgumentException("Missing 'path' parameter");
149
+
150
+ var go = EditorUtility.EntityIdToObject(Convert.ToInt32(idObj)) as GameObject;
151
+ if (go == null)
152
+ throw new ArgumentException($"GameObject not found: {idObj}");
153
+
154
+ string savePath = pathObj.ToString();
155
+
156
+ // Ensure directory exists
157
+ string dir = System.IO.Path.GetDirectoryName(savePath);
158
+ if (!string.IsNullOrEmpty(dir) && !AssetDatabase.IsValidFolder(dir))
159
+ {
160
+ CreateFoldersRecursive(dir);
161
+ }
162
+
163
+ bool success;
164
+ var prefab = PrefabUtility.SaveAsPrefabAssetAndConnect(
165
+ go,
166
+ savePath,
167
+ InteractionMode.AutomatedAction,
168
+ out success
169
+ );
170
+
171
+ if (!success || prefab == null)
172
+ throw new InvalidOperationException($"Failed to create prefab at {savePath}");
173
+
174
+ EditorSceneManager.MarkSceneDirty(SceneManager.GetActiveScene());
175
+ SceneChangeTracker.RecordGameObjectChange(go, "Prefab");
176
+
177
+ return new Dictionary<string, object>
178
+ {
179
+ ["status"] = "ok",
180
+ ["path"] = savePath,
181
+ ["name"] = prefab.name,
182
+ ["instanceId"] = prefab.GetInstanceID(),
183
+ ["sceneInstanceId"] = go.GetInstanceID(),
184
+ ["isPrefabInstance"] = PrefabUtility.IsPartOfPrefabInstance(go)
185
+ };
186
+ }
187
+
188
+ private static object HandleOverrides(string paramsJson)
189
+ {
190
+ var p = MiniJson.Deserialize(paramsJson) as Dictionary<string, object>;
191
+ if (p == null || !p.TryGetValue("instanceId", out var idObj))
192
+ throw new ArgumentException("Missing 'instanceId' parameter");
193
+
194
+ var go = EditorUtility.EntityIdToObject(Convert.ToInt32(idObj)) as GameObject;
195
+ if (go == null)
196
+ throw new ArgumentException($"GameObject not found: {idObj}");
197
+
198
+ if (!PrefabUtility.IsPartOfPrefabInstance(go))
199
+ throw new ArgumentException("Object is not a prefab instance");
200
+
201
+ var modifications = PrefabUtility.GetPropertyModifications(go);
202
+ var overrides = new List<object>();
203
+
204
+ if (modifications != null)
205
+ {
206
+ foreach (var mod in modifications)
207
+ {
208
+ overrides.Add(new Dictionary<string, object>
209
+ {
210
+ ["target"] = mod.target?.GetType().Name ?? "null",
211
+ ["propertyPath"] = mod.propertyPath,
212
+ ["value"] = mod.value ?? ""
213
+ });
214
+ }
215
+ }
216
+
217
+ var addedComponents = PrefabUtility.GetAddedComponents(go);
218
+ var added = new List<object>();
219
+ foreach (var ac in addedComponents)
220
+ {
221
+ added.Add(new Dictionary<string, object>
222
+ {
223
+ ["component"] = ac.instanceComponent.GetType().Name,
224
+ ["instanceId"] = ac.instanceComponent.GetInstanceID()
225
+ });
226
+ }
227
+
228
+ var removedComponents = PrefabUtility.GetRemovedComponents(go);
229
+ var removed = new List<object>();
230
+ foreach (var rc in removedComponents)
231
+ {
232
+ removed.Add(new Dictionary<string, object>
233
+ {
234
+ ["component"] = rc.assetComponent.GetType().Name
235
+ });
236
+ }
237
+
238
+ return new Dictionary<string, object>
239
+ {
240
+ ["name"] = go.name,
241
+ ["propertyModifications"] = overrides,
242
+ ["addedComponents"] = added,
243
+ ["removedComponents"] = removed
244
+ };
245
+ }
246
+
247
+ private static void CreateFoldersRecursive(string path)
248
+ {
249
+ var parts = path.Replace("\\", "/").Split('/');
250
+ string current = parts[0];
251
+ for (int i = 1; i < parts.Length; i++)
252
+ {
253
+ string next = current + "/" + parts[i];
254
+ if (!AssetDatabase.IsValidFolder(next))
255
+ AssetDatabase.CreateFolder(current, parts[i]);
256
+ current = next;
257
+ }
258
+ }
259
+ }
260
+ }
@@ -0,0 +1,2 @@
1
+ fileFormatVersion: 2
2
+ guid: 14f389b8e0d407c4da00f07435f44e39