@fps-games/editor 0.2.1-beta.1 → 0.2.1-beta.2

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 (245) hide show
  1. package/dist/agent-bridge/capabilities/ui-regions.d.ts.map +1 -1
  2. package/dist/agent-bridge/capabilities/ui-regions.js +16 -0
  3. package/dist/agent-bridge/capabilities/ui-regions.js.map +1 -1
  4. package/dist/build-info.json +43 -43
  5. package/dist/internal/material-preview.d.ts +22 -0
  6. package/dist/internal/material-preview.d.ts.map +1 -0
  7. package/dist/internal/material-preview.js +186 -0
  8. package/dist/internal/material-preview.js.map +1 -0
  9. package/dist/internal/project-model-preview.d.ts +4 -0
  10. package/dist/internal/project-model-preview.d.ts.map +1 -0
  11. package/dist/internal/project-model-preview.js +359 -0
  12. package/dist/internal/project-model-preview.js.map +1 -0
  13. package/dist/local-editor-agent-context.d.ts +12 -1
  14. package/dist/local-editor-agent-context.d.ts.map +1 -1
  15. package/dist/local-editor-agent-context.js +47 -0
  16. package/dist/local-editor-agent-context.js.map +1 -1
  17. package/dist/local-editor-harness.d.ts +15 -2
  18. package/dist/local-editor-harness.d.ts.map +1 -1
  19. package/dist/local-editor-harness.js +310 -21
  20. package/dist/local-editor-harness.js.map +1 -1
  21. package/dist/local-editor-tools.d.ts +1 -0
  22. package/dist/local-editor-tools.d.ts.map +1 -1
  23. package/dist/local-editor-tools.js +3 -0
  24. package/dist/local-editor-tools.js.map +1 -1
  25. package/dist/playable-local-editor-host.d.ts +4 -0
  26. package/dist/playable-local-editor-host.d.ts.map +1 -1
  27. package/dist/playable-local-editor-host.js +27 -0
  28. package/dist/playable-local-editor-host.js.map +1 -1
  29. package/dist/playable-product-scene-capabilities.d.ts.map +1 -1
  30. package/dist/playable-product-scene-capabilities.js +9 -3
  31. package/dist/playable-product-scene-capabilities.js.map +1 -1
  32. package/dist/playable-standard-project.d.ts.map +1 -1
  33. package/dist/playable-standard-project.js +5 -2
  34. package/dist/playable-standard-project.js.map +1 -1
  35. package/node_modules/@fps-games/babylon-renderer/package.json +7 -7
  36. package/node_modules/@fps-games/editor-babylon/dist/marker-overlay.js +24 -0
  37. package/node_modules/@fps-games/editor-babylon/dist/marker-overlay.js.map +1 -1
  38. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts +10 -1
  39. package/node_modules/@fps-games/editor-babylon/dist/projection.d.ts.map +1 -1
  40. package/node_modules/@fps-games/editor-babylon/dist/projection.js +96 -1
  41. package/node_modules/@fps-games/editor-babylon/dist/projection.js.map +1 -1
  42. package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.d.ts.map +1 -1
  43. package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.js +85 -22
  44. package/node_modules/@fps-games/editor-babylon/dist/scene-view-spatial-overlay-controller.js.map +1 -1
  45. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts +2 -0
  46. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.d.ts.map +1 -1
  47. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js +150 -4
  48. package/node_modules/@fps-games/editor-babylon/dist/selection-presentation-controller.js.map +1 -1
  49. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.d.ts +1 -0
  50. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.d.ts.map +1 -1
  51. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js +249 -15
  52. package/node_modules/@fps-games/editor-babylon/dist/transform-gizmo-controller.js.map +1 -1
  53. package/node_modules/@fps-games/editor-babylon/dist/types.d.ts +1 -1
  54. package/node_modules/@fps-games/editor-babylon/dist/types.d.ts.map +1 -1
  55. package/node_modules/@fps-games/editor-babylon/dist/types.js.map +1 -1
  56. package/node_modules/@fps-games/editor-babylon/package.json +6 -6
  57. package/node_modules/@fps-games/editor-browser/dist/index.d.ts +5 -0
  58. package/node_modules/@fps-games/editor-browser/dist/index.d.ts.map +1 -1
  59. package/node_modules/@fps-games/editor-browser/dist/index.js +3 -0
  60. package/node_modules/@fps-games/editor-browser/dist/index.js.map +1 -1
  61. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.d.ts +35 -0
  62. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.d.ts.map +1 -0
  63. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.js +136 -0
  64. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-browser-continuity.js.map +1 -0
  65. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.d.ts +46 -0
  66. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.d.ts.map +1 -0
  67. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.js +283 -0
  68. package/node_modules/@fps-games/editor-browser/dist/local-editor-asset-filesystem.js.map +1 -0
  69. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.d.ts +12 -0
  70. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.d.ts.map +1 -0
  71. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.js +67 -0
  72. package/node_modules/@fps-games/editor-browser/dist/local-editor-preview-cleanup-registry.js.map +1 -0
  73. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.d.ts +6 -0
  74. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.d.ts.map +1 -0
  75. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.js +9 -0
  76. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-open.js.map +1 -0
  77. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.d.ts +7 -0
  78. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.d.ts.map +1 -0
  79. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.js +20 -0
  80. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-file-preview.js.map +1 -0
  81. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.d.ts +9 -0
  82. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.d.ts.map +1 -0
  83. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.js +219 -0
  84. package/node_modules/@fps-games/editor-browser/dist/local-editor-project-media-thumbnail-cache.js.map +1 -0
  85. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.d.ts +14 -0
  86. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.d.ts.map +1 -0
  87. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.js +42 -0
  88. package/node_modules/@fps-games/editor-browser/dist/local-editor-tool-presentation.js.map +1 -0
  89. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.d.ts.map +1 -1
  90. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.js +2 -0
  91. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-asset-kind.js.map +1 -1
  92. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.d.ts +27 -0
  93. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.d.ts.map +1 -0
  94. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.js +288 -0
  95. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-console.js.map +1 -0
  96. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts +1 -1
  97. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.d.ts.map +1 -1
  98. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js +29 -0
  99. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-icons.js.map +1 -1
  100. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts +20 -1
  101. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.d.ts.map +1 -1
  102. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js +321 -60
  103. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-panels.js.map +1 -1
  104. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.d.ts +2 -1
  105. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.d.ts.map +1 -1
  106. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.js +4 -2
  107. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-prefab-stage.js.map +1 -1
  108. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts +63 -3
  109. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.d.ts.map +1 -1
  110. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-types.js.map +1 -1
  111. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.d.ts +9 -0
  112. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.d.ts.map +1 -1
  113. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.js +88 -16
  114. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui-workbench.js.map +1 -1
  115. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts +2 -1
  116. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.d.ts.map +1 -1
  117. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js +1463 -356
  118. package/node_modules/@fps-games/editor-browser/dist/local-editor-ui.js.map +1 -1
  119. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.d.ts +13 -0
  120. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.d.ts.map +1 -0
  121. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.js +15 -0
  122. package/node_modules/@fps-games/editor-browser/dist/local-editor-viewport-orientation.js.map +1 -0
  123. package/node_modules/@fps-games/editor-browser/package.json +7 -7
  124. package/node_modules/@fps-games/editor-core/dist/editor-tools.d.ts +1 -0
  125. package/node_modules/@fps-games/editor-core/dist/editor-tools.d.ts.map +1 -1
  126. package/node_modules/@fps-games/editor-core/dist/editor-tools.js +3 -1
  127. package/node_modules/@fps-games/editor-core/dist/editor-tools.js.map +1 -1
  128. package/node_modules/@fps-games/editor-core/dist/viewport-tools.d.ts +11 -2
  129. package/node_modules/@fps-games/editor-core/dist/viewport-tools.d.ts.map +1 -1
  130. package/node_modules/@fps-games/editor-core/dist/viewport-tools.js +12 -1
  131. package/node_modules/@fps-games/editor-core/dist/viewport-tools.js.map +1 -1
  132. package/node_modules/@fps-games/editor-core/package.json +6 -6
  133. package/node_modules/@fps-games/editor-forge-play/package.json +2 -2
  134. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.d.ts +1 -0
  135. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.d.ts.map +1 -1
  136. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.js +5 -0
  137. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/catalog.js.map +1 -1
  138. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.d.ts +1 -1
  139. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.d.ts.map +1 -1
  140. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.js +1 -1
  141. package/node_modules/@fps-games/editor-playable-sdk/dist/asset-library/index.js.map +1 -1
  142. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.d.ts.map +1 -1
  143. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.js +15 -1
  144. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/handler.js.map +1 -1
  145. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.d.ts.map +1 -1
  146. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.js +3 -0
  147. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/routes.js.map +1 -1
  148. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.d.ts +6 -1
  149. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.d.ts.map +1 -1
  150. package/node_modules/@fps-games/editor-playable-sdk/dist/authoring-server/types.js.map +1 -1
  151. package/node_modules/@fps-games/editor-playable-sdk/dist/index.d.ts +1 -0
  152. package/node_modules/@fps-games/editor-playable-sdk/dist/index.d.ts.map +1 -1
  153. package/node_modules/@fps-games/editor-playable-sdk/dist/index.js +1 -0
  154. package/node_modules/@fps-games/editor-playable-sdk/dist/index.js.map +1 -1
  155. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.d.ts +4 -0
  156. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.d.ts.map +1 -1
  157. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.js +10 -1
  158. package/node_modules/@fps-games/editor-playable-sdk/dist/product/scene-source.js.map +1 -1
  159. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.d.ts +4 -0
  160. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.d.ts.map +1 -0
  161. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.js +4 -0
  162. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/index.js.map +1 -0
  163. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.d.ts +4 -0
  164. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.d.ts.map +1 -0
  165. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.js +86 -0
  166. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/protocol.js.map +1 -0
  167. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.d.ts +9 -0
  168. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.d.ts.map +1 -0
  169. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.js +76 -0
  170. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/support.js.map +1 -0
  171. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.d.ts +34 -0
  172. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.d.ts.map +1 -0
  173. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.js +2 -0
  174. package/node_modules/@fps-games/editor-playable-sdk/dist/project-files/types.js.map +1 -0
  175. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.d.ts +4 -0
  176. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.d.ts.map +1 -1
  177. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js +40 -0
  178. package/node_modules/@fps-games/editor-playable-sdk/dist/scene-source/client.js.map +1 -1
  179. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts +1 -0
  180. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.d.ts.map +1 -1
  181. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js +1 -0
  182. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/index.js.map +1 -1
  183. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts +1 -0
  184. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.d.ts.map +1 -1
  185. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js +94 -0
  186. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/product-authoring-api.js.map +1 -1
  187. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.d.ts +14 -0
  188. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.d.ts.map +1 -0
  189. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.js +101 -0
  190. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-file-handle.js.map +1 -0
  191. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.d.ts +23 -0
  192. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.d.ts.map +1 -0
  193. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.js +180 -0
  194. package/node_modules/@fps-games/editor-playable-sdk/dist/vite/project-files.js.map +1 -0
  195. package/node_modules/@fps-games/editor-playable-sdk/package.json +6 -6
  196. package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts +23 -3
  197. package/node_modules/@fps-games/editor-protocol/dist/agent.d.ts.map +1 -1
  198. package/node_modules/@fps-games/editor-protocol/dist/agent.js.map +1 -1
  199. package/node_modules/@fps-games/editor-protocol/package.json +2 -2
  200. package/node_modules/@fps-games/editor-tooling/package.json +3 -3
  201. package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.d.ts.map +1 -1
  202. package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.js +103 -10
  203. package/node_modules/@fps-games/editor-ui/dist/editor-ui-theme.js.map +1 -1
  204. package/node_modules/@fps-games/editor-ui/package.json +1 -1
  205. package/node_modules/@fps-games/playable-assets/package.json +1 -1
  206. package/node_modules/@fps-games/playable-contracts/package.json +1 -1
  207. package/node_modules/@fps-games/playable-rendering/package.json +2 -2
  208. package/node_modules/@fps-games/playable-runtime/package.json +12 -12
  209. package/node_modules/@fps-games/playable-runtime-data/package.json +4 -4
  210. package/node_modules/@fps-games/playable-scene/package.json +2 -2
  211. package/node_modules/@fps-games/plugin-api/package.json +1 -1
  212. package/node_modules/@fps-games/plugin-assets/dist/version.d.ts +1 -1
  213. package/node_modules/@fps-games/plugin-assets/dist/version.js +1 -1
  214. package/node_modules/@fps-games/plugin-assets/dist/version.js.map +1 -1
  215. package/node_modules/@fps-games/plugin-assets/package.json +5 -5
  216. package/node_modules/@fps-games/plugin-hierarchy/dist/version.d.ts +1 -1
  217. package/node_modules/@fps-games/plugin-hierarchy/dist/version.js +1 -1
  218. package/node_modules/@fps-games/plugin-hierarchy/dist/version.js.map +1 -1
  219. package/node_modules/@fps-games/plugin-hierarchy/package.json +5 -5
  220. package/node_modules/@fps-games/plugin-host/package.json +2 -2
  221. package/node_modules/@fps-games/plugin-markers/dist/version.d.ts +1 -1
  222. package/node_modules/@fps-games/plugin-markers/dist/version.js +1 -1
  223. package/node_modules/@fps-games/plugin-markers/dist/version.js.map +1 -1
  224. package/node_modules/@fps-games/plugin-markers/package.json +5 -5
  225. package/node_modules/@fps-games/plugin-materials/dist/version.d.ts +1 -1
  226. package/node_modules/@fps-games/plugin-materials/dist/version.js +1 -1
  227. package/node_modules/@fps-games/plugin-materials/dist/version.js.map +1 -1
  228. package/node_modules/@fps-games/plugin-materials/package.json +5 -5
  229. package/node_modules/@fps-games/plugin-rendering/dist/version.d.ts +1 -1
  230. package/node_modules/@fps-games/plugin-rendering/dist/version.js +1 -1
  231. package/node_modules/@fps-games/plugin-rendering/dist/version.js.map +1 -1
  232. package/node_modules/@fps-games/plugin-rendering/package.json +5 -5
  233. package/node_modules/@fps-games/plugin-scene/dist/version.d.ts +1 -1
  234. package/node_modules/@fps-games/plugin-scene/dist/version.js +1 -1
  235. package/node_modules/@fps-games/plugin-scene/dist/version.js.map +1 -1
  236. package/node_modules/@fps-games/plugin-scene/package.json +5 -5
  237. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.d.ts +1 -1
  238. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js +1 -1
  239. package/node_modules/@fps-games/plugin-shadow-map-experiment/dist/version.js.map +1 -1
  240. package/node_modules/@fps-games/plugin-shadow-map-experiment/package.json +5 -5
  241. package/node_modules/@fps-games/plugin-shadows/dist/version.d.ts +1 -1
  242. package/node_modules/@fps-games/plugin-shadows/dist/version.js +1 -1
  243. package/node_modules/@fps-games/plugin-shadows/dist/version.js.map +1 -1
  244. package/node_modules/@fps-games/plugin-shadows/package.json +7 -7
  245. package/package.json +22 -22
@@ -19,6 +19,24 @@ export function resolveBabylonTransformHandleConstraint(tool, handleKey) {
19
19
  return null;
20
20
  }
21
21
  const LARGE_SELECTION_GIZMO_LIMIT = 200;
22
+ const EDITOR_TRANSFORM_GIZMO_SCALE_RATIO = 0.9;
23
+ const FREE_MOVE_HANDLE_DIAMETER = 0.018;
24
+ const TRANSFORM_GIZMO_DIAGNOSTIC_PREFIX = '[fps-editor:gizmo]';
25
+ function isTransformGizmoDiagnosticEnabled() {
26
+ const scope = globalThis;
27
+ if (scope.__FPS_EDITOR_DEBUG_TRANSFORM_GIZMO === true)
28
+ return true;
29
+ const search = scope.location?.search;
30
+ return typeof search === 'string' && /(?:^|[?&])debugGizmo=(?:1|true)(?:&|$)/.test(search);
31
+ }
32
+ function logTransformGizmoDiagnostic(event, details = {}) {
33
+ if (!isTransformGizmoDiagnosticEnabled())
34
+ return;
35
+ const timestamp = typeof performance !== 'undefined' && typeof performance.now === 'function'
36
+ ? Number(performance.now().toFixed(2))
37
+ : Date.now();
38
+ console.info(TRANSFORM_GIZMO_DIAGNOSTIC_PREFIX, event, { timestamp, ...details });
39
+ }
22
40
  export function createBabylonTransformGizmoController(options) {
23
41
  const GizmoManagerCtor = options.babylon.GizmoManager;
24
42
  if (!GizmoManagerCtor)
@@ -40,15 +58,44 @@ export function createBabylonTransformGizmoController(options) {
40
58
  let placementMarker = null;
41
59
  let placementMarkerMaterial = null;
42
60
  let manager = null;
61
+ let utilityLayer = null;
62
+ let keepDepthUtilityLayer = null;
43
63
  let managerPrewarmed = false;
64
+ let materialPrewarmPromise = null;
65
+ let attachmentDiagnosticSequence = 0;
44
66
  const canvas = options.scene.getEngine?.().getRenderingCanvas?.();
45
67
  function ensureGizmoManager() {
46
- if (manager)
68
+ if (manager) {
69
+ logTransformGizmoDiagnostic('manager.reuse', {
70
+ tool,
71
+ selectedNodeId,
72
+ selectedNodeIds: [...selectedNodeIds],
73
+ });
47
74
  return manager;
48
- manager = new GizmoManagerCtor(options.scene);
75
+ }
76
+ const startedAt = typeof performance !== 'undefined' ? performance.now() : Date.now();
77
+ const UtilityLayerRendererCtor = options.babylon.UtilityLayerRenderer;
78
+ if (UtilityLayerRendererCtor) {
79
+ utilityLayer = new UtilityLayerRendererCtor(options.scene);
80
+ keepDepthUtilityLayer = new UtilityLayerRendererCtor(options.scene);
81
+ try {
82
+ keepDepthUtilityLayer.utilityLayerScene.autoClearDepthAndStencil = false;
83
+ }
84
+ catch { }
85
+ manager = new GizmoManagerCtor(options.scene, 1, utilityLayer, keepDepthUtilityLayer);
86
+ }
87
+ else {
88
+ manager = new GizmoManagerCtor(options.scene);
89
+ }
49
90
  manager.usePointerToAttachGizmos = false;
50
91
  manager.clearGizmoOnEmptyPointerEvent = false;
51
92
  manager.boundingBoxGizmoEnabled = false;
93
+ applyGizmoPresentation(manager);
94
+ logTransformGizmoDiagnostic('manager.created', {
95
+ durationMs: Number(((typeof performance !== 'undefined' ? performance.now() : Date.now()) - startedAt).toFixed(2)),
96
+ editorOwnedUtilityLayers: !!UtilityLayerRendererCtor,
97
+ sceneActiveCamera: options.scene.activeCamera?.name ?? null,
98
+ });
52
99
  return manager;
53
100
  }
54
101
  function activeTransformTool() {
@@ -213,7 +260,30 @@ export function createBabylonTransformGizmoController(options) {
213
260
  catch { }
214
261
  }
215
262
  }
263
+ function applyGizmoPresentation(activeManager) {
264
+ try {
265
+ activeManager.scaleRatio = EDITOR_TRANSFORM_GIZMO_SCALE_RATIO;
266
+ }
267
+ catch { }
268
+ for (const gizmo of [
269
+ activeManager.gizmos?.positionGizmo,
270
+ activeManager.gizmos?.rotationGizmo,
271
+ activeManager.gizmos?.scaleGizmo,
272
+ ]) {
273
+ if (!gizmo)
274
+ continue;
275
+ try {
276
+ gizmo.scaleRatio = EDITOR_TRANSFORM_GIZMO_SCALE_RATIO;
277
+ }
278
+ catch { }
279
+ try {
280
+ gizmo.updateScale = true;
281
+ }
282
+ catch { }
283
+ }
284
+ }
216
285
  function attachCurrentSelection() {
286
+ const startedAt = typeof performance !== 'undefined' ? performance.now() : Date.now();
217
287
  clearDragObservers();
218
288
  const activeTool = activeTransformTool();
219
289
  if (!activeTool) {
@@ -227,6 +297,12 @@ export function createBabylonTransformGizmoController(options) {
227
297
  catch { }
228
298
  }
229
299
  updateFreeMoveHandle();
300
+ logTransformGizmoDiagnostic('attachment.skipped', {
301
+ reason: 'select-tool',
302
+ tool,
303
+ selectedNodeId,
304
+ selectedNodeIds: [...selectedNodeIds],
305
+ });
230
306
  return;
231
307
  }
232
308
  const activeManager = ensureGizmoManager();
@@ -238,27 +314,95 @@ export function createBabylonTransformGizmoController(options) {
238
314
  activeManager.positionGizmoEnabled = activeTool === 'move';
239
315
  activeManager.rotationGizmoEnabled = activeTool === 'rotate';
240
316
  activeManager.scaleGizmoEnabled = activeTool === 'scale';
317
+ applyGizmoPresentation(activeManager);
241
318
  applyHandlePreference();
242
319
  applySpacePreference();
243
320
  registerDragObservers();
244
321
  let target = null;
245
- target = attachNativeTransformProxy(getCurrentTransformTargetIds(), activeTool, constraint);
322
+ const requestedTargetIds = getCurrentTransformTargetIds();
323
+ const attachableTargetIds = requestedTargetIds.filter(nodeId => !!options.projection.getAttachableRoot(nodeId));
324
+ target = attachNativeTransformProxy(requestedTargetIds, activeTool, constraint);
325
+ let attachError = null;
246
326
  try {
247
327
  activeManager.attachToNode?.(target ?? null);
248
328
  }
249
329
  catch (error) {
330
+ attachError = error;
250
331
  options.logger?.warn?.('[BabylonTransformGizmoController] failed to attach gizmo', error);
251
332
  }
252
333
  updateFreeMoveHandle();
334
+ const activeGizmo = activeTool === 'move'
335
+ ? activeManager.gizmos?.positionGizmo
336
+ : activeTool === 'rotate'
337
+ ? activeManager.gizmos?.rotationGizmo
338
+ : activeManager.gizmos?.scaleGizmo;
339
+ const diagnosticSequence = ++attachmentDiagnosticSequence;
340
+ const collectRenderDetails = () => {
341
+ const rootMesh = activeGizmo?._rootMesh ?? activeGizmo?.rootMesh ?? null;
342
+ const absolutePosition = rootMesh?.getAbsolutePosition?.() ?? rootMesh?.absolutePosition ?? rootMesh?.position ?? null;
343
+ const scaling = rootMesh?.scaling ?? null;
344
+ return {
345
+ diagnosticSequence,
346
+ gizmoRootEnabled: rootMesh?.isEnabled?.() ?? null,
347
+ gizmoRootVisible: rootMesh?.isVisible ?? null,
348
+ gizmoRootVisibility: rootMesh?.visibility ?? null,
349
+ gizmoRootChildCount: rootMesh?.getChildMeshes?.(false)?.length ?? null,
350
+ gizmoRootPosition: absolutePosition
351
+ ? { x: absolutePosition.x, y: absolutePosition.y, z: absolutePosition.z }
352
+ : null,
353
+ gizmoRootScaling: scaling ? { x: scaling.x, y: scaling.y, z: scaling.z } : null,
354
+ gizmoScaleRatio: activeGizmo?.scaleRatio ?? null,
355
+ utilityLayerMeshCount: utilityLayer?.utilityLayerScene?.meshes?.length ?? null,
356
+ utilityLayerActiveMeshCount: utilityLayer?.utilityLayerScene?.getActiveMeshes?.()?.length ?? null,
357
+ utilityLayerRenderId: utilityLayer?.utilityLayerScene?.getRenderId?.() ?? null,
358
+ sceneRenderId: options.scene.getRenderId?.() ?? null,
359
+ };
360
+ };
361
+ logTransformGizmoDiagnostic('attachment.result', {
362
+ durationMs: Number(((typeof performance !== 'undefined' ? performance.now() : Date.now()) - startedAt).toFixed(2)),
363
+ tool,
364
+ space,
365
+ constraint,
366
+ selectedNodeId,
367
+ selectedNodeIds: [...selectedNodeIds],
368
+ requestedTargetIds,
369
+ attachableTargetIds,
370
+ targetCreated: !!target,
371
+ targetName: target?.name ?? null,
372
+ managerAttachedNode: activeManager.attachedNode?.name ?? activeManager._attachedNode?.name ?? null,
373
+ gizmoAttachedNode: activeGizmo?.attachedNode?.name ?? null,
374
+ gizmoAttachedMesh: activeGizmo?.attachedMesh?.name ?? null,
375
+ positionEnabled: activeManager.positionGizmoEnabled === true,
376
+ rotationEnabled: activeManager.rotationGizmoEnabled === true,
377
+ scaleEnabled: activeManager.scaleGizmoEnabled === true,
378
+ sceneActiveCamera: options.scene.activeCamera?.name ?? null,
379
+ utilityLayerActiveCamera: utilityLayer?.utilityLayerScene?.activeCamera?.name ?? null,
380
+ utilityLayerShouldRender: utilityLayer?.shouldRender ?? null,
381
+ attachError: attachError instanceof Error ? attachError.message : attachError ? String(attachError) : null,
382
+ ...collectRenderDetails(),
383
+ });
384
+ if (isTransformGizmoDiagnosticEnabled()) {
385
+ utilityLayer?.utilityLayerScene?.onAfterRenderObservable?.addOnce?.(() => {
386
+ logTransformGizmoDiagnostic('utility-layer.rendered', {
387
+ tool,
388
+ selectedNodeId,
389
+ ...collectRenderDetails(),
390
+ });
391
+ });
392
+ }
253
393
  }
254
394
  function prewarmGizmoManager(activeManager) {
255
- if (managerPrewarmed)
395
+ if (managerPrewarmed) {
396
+ logTransformGizmoDiagnostic('manager.prewarm.reuse', { tool });
256
397
  return;
398
+ }
399
+ const startedAt = typeof performance !== 'undefined' ? performance.now() : Date.now();
257
400
  managerPrewarmed = true;
258
401
  try {
259
402
  activeManager.positionGizmoEnabled = true;
260
403
  activeManager.rotationGizmoEnabled = true;
261
404
  activeManager.scaleGizmoEnabled = true;
405
+ applyGizmoPresentation(activeManager);
262
406
  activeManager.attachToNode?.(null);
263
407
  activeManager.positionGizmoEnabled = false;
264
408
  activeManager.rotationGizmoEnabled = false;
@@ -267,6 +411,38 @@ export function createBabylonTransformGizmoController(options) {
267
411
  catch (error) {
268
412
  options.logger?.warn?.('[BabylonTransformGizmoController] failed to prewarm gizmo manager', error);
269
413
  }
414
+ logTransformGizmoDiagnostic('manager.prewarm.complete', {
415
+ durationMs: Number(((typeof performance !== 'undefined' ? performance.now() : Date.now()) - startedAt).toFixed(2)),
416
+ hasPositionGizmo: !!activeManager.gizmos?.positionGizmo,
417
+ hasRotationGizmo: !!activeManager.gizmos?.rotationGizmo,
418
+ hasScaleGizmo: !!activeManager.gizmos?.scaleGizmo,
419
+ });
420
+ }
421
+ function prewarmGizmoMaterials() {
422
+ if (materialPrewarmPromise)
423
+ return materialPrewarmPromise;
424
+ const startedAt = typeof performance !== 'undefined' ? performance.now() : Date.now();
425
+ const targets = new Map();
426
+ for (const layer of [utilityLayer, keepDepthUtilityLayer]) {
427
+ for (const mesh of layer?.utilityLayerScene?.meshes ?? []) {
428
+ const material = mesh?.material;
429
+ if (!material || typeof material.forceCompilationAsync !== 'function' || targets.has(material))
430
+ continue;
431
+ targets.set(material, mesh);
432
+ }
433
+ }
434
+ logTransformGizmoDiagnostic('material-prewarm.started', {
435
+ targetCount: targets.size,
436
+ });
437
+ materialPrewarmPromise = Promise.allSettled([...targets].map(([material, mesh]) => material.forceCompilationAsync(mesh))).then((results) => {
438
+ const failureCount = results.filter(result => result.status === 'rejected').length;
439
+ logTransformGizmoDiagnostic('material-prewarm.completed', {
440
+ durationMs: Number(((typeof performance !== 'undefined' ? performance.now() : Date.now()) - startedAt).toFixed(2)),
441
+ targetCount: targets.size,
442
+ failureCount,
443
+ });
444
+ });
445
+ return materialPrewarmPromise;
270
446
  }
271
447
  function beginDrag(activeConstraint = constraint, handleKey) {
272
448
  if (activeDrag)
@@ -332,8 +508,9 @@ export function createBabylonTransformGizmoController(options) {
332
508
  const validTargetIds = targetIds.filter(nodeId => !!options.projection.getAttachableRoot(nodeId));
333
509
  if (validTargetIds.length === 0)
334
510
  return null;
335
- const pivot = validTargetIds.length > 1
511
+ const pivot = (activeTool === 'move' || validTargetIds.length > 1)
336
512
  ? options.projection.getSelectionPivot(validTargetIds)
513
+ ?? createSingleTargetPivot(validTargetIds[0])
337
514
  : createSingleTargetPivot(validTargetIds[0]);
338
515
  if (!pivot)
339
516
  return null;
@@ -402,8 +579,11 @@ export function createBabylonTransformGizmoController(options) {
402
579
  duplicate,
403
580
  });
404
581
  }
405
- const pivot = validTargetIds.length > 1
406
- ? options.projection.getSelectionPivot(validTargetIds)
582
+ const pivot = (activeTool === 'move' || validTargetIds.length > 1)
583
+ ? options.projection.getSelectionPivot(validTargetIds) ?? {
584
+ mode: 'selection-center',
585
+ position: readEditorTransformPosition(beforeTransforms[validTargetIds[0]]),
586
+ }
407
587
  : {
408
588
  mode: 'selection-center',
409
589
  position: readEditorTransformPosition(beforeTransforms[validTargetIds[0]]),
@@ -994,7 +1174,7 @@ export function createBabylonTransformGizmoController(options) {
994
1174
  const utilityScene = activeManager?.utilityLayer?.utilityLayerScene;
995
1175
  if (!MeshBuilder?.CreateSphere || !utilityScene)
996
1176
  return null;
997
- freeMoveHandle = MeshBuilder.CreateSphere('editor.transform.freeMoveHandle', { diameter: 0.22, segments: 12 }, utilityScene);
1177
+ freeMoveHandle = MeshBuilder.CreateSphere('editor.transform.freeMoveHandle', { diameter: FREE_MOVE_HANDLE_DIAMETER, segments: 16 }, utilityScene);
998
1178
  freeMoveHandle.metadata = {
999
1179
  ...(freeMoveHandle.metadata ?? {}),
1000
1180
  editorProjectionHelper: true,
@@ -1003,9 +1183,10 @@ export function createBabylonTransformGizmoController(options) {
1003
1183
  freeMoveHandle.isPickable = true;
1004
1184
  if (StandardMaterial && Color3) {
1005
1185
  freeMoveHandleMaterial = new StandardMaterial('editor.transform.freeMoveHandle.material', utilityScene);
1006
- freeMoveHandleMaterial.diffuseColor = new Color3(1, 0.82, 0.28);
1007
- freeMoveHandleMaterial.emissiveColor = new Color3(1, 0.68, 0.18);
1008
- freeMoveHandleMaterial.specularColor = new Color3(0.2, 0.18, 0.08);
1186
+ freeMoveHandleMaterial.diffuseColor = new Color3(0.94, 0.96, 0.98);
1187
+ freeMoveHandleMaterial.emissiveColor = new Color3(0.88, 0.91, 0.95);
1188
+ freeMoveHandleMaterial.specularColor = new Color3(0.08, 0.1, 0.12);
1189
+ freeMoveHandleMaterial.disableLighting = true;
1009
1190
  freeMoveHandle.material = freeMoveHandleMaterial;
1010
1191
  }
1011
1192
  setFreeMoveHandleVisible(false);
@@ -1025,7 +1206,17 @@ export function createBabylonTransformGizmoController(options) {
1025
1206
  const Vector3 = options.babylon.Vector3;
1026
1207
  if (!handle || !Vector3)
1027
1208
  return;
1028
- handle.position = new Vector3(position.x, position.y, position.z);
1209
+ const gizmoRoot = manager?.gizmos?.positionGizmo?.xGizmo?._rootMesh
1210
+ ?? manager?.gizmos?.positionGizmo?.xGizmo?.rootMesh
1211
+ ?? null;
1212
+ if (gizmoRoot) {
1213
+ handle.parent = gizmoRoot;
1214
+ handle.position = new Vector3(0, 0, 0);
1215
+ }
1216
+ else {
1217
+ handle.parent = null;
1218
+ handle.position = new Vector3(position.x, position.y, position.z);
1219
+ }
1029
1220
  setFreeMoveHandleVisible(true);
1030
1221
  }
1031
1222
  function updateFreeMoveHandle() {
@@ -1038,9 +1229,7 @@ export function createBabylonTransformGizmoController(options) {
1038
1229
  setFreeMoveHandleVisible(false);
1039
1230
  return;
1040
1231
  }
1041
- const pivot = targetIds.length > 1
1042
- ? options.projection.getSelectionPivot(targetIds)
1043
- : null;
1232
+ const pivot = options.projection.getSelectionPivot(targetIds);
1044
1233
  const position = pivot?.position
1045
1234
  ?? (targetIds[0] ? createTransformPivot(options.projection.readNodeTransform(targetIds[0]))?.position : null);
1046
1235
  if (!position) {
@@ -1118,9 +1307,31 @@ export function createBabylonTransformGizmoController(options) {
1118
1307
  constraint,
1119
1308
  };
1120
1309
  },
1310
+ async prepare() {
1311
+ if (disposed)
1312
+ return;
1313
+ logTransformGizmoDiagnostic('prepare.requested', {
1314
+ tool,
1315
+ selectedNodeId,
1316
+ selectedNodeIds: [...selectedNodeIds],
1317
+ });
1318
+ const activeManager = ensureGizmoManager();
1319
+ if (!activeManager)
1320
+ return;
1321
+ prewarmGizmoManager(activeManager);
1322
+ attachCurrentSelection();
1323
+ await prewarmGizmoMaterials();
1324
+ },
1121
1325
  setTool(nextTool) {
1122
1326
  if (disposed)
1123
1327
  return;
1328
+ logTransformGizmoDiagnostic('tool.requested', {
1329
+ previousTool: tool,
1330
+ nextTool,
1331
+ repeated: tool === nextTool,
1332
+ selectedNodeId,
1333
+ selectedNodeIds: [...selectedNodeIds],
1334
+ });
1124
1335
  if (tool === nextTool) {
1125
1336
  if (!activeDrag)
1126
1337
  attachCurrentSelection();
@@ -1186,6 +1397,13 @@ export function createBabylonTransformGizmoController(options) {
1186
1397
  ? [selection.activeId].filter((id) => !!id)
1187
1398
  : [...selection.selectedIds];
1188
1399
  const nextActiveId = selection.activeId;
1400
+ logTransformGizmoDiagnostic('selection.requested', {
1401
+ previousActiveId: selectedNodeId,
1402
+ previousSelectedIds: [...selectedNodeIds],
1403
+ nextActiveId,
1404
+ nextSelectedIds: [...nextNodeIds],
1405
+ tool,
1406
+ });
1189
1407
  if (selectedNodeId === nextActiveId
1190
1408
  && selectedNodeIds.length === nextNodeIds.length
1191
1409
  && selectedNodeIds.every((id, index) => id === nextNodeIds[index])) {
@@ -1201,6 +1419,11 @@ export function createBabylonTransformGizmoController(options) {
1201
1419
  return;
1202
1420
  if (activeDrag)
1203
1421
  return;
1422
+ logTransformGizmoDiagnostic('selection.refresh', {
1423
+ selectedNodeId,
1424
+ selectedNodeIds: [...selectedNodeIds],
1425
+ tool,
1426
+ });
1204
1427
  attachCurrentSelection();
1205
1428
  },
1206
1429
  isGizmoDragCandidate,
@@ -1237,6 +1460,14 @@ export function createBabylonTransformGizmoController(options) {
1237
1460
  manager?.dispose?.();
1238
1461
  }
1239
1462
  catch { }
1463
+ try {
1464
+ utilityLayer?.dispose?.();
1465
+ }
1466
+ catch { }
1467
+ try {
1468
+ keepDepthUtilityLayer?.dispose?.();
1469
+ }
1470
+ catch { }
1240
1471
  try {
1241
1472
  pivotProxy?.dispose?.();
1242
1473
  }
@@ -1263,7 +1494,10 @@ export function createBabylonTransformGizmoController(options) {
1263
1494
  placementMarker = null;
1264
1495
  placementMarkerMaterial = null;
1265
1496
  manager = null;
1497
+ utilityLayer = null;
1498
+ keepDepthUtilityLayer = null;
1266
1499
  managerPrewarmed = false;
1500
+ materialPrewarmPromise = null;
1267
1501
  disposed = true;
1268
1502
  },
1269
1503
  };