@holoscript/core 7.0.0 → 8.0.0

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 (345) hide show
  1. package/README.md +2 -2
  2. package/bin/holoscript.cjs +3 -0
  3. package/dist/GLTFPipeline-276GE64O.js +16 -0
  4. package/dist/GLTFPipeline-M7WSSJED.cjs +37 -0
  5. package/dist/HoloScriptPlusParser-7FBIFUFC.js +693 -0
  6. package/dist/HoloScriptPlusParser-A2W7OCN2.cjs +698 -0
  7. package/dist/HoloScriptPlusParser-F2Z56FJR.js +10 -0
  8. package/dist/HoloScriptPlusParser-WKHRIH6T.cjs +27 -0
  9. package/dist/HoloScriptRuntime-3URVTKPJ.js +10 -0
  10. package/dist/HoloScriptRuntime-SXEAEU2N.cjs +19 -0
  11. package/dist/USDZExporter-3FWJ25JI.cjs +1037 -0
  12. package/dist/USDZExporter-D2HQLQYK.js +1035 -0
  13. package/dist/agents/index.cjs +19 -0
  14. package/dist/agents/index.d.ts +100 -0
  15. package/dist/agents/index.js +17 -0
  16. package/dist/chunk-23J755AR.js +1046 -0
  17. package/dist/chunk-253GBQZY.cjs +627 -0
  18. package/dist/chunk-25IQCHTO.cjs +781 -0
  19. package/dist/chunk-2BSMSUCE.js +1941 -0
  20. package/dist/chunk-2M2DPHKB.js +762 -0
  21. package/dist/chunk-2YSNA2F2.cjs +1274 -0
  22. package/dist/chunk-3AO425MZ.cjs +886 -0
  23. package/dist/chunk-3FOKASKO.cjs +348 -0
  24. package/dist/chunk-3HYYMEXI.cjs +56578 -0
  25. package/dist/chunk-3NFFOWGG.js +4287 -0
  26. package/dist/chunk-3WZEJHUQ.cjs +116 -0
  27. package/dist/chunk-4C57PR42.js +468 -0
  28. package/dist/chunk-4N4SXXWF.js +769 -0
  29. package/dist/chunk-4PDEPEQW.cjs +41 -0
  30. package/dist/chunk-4R6SBXDB.js +45 -0
  31. package/dist/chunk-4V2E7U7Q.cjs +2015 -0
  32. package/dist/chunk-5FSKKMR7.cjs +2092 -0
  33. package/dist/chunk-5GLCTO44.js +161 -0
  34. package/dist/chunk-5JEU52DW.js +382 -0
  35. package/dist/chunk-5S7RKFGR.cjs +446 -0
  36. package/dist/chunk-5WUNN6ZN.cjs +428 -0
  37. package/dist/chunk-62FBK3B7.js +70 -0
  38. package/dist/chunk-6CTRH7HT.cjs +1985 -0
  39. package/dist/chunk-6DPSFNJB.cjs +847 -0
  40. package/dist/chunk-6EX3I5P4.cjs +130 -0
  41. package/dist/chunk-73FELZVJ.cjs +611 -0
  42. package/dist/chunk-7CUEMLDZ.cjs +6445 -0
  43. package/dist/chunk-7HIASF7S.cjs +814 -0
  44. package/dist/chunk-A6KINLZJ.js +236 -0
  45. package/dist/chunk-AIA52I7T.cjs +543 -0
  46. package/dist/chunk-ANXZFVY2.js +113 -0
  47. package/dist/chunk-AYBXB26F.js +2176 -0
  48. package/dist/chunk-B4TFTDG4.js +449 -0
  49. package/dist/chunk-BE4UJCQT.js +623 -0
  50. package/dist/chunk-BRQJKJGT.cjs +20 -0
  51. package/dist/chunk-C2A5DUMF.cjs +689 -0
  52. package/dist/chunk-C37BHB7N.cjs +636 -0
  53. package/dist/chunk-CBJY23VL.js +126 -0
  54. package/dist/chunk-CIWWXYHZ.cjs +50 -0
  55. package/dist/chunk-CXFDRBQU.cjs +672 -0
  56. package/dist/chunk-D54CNIAJ.cjs +413 -0
  57. package/dist/chunk-DAJXW4KX.js +725 -0
  58. package/dist/chunk-DTGBOSEM.cjs +319 -0
  59. package/dist/chunk-E7JP3BS3.cjs +61 -0
  60. package/dist/chunk-EKBKLK7P.js +1169 -0
  61. package/dist/chunk-EKYL4PE3.cjs +404 -0
  62. package/dist/chunk-EUDQTK7N.cjs +4310 -0
  63. package/dist/chunk-EXKSFGSX.cjs +274 -0
  64. package/dist/chunk-EXUP2BUM.cjs +1173 -0
  65. package/dist/chunk-F43YAA34.js +623 -0
  66. package/dist/chunk-FDSGHPAK.js +130 -0
  67. package/dist/chunk-FEWUHQNM.cjs +144 -0
  68. package/dist/chunk-FGGJQRLZ.js +270 -0
  69. package/dist/chunk-FHP6LXJS.js +415 -0
  70. package/dist/chunk-FJPADH77.cjs +666 -0
  71. package/dist/chunk-FYSPZT4V.cjs +169 -0
  72. package/dist/chunk-GIOYPNTH.js +5575 -0
  73. package/dist/chunk-GJNCFRJU.cjs +125 -0
  74. package/dist/chunk-GMP623FG.cjs +1508 -0
  75. package/dist/chunk-GQHQOPXZ.cjs +5580 -0
  76. package/dist/chunk-GQT4TYKY.cjs +4381 -0
  77. package/dist/chunk-GTU2Z2WW.cjs +262 -0
  78. package/dist/chunk-GYZE55MO.js +2007 -0
  79. package/dist/chunk-GZG4KA4E.js +529 -0
  80. package/dist/chunk-H652NHX5.js +600 -0
  81. package/dist/chunk-HCCQLAA4.cjs +74 -0
  82. package/dist/chunk-HINXWAOD.cjs +1049 -0
  83. package/dist/chunk-HYNTS5CP.js +422 -0
  84. package/dist/chunk-HZSPDCXV.cjs +457 -0
  85. package/dist/chunk-HZTDET3N.js +1399 -0
  86. package/dist/chunk-I6XZ5DZF.cjs +488 -0
  87. package/dist/chunk-ILRBGFVD.cjs +72 -0
  88. package/dist/chunk-IPWSXCCN.js +1183 -0
  89. package/dist/chunk-IUTY5WQ2.cjs +424 -0
  90. package/dist/chunk-IVSZDECV.js +882 -0
  91. package/dist/chunk-IVY74O6C.js +247 -0
  92. package/dist/chunk-IZM5VQZD.js +714 -0
  93. package/dist/chunk-J32ZJZJH.js +554 -0
  94. package/dist/chunk-J6M4FPK5.js +421 -0
  95. package/dist/chunk-JC5YBPSF.cjs +984 -0
  96. package/dist/chunk-JCLBKPMX.js +3813 -0
  97. package/dist/chunk-JD7CIZ33.js +1949 -0
  98. package/dist/chunk-JIYN45TV.cjs +2525 -0
  99. package/dist/chunk-JJBE3TIH.cjs +1189 -0
  100. package/dist/chunk-JX7YL6ZE.js +2252 -0
  101. package/dist/chunk-K4VVR7CN.cjs +2433 -0
  102. package/dist/chunk-KEFNV2WM.cjs +2257 -0
  103. package/dist/chunk-KH4CNH66.cjs +424 -0
  104. package/dist/chunk-KJLB4OPV.js +5731 -0
  105. package/dist/chunk-KKFZ3B6J.cjs +557 -0
  106. package/dist/chunk-KKP7JKN4.cjs +6002 -0
  107. package/dist/chunk-KPJL34Y7.cjs +186 -0
  108. package/dist/chunk-KQCN6AKJ.cjs +3042 -0
  109. package/dist/chunk-KVRSTFNH.cjs +72 -0
  110. package/dist/chunk-LICPB5HZ.cjs +1409 -0
  111. package/dist/chunk-LM2VU56C.cjs +37 -0
  112. package/dist/chunk-M56JSP4A.js +400 -0
  113. package/dist/chunk-MBOOR7X4.js +18 -0
  114. package/dist/chunk-MGE5Z4GS.js +608 -0
  115. package/dist/chunk-MXFUTKCO.js +56 -0
  116. package/dist/chunk-MYY4PMWX.cjs +264 -0
  117. package/dist/chunk-N75IH2HY.js +258 -0
  118. package/dist/chunk-NBMHU6SW.js +669 -0
  119. package/dist/chunk-NG77ATEW.cjs +778 -0
  120. package/dist/chunk-NGKREZ36.js +6384 -0
  121. package/dist/chunk-NHWSN2SD.cjs +718 -0
  122. package/dist/chunk-NV4VMVXU.js +421 -0
  123. package/dist/chunk-NW5G5FBQ.js +215 -0
  124. package/dist/chunk-NXZFOPVD.cjs +5737 -0
  125. package/dist/chunk-OBIYPYYS.cjs +1993 -0
  126. package/dist/chunk-OIQYIIO3.cjs +473 -0
  127. package/dist/chunk-OL46QLBJ.js +61 -0
  128. package/dist/chunk-OMXII44L.js +5386 -0
  129. package/dist/chunk-OR4Q2BGL.cjs +759 -0
  130. package/dist/chunk-OSYNRVOV.cjs +243 -0
  131. package/dist/chunk-PGANYCAG.cjs +220 -0
  132. package/dist/chunk-PHENW4MQ.js +65 -0
  133. package/dist/chunk-PHVRG4I2.js +844 -0
  134. package/dist/chunk-Q56TT7IL.js +483 -0
  135. package/dist/chunk-QPOQ7VPI.js +1491 -0
  136. package/dist/chunk-QPSKHBJP.js +5963 -0
  137. package/dist/chunk-QXH7QDSZ.js +1989 -0
  138. package/dist/chunk-R75BSDH7.cjs +50 -0
  139. package/dist/chunk-RARB3MBR.js +207 -0
  140. package/dist/chunk-RVBHAXFG.js +56160 -0
  141. package/dist/chunk-S3MDHNKB.cjs +490 -0
  142. package/dist/chunk-S4W6Z2MN.js +2426 -0
  143. package/dist/chunk-S6YWHCKV.cjs +410 -0
  144. package/dist/chunk-SIEXCILW.js +229 -0
  145. package/dist/chunk-SJBGLS25.cjs +2196 -0
  146. package/dist/chunk-SLU6UPJI.cjs +410 -0
  147. package/dist/chunk-SMIWS6DE.cjs +212 -0
  148. package/dist/chunk-T2QCTZMO.js +811 -0
  149. package/dist/chunk-T5J7ZKP3.cjs +4885 -0
  150. package/dist/chunk-TDCNJHWO.js +341 -0
  151. package/dist/chunk-TG7O4WBC.js +406 -0
  152. package/dist/chunk-THCK6ECW.js +2085 -0
  153. package/dist/chunk-TJHVSBP2.js +439 -0
  154. package/dist/chunk-TVHSPJ4N.cjs +606 -0
  155. package/dist/chunk-U44IKGG7.cjs +5390 -0
  156. package/dist/chunk-UJXISJBN.js +487 -0
  157. package/dist/chunk-UM6C3CGK.js +4375 -0
  158. package/dist/chunk-UMABK6SI.js +686 -0
  159. package/dist/chunk-UOIGFQXC.cjs +9750 -0
  160. package/dist/chunk-URG2SJLK.js +2521 -0
  161. package/dist/chunk-V6MKC2FZ.js +979 -0
  162. package/dist/chunk-VECQYRXL.js +474 -0
  163. package/dist/chunk-VJ3L7CHT.cjs +169 -0
  164. package/dist/chunk-VMLKSV26.js +1216 -0
  165. package/dist/chunk-VVKVQZI6.js +55 -0
  166. package/dist/chunk-W6RW64BB.cjs +1219 -0
  167. package/dist/chunk-W7VDOASB.cjs +639 -0
  168. package/dist/chunk-WDT3JTGM.cjs +483 -0
  169. package/dist/chunk-WJIHFLMJ.js +404 -0
  170. package/dist/chunk-WKX5AMOY.js +309 -0
  171. package/dist/chunk-WNNE3PO3.js +34 -0
  172. package/dist/chunk-WRKUDAZJ.js +3038 -0
  173. package/dist/chunk-WRLUBRKS.cjs +1943 -0
  174. package/dist/chunk-WRNEH5MO.js +3169 -0
  175. package/dist/chunk-WRWEX5ZF.js +658 -0
  176. package/dist/chunk-X3GJPRVK.cjs +3246 -0
  177. package/dist/chunk-XHIV6326.cjs +793 -0
  178. package/dist/chunk-XIVIE43A.cjs +729 -0
  179. package/dist/chunk-XJAN7CZG.cjs +432 -0
  180. package/dist/chunk-XKTPFXGA.js +164 -0
  181. package/dist/chunk-XL6INWKT.js +121 -0
  182. package/dist/chunk-XSFNHP2E.js +632 -0
  183. package/dist/chunk-XT6JY5W5.js +9684 -0
  184. package/dist/chunk-XUILI4KB.cjs +430 -0
  185. package/dist/chunk-XUUVDHIF.cjs +3962 -0
  186. package/dist/chunk-YF2I3MV3.js +46 -0
  187. package/dist/chunk-YIMN575O.js +4847 -0
  188. package/dist/chunk-YIVFJNYV.js +176 -0
  189. package/dist/chunk-YKGPCZEE.cjs +237 -0
  190. package/dist/chunk-YN6V7R3L.cjs +327 -0
  191. package/dist/chunk-YQELFNJV.js +39 -0
  192. package/dist/chunk-YYXH45E2.js +426 -0
  193. package/dist/chunk-ZBQXLH2L.js +756 -0
  194. package/dist/chunk-ZDSYWBIE.cjs +69 -0
  195. package/dist/chunk-ZU7NIRT6.js +325 -0
  196. package/dist/chunk-ZZ7RO2UQ.js +1243 -0
  197. package/dist/chunk-ZZEI7MV4.js +778 -0
  198. package/dist/cli/holoscript-runner.cjs +2255 -0
  199. package/dist/cli/holoscript-runner.js +2230 -0
  200. package/dist/codebase/index.cjs +336 -0
  201. package/dist/codebase/index.js +331 -0
  202. package/dist/compiler/agent-inference.cjs +31 -0
  203. package/dist/compiler/agent-inference.js +8 -0
  204. package/dist/compiler/android-xr.cjs +24 -0
  205. package/dist/compiler/android-xr.js +14 -0
  206. package/dist/compiler/android.cjs +24 -0
  207. package/dist/compiler/android.js +14 -0
  208. package/dist/compiler/ar.cjs +23 -0
  209. package/dist/compiler/ar.js +11 -0
  210. package/dist/compiler/babylon.cjs +21 -0
  211. package/dist/compiler/babylon.js +15 -0
  212. package/dist/compiler/business-quest.cjs +43 -0
  213. package/dist/compiler/business-quest.js +4 -0
  214. package/dist/compiler/coco.cjs +27 -0
  215. package/dist/compiler/coco.js +4 -0
  216. package/dist/compiler/context.cjs +25 -0
  217. package/dist/compiler/context.d.ts +28 -0
  218. package/dist/compiler/context.js +8 -0
  219. package/dist/compiler/domain-block-utils.cjs +605 -0
  220. package/dist/compiler/domain-block-utils.js +11 -0
  221. package/dist/compiler/dtdl.cjs +27 -0
  222. package/dist/compiler/dtdl.js +11 -0
  223. package/dist/compiler/gltf-pipeline.cjs +39 -0
  224. package/dist/compiler/gltf-pipeline.js +4 -0
  225. package/dist/compiler/godot.cjs +18 -0
  226. package/dist/compiler/godot.js +12 -0
  227. package/dist/compiler/incremental.cjs +34 -0
  228. package/dist/compiler/incremental.js +9 -0
  229. package/dist/compiler/index.cjs +5860 -0
  230. package/dist/compiler/index.d.ts +322 -21
  231. package/dist/compiler/index.js +5525 -0
  232. package/dist/compiler/ios.cjs +23 -0
  233. package/dist/compiler/ios.js +13 -0
  234. package/dist/compiler/llm-provider-capabilities.cjs +25 -0
  235. package/dist/compiler/llm-provider-capabilities.d.ts +43 -0
  236. package/dist/compiler/llm-provider-capabilities.js +8 -0
  237. package/dist/compiler/multi-layer.cjs +24 -0
  238. package/dist/compiler/multi-layer.js +15 -0
  239. package/dist/compiler/nodetoy.cjs +23 -0
  240. package/dist/compiler/nodetoy.js +4 -0
  241. package/dist/compiler/openxr.cjs +19 -0
  242. package/dist/compiler/openxr.js +13 -0
  243. package/dist/compiler/playcanvas.cjs +19 -0
  244. package/dist/compiler/playcanvas.js +13 -0
  245. package/dist/compiler/r3f.cjs +38 -0
  246. package/dist/compiler/r3f.d.ts +22 -0
  247. package/dist/compiler/r3f.js +16 -0
  248. package/dist/compiler/remotion.cjs +23 -0
  249. package/dist/compiler/remotion.js +4 -0
  250. package/dist/compiler/reproducibility.cjs +39 -0
  251. package/dist/compiler/reproducibility.js +4 -0
  252. package/dist/compiler/sdf.cjs +24 -0
  253. package/dist/compiler/sdf.js +12 -0
  254. package/dist/compiler/semantic-scene.cjs +31 -0
  255. package/dist/compiler/semantic-scene.js +4 -0
  256. package/dist/compiler/state.cjs +21 -0
  257. package/dist/compiler/state.js +11 -0
  258. package/dist/compiler/trait-composition.cjs +30 -0
  259. package/dist/compiler/trait-composition.js +9 -0
  260. package/dist/compiler/unity.cjs +19 -0
  261. package/dist/compiler/unity.js +13 -0
  262. package/dist/compiler/unreal.cjs +23 -0
  263. package/dist/compiler/unreal.js +13 -0
  264. package/dist/compiler/urdf.cjs +52 -0
  265. package/dist/compiler/urdf.js +12 -0
  266. package/dist/compiler/usd-physics.cjs +26 -0
  267. package/dist/compiler/usd-physics.js +9 -0
  268. package/dist/compiler/visionos.cjs +19 -0
  269. package/dist/compiler/visionos.js +13 -0
  270. package/dist/compiler/vrchat.cjs +22 -0
  271. package/dist/compiler/vrchat.js +12 -0
  272. package/dist/compiler/vrr.cjs +24 -0
  273. package/dist/compiler/vrr.js +12 -0
  274. package/dist/compiler/wasm.cjs +36 -0
  275. package/dist/compiler/wasm.js +12 -0
  276. package/dist/compiler/webgpu.cjs +18 -0
  277. package/dist/compiler/webgpu.js +12 -0
  278. package/dist/coordinators/index.cjs +1266 -0
  279. package/dist/coordinators/index.d.ts +72 -1
  280. package/dist/coordinators/index.js +1259 -0
  281. package/dist/debugger.cjs +24 -0
  282. package/dist/debugger.js +11 -0
  283. package/dist/entries/interop.cjs +64 -0
  284. package/dist/entries/interop.js +7 -0
  285. package/dist/entries/scripting.cjs +55 -0
  286. package/dist/entries/scripting.js +10 -0
  287. package/dist/hololand/index.cjs +146 -0
  288. package/dist/hololand/index.d.ts +70 -0
  289. package/dist/hololand/index.js +5 -0
  290. package/dist/index.cjs +43233 -0
  291. package/dist/index.d.ts +976 -21
  292. package/dist/index.js +39995 -0
  293. package/dist/math/tropical-spmv.cjs +45 -0
  294. package/dist/math/tropical-spmv.js +4 -0
  295. package/dist/math/vec3.cjs +57 -0
  296. package/dist/math/vec3.js +4 -0
  297. package/dist/ml-dsa-FSKBTE3W.cjs +1265 -0
  298. package/dist/ml-dsa-Z7JDKW4L.js +1265 -0
  299. package/dist/paper-0c-spike/index.cjs +150 -0
  300. package/dist/paper-0c-spike/index.js +141 -0
  301. package/dist/parser.cjs +61 -0
  302. package/dist/parser.d.ts +11 -0
  303. package/dist/parser.js +12 -0
  304. package/dist/playwright-3AT3AKTV.cjs +98673 -0
  305. package/dist/playwright-VZPDVUEQ.js +98660 -0
  306. package/dist/reconstruction/index.cjs +153 -0
  307. package/dist/reconstruction/index.d.ts +29 -2
  308. package/dist/reconstruction/index.js +8 -0
  309. package/dist/runtime.cjs +316 -0
  310. package/dist/runtime.d.ts +61 -0
  311. package/dist/runtime.js +31 -0
  312. package/dist/self-improvement/index.cjs +563 -0
  313. package/dist/self-improvement/index.js +545 -0
  314. package/dist/storage/index.cjs +38 -0
  315. package/dist/storage/index.js +5 -0
  316. package/dist/testing.cjs +25 -0
  317. package/dist/testing.d.ts +70 -0
  318. package/dist/testing.js +4 -0
  319. package/dist/traitDocs/traitDocs.cjs +33 -0
  320. package/dist/traitDocs/traitDocs.js +7 -0
  321. package/dist/traits/botanical-lotus.cjs +41 -0
  322. package/dist/traits/botanical-lotus.d.ts +172 -0
  323. package/dist/traits/botanical-lotus.js +4 -0
  324. package/dist/traits/engines/index.cjs +520 -0
  325. package/dist/traits/engines/index.js +380 -0
  326. package/dist/traits/index.cjs +24409 -0
  327. package/dist/traits/index.d.ts +171 -35
  328. package/dist/traits/index.js +21634 -0
  329. package/dist/traits/simulation-solver-factory.cjs +13 -0
  330. package/dist/traits/simulation-solver-factory.d.ts +23 -0
  331. package/dist/traits/simulation-solver-factory.js +4 -0
  332. package/dist/traits/webcam-gaze.cjs +35 -0
  333. package/dist/traits/webcam-gaze.d.ts +17 -0
  334. package/dist/traits/webcam-gaze.js +4 -0
  335. package/dist/type-checker.cjs +19 -0
  336. package/dist/type-checker.js +6 -0
  337. package/dist/world/index.cjs +947 -0
  338. package/dist/world/index.d.ts +147 -0
  339. package/dist/world/index.js +939 -0
  340. package/dist/world-model/index.cjs +1446 -0
  341. package/dist/world-model/index.d.ts +119 -0
  342. package/dist/world-model/index.js +1414 -0
  343. package/dist/wot/index.cjs +29 -0
  344. package/dist/wot/index.js +4 -0
  345. package/package.json +93 -49
@@ -0,0 +1,778 @@
1
+ import { init_PlatformConditionalCompilerMixin, createPlatformTarget, PlatformConditionalCompilerMixin } from './chunk-GZG4KA4E.js';
2
+ import { init_DomainBlockCompilerMixin, compileDomainBlocks, inputToUnity, compileInputBlock, navigationToUnity, compileNavigationBlock, renderingToUnity, compileRenderingBlock, proceduralToUnity, compileProceduralBlock, web3ToUnity, compileWeb3Block, architectureToUnity, compileArchitectureBlock, musicToUnity, compileMusicBlock, educationToUnity, compileEducationBlock, datavizToUnity, compileDataVizBlock, iotToUnity, compileIoTBlock, compileRoboticsBlock, roboticsToUnity, compileHealthcareBlock, healthcareToUnity, compilePaymentBlock, paymentToUnity, compileNarrativeBlock, narrativeToUnity, compileWeatherBlock, weatherToUnity, compileAudioSourceBlock, audioSourceToUnity, compilePostProcessingBlock, postProcessingToUnity, compileParticleBlock, particlesToUnity, compilePhysicsBlock, physicsToUnity, compileMaterialBlock, materialToUnity } from './chunk-JCLBKPMX.js';
3
+ import { init_CompilerBase, CompilerBase } from './chunk-QPSKHBJP.js';
4
+ import { __export, __esm } from './chunk-OL46QLBJ.js';
5
+ import { ANSCapabilityPath } from '@holoscript/core-types/ans';
6
+
7
+ // src/compiler/UnityCompiler.ts
8
+ var UnityCompiler_exports = {};
9
+ __export(UnityCompiler_exports, {
10
+ UnityCompiler: () => UnityCompiler
11
+ });
12
+ var UnityCompiler;
13
+ var init_UnityCompiler = __esm({
14
+ "src/compiler/UnityCompiler.ts"() {
15
+ init_CompilerBase();
16
+ init_DomainBlockCompilerMixin();
17
+ init_PlatformConditionalCompilerMixin();
18
+ UnityCompiler = class extends CompilerBase {
19
+ constructor(options = {}) {
20
+ super();
21
+ this.compilerName = "UnityCompiler";
22
+ this.lines = [];
23
+ this.indentLevel = 0;
24
+ this.options = {
25
+ namespace: options.namespace || "HoloScene",
26
+ className: options.className || "GeneratedScene",
27
+ useURP: options.useURP ?? true,
28
+ indent: options.indent || " ",
29
+ provenanceHash: options.provenanceHash ?? "",
30
+ holomapPointCloud: options.holomapPointCloud
31
+ };
32
+ if (options.platformTarget) {
33
+ this._platformTarget = typeof options.platformTarget === "string" ? createPlatformTarget(options.platformTarget) : options.platformTarget;
34
+ }
35
+ }
36
+ getRequiredCapability() {
37
+ return ANSCapabilityPath.UNITY;
38
+ }
39
+ compile(composition, agentToken, outputPath) {
40
+ this.validateCompilerAccess(agentToken, outputPath);
41
+ if (this._platformTarget) {
42
+ const platformMixin = new PlatformConditionalCompilerMixin();
43
+ composition = platformMixin.filterForPlatform(composition, this._platformTarget);
44
+ }
45
+ this.lines = [];
46
+ this.indentLevel = 0;
47
+ this.emit("// Auto-generated by HoloScript UnityCompiler");
48
+ this.emit(
49
+ `// Source: composition "${this.escapeStringValue(composition.name, "CSharp")}"`
50
+ );
51
+ this.emit("// Do not edit manually \u2014 regenerate from .holo source");
52
+ if (this.options.provenanceHash) {
53
+ this.emit(`// Provenance Hash: ${this.options.provenanceHash}`);
54
+ }
55
+ this.emit("");
56
+ this.emit("using UnityEngine;");
57
+ this.emit("using UnityEngine.UI;");
58
+ if (composition.timelines?.length) this.emit("using System.Collections;");
59
+ this.emit("");
60
+ this.emit(`namespace ${this.options.namespace}`);
61
+ this.emit("{");
62
+ this.indentLevel++;
63
+ this.emit(`public class ${this.options.className} : MonoBehaviour`);
64
+ this.emit("{");
65
+ this.indentLevel++;
66
+ if (composition.state) {
67
+ this.emit("// === State ===");
68
+ for (const prop of composition.state.properties) {
69
+ const csType = this.toCSharpType(prop.value);
70
+ const csVal = this.toCSharpValue(prop.value);
71
+ this.emit(
72
+ `private ${csType} ${this.escapeStringValue(prop.key, "CSharp")} = ${csVal};`
73
+ );
74
+ }
75
+ this.emit("");
76
+ }
77
+ this.emit("private void Awake()");
78
+ this.emit("{");
79
+ this.indentLevel++;
80
+ if (composition.environment) {
81
+ this.compileEnvironment(composition.environment);
82
+ }
83
+ if (composition.lights) {
84
+ for (const light of composition.lights) {
85
+ this.compileLight(light);
86
+ }
87
+ }
88
+ if (composition.camera) {
89
+ this.compileCamera(composition.camera);
90
+ }
91
+ if (composition.objects) {
92
+ for (const obj of composition.objects) {
93
+ this.compileObject(obj, "transform");
94
+ }
95
+ }
96
+ if (composition.spatialGroups) {
97
+ for (const group of composition.spatialGroups) {
98
+ this.compileSpatialGroup(group, "transform");
99
+ }
100
+ }
101
+ if (composition.audio) {
102
+ for (const audio of composition.audio) {
103
+ this.compileAudio(audio);
104
+ }
105
+ }
106
+ if (composition.zones) {
107
+ for (const zone of composition.zones) {
108
+ this.compileZone(zone);
109
+ }
110
+ }
111
+ if (composition.timelines) {
112
+ for (const tl of composition.timelines) {
113
+ if (tl.autoplay) {
114
+ this.emit(`StartCoroutine(${this.sanitizeName(tl.name)}Routine());`);
115
+ }
116
+ }
117
+ }
118
+ this.emitHolomapPointCloudLoader();
119
+ this.indentLevel--;
120
+ this.emit("}");
121
+ this.emit("");
122
+ if (composition.timelines) {
123
+ for (const tl of composition.timelines) {
124
+ this.compileTimeline(tl);
125
+ }
126
+ }
127
+ if (composition.effects) {
128
+ this.compileEffects(composition.effects);
129
+ }
130
+ if (composition.transitions) {
131
+ for (const tr of composition.transitions) {
132
+ this.compileTransition(tr);
133
+ }
134
+ }
135
+ if (composition.ui) {
136
+ this.compileUI(composition.ui);
137
+ }
138
+ this.compileDomainBlocks(composition);
139
+ this.indentLevel--;
140
+ this.emit("}");
141
+ this.indentLevel--;
142
+ this.emit("}");
143
+ return this.lines.join("\n");
144
+ }
145
+ emitHolomapPointCloudLoader() {
146
+ const h = this.options.holomapPointCloud;
147
+ if (!h || h.pointCount < 1) return;
148
+ this.emit(" // --- HoloMap point cloud (base64 \u2192 Mesh topology Points) ---");
149
+ this.emit(" {");
150
+ const posLit = this.chunkBase64CSharpLiteral(h.positionsB64);
151
+ const colLit = this.chunkBase64CSharpLiteral(h.colorsB64);
152
+ this.emit(` string holomapPosB64 = ${posLit};`);
153
+ this.emit(` string holomapColB64 = ${colLit};`);
154
+ this.emit(` int holomapN = ${h.pointCount};`);
155
+ this.emit(
156
+ " byte[] holomapPos = System.Convert.FromBase64String(holomapPosB64);"
157
+ );
158
+ this.emit(
159
+ " byte[] holomapCol = System.Convert.FromBase64String(holomapColB64);"
160
+ );
161
+ this.emit(" if (holomapPos.Length >= holomapN * 12 && holomapCol.Length >= holomapN * 3)");
162
+ this.emit(" {");
163
+ this.emit(
164
+ ' var holomapGo = new GameObject("HoloMapReconstructionPoints");'
165
+ );
166
+ this.emit(" holomapGo.transform.SetParent(transform, false);");
167
+ this.emit(" var mesh = new Mesh();");
168
+ this.emit(
169
+ " mesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32;"
170
+ );
171
+ this.emit(" var verts = new Vector3[holomapN];");
172
+ this.emit(" var cols = new Color32[holomapN];");
173
+ this.emit(" var idx = new int[holomapN];");
174
+ this.emit(" for (int i = 0; i < holomapN; i++)");
175
+ this.emit(" {");
176
+ this.emit(
177
+ " int p = i * 12; int c = i * 3;"
178
+ );
179
+ this.emit(
180
+ " verts[i] = new Vector3(System.BitConverter.ToSingle(holomapPos, p), System.BitConverter.ToSingle(holomapPos, p + 4), System.BitConverter.ToSingle(holomapPos, p + 8));"
181
+ );
182
+ this.emit(
183
+ " cols[i] = new Color32(holomapCol[c], holomapCol[c + 1], holomapCol[c + 2], 255);"
184
+ );
185
+ this.emit(" idx[i] = i;");
186
+ this.emit(" }");
187
+ this.emit(" mesh.vertices = verts;");
188
+ this.emit(" mesh.colors32 = cols;");
189
+ this.emit(" mesh.SetIndices(idx, MeshTopology.Points, 0, true);");
190
+ this.emit(" mesh.RecalculateBounds();");
191
+ this.emit(" var mf = holomapGo.AddComponent<MeshFilter>();");
192
+ this.emit(" mf.sharedMesh = mesh;");
193
+ this.emit(" var mr = holomapGo.AddComponent<MeshRenderer>();");
194
+ this.emit(
195
+ ' var sh = Shader.Find("Universal Render Pipeline/Unlit");'
196
+ );
197
+ this.emit(
198
+ ' if (sh == null) sh = Shader.Find("Unlit/Color");'
199
+ );
200
+ this.emit(' mr.sharedMaterial = sh != null ? new Material(sh) : new Material(Shader.Find("Hidden/InternalErrorShader"));');
201
+ this.emit(" }");
202
+ this.emit(" }");
203
+ }
204
+ /** Concatenated string literals so very large MCP payloads stay valid C#. */
205
+ chunkBase64CSharpLiteral(b64) {
206
+ const chunk = 4096;
207
+ if (b64.length <= chunk) return `"${b64}"`;
208
+ const parts = [];
209
+ for (let i = 0; i < b64.length; i += chunk) {
210
+ parts.push(`"${b64.slice(i, i + chunk)}"`);
211
+ }
212
+ return parts.join(" + ");
213
+ }
214
+ compileDomainBlocks(composition) {
215
+ const domainBlocks = composition.domainBlocks ?? [];
216
+ if (domainBlocks.length === 0) return;
217
+ this.emit("");
218
+ this.emit("// === v4.2 Domain Blocks ===");
219
+ let blockIdx = 0;
220
+ const compiled = compileDomainBlocks(
221
+ domainBlocks,
222
+ {
223
+ material: (block) => {
224
+ const mat = compileMaterialBlock(block);
225
+ const prefix = `db${blockIdx++}`;
226
+ return materialToUnity(mat, prefix);
227
+ },
228
+ physics: (block) => {
229
+ const phys = compilePhysicsBlock(block);
230
+ const prefix = `db${blockIdx++}`;
231
+ return physicsToUnity(phys, prefix);
232
+ },
233
+ vfx: (block) => {
234
+ const ps = compileParticleBlock(block);
235
+ const prefix = `db${blockIdx++}`;
236
+ return particlesToUnity(ps, prefix);
237
+ },
238
+ postfx: (block) => {
239
+ const pp = compilePostProcessingBlock(block);
240
+ return postProcessingToUnity(pp);
241
+ },
242
+ audio: (block) => {
243
+ const audio = compileAudioSourceBlock(block);
244
+ const prefix = `db${blockIdx++}`;
245
+ return audioSourceToUnity(audio, prefix);
246
+ },
247
+ weather: (block) => {
248
+ const weather = compileWeatherBlock(block);
249
+ return weatherToUnity(weather);
250
+ },
251
+ narrative: (block) => {
252
+ const narr = compileNarrativeBlock(block);
253
+ return narrativeToUnity(narr);
254
+ },
255
+ payment: (block) => {
256
+ const pay = compilePaymentBlock(block);
257
+ return paymentToUnity(pay);
258
+ },
259
+ healthcare: (block) => {
260
+ const h = compileHealthcareBlock(block);
261
+ return healthcareToUnity(h);
262
+ },
263
+ robotics: (block) => {
264
+ const r = compileRoboticsBlock(block);
265
+ return roboticsToUnity(r);
266
+ },
267
+ iot: (block) => iotToUnity(compileIoTBlock(block)),
268
+ dataviz: (block) => datavizToUnity(compileDataVizBlock(block)),
269
+ education: (block) => educationToUnity(compileEducationBlock(block)),
270
+ music: (block) => musicToUnity(compileMusicBlock(block)),
271
+ architecture: (block) => architectureToUnity(compileArchitectureBlock(block)),
272
+ web3: (block) => web3ToUnity(compileWeb3Block(block)),
273
+ procedural: (block) => proceduralToUnity(compileProceduralBlock(block)),
274
+ rendering: (block) => renderingToUnity(compileRenderingBlock(block)),
275
+ navigation: (block) => navigationToUnity(compileNavigationBlock(block)),
276
+ input: (block) => inputToUnity(compileInputBlock(block))
277
+ },
278
+ (block) => `// Domain block: ${block.domain}/${block.keyword} "${this.escapeStringValue(block.name, "CSharp")}"`
279
+ );
280
+ for (const line of compiled) {
281
+ for (const l of line.split("\n")) {
282
+ this.emit(l);
283
+ }
284
+ }
285
+ }
286
+ compileEnvironment(env) {
287
+ this.emit("// === Environment ===");
288
+ for (const prop of env.properties) {
289
+ if (prop.key === "preset" || prop.key === "skybox") {
290
+ this.emit(`RenderSettings.skybox = Resources.Load<Material>("Skybox/${prop.value}");`);
291
+ } else if (prop.key === "fog" && typeof prop.value === "object") {
292
+ const fog = prop.value;
293
+ this.emit("RenderSettings.fog = true;");
294
+ if (fog.color) this.emit(`RenderSettings.fogColor = ${this.toColor(fog.color)};`);
295
+ if (fog.near !== void 0) this.emit(`RenderSettings.fogStartDistance = ${fog.near}f;`);
296
+ if (fog.far !== void 0) this.emit(`RenderSettings.fogEndDistance = ${fog.far}f;`);
297
+ } else if (prop.key === "ambient_light") {
298
+ this.emit(`RenderSettings.ambientIntensity = ${prop.value}f;`);
299
+ }
300
+ }
301
+ this.emit("");
302
+ }
303
+ compileLight(light) {
304
+ const varName = this.sanitizeName(light.name);
305
+ this.emit(`// Light: ${this.escapeStringValue(light.name, "CSharp")}`);
306
+ this.emit(
307
+ `var ${varName}GO = new GameObject("${this.escapeStringValue(light.name, "CSharp")}");`
308
+ );
309
+ this.emit(`${varName}GO.transform.SetParent(transform);`);
310
+ this.emit(`var ${varName} = ${varName}GO.AddComponent<Light>();`);
311
+ const typeMap = {
312
+ directional: "LightType.Directional",
313
+ point: "LightType.Point",
314
+ spot: "LightType.Spot",
315
+ area: "LightType.Area"
316
+ };
317
+ this.emit(`${varName}.type = ${typeMap[light.lightType] || "LightType.Directional"};`);
318
+ for (const prop of light.properties) {
319
+ if (prop.key === "color") {
320
+ this.emit(`${varName}.color = ${this.toColor(prop.value)};`);
321
+ } else if (prop.key === "intensity") {
322
+ this.emit(`${varName}.intensity = ${prop.value}f;`);
323
+ } else if (prop.key === "position" && Array.isArray(prop.value)) {
324
+ this.emit(`${varName}GO.transform.position = ${this.toVector3(prop.value)};`);
325
+ } else if (prop.key === "cast_shadow" || prop.key === "castShadow") {
326
+ this.emit(
327
+ `${varName}.shadows = ${prop.value ? "LightShadows.Soft" : "LightShadows.None"};`
328
+ );
329
+ } else if (prop.key === "angle") {
330
+ this.emit(`${varName}.spotAngle = ${prop.value * (180 / Math.PI)}f;`);
331
+ } else if (prop.key === "distance") {
332
+ this.emit(`${varName}.range = ${prop.value}f;`);
333
+ }
334
+ }
335
+ this.emit("");
336
+ }
337
+ compileCamera(camera) {
338
+ this.emit("// === Camera ===");
339
+ this.emit("var cam = Camera.main;");
340
+ this.emit(`cam.fieldOfView = ${this.findProp(camera.properties, "fov") || 60}f;`);
341
+ const pos = this.findProp(camera.properties, "position");
342
+ if (pos) this.emit(`cam.transform.position = ${this.toVector3(pos)};`);
343
+ const lookAt = this.findProp(camera.properties, "look_at") || this.findProp(camera.properties, "lookAt");
344
+ if (lookAt) this.emit(`cam.transform.LookAt(${this.toVector3(lookAt)});`);
345
+ const near = this.findProp(camera.properties, "near");
346
+ if (near) this.emit(`cam.nearClipPlane = ${near}f;`);
347
+ const far = this.findProp(camera.properties, "far");
348
+ if (far) this.emit(`cam.farClipPlane = ${far}f;`);
349
+ this.emit("");
350
+ }
351
+ compileObject(obj, parentVar) {
352
+ const varName = this.sanitizeName(obj.name);
353
+ const meshType = this.findObjProp(obj, "geometry") || this.findObjProp(obj, "mesh") || this.findObjProp(obj, "type") || "cube";
354
+ const isText = meshType === "text";
355
+ const isSparkles = meshType === "sparkles";
356
+ const isModel = meshType === "model" || !!this.findObjProp(obj, "model") || !!this.findObjProp(obj, "src") || !!this.findObjProp(obj, "source");
357
+ this.emit(`// Object: ${this.escapeStringValue(obj.name, "CSharp")}`);
358
+ if (isText) {
359
+ this.emit(
360
+ `var ${varName}GO = new GameObject("${this.escapeStringValue(obj.name, "CSharp")}");`
361
+ );
362
+ this.emit(`${varName}GO.transform.SetParent(${parentVar});`);
363
+ this.emit(`var ${varName}TM = ${varName}GO.AddComponent<TextMesh>();`);
364
+ const text = this.findObjProp(obj, "text");
365
+ if (text) this.emit(`${varName}TM.text = "${text}";`);
366
+ const fontSize = this.findObjProp(obj, "font_size");
367
+ if (fontSize) this.emit(`${varName}TM.fontSize = ${Math.round(fontSize * 100)};`);
368
+ const color = this.findObjProp(obj, "color");
369
+ if (color) this.emit(`${varName}TM.color = ${this.toColor(color)};`);
370
+ } else if (isModel) {
371
+ const src = this.findObjProp(obj, "model") || this.findObjProp(obj, "src") || this.findObjProp(obj, "source");
372
+ if (src) {
373
+ this.emit(`var ${varName}GO = Instantiate(Resources.Load<GameObject>("Models/${src}"));`);
374
+ } else {
375
+ this.emit(`// WARNING: geometry "model" without source \u2014 placeholder cube`);
376
+ this.emit(`var ${varName}GO = GameObject.CreatePrimitive(PrimitiveType.Cube);`);
377
+ }
378
+ this.emit(`${varName}GO.name = "${this.escapeStringValue(obj.name, "CSharp")}";`);
379
+ this.emit(`${varName}GO.transform.SetParent(${parentVar});`);
380
+ } else if (isSparkles) {
381
+ this.emit(
382
+ `// Sparkles: use ParticleSystem for "${this.escapeStringValue(obj.name, "CSharp")}"`
383
+ );
384
+ this.emit(
385
+ `var ${varName}GO = new GameObject("${this.escapeStringValue(obj.name, "CSharp")}");`
386
+ );
387
+ this.emit(`${varName}GO.transform.SetParent(${parentVar});`);
388
+ this.emit(`${varName}GO.AddComponent<ParticleSystem>();`);
389
+ } else {
390
+ const primitiveMap = {
391
+ cube: "PrimitiveType.Cube",
392
+ box: "PrimitiveType.Cube",
393
+ sphere: "PrimitiveType.Sphere",
394
+ cylinder: "PrimitiveType.Cylinder",
395
+ plane: "PrimitiveType.Plane",
396
+ capsule: "PrimitiveType.Capsule"
397
+ };
398
+ const primitive = primitiveMap[meshType] || "PrimitiveType.Cube";
399
+ this.emit(`var ${varName}GO = GameObject.CreatePrimitive(${primitive});`);
400
+ this.emit(`${varName}GO.name = "${this.escapeStringValue(obj.name, "CSharp")}";`);
401
+ this.emit(`${varName}GO.transform.SetParent(${parentVar});`);
402
+ }
403
+ const pos = this.findObjProp(obj, "position");
404
+ if (pos) this.emit(`${varName}GO.transform.localPosition = ${this.toVector3(pos)};`);
405
+ const rot = this.findObjProp(obj, "rotation");
406
+ if (rot) this.emit(`${varName}GO.transform.localEulerAngles = ${this.toVector3(rot)};`);
407
+ const scale = this.findObjProp(obj, "scale");
408
+ if (scale) this.emit(`${varName}GO.transform.localScale = ${this.toVector3(scale)};`);
409
+ const size = this.findObjProp(obj, "size");
410
+ if (size && !isText) {
411
+ if (Array.isArray(size)) {
412
+ this.emit(`${varName}GO.transform.localScale = ${this.toVector3(size)};`);
413
+ } else {
414
+ this.emit(`${varName}GO.transform.localScale = Vector3.one * ${size}f;`);
415
+ }
416
+ }
417
+ const material = this.findObjProp(obj, "material");
418
+ if (material && typeof material === "object" && !isText && !isModel) {
419
+ this.emit(`var ${varName}Mat = ${varName}GO.GetComponent<Renderer>().material;`);
420
+ const mat = material;
421
+ if (mat.color) this.emit(`${varName}Mat.color = ${this.toColor(mat.color)};`);
422
+ if (mat.roughness !== void 0)
423
+ this.emit(`${varName}Mat.SetFloat("_Smoothness", ${1 - mat.roughness}f);`);
424
+ if (mat.metalness !== void 0)
425
+ this.emit(`${varName}Mat.SetFloat("_Metallic", ${mat.metalness}f);`);
426
+ if (mat.emissive) {
427
+ this.emit(`${varName}Mat.EnableKeyword("_EMISSION");`);
428
+ this.emit(`${varName}Mat.SetColor("_EmissionColor", ${this.toColor(mat.emissive)});`);
429
+ }
430
+ }
431
+ if (obj.traits) {
432
+ for (const trait of obj.traits) {
433
+ if (trait.name === "collidable") {
434
+ this.emit(`// Collider already present from primitive`);
435
+ } else if (trait.name === "physics" || trait.name === "grabbable") {
436
+ this.emit(`var ${varName}RB = ${varName}GO.AddComponent<Rigidbody>();`);
437
+ if (trait.config?.mass) this.emit(`${varName}RB.mass = ${trait.config.mass}f;`);
438
+ } else if (trait.name === "portal") {
439
+ this.emit(
440
+ `// Portal: "${trait.config?.destination}" \u2014 implement via SceneManager.LoadScene()`
441
+ );
442
+ } else if (trait.name === "plane_detection") {
443
+ this.emit(`// @plane_detection \u2014 AR Foundation: ARPlaneManager`);
444
+ this.emit(`// ${varName}GO.AddComponent<UnityEngine.XR.ARFoundation.ARPlaneManager>();`);
445
+ } else if (trait.name === "mesh_detection") {
446
+ this.emit(`// @mesh_detection \u2014 AR Foundation: ARMeshManager`);
447
+ } else if (trait.name === "anchor") {
448
+ this.emit(`// @anchor \u2014 AR Foundation: ARAnchorManager`);
449
+ } else if (trait.name === "persistent_anchor" || trait.name === "shared_anchor") {
450
+ this.emit(
451
+ `// @${this.escapeStringValue(trait.name, "CSharp")} \u2014 Azure Spatial Anchors or AR Foundation`
452
+ );
453
+ } else if (trait.name === "occlusion") {
454
+ this.emit(`// @occlusion \u2014 AR Foundation: AROcclusionManager`);
455
+ } else if (trait.name === "light_estimation") {
456
+ this.emit(
457
+ `// @light_estimation \u2014 AR Foundation: ARCameraManager.requestedLightEstimation`
458
+ );
459
+ } else if (trait.name === "geospatial" || trait.name === "geospatial_anchor" || trait.name === "terrain_anchor" || trait.name === "rooftop_anchor") {
460
+ this.emit(
461
+ `// @${this.escapeStringValue(trait.name, "CSharp")} \u2014 ARCore Geospatial API`
462
+ );
463
+ } else if (trait.name === "cloth") {
464
+ this.emit(`var ${varName}Cloth = ${varName}GO.AddComponent<Cloth>();`);
465
+ if (trait.config?.stiffness)
466
+ this.emit(`${varName}Cloth.stretchingStiffness = ${trait.config.stiffness}f;`);
467
+ if (trait.config?.damping)
468
+ this.emit(`${varName}Cloth.damping = ${trait.config.damping}f;`);
469
+ } else if (trait.name === "wind") {
470
+ this.emit(`var ${varName}Wind = ${varName}GO.AddComponent<WindZone>();`);
471
+ if (trait.config?.strength)
472
+ this.emit(`${varName}Wind.windMain = ${trait.config.strength}f;`);
473
+ if (trait.config?.turbulence)
474
+ this.emit(`${varName}Wind.windTurbulence = ${trait.config.turbulence}f;`);
475
+ } else if (trait.name === "fluid" || trait.name === "soft_body" || trait.name === "rope" || trait.name === "chain" || trait.name === "buoyancy" || trait.name === "destruction") {
476
+ this.emit(
477
+ `// @${this.escapeStringValue(trait.name, "CSharp")} \u2014 custom physics: ${JSON.stringify(trait.config || {})}`
478
+ );
479
+ } else if (trait.name === "reverb_zone") {
480
+ this.emit(`var ${varName}Reverb = ${varName}GO.AddComponent<AudioReverbZone>();`);
481
+ if (trait.config?.decay_time)
482
+ this.emit(`${varName}Reverb.decayTime = ${trait.config.decay_time}f;`);
483
+ } else if (trait.name === "audio_occlusion") {
484
+ this.emit(`${varName}GO.AddComponent<AudioLowPassFilter>();`);
485
+ this.emit(`// @audio_occlusion \u2014 raycast-based low-pass filter`);
486
+ } else if (trait.name === "ambisonics" || trait.name === "hrtf" || trait.name === "audio_portal" || trait.name === "audio_material" || trait.name === "head_tracked_audio") {
487
+ this.emit(
488
+ `// @${this.escapeStringValue(trait.name, "CSharp")} \u2014 spatial audio: ${JSON.stringify(trait.config || {})}`
489
+ );
490
+ } else if (trait.name === "gaussian_splat" || trait.name === "nerf" || trait.name === "volumetric_video" || trait.name === "point_cloud" || trait.name === "photogrammetry") {
491
+ this.emit(
492
+ `// @${this.escapeStringValue(trait.name, "CSharp")} \u2014 volumetric renderer: ${JSON.stringify(trait.config || {})}`
493
+ );
494
+ } else if (trait.name === "eye_tracking") {
495
+ this.emit(`// @eye_tracking \u2014 XR Interaction Toolkit: XREyeInteractor`);
496
+ } else if (trait.name === "hand_tracking") {
497
+ this.emit(`// @hand_tracking \u2014 XR Hands: XRHandTrackingSubsystem`);
498
+ } else if (trait.name === "body_tracking") {
499
+ this.emit(`// @body_tracking \u2014 XR Body Tracking subsystem`);
500
+ } else if (trait.name === "face_tracking") {
501
+ this.emit(`// @face_tracking \u2014 AR Foundation: ARFaceManager`);
502
+ } else if (trait.name === "accessible") {
503
+ this.emit(
504
+ `// @accessible(role: "${trait.config?.role || "generic"}") \u2014 Unity Accessibility`
505
+ );
506
+ } else if (trait.name === "spatial_persona" || trait.name === "shareplay") {
507
+ this.emit(
508
+ `// @${this.escapeStringValue(trait.name, "CSharp")} \u2014 visionOS-specific; use Mirror/Photon for Unity multiplayer`
509
+ );
510
+ } else if (trait.name === "object_tracking") {
511
+ this.emit(`// @object_tracking \u2014 AR Foundation: ARTrackedObjectManager`);
512
+ } else if (trait.name === "scene_reconstruction") {
513
+ this.emit(`// @scene_reconstruction \u2014 AR Foundation: ARMeshManager`);
514
+ } else if (trait.name === "eye_tracked") {
515
+ this.emit(`// @eye_tracked \u2014 XR Interaction Toolkit: XREyeInteractor`);
516
+ } else if (trait.name === "eye_hand_fusion") {
517
+ this.emit(`// @eye_hand_fusion \u2014 combine XREyeInteractor + XRHandInteractorController`);
518
+ } else if (trait.name === "controlnet") {
519
+ const model = trait.config?.model || "canny";
520
+ this.emit(`// @controlnet(model: "${model}") \u2014 route to inference API or Unity Sentis`);
521
+ } else if (trait.name === "ai_texture_gen") {
522
+ const style = trait.config?.style || "photorealistic";
523
+ this.emit(`// @ai_texture_gen(style: "${style}") \u2014 Unity Sentis or external API`);
524
+ } else if (trait.name === "diffusion_realtime") {
525
+ this.emit(`// @diffusion_realtime \u2014 Unity Sentis real-time diffusion pipeline`);
526
+ } else if (trait.name === "ai_upscaling") {
527
+ const factor = trait.config?.factor || 2;
528
+ this.emit(`// @ai_upscaling(${factor}x) \u2014 Unity Sentis super-resolution model`);
529
+ } else if (trait.name === "ai_inpainting") {
530
+ this.emit(`// @ai_inpainting \u2014 Unity Sentis or API-based inpainting`);
531
+ } else if (trait.name === "neural_link" || trait.name === "neural_forge") {
532
+ this.emit(
533
+ `// @${this.escapeStringValue(trait.name, "CSharp")} \u2014 ${JSON.stringify(trait.config || {})}`
534
+ );
535
+ } else if (trait.name === "embedding_search" || trait.name === "ai_npc_brain" || trait.name === "vector_db") {
536
+ this.emit(
537
+ `// @${this.escapeStringValue(trait.name, "CSharp")} \u2014 AI knowledge: use external service or on-device model`
538
+ );
539
+ } else if (trait.name === "vision" || trait.name === "ai_vision") {
540
+ this.emit(
541
+ `// @${this.escapeStringValue(trait.name, "CSharp")} \u2014 Unity Barracuda / Sentis vision model`
542
+ );
543
+ } else if (trait.name === "spatial_awareness") {
544
+ this.emit(`// @spatial_awareness \u2014 AR Foundation scene understanding`);
545
+ } else if (trait.name === "neural_animation") {
546
+ this.emit(`// @neural_animation \u2014 Motion Matching (com.unity.animation.rigging)`);
547
+ } else {
548
+ this.emit(
549
+ `// @${this.escapeStringValue(trait.name, "CSharp")}: ${JSON.stringify(trait.config || {})}`
550
+ );
551
+ }
552
+ }
553
+ }
554
+ if (obj.children) {
555
+ for (const child of obj.children) {
556
+ this.compileObject(child, `${varName}GO.transform`);
557
+ }
558
+ }
559
+ this.emit("");
560
+ }
561
+ compileSpatialGroup(group, parentVar) {
562
+ const varName = this.sanitizeName(group.name);
563
+ this.emit(`// Spatial Group: ${this.escapeStringValue(group.name, "CSharp")}`);
564
+ this.emit(
565
+ `var ${varName}GO = new GameObject("${this.escapeStringValue(group.name, "CSharp")}");`
566
+ );
567
+ this.emit(`${varName}GO.transform.SetParent(${parentVar});`);
568
+ for (const prop of group.properties) {
569
+ if (prop.key === "position" && Array.isArray(prop.value)) {
570
+ this.emit(`${varName}GO.transform.localPosition = ${this.toVector3(prop.value)};`);
571
+ }
572
+ }
573
+ for (const obj of group.objects) {
574
+ this.compileObject(obj, `${varName}GO.transform`);
575
+ }
576
+ if (group.groups) {
577
+ for (const sub of group.groups) {
578
+ this.compileSpatialGroup(sub, `${varName}GO.transform`);
579
+ }
580
+ }
581
+ this.emit("");
582
+ }
583
+ compileAudio(audio) {
584
+ const varName = this.sanitizeName(audio.name);
585
+ this.emit(`// Audio: ${this.escapeStringValue(audio.name, "CSharp")}`);
586
+ this.emit(
587
+ `var ${varName}GO = new GameObject("${this.escapeStringValue(audio.name, "CSharp")}");`
588
+ );
589
+ this.emit(`${varName}GO.transform.SetParent(transform);`);
590
+ this.emit(`var ${varName}AS = ${varName}GO.AddComponent<AudioSource>();`);
591
+ for (const prop of audio.properties) {
592
+ if (prop.key === "src" || prop.key === "source") {
593
+ this.emit(`${varName}AS.clip = Resources.Load<AudioClip>("Audio/${prop.value}");`);
594
+ } else if (prop.key === "volume") {
595
+ this.emit(`${varName}AS.volume = ${prop.value}f;`);
596
+ } else if (prop.key === "loop") {
597
+ this.emit(`${varName}AS.loop = ${prop.value};`);
598
+ } else if (prop.key === "spatial") {
599
+ this.emit(`${varName}AS.spatialBlend = ${prop.value ? "1.0f" : "0.0f"};`);
600
+ } else if (prop.key === "position" && Array.isArray(prop.value)) {
601
+ this.emit(`${varName}GO.transform.position = ${this.toVector3(prop.value)};`);
602
+ } else if (prop.key === "distance") {
603
+ this.emit(`${varName}AS.maxDistance = ${prop.value}f;`);
604
+ }
605
+ }
606
+ this.emit(`${varName}AS.Play();`);
607
+ this.emit("");
608
+ }
609
+ compileZone(zone) {
610
+ const varName = this.sanitizeName(zone.name);
611
+ this.emit(`// Zone: ${this.escapeStringValue(zone.name, "CSharp")}`);
612
+ this.emit(
613
+ `var ${varName}GO = new GameObject("${this.escapeStringValue(zone.name, "CSharp")}");`
614
+ );
615
+ this.emit(`${varName}GO.transform.SetParent(transform);`);
616
+ for (const prop of zone.properties) {
617
+ if (prop.key === "position" && Array.isArray(prop.value)) {
618
+ this.emit(`${varName}GO.transform.position = ${this.toVector3(prop.value)};`);
619
+ } else if (prop.key === "shape" && prop.value === "box") {
620
+ this.emit(`var ${varName}Col = ${varName}GO.AddComponent<BoxCollider>();`);
621
+ this.emit(`${varName}Col.isTrigger = true;`);
622
+ } else if (prop.key === "shape" && prop.value === "sphere") {
623
+ this.emit(`var ${varName}Col = ${varName}GO.AddComponent<SphereCollider>();`);
624
+ this.emit(`${varName}Col.isTrigger = true;`);
625
+ } else if (prop.key === "size" && Array.isArray(prop.value)) {
626
+ this.emit(
627
+ `${varName}GO.GetComponent<Collider>().bounds.size == ${this.toVector3(prop.value)}; // Set via scale`
628
+ );
629
+ } else if (prop.key === "radius") {
630
+ this.emit(`${varName}GO.GetComponent<SphereCollider>().radius = ${prop.value}f;`);
631
+ }
632
+ }
633
+ if (zone.handlers?.length) {
634
+ this.emit(
635
+ `// Zone handlers: ${zone.handlers.map((h) => h.event).join(", ")} \u2014 implement via OnTriggerEnter/Exit`
636
+ );
637
+ }
638
+ this.emit("");
639
+ }
640
+ compileTimeline(timeline) {
641
+ const varName = this.sanitizeName(timeline.name);
642
+ this.emit(`private IEnumerator ${varName}Routine()`);
643
+ this.emit("{");
644
+ this.indentLevel++;
645
+ let lastTime = 0;
646
+ for (const entry of timeline.entries) {
647
+ const delay = entry.time - lastTime;
648
+ if (delay > 0) {
649
+ this.emit(`yield return new WaitForSeconds(${delay}f);`);
650
+ }
651
+ if (entry.action.kind === "animate") {
652
+ this.emit(`// Animate "${entry.action.target}" \u2014 use DOTween or AnimationCurve`);
653
+ const props = entry.action.properties;
654
+ for (const [key, value] of Object.entries(props)) {
655
+ this.emit(`// ${key}: ${JSON.stringify(value)}`);
656
+ }
657
+ } else if (entry.action.kind === "emit") {
658
+ this.emit(`// Emit event: "${entry.action.event}"`);
659
+ } else if (entry.action.kind === "call") {
660
+ this.emit(`// Call: ${entry.action.method}(${entry.action.args?.join(", ") || ""})`);
661
+ }
662
+ lastTime = entry.time;
663
+ }
664
+ if (timeline.loop) {
665
+ this.emit(`StartCoroutine(${varName}Routine()); // loop`);
666
+ }
667
+ this.indentLevel--;
668
+ this.emit("}");
669
+ this.emit("");
670
+ }
671
+ compileEffects(effects) {
672
+ this.emit("// === Post-Processing (configure via URP Volume) ===");
673
+ for (const effect of effects.effects) {
674
+ this.emit(`// Effect: ${effect.effectType} \u2014 ${JSON.stringify(effect.properties)}`);
675
+ }
676
+ this.emit("");
677
+ }
678
+ compileTransition(tr) {
679
+ const varName = this.sanitizeName(tr.name);
680
+ this.emit(`public void ${varName}()`);
681
+ this.emit("{");
682
+ this.indentLevel++;
683
+ for (const prop of tr.properties) {
684
+ if (prop.key === "target") {
685
+ this.emit(`// Load scene: "${prop.value}"`);
686
+ this.emit(`UnityEngine.SceneManagement.SceneManager.LoadScene("${prop.value}");`);
687
+ } else if (prop.key === "effect") {
688
+ this.emit(`// Transition effect: ${prop.value}`);
689
+ } else if (prop.key === "duration") {
690
+ this.emit(`// Duration: ${prop.value}s`);
691
+ }
692
+ }
693
+ this.indentLevel--;
694
+ this.emit("}");
695
+ this.emit("");
696
+ }
697
+ compileUI(ui) {
698
+ this.emit("// === UI Setup ===");
699
+ this.emit("// Create Canvas for HUD overlay");
700
+ this.emit('var canvasGO = new GameObject("HoloUI");');
701
+ this.emit("canvasGO.transform.SetParent(transform);");
702
+ this.emit("var canvas = canvasGO.AddComponent<Canvas>();");
703
+ this.emit("canvas.renderMode = RenderMode.ScreenSpaceOverlay;");
704
+ this.emit("canvasGO.AddComponent<CanvasScaler>();");
705
+ this.emit("");
706
+ for (const el of ui.elements) {
707
+ const varName = this.sanitizeName(el.name);
708
+ const elType = el.properties.find((p) => p.key === "type")?.value;
709
+ this.emit(
710
+ `// UI Element: ${this.escapeStringValue(el.name, "CSharp")} (${elType})`
711
+ );
712
+ this.emit(
713
+ `var ${varName}GO = new GameObject("${this.escapeStringValue(el.name, "CSharp")}");`
714
+ );
715
+ this.emit(`${varName}GO.transform.SetParent(canvasGO.transform);`);
716
+ if (elType === "text") {
717
+ this.emit(`var ${varName}Text = ${varName}GO.AddComponent<Text>();`);
718
+ const text = el.properties.find((p) => p.key === "text")?.value;
719
+ if (text) this.emit(`${varName}Text.text = "${text}";`);
720
+ } else if (elType === "progress") {
721
+ this.emit(`var ${varName}Slider = ${varName}GO.AddComponent<Slider>();`);
722
+ }
723
+ this.emit("");
724
+ }
725
+ }
726
+ // ─── Helpers ───────────────────────────────────────────────────────────
727
+ emit(line) {
728
+ this.lines.push(this.options.indent.repeat(this.indentLevel) + line);
729
+ }
730
+ sanitizeName(name) {
731
+ return name.replace(/[^a-zA-Z0-9_]/g, "_");
732
+ }
733
+ toVector3(arr) {
734
+ if (Array.isArray(arr) && arr.length >= 3) {
735
+ return `new Vector3(${arr[0]}f, ${arr[1]}f, ${arr[2]}f)`;
736
+ }
737
+ if (Array.isArray(arr) && arr.length === 2) {
738
+ return `new Vector2(${arr[0]}f, ${arr[1]}f)`;
739
+ }
740
+ return `new Vector3(${arr}f, ${arr}f, ${arr}f)`;
741
+ }
742
+ toColor(value) {
743
+ if (typeof value === "string" && value.startsWith("#")) {
744
+ const hex = value.slice(1);
745
+ const r = parseInt(hex.substring(0, 2), 16) / 255;
746
+ const g = parseInt(hex.substring(2, 4), 16) / 255;
747
+ const b = parseInt(hex.substring(4, 6), 16) / 255;
748
+ return `new Color(${r.toFixed(3)}f, ${g.toFixed(3)}f, ${b.toFixed(3)}f)`;
749
+ }
750
+ return `Color.white`;
751
+ }
752
+ toCSharpType(value) {
753
+ if (typeof value === "number") return Number.isInteger(value) ? "int" : "float";
754
+ if (typeof value === "boolean") return "bool";
755
+ if (typeof value === "string") return "string";
756
+ if (Array.isArray(value)) return "object[]";
757
+ return "object";
758
+ }
759
+ toCSharpValue(value) {
760
+ if (typeof value === "number") return Number.isInteger(value) ? `${value}` : `${value}f`;
761
+ if (typeof value === "boolean") return value ? "true" : "false";
762
+ if (typeof value === "string") return `"${this.escapeStringValue(value, "CSharp")}"`;
763
+ if (value === null) return "null";
764
+ return "null";
765
+ }
766
+ findProp(props, key) {
767
+ return props?.find((p) => p.key === key)?.value;
768
+ }
769
+ findObjProp(obj, key) {
770
+ return obj.properties?.find((p) => p.key === key)?.value;
771
+ }
772
+ };
773
+ }
774
+ });
775
+
776
+ export { UnityCompiler, UnityCompiler_exports, init_UnityCompiler };
777
+ //# sourceMappingURL=chunk-ZZEI7MV4.js.map
778
+ //# sourceMappingURL=chunk-ZZEI7MV4.js.map