@jgengine/core 0.9.0 → 0.11.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 (631) hide show
  1. package/CHANGELOG.md +34 -3
  2. package/LICENSE +203 -661
  3. package/README.md +1 -1
  4. package/dist/ai/crowd.d.ts +55 -0
  5. package/dist/ai/crowd.js +114 -0
  6. package/dist/ai/flock.d.ts +5 -2
  7. package/dist/ai/flock.js +5 -2
  8. package/dist/ai/groupAssist.d.ts +1 -0
  9. package/dist/ai/groupAssist.js +1 -0
  10. package/dist/ai/heatSystem.d.ts +76 -0
  11. package/dist/ai/heatSystem.js +97 -0
  12. package/dist/ai/interestScheduler.d.ts +107 -0
  13. package/dist/ai/interestScheduler.js +118 -0
  14. package/dist/ai/jobBoard.d.ts +1 -0
  15. package/dist/ai/jobBoard.js +1 -0
  16. package/dist/ai/laneSelect.d.ts +5 -2
  17. package/dist/ai/laneSelect.js +5 -2
  18. package/dist/ai/mobBrain.d.ts +1 -0
  19. package/dist/ai/mobBrain.js +1 -0
  20. package/dist/ai/spawnDirector.d.ts +19 -1
  21. package/dist/ai/spawnDirector.js +53 -26
  22. package/dist/ai/spawnPoint.d.ts +7 -0
  23. package/dist/ai/spawnPoint.js +7 -0
  24. package/dist/ai/targetAcquisition.d.ts +84 -0
  25. package/dist/ai/targetAcquisition.js +92 -0
  26. package/dist/anim/easing.d.ts +19 -0
  27. package/dist/anim/easing.js +19 -0
  28. package/dist/anim/oscillator.d.ts +12 -0
  29. package/dist/anim/oscillator.js +25 -0
  30. package/dist/area/areaEffectField.d.ts +127 -0
  31. package/dist/area/areaEffectField.js +175 -0
  32. package/dist/area/stackPolicy.d.ts +47 -0
  33. package/dist/area/stackPolicy.js +99 -0
  34. package/dist/audio/audioFalloff.d.ts +5 -2
  35. package/dist/audio/music.d.ts +53 -0
  36. package/dist/audio/music.js +34 -0
  37. package/dist/audio/synth.d.ts +60 -0
  38. package/dist/audio/synth.js +8 -0
  39. package/dist/authoring.d.ts +15 -0
  40. package/dist/authoring.js +15 -0
  41. package/dist/board/laneBoard.d.ts +13 -0
  42. package/dist/board/laneBoard.js +13 -0
  43. package/dist/board/timelineBoard.d.ts +10 -0
  44. package/dist/board/timelineBoard.js +10 -0
  45. package/dist/combat/abilityKit.d.ts +18 -0
  46. package/dist/combat/abilityKit.js +24 -9
  47. package/dist/combat/animationState.d.ts +5 -0
  48. package/dist/combat/animationState.js +5 -0
  49. package/dist/combat/breakMeters.d.ts +10 -0
  50. package/dist/combat/breakMeters.js +10 -0
  51. package/dist/combat/castRunner.d.ts +5 -0
  52. package/dist/combat/castRunner.js +5 -0
  53. package/dist/combat/comboPoints.d.ts +5 -0
  54. package/dist/combat/comboPoints.js +5 -0
  55. package/dist/combat/comboString.d.ts +5 -0
  56. package/dist/combat/comboString.js +5 -0
  57. package/dist/combat/damageInterceptors.d.ts +192 -0
  58. package/dist/combat/damageInterceptors.js +251 -0
  59. package/dist/combat/damageMatchup.d.ts +68 -0
  60. package/dist/combat/damageMatchup.js +42 -0
  61. package/dist/combat/damageResolution.d.ts +63 -0
  62. package/dist/combat/damageResolution.js +50 -0
  63. package/dist/combat/death.d.ts +7 -1
  64. package/dist/combat/death.js +5 -0
  65. package/dist/combat/deathReason.d.ts +14 -0
  66. package/dist/combat/deathReason.js +1 -0
  67. package/dist/combat/defensiveWindow.d.ts +5 -0
  68. package/dist/combat/defensiveWindow.js +5 -0
  69. package/dist/combat/dotField.d.ts +47 -0
  70. package/dist/combat/dotField.js +52 -0
  71. package/dist/combat/downed.d.ts +5 -0
  72. package/dist/combat/downed.js +5 -0
  73. package/dist/combat/effects.d.ts +5 -0
  74. package/dist/combat/effects.js +5 -0
  75. package/dist/combat/encounterSequence.d.ts +258 -0
  76. package/dist/combat/encounterSequence.js +426 -0
  77. package/dist/combat/hitReaction.d.ts +57 -1
  78. package/dist/combat/hitReaction.js +45 -5
  79. package/dist/combat/magazine.d.ts +54 -0
  80. package/dist/combat/magazine.js +96 -0
  81. package/dist/combat/projectiles.d.ts +7 -2
  82. package/dist/combat/projectiles.js +48 -17
  83. package/dist/combat/receivedDamage.d.ts +117 -0
  84. package/dist/combat/receivedDamage.js +92 -0
  85. package/dist/combat/regenShield.d.ts +39 -0
  86. package/dist/combat/regenShield.js +49 -0
  87. package/dist/combat/renderCues.d.ts +51 -0
  88. package/dist/combat/renderCues.js +44 -0
  89. package/dist/combat/resourcePool.d.ts +5 -0
  90. package/dist/combat/resourcePool.js +5 -0
  91. package/dist/combat/rewardAllocation.d.ts +121 -0
  92. package/dist/combat/rewardAllocation.js +251 -0
  93. package/dist/combat/shotOrigin.d.ts +30 -1
  94. package/dist/combat/shotOrigin.js +70 -2
  95. package/dist/combat/statusApplication.d.ts +96 -0
  96. package/dist/combat/statusApplication.js +81 -0
  97. package/dist/combat/telegraph.d.ts +11 -2
  98. package/dist/combat/telegraph.js +11 -2
  99. package/dist/combat/thresholdCrossings.d.ts +85 -0
  100. package/dist/combat/thresholdCrossings.js +116 -0
  101. package/dist/combat.d.ts +34 -0
  102. package/dist/combat.js +34 -0
  103. package/dist/commands/commandRegistry.d.ts +11 -0
  104. package/dist/commands/commandRegistry.js +9 -2
  105. package/dist/crafting/crop.d.ts +18 -0
  106. package/dist/crafting/crop.js +18 -0
  107. package/dist/crafting/production.d.ts +5 -0
  108. package/dist/crafting/production.js +5 -0
  109. package/dist/devtools/rewriteTunables.d.ts +17 -0
  110. package/dist/devtools/rewriteTunables.js +276 -0
  111. package/dist/devtools/saveEndpoint.d.ts +46 -0
  112. package/dist/devtools/saveEndpoint.js +48 -0
  113. package/dist/devtools/transformTunables.d.ts +3 -0
  114. package/dist/devtools/transformTunables.js +3 -0
  115. package/dist/devtools/tunableSchema.d.ts +31 -0
  116. package/dist/devtools/tunableSchema.js +31 -0
  117. package/dist/economy/currency.d.ts +12 -1
  118. package/dist/economy/currency.js +12 -1
  119. package/dist/economy/listingBook.d.ts +91 -0
  120. package/dist/economy/listingBook.js +144 -0
  121. package/dist/economy/resourceLedger.d.ts +222 -0
  122. package/dist/economy/resourceLedger.js +353 -0
  123. package/dist/economy/sharedWallet.d.ts +14 -0
  124. package/dist/economy/sharedWallet.js +14 -0
  125. package/dist/economy/techTree.d.ts +12 -0
  126. package/dist/economy/techTree.js +12 -0
  127. package/dist/economy/wallet.d.ts +26 -2
  128. package/dist/economy/wallet.js +35 -6
  129. package/dist/editor/commands.d.ts +248 -0
  130. package/dist/editor/commands.js +865 -0
  131. package/dist/editor/document.d.ts +186 -0
  132. package/dist/editor/document.js +884 -0
  133. package/dist/editor/grid.d.ts +229 -0
  134. package/dist/editor/grid.js +366 -0
  135. package/dist/editor/gridAdapters.d.ts +80 -0
  136. package/dist/editor/gridAdapters.js +134 -0
  137. package/dist/editor/index.d.ts +97 -0
  138. package/dist/editor/index.js +10 -0
  139. package/dist/editor/liveSync.d.ts +127 -0
  140. package/dist/editor/liveSync.js +249 -0
  141. package/dist/editor/runtimeInspector.d.ts +88 -0
  142. package/dist/editor/runtimeInspector.js +239 -0
  143. package/dist/editor/types.d.ts +175 -0
  144. package/dist/editor/types.js +29 -0
  145. package/dist/faction/reputation.d.ts +5 -0
  146. package/dist/faction/reputation.js +5 -0
  147. package/dist/format/distance.d.ts +17 -0
  148. package/dist/format/distance.js +18 -0
  149. package/dist/format/duration.d.ts +27 -0
  150. package/dist/format/duration.js +45 -0
  151. package/dist/format/speed.d.ts +17 -0
  152. package/dist/format/speed.js +25 -0
  153. package/dist/game/connectedPlayers.d.ts +30 -0
  154. package/dist/game/connectedPlayers.js +21 -0
  155. package/dist/game/cosmetics.d.ts +9 -0
  156. package/dist/game/cosmetics.js +16 -0
  157. package/dist/game/defineGame.d.ts +141 -2
  158. package/dist/game/defineGame.js +39 -1
  159. package/dist/game/defineSystem.d.ts +88 -0
  160. package/dist/game/defineSystem.js +45 -0
  161. package/dist/game/dialogue.d.ts +33 -0
  162. package/dist/game/dialogue.js +21 -0
  163. package/dist/game/events.d.ts +50 -13
  164. package/dist/game/events.js +5 -0
  165. package/dist/game/feed.d.ts +33 -0
  166. package/dist/game/feed.js +35 -2
  167. package/dist/game/gamePhase.d.ts +11 -0
  168. package/dist/game/gamePhase.js +16 -0
  169. package/dist/game/keyValueStore.d.ts +25 -0
  170. package/dist/game/keyValueStore.js +61 -0
  171. package/dist/game/leaderboard.d.ts +5 -0
  172. package/dist/game/leaderboard.js +5 -0
  173. package/dist/game/levelSequence.d.ts +24 -2
  174. package/dist/game/levelSequence.js +51 -2
  175. package/dist/game/loadout.d.ts +5 -0
  176. package/dist/game/loadout.js +5 -0
  177. package/dist/game/lootFilter.d.ts +2 -0
  178. package/dist/game/lootFilter.js +2 -0
  179. package/dist/game/lootPipeline.d.ts +164 -0
  180. package/dist/game/lootPipeline.js +216 -0
  181. package/dist/game/lootTable.d.ts +21 -0
  182. package/dist/game/lootTable.js +15 -4
  183. package/dist/game/modelAnimation.d.ts +8 -0
  184. package/dist/game/modelAnimation.js +18 -0
  185. package/dist/game/objectives.d.ts +43 -0
  186. package/dist/game/objectives.js +36 -0
  187. package/dist/game/paramLayers.d.ts +148 -0
  188. package/dist/game/paramLayers.js +185 -0
  189. package/dist/game/ping.d.ts +5 -0
  190. package/dist/game/ping.js +5 -0
  191. package/dist/game/playableGame.d.ts +160 -12
  192. package/dist/game/quest.d.ts +8 -0
  193. package/dist/game/quest.js +29 -0
  194. package/dist/game/race.d.ts +141 -0
  195. package/dist/game/race.js +169 -0
  196. package/dist/game/recordBook.d.ts +5 -5
  197. package/dist/game/recordBook.js +4 -1
  198. package/dist/game/ruleSelection.d.ts +75 -0
  199. package/dist/game/ruleSelection.js +127 -0
  200. package/dist/game/runDraft.d.ts +5 -0
  201. package/dist/game/runDraft.js +5 -0
  202. package/dist/game/saveStore.d.ts +111 -0
  203. package/dist/game/saveStore.js +312 -0
  204. package/dist/game/snapshotHistory.d.ts +67 -0
  205. package/dist/game/snapshotHistory.js +95 -0
  206. package/dist/game/social.d.ts +38 -1
  207. package/dist/game/social.js +71 -0
  208. package/dist/game/spawnPoints.d.ts +5 -0
  209. package/dist/game/spawnPoints.js +5 -0
  210. package/dist/game/systemRuntime.d.ts +50 -0
  211. package/dist/game/systemRuntime.js +157 -0
  212. package/dist/game/systemSchedule.d.ts +72 -0
  213. package/dist/game/systemSchedule.js +242 -0
  214. package/dist/game/toasts.d.ts +43 -0
  215. package/dist/game/toasts.js +44 -0
  216. package/dist/game/trade.d.ts +10 -0
  217. package/dist/game/trade.js +10 -0
  218. package/dist/game/unlocks.d.ts +8 -0
  219. package/dist/game/unlocks.js +16 -0
  220. package/dist/game/vfxInstance.d.ts +138 -0
  221. package/dist/game/vfxInstance.js +96 -0
  222. package/dist/game/worldItem.d.ts +17 -4
  223. package/dist/game/worldItem.js +17 -4
  224. package/dist/gameplay.d.ts +91 -0
  225. package/dist/gameplay.js +91 -0
  226. package/dist/index.d.ts +5 -7
  227. package/dist/index.js +5 -7
  228. package/dist/input/actionBindings.d.ts +24 -5
  229. package/dist/input/actionBindings.js +23 -5
  230. package/dist/input/axisInput.d.ts +13 -1
  231. package/dist/input/axisInput.js +22 -1
  232. package/dist/input/controlGroups.d.ts +67 -0
  233. package/dist/input/controlGroups.js +41 -0
  234. package/dist/input/touchScheme.d.ts +82 -6
  235. package/dist/input/touchScheme.js +123 -10
  236. package/dist/interaction/contextMenu.d.ts +1 -0
  237. package/dist/interaction/contextMenu.js +1 -0
  238. package/dist/interaction/lockpick.d.ts +61 -0
  239. package/dist/interaction/lockpick.js +168 -0
  240. package/dist/interaction/proximityPrompt.d.ts +5 -1
  241. package/dist/interaction/proximityPrompt.js +5 -3
  242. package/dist/interaction/qte.d.ts +5 -0
  243. package/dist/interaction/qte.js +5 -0
  244. package/dist/interaction/skillCheck.d.ts +5 -0
  245. package/dist/interaction/skillCheck.js +5 -0
  246. package/dist/inventory/inventoryModel.d.ts +12 -0
  247. package/dist/inventory/inventoryModel.js +12 -0
  248. package/dist/inventory/shapedGrid.d.ts +16 -0
  249. package/dist/inventory/shapedGrid.js +16 -0
  250. package/dist/inventory/slotModel.d.ts +10 -0
  251. package/dist/inventory/slotModel.js +10 -0
  252. package/dist/item/durability.d.ts +5 -0
  253. package/dist/item/durability.js +5 -0
  254. package/dist/item/itemIdentity.d.ts +171 -0
  255. package/dist/item/itemIdentity.js +138 -0
  256. package/dist/item/itemInstanceRegistry.d.ts +32 -0
  257. package/dist/item/itemInstanceRegistry.js +34 -0
  258. package/dist/item/itemgen.d.ts +163 -0
  259. package/dist/item/itemgen.js +151 -0
  260. package/dist/item/modularItem.d.ts +5 -0
  261. package/dist/item/modularItem.js +5 -0
  262. package/dist/item/use.d.ts +5 -0
  263. package/dist/item/use.js +5 -0
  264. package/dist/item/useBehavior.d.ts +142 -0
  265. package/dist/item/useBehavior.js +105 -0
  266. package/dist/item/weapon.d.ts +5 -0
  267. package/dist/item/weapon.js +5 -0
  268. package/dist/math/scalar.d.ts +25 -0
  269. package/dist/math/scalar.js +47 -0
  270. package/dist/meta/changelog.d.ts +4 -1
  271. package/dist/meta/changelog.js +36 -1
  272. package/dist/movement/avoidance.d.ts +45 -0
  273. package/dist/movement/avoidance.js +123 -0
  274. package/dist/movement/cameraRig.d.ts +8 -0
  275. package/dist/movement/cameraRig.js +8 -0
  276. package/dist/movement/dash.d.ts +11 -0
  277. package/dist/movement/dash.js +11 -0
  278. package/dist/movement/formation.d.ts +135 -0
  279. package/dist/movement/formation.js +194 -0
  280. package/dist/movement/glideModel.d.ts +5 -0
  281. package/dist/movement/glideModel.js +5 -0
  282. package/dist/movement/grappleSwing.d.ts +5 -0
  283. package/dist/movement/grappleSwing.js +5 -0
  284. package/dist/movement/leaderTrail.d.ts +5 -0
  285. package/dist/movement/leaderTrail.js +5 -0
  286. package/dist/movement/movementModel.d.ts +38 -7
  287. package/dist/movement/movementModel.js +54 -13
  288. package/dist/movement/playerMovement.d.ts +41 -0
  289. package/dist/movement/playerMovement.js +236 -0
  290. package/dist/movement/poseState.d.ts +13 -0
  291. package/dist/movement/poseState.js +16 -0
  292. package/dist/movement/steering.d.ts +8 -0
  293. package/dist/movement/steering.js +18 -0
  294. package/dist/multiplayer/combatSnapshot.d.ts +3 -0
  295. package/dist/multiplayer/combatSnapshot.js +3 -0
  296. package/dist/multiplayer/lagCompensation.d.ts +5 -0
  297. package/dist/multiplayer/lagCompensation.js +5 -0
  298. package/dist/multiplayer/presenceModel.d.ts +9 -1
  299. package/dist/multiplayer/presenceModel.js +9 -1
  300. package/dist/multiplayer/simultaneousCommit.d.ts +3 -0
  301. package/dist/multiplayer/simultaneousCommit.js +3 -0
  302. package/dist/multiplayer.d.ts +11 -0
  303. package/dist/multiplayer.js +11 -0
  304. package/dist/nav/pathFollow.d.ts +57 -0
  305. package/dist/nav/pathFollow.js +109 -0
  306. package/dist/orders/orderKinds.d.ts +156 -0
  307. package/dist/orders/orderKinds.js +197 -0
  308. package/dist/orders/orderQueue.d.ts +208 -0
  309. package/dist/orders/orderQueue.js +211 -0
  310. package/dist/physics/drivableVehicle.d.ts +29 -0
  311. package/dist/physics/drivableVehicle.js +16 -0
  312. package/dist/physics/kinematicVehicle.d.ts +21 -1
  313. package/dist/physics/kinematicVehicle.js +23 -8
  314. package/dist/physics/physicsWorld.d.ts +24 -12
  315. package/dist/physics/physicsWorld.js +11 -5
  316. package/dist/physics/radialImpulse.d.ts +25 -0
  317. package/dist/physics/radialImpulse.js +27 -0
  318. package/dist/procedural.d.ts +3 -0
  319. package/dist/procedural.js +3 -0
  320. package/dist/progression/statGraph.d.ts +116 -0
  321. package/dist/progression/statGraph.js +318 -0
  322. package/dist/puzzle/cellGrid.d.ts +9 -0
  323. package/dist/puzzle/cellGrid.js +9 -0
  324. package/dist/puzzle/fallingPiece.d.ts +9 -0
  325. package/dist/puzzle/fallingPiece.js +9 -0
  326. package/dist/puzzle/nonogram.d.ts +39 -0
  327. package/dist/puzzle/nonogram.js +136 -0
  328. package/dist/random/nameGen.d.ts +5 -0
  329. package/dist/random/nameGen.js +5 -0
  330. package/dist/random/pick.d.ts +8 -0
  331. package/dist/random/pick.js +31 -0
  332. package/dist/random/rng.d.ts +24 -0
  333. package/dist/random/rng.js +30 -8
  334. package/dist/random/seedLink.d.ts +4 -0
  335. package/dist/random/seedLink.js +4 -0
  336. package/dist/relation/keyedValues.d.ts +54 -0
  337. package/dist/relation/keyedValues.js +115 -0
  338. package/dist/relation/thresholds.d.ts +62 -0
  339. package/dist/relation/thresholds.js +62 -0
  340. package/dist/render/color.d.ts +12 -0
  341. package/dist/render/color.js +26 -0
  342. package/dist/render/lookPreset.d.ts +41 -0
  343. package/dist/render/lookPreset.js +29 -0
  344. package/dist/render/postProcessing.d.ts +76 -0
  345. package/dist/render/postProcessing.js +21 -0
  346. package/dist/rules/predicate.d.ts +53 -0
  347. package/dist/rules/predicate.js +64 -0
  348. package/dist/rules/ruleEffects.d.ts +38 -0
  349. package/dist/rules/ruleEffects.js +37 -0
  350. package/dist/rules/triggeredRules.d.ts +160 -0
  351. package/dist/rules/triggeredRules.js +241 -0
  352. package/dist/runtime/adapter.d.ts +58 -0
  353. package/dist/runtime/adapter.js +54 -5
  354. package/dist/runtime/cameraDirector.d.ts +1 -0
  355. package/dist/runtime/cameraDirector.js +1 -0
  356. package/dist/runtime/commandRunner.d.ts +1 -0
  357. package/dist/runtime/commandRunner.js +1 -0
  358. package/dist/runtime/context/combatFx.d.ts +23 -0
  359. package/dist/runtime/context/combatFx.js +161 -0
  360. package/dist/runtime/context/registries.d.ts +13 -0
  361. package/dist/runtime/context/registries.js +84 -0
  362. package/dist/runtime/context/worldItems.d.ts +21 -0
  363. package/dist/runtime/context/worldItems.js +37 -0
  364. package/dist/runtime/descriptors/baseline.d.ts +48 -0
  365. package/dist/runtime/descriptors/baseline.js +134 -0
  366. package/dist/runtime/descriptors/features.d.ts +74 -0
  367. package/dist/runtime/descriptors/features.js +281 -0
  368. package/dist/runtime/gameContext.d.ts +163 -19
  369. package/dist/runtime/gameContext.js +385 -339
  370. package/dist/runtime/gameRuntime.d.ts +1 -0
  371. package/dist/runtime/gameRuntime.js +1 -0
  372. package/dist/runtime/headlessRunner.d.ts +60 -0
  373. package/dist/runtime/headlessRunner.js +44 -0
  374. package/dist/runtime/hostPersistence.d.ts +12 -0
  375. package/dist/runtime/hostPersistence.js +12 -0
  376. package/dist/runtime/hostedGameRunner.d.ts +54 -0
  377. package/dist/runtime/hostedGameRunner.js +85 -0
  378. package/dist/runtime/hostedWorldSession.d.ts +73 -0
  379. package/dist/runtime/hostedWorldSession.js +64 -0
  380. package/dist/runtime/inputSnapshot.d.ts +21 -3
  381. package/dist/runtime/inputSnapshot.js +8 -2
  382. package/dist/runtime/motionIntents.d.ts +12 -1
  383. package/dist/runtime/motionIntents.js +26 -1
  384. package/dist/runtime/perContext.d.ts +15 -0
  385. package/dist/runtime/perContext.js +21 -0
  386. package/dist/runtime/runtimeSave.d.ts +79 -0
  387. package/dist/runtime/runtimeSave.js +105 -0
  388. package/dist/runtime/save.d.ts +4 -0
  389. package/dist/runtime/save.js +4 -0
  390. package/dist/runtime/snapshot.d.ts +7 -0
  391. package/dist/runtime/snapshot.js +7 -0
  392. package/dist/runtime/visibility.d.ts +2 -1
  393. package/dist/runtime/visibility.js +2 -1
  394. package/dist/runtime/worldChannel.d.ts +62 -0
  395. package/dist/runtime/worldChannel.js +114 -0
  396. package/dist/runtime/worldMirror.d.ts +36 -0
  397. package/dist/runtime/worldMirror.js +44 -0
  398. package/dist/runtime/worldProjection.d.ts +47 -0
  399. package/dist/runtime/worldProjection.js +52 -0
  400. package/dist/runtime/worldReplication.d.ts +69 -0
  401. package/dist/runtime/worldReplication.js +217 -0
  402. package/dist/runtime/worldSnapshot.d.ts +44 -0
  403. package/dist/runtime/worldSnapshot.js +30 -0
  404. package/dist/scene/assetCatalog.d.ts +22 -0
  405. package/dist/scene/assetCatalog.js +4 -0
  406. package/dist/scene/assetDiagnostics.d.ts +69 -0
  407. package/dist/scene/assetDiagnostics.js +110 -0
  408. package/dist/scene/assetGenerator.d.ts +65 -0
  409. package/dist/scene/assetGenerator.js +64 -0
  410. package/dist/scene/assetSpace.d.ts +137 -0
  411. package/dist/scene/assetSpace.js +259 -0
  412. package/dist/scene/authoredTriggers.d.ts +169 -0
  413. package/dist/scene/authoredTriggers.js +340 -0
  414. package/dist/scene/behaviorRuntime.d.ts +75 -0
  415. package/dist/scene/behaviorRuntime.js +217 -0
  416. package/dist/scene/behaviors.d.ts +14 -2
  417. package/dist/scene/behaviors.js +7 -2
  418. package/dist/scene/bodyBind.d.ts +60 -0
  419. package/dist/scene/bodyBind.js +51 -0
  420. package/dist/scene/builtinSceneKinds.d.ts +5 -0
  421. package/dist/scene/builtinSceneKinds.js +62 -0
  422. package/dist/scene/colliders.d.ts +18 -0
  423. package/dist/scene/colliders.js +61 -1
  424. package/dist/scene/entityStats.d.ts +13 -0
  425. package/dist/scene/entityStats.js +30 -0
  426. package/dist/scene/entityStore.d.ts +41 -1
  427. package/dist/scene/entityStore.js +75 -0
  428. package/dist/scene/facing.d.ts +18 -0
  429. package/dist/scene/facing.js +26 -0
  430. package/dist/scene/modelSockets.d.ts +33 -0
  431. package/dist/scene/modelSockets.js +29 -0
  432. package/dist/scene/objectQuery.d.ts +2 -0
  433. package/dist/scene/objectQuery.js +2 -0
  434. package/dist/scene/objectStore.d.ts +4 -0
  435. package/dist/scene/objectStore.js +6 -0
  436. package/dist/scene/possession.d.ts +8 -0
  437. package/dist/scene/possession.js +14 -0
  438. package/dist/scene/roster.d.ts +3 -0
  439. package/dist/scene/roster.js +12 -0
  440. package/dist/scene/sceneKinds.d.ts +240 -0
  441. package/dist/scene/sceneKinds.js +214 -0
  442. package/dist/scene/sceneOwnership.d.ts +169 -0
  443. package/dist/scene/sceneOwnership.js +179 -0
  444. package/dist/scene/selectionBookmarks.d.ts +93 -0
  445. package/dist/scene/selectionBookmarks.js +122 -0
  446. package/dist/scene/vehicleSeat.d.ts +68 -0
  447. package/dist/scene/vehicleSeat.js +59 -0
  448. package/dist/sensor/concealment.d.ts +3 -0
  449. package/dist/sensor/concealment.js +3 -0
  450. package/dist/sensor/freezeMonitor.d.ts +1 -0
  451. package/dist/sensor/freezeMonitor.js +1 -0
  452. package/dist/sensor/frustumSensor.d.ts +7 -3
  453. package/dist/sensor/frustumSensor.js +7 -3
  454. package/dist/sensor/hiddenStateProbe.d.ts +5 -2
  455. package/dist/sensor/hiddenStateProbe.js +5 -2
  456. package/dist/sensor/recordingBuffer.d.ts +2 -1
  457. package/dist/sensor/recordingBuffer.js +2 -1
  458. package/dist/sensor/replayLoop.d.ts +6 -2
  459. package/dist/sensor/replayLoop.js +6 -2
  460. package/dist/sensor/revealQuery.d.ts +2 -1
  461. package/dist/sensor/revealQuery.js +2 -1
  462. package/dist/sensor/visionCone.d.ts +10 -3
  463. package/dist/sensor/visionCone.js +10 -3
  464. package/dist/session/contestedChannel.d.ts +1 -0
  465. package/dist/session/contestedChannel.js +1 -0
  466. package/dist/session/extraction.d.ts +1 -0
  467. package/dist/session/extraction.js +1 -0
  468. package/dist/session/roles.d.ts +6 -0
  469. package/dist/session/roles.js +6 -0
  470. package/dist/session/roundState.d.ts +8 -0
  471. package/dist/session/roundState.js +2 -0
  472. package/dist/settings/settingsModel.d.ts +1 -0
  473. package/dist/settings/settingsModel.js +1 -0
  474. package/dist/stats/accumulatorMeter.d.ts +6 -0
  475. package/dist/stats/accumulatorMeter.js +6 -0
  476. package/dist/stats/eventMeter.d.ts +5 -0
  477. package/dist/stats/eventMeter.js +5 -0
  478. package/dist/stats/rollCheck.d.ts +5 -0
  479. package/dist/stats/rollCheck.js +5 -0
  480. package/dist/stats/statModifiers.d.ts +5 -0
  481. package/dist/stats/statModifiers.js +5 -0
  482. package/dist/store/defineKeyedStore.d.ts +38 -0
  483. package/dist/store/defineKeyedStore.js +42 -0
  484. package/dist/store/defineStore.d.ts +33 -0
  485. package/dist/store/defineStore.js +35 -0
  486. package/dist/store/observableKeyedStore.d.ts +9 -0
  487. package/dist/store/observableKeyedStore.js +43 -2
  488. package/dist/survival/decayMeter.d.ts +55 -0
  489. package/dist/survival/decayMeter.js +130 -55
  490. package/dist/survival/moodle.d.ts +2 -0
  491. package/dist/survival/regionHealth.d.ts +6 -0
  492. package/dist/survival/regionHealth.js +5 -0
  493. package/dist/tactics/fallingGrid.d.ts +6 -4
  494. package/dist/tactics/fallingGrid.js +6 -4
  495. package/dist/tactics/predictiveQuery.d.ts +3 -0
  496. package/dist/tactics/predictiveQuery.js +3 -0
  497. package/dist/tactics/snapshot.d.ts +2 -0
  498. package/dist/tactics/snapshot.js +2 -0
  499. package/dist/tactics/surface.d.ts +1 -0
  500. package/dist/tactics/surface.js +1 -0
  501. package/dist/tactics/tacticalGrid.d.ts +1 -0
  502. package/dist/tactics/tacticalGrid.js +1 -0
  503. package/dist/time/beatClock.d.ts +14 -4
  504. package/dist/time/beatClock.js +14 -4
  505. package/dist/time/calendarClock.d.ts +3 -0
  506. package/dist/time/calendarClock.js +3 -0
  507. package/dist/time/idleProgress.d.ts +4 -0
  508. package/dist/time/idleProgress.js +4 -0
  509. package/dist/time/simClock.d.ts +2 -0
  510. package/dist/time/simClock.js +20 -5
  511. package/dist/ui/actionModel.d.ts +110 -0
  512. package/dist/ui/actionModel.js +159 -0
  513. package/dist/ui/gameLayout.d.ts +144 -0
  514. package/dist/ui/gameLayout.js +148 -0
  515. package/dist/ui/hudDocument.d.ts +114 -0
  516. package/dist/ui/hudDocument.js +220 -0
  517. package/dist/ui/hudLayout.d.ts +33 -1
  518. package/dist/ui/hudLayout.js +204 -17
  519. package/dist/ui/orientation.d.ts +39 -0
  520. package/dist/ui/orientation.js +49 -0
  521. package/dist/ui/selectionModel.d.ts +92 -0
  522. package/dist/ui/selectionModel.js +88 -0
  523. package/dist/ui/swingTimer.d.ts +42 -0
  524. package/dist/ui/swingTimer.js +38 -0
  525. package/dist/ui/tooltipModel.d.ts +63 -0
  526. package/dist/ui/tooltipModel.js +82 -0
  527. package/dist/ui.d.ts +15 -0
  528. package/dist/ui.js +15 -0
  529. package/dist/visibility/bounds.d.ts +8 -1
  530. package/dist/visibility/bounds.js +8 -1
  531. package/dist/visibility/frustum.d.ts +12 -3
  532. package/dist/visibility/frustum.js +12 -3
  533. package/dist/visibility/spatialIndex.js +34 -20
  534. package/dist/work/jobQueue.d.ts +201 -0
  535. package/dist/work/jobQueue.js +253 -0
  536. package/dist/work/unitTraining.d.ts +58 -0
  537. package/dist/work/unitTraining.js +52 -0
  538. package/dist/world/authoredObjects.d.ts +58 -0
  539. package/dist/world/authoredObjects.js +69 -0
  540. package/dist/world/buildingGenerator.d.ts +18 -0
  541. package/dist/world/buildingGenerator.js +62 -0
  542. package/dist/world/buildings.d.ts +5 -0
  543. package/dist/world/buildings.js +5 -0
  544. package/dist/world/catenary.d.ts +22 -0
  545. package/dist/world/catenary.js +69 -0
  546. package/dist/world/environmentSummary.d.ts +11 -2
  547. package/dist/world/environmentSummary.js +11 -1
  548. package/dist/world/features.d.ts +244 -7
  549. package/dist/world/features.js +92 -4
  550. package/dist/world/footprintGrid.d.ts +59 -0
  551. package/dist/world/footprintGrid.js +141 -0
  552. package/dist/world/geometry.d.ts +64 -0
  553. package/dist/world/geometry.js +94 -0
  554. package/dist/world/grassKind.d.ts +51 -0
  555. package/dist/world/grassKind.js +101 -0
  556. package/dist/world/pathInstances.d.ts +27 -0
  557. package/dist/world/pathInstances.js +27 -0
  558. package/dist/world/pathTerrain.d.ts +80 -0
  559. package/dist/world/pathTerrain.js +142 -0
  560. package/dist/world/placeAsset.d.ts +81 -0
  561. package/dist/world/placeAsset.js +77 -0
  562. package/dist/world/placement.d.ts +4 -0
  563. package/dist/world/placement.js +4 -0
  564. package/dist/world/placementController.d.ts +6 -0
  565. package/dist/world/placementController.js +6 -0
  566. package/dist/world/polyline.d.ts +34 -0
  567. package/dist/world/polyline.js +81 -0
  568. package/dist/world/roads.d.ts +55 -0
  569. package/dist/world/roads.js +184 -0
  570. package/dist/world/scatterRegion.d.ts +164 -0
  571. package/dist/world/scatterRegion.js +409 -0
  572. package/dist/world/sceneShapes.d.ts +43 -0
  573. package/dist/world/sceneShapes.js +1 -0
  574. package/dist/world/segment.d.ts +27 -0
  575. package/dist/world/segment.js +43 -0
  576. package/dist/world/soilKind.d.ts +48 -0
  577. package/dist/world/soilKind.js +92 -0
  578. package/dist/world/spatialSample.d.ts +241 -0
  579. package/dist/world/spatialSample.js +465 -0
  580. package/dist/world/streets.d.ts +80 -0
  581. package/dist/world/streets.js +144 -0
  582. package/dist/world/terraform.d.ts +213 -1
  583. package/dist/world/terraform.js +655 -20
  584. package/dist/world/terrain.d.ts +138 -12
  585. package/dist/world/terrain.js +346 -28
  586. package/dist/world/terrainGuides.d.ts +182 -0
  587. package/dist/world/terrainGuides.js +343 -0
  588. package/dist/world/vec2.d.ts +81 -0
  589. package/dist/world/vec2.js +128 -0
  590. package/dist/world/vec3.d.ts +49 -0
  591. package/dist/world/vec3.js +76 -0
  592. package/dist/world/vegetation.d.ts +71 -0
  593. package/dist/world/vegetation.js +151 -0
  594. package/dist/world/visibilityField.d.ts +154 -0
  595. package/dist/world/visibilityField.js +271 -0
  596. package/dist/world/volumetricClouds.d.ts +52 -0
  597. package/dist/world/volumetricClouds.js +43 -0
  598. package/dist/world/walls.d.ts +9 -0
  599. package/dist/world/walls.js +9 -0
  600. package/dist/world/waterKind.d.ts +55 -0
  601. package/dist/world/waterKind.js +99 -0
  602. package/dist/world.d.ts +132 -0
  603. package/dist/world.js +132 -0
  604. package/package.json +32 -8
  605. package/skills/jgengine/SKILL.md +51 -0
  606. package/skills/jgengine/api.md +434 -0
  607. package/skills/jgengine/capabilities.md +29 -0
  608. package/skills/jgengine/reference-cartridge.md +72 -0
  609. package/skills/jgengine-combat/SKILL.md +34 -0
  610. package/skills/jgengine-combat/api.md +549 -0
  611. package/skills/jgengine-combat/capabilities.md +169 -0
  612. package/skills/jgengine-combat/reference.md +98 -0
  613. package/skills/jgengine-gameplay/SKILL.md +39 -0
  614. package/skills/jgengine-gameplay/api.md +1794 -0
  615. package/skills/jgengine-gameplay/capabilities.md +378 -0
  616. package/skills/jgengine-gameplay/reference-systems.md +60 -0
  617. package/skills/jgengine-world/SKILL.md +38 -0
  618. package/skills/jgengine-world/api.md +2652 -0
  619. package/skills/jgengine-world/capabilities.md +370 -0
  620. package/skills/jgengine-world/reference.md +222 -0
  621. package/dist/cartridge/runtime.d.ts +0 -15
  622. package/dist/cartridge/runtime.js +0 -556
  623. package/dist/cartridge/spec.d.ts +0 -188
  624. package/dist/cartridge/spec.js +0 -19
  625. package/dist/cartridge/validate.d.ts +0 -2
  626. package/dist/cartridge/validate.js +0 -78
  627. package/dist/store/engineStore.d.ts +0 -22
  628. package/dist/store/engineStore.js +0 -50
  629. package/dist/store/features.d.ts +0 -10
  630. package/dist/store/features.js +0 -23
  631. package/llms.txt +0 -4983
@@ -0,0 +1,134 @@
1
+ import { createGridLayer, getGridCell, gridCellKey, gridEmptyValue, gridGlyphMap, } from "./grid.js";
2
+ function normalizeLines(text) {
3
+ const lines = text.replace(/\r\n?/g, "\n").split("\n");
4
+ while (lines.length > 0 && lines[lines.length - 1] === "")
5
+ lines.pop();
6
+ return lines;
7
+ }
8
+ function glyphToValue(options) {
9
+ const map = {};
10
+ for (const entry of options.palette ?? []) {
11
+ if (entry.glyph !== undefined)
12
+ map[entry.glyph] = entry.id;
13
+ }
14
+ return { ...map, ...(options.glyphMap ?? {}) };
15
+ }
16
+ /**
17
+ * Parses an ASCII/glyph map — one row per text line, one char per cell — into a grid layer. Each
18
+ * glyph is resolved to a value id via the palette/`glyphMap`; unmapped glyphs and padding become
19
+ * the empty value, so a mostly-open room stays sparse. The canonical representation is the
20
+ * returned {@link EditorGridLayer}; ASCII is just this import path into it, never the source of
21
+ * truth. Bounds are the row count × longest row.
22
+ * @capability editor-grid-import Import an ASCII/glyph map into a grid layer.
23
+ */
24
+ export function importAsciiGrid(text, options) {
25
+ const lines = normalizeLines(text);
26
+ const rows = lines.length;
27
+ let cols = 0;
28
+ for (const line of lines)
29
+ cols = Math.max(cols, line.length);
30
+ const map = glyphToValue(options);
31
+ const empty = options.empty ?? "";
32
+ const cells = {};
33
+ lines.forEach((line, row) => {
34
+ for (let col = 0; col < line.length; col += 1) {
35
+ const value = map[line[col]] ?? empty;
36
+ if (value !== empty)
37
+ cells[gridCellKey(col, row)] = value;
38
+ }
39
+ });
40
+ return createGridLayer({
41
+ id: options.id,
42
+ kind: options.kind,
43
+ ...(options.label === undefined ? {} : { label: options.label }),
44
+ cols,
45
+ rows,
46
+ ...(options.cellSize === undefined ? {} : { cellSize: options.cellSize }),
47
+ ...(options.origin === undefined ? {} : { origin: options.origin }),
48
+ ...(options.axes === undefined ? {} : { axes: options.axes }),
49
+ ...(empty === "" ? {} : { empty }),
50
+ cells,
51
+ ...(options.palette === undefined ? {} : { palette: options.palette }),
52
+ ...(options.meta === undefined ? {} : { meta: options.meta }),
53
+ });
54
+ }
55
+ /**
56
+ * Renders a grid layer back to an ASCII/glyph map (rows top to bottom). Value ids map to chars via
57
+ * the layer palette (or an override map); empty cells become `emptyGlyph`. Round-trips with
58
+ * {@link importAsciiGrid} when the glyph legend matches.
59
+ * @capability editor-grid-import Export a grid layer as an ASCII/glyph map.
60
+ */
61
+ export function exportAsciiGrid(layer, options = {}) {
62
+ const glyphMap = options.glyphMap ?? gridGlyphMap(layer);
63
+ const emptyGlyph = options.emptyGlyph ?? ".";
64
+ const empty = gridEmptyValue(layer);
65
+ const lines = [];
66
+ for (let row = 0; row < layer.rows; row += 1) {
67
+ let line = "";
68
+ for (let col = 0; col < layer.cols; col += 1) {
69
+ const value = getGridCell(layer, col, row);
70
+ line += value === empty ? emptyGlyph : (glyphMap[value] ?? (value.charAt(0) || emptyGlyph));
71
+ }
72
+ lines.push(line);
73
+ }
74
+ return lines.join("\n");
75
+ }
76
+ /**
77
+ * Parses a CSV grid — one row per line, one value id per comma-separated field — into a grid
78
+ * layer. Blank fields become the empty value. Unlike ASCII this carries multi-character value ids
79
+ * directly, so it suits grids whose cell values are names rather than single glyphs.
80
+ * @capability editor-grid-import Import a CSV grid (value id per cell) into a grid layer.
81
+ */
82
+ export function importCsvGrid(text, options) {
83
+ const delimiter = options.delimiter ?? ",";
84
+ const empty = options.empty ?? "";
85
+ const lines = normalizeLines(text);
86
+ const rows = lines.length;
87
+ let cols = 0;
88
+ const parsed = lines.map((line) => {
89
+ const fields = line.split(delimiter).map((field) => field.trim());
90
+ cols = Math.max(cols, fields.length);
91
+ return fields;
92
+ });
93
+ const cells = {};
94
+ parsed.forEach((fields, row) => {
95
+ fields.forEach((value, col) => {
96
+ if (value !== "" && value !== empty)
97
+ cells[gridCellKey(col, row)] = value;
98
+ });
99
+ });
100
+ return createGridLayer({
101
+ id: options.id,
102
+ kind: options.kind,
103
+ ...(options.label === undefined ? {} : { label: options.label }),
104
+ cols,
105
+ rows,
106
+ ...(options.cellSize === undefined ? {} : { cellSize: options.cellSize }),
107
+ ...(options.origin === undefined ? {} : { origin: options.origin }),
108
+ ...(options.axes === undefined ? {} : { axes: options.axes }),
109
+ ...(empty === "" ? {} : { empty }),
110
+ cells,
111
+ ...(options.palette === undefined ? {} : { palette: options.palette }),
112
+ ...(options.meta === undefined ? {} : { meta: options.meta }),
113
+ });
114
+ }
115
+ /**
116
+ * Renders a grid layer as CSV — one row per line, each cell's value id as a field, empty cells as
117
+ * `emptyField`. Round-trips with {@link importCsvGrid}.
118
+ * @capability editor-grid-import Export a grid layer as CSV.
119
+ */
120
+ export function exportCsvGrid(layer, options = {}) {
121
+ const delimiter = options.delimiter ?? ",";
122
+ const emptyField = options.emptyField ?? "";
123
+ const empty = gridEmptyValue(layer);
124
+ const lines = [];
125
+ for (let row = 0; row < layer.rows; row += 1) {
126
+ const fields = [];
127
+ for (let col = 0; col < layer.cols; col += 1) {
128
+ const value = getGridCell(layer, col, row);
129
+ fields.push(value === empty ? emptyField : value);
130
+ }
131
+ lines.push(fields.join(delimiter));
132
+ }
133
+ return lines.join("\n");
134
+ }
@@ -0,0 +1,97 @@
1
+ /** The full authored scene: every marker, volume, path, and note for a game. */
2
+ export type { EditorDocument } from "./types.js";
3
+ /** A sculpted heightfield overlay stored on a document ΓÇö the terraform snapshot of offset deltas. */
4
+ export type { EditorTerrain } from "./types.js";
5
+ /** Per-kind show/hide flags for the editor's layer panel. */
6
+ export type { EditorKindVisibility } from "./types.js";
7
+ /** The four placeable-object collections a prefab fragment or clipboard fragment carries. */
8
+ export type { EditorFragmentContent } from "./types.js";
9
+ /** A serializable, reusable stamp of authored objects ΓÇö "make prefab" / "insert prefab" / detach. */
10
+ export type { EditorPrefab } from "./types.js";
11
+ /** A named, persisted list of object ids ΓÇö selection bookmark and/or locked production group. */
12
+ export type { EditorCollection } from "./types.js";
13
+ /** One row in a gameplay data catalog — id + optional label + meta matching the catalog schema. */
14
+ export type { EditorCatalogEntry } from "./types.js";
15
+ /** Persisted values for one gameplay data catalog on the scene document. */
16
+ export type { EditorCatalogData } from "./types.js";
17
+ /**
18
+ * Game-exported catalog definition: ParamSchema + default entries for in-editor tuning.
19
+ * @example
20
+ * ```ts
21
+ * import type { EditorCatalogDefinition } from "@jgengine/core/editor/index";
22
+ * export const editorCatalogs: EditorCatalogDefinition[] = [{
23
+ * id: "towers", label: "Towers",
24
+ * schema: { fields: [{ key: "damage", type: "number", default: 8, min: 1, max: 100 }] },
25
+ * entries: [{ id: "tower_archer", label: "Archer", meta: { damage: 8 } }],
26
+ * }];
27
+ * ```
28
+ */
29
+ export type { EditorCatalogDefinition } from "./types.js";
30
+ /** Accepted shape for a game's `editorCatalogs` export: definitions, or a factory. */
31
+ export type { EditorCatalogsInput } from "./types.js";
32
+ /** Accepted shape for a game's `editorLayers` export: a document, partial data, or a factory. */
33
+ export type { EditorLayersInput } from "./types.js";
34
+ /** A placeable point object in the scene ΓÇö spawn, mob, chest, POI, etc. */
35
+ export type { EditorMarker } from "./types.js";
36
+ /** A free-text annotation pinned to a world position for designers. */
37
+ export type { EditorNote } from "./types.js";
38
+ /** A polyline of points ΓÇö road, corridor, patrol route ΓÇö placed in the scene. */
39
+ export type { EditorPath } from "./types.js";
40
+ /** A world-space point used across editor markers, volumes, and paths. */
41
+ export type { EditorVec3 } from "./types.js";
42
+ /** A spatial region ΓÇö zone, aggro range, capture area ΓÇö placed in the scene. */
43
+ export type { EditorVolume } from "./types.js";
44
+ /** Collision shape a volume is rendered and tested as. */
45
+ export type { EditorVolumeShape } from "./types.js";
46
+ /** HUD layout section on the scene document — panel id → anchor/offset/size/visibility. */
47
+ export type { EditorUiDocument, EditorUiPanelLayout, HudPanelTypeDef, HudResizeAxes } from "./types.js";
48
+ export { WELL_KNOWN_MARKER_KINDS, WELL_KNOWN_PATH_KINDS, WELL_KNOWN_VOLUME_KINDS, } from "./types.js";
49
+ export { applyEditorDocumentOverlay, cloneEditorDocument, collectDescendants, createEmptyEditorDocument, createPrefabFragment, decodeEditorDocument, editorChildren, editorDocumentBounds, editorDocumentExtras, editorDocumentSize, editorParentOf, editorRoots, exportEditorDocumentJson, extractEditorFragment, findEditorCatalog, findEditorCatalogEntry, findEditorCollection, findEditorMarker, findEditorNote, findEditorPath, findEditorPrefab, findEditorVolume, importEditorDocumentJson, isEditorObjectLocked, listEditorKinds, mergeEditorDocuments, normalizeEditorLayers, seedEditorCatalogs, wouldCreateCycle, } from "./document.js";
50
+ /** One field-level failure surfaced while decoding an untrusted editor document. */
51
+ export type { EditorDocumentDiagnostic } from "./document.js";
52
+ /** Result of {@link decodeEditorDocument}: a typed document, or every diagnostic collected while decoding it. */
53
+ export type { DecodeEditorDocumentResult } from "./document.js";
54
+ /** Creates an editor session with undo/redo history seeded from an initial document. */
55
+ export { createEditorSession } from "./commands.js";
56
+ /** Compact snapshot of a session state ΓÇö counts, selection, and the selected object. */
57
+ export { summarizeEditorSession } from "./commands.js";
58
+ /** A single editor mutation ΓÇö select, move, add, remove, undo/redo ΓÇö dispatched to a session. */
59
+ export type { EditorCommand } from "./commands.js";
60
+ /** Per-dispatch options; `coalesce` merges consecutive same-key edits into one undo step. */
61
+ export type { EditorDispatchOptions } from "./commands.js";
62
+ /** Stateful, undoable handle for driving scene edits from UI or an MCP agent. */
63
+ export type { EditorSession } from "./commands.js";
64
+ /** The document plus current selection at a point in editor history. */
65
+ export type { EditorSessionState } from "./commands.js";
66
+ export { applyDocumentPatch, applyRuntimeStateDelta, createDocumentLiveSync, getDocumentLiveSync, installDocumentLiveSync, runtimeEntityWriteBackCommand, subscribeDocumentLiveSyncInstall, } from "./liveSync.js";
67
+ /** Versioned document mutation on the editorΓåöruntime live-sync stream. */
68
+ export type { DocumentPatch, ApplyDocumentPatchResult } from "./liveSync.js";
69
+ /** Two-way live-sync bus: document patches out, runtime state deltas back. */
70
+ export type { DocumentLiveSync, DocumentLiveEvent } from "./liveSync.js";
71
+ /** Ephemeral runtime entity/tunable state streamed on the reverse channel. */
72
+ export type { RuntimeEntityState, RuntimeStateDelta, RuntimeStateSnapshot } from "./liveSync.js";
73
+ export { consumeRuntimePlayStep, createRuntimePlayControl, getRuntimeInspectorValue, planRuntimeInspectorSet, runtimeEntityMetaWriteBackCommand, summarizeRuntimeInspector, } from "./runtimeInspector.js";
74
+ /** Play-mode sim gate and reverse-channel inspector summary/get/set pure helpers. */
75
+ export type { RuntimeInspectorGetResult, RuntimeInspectorSetPlan, RuntimeInspectorSummary, RuntimePlayControl, } from "./runtimeInspector.js";
76
+ export { CURRENT_GRID_SCHEMA_VERSION, cloneGridLayer, createGridLayer, eraseGridCell, eyedropGridCell, fillGridRect, findGridPaletteEntry, floodFillGrid, forEachGridCell, getGridCell, getGridCellAtWorld, gridCellCount, gridCellEntries, gridCellKey, gridCellToWorld, gridCellsOfValue, gridEmptyValue, gridGlyphMap, inGridBounds, migrateGridLayer, paintGridCells, parseGridCellKey, resizeGridLayer, setGridCell, worldToGridCell, } from "./grid.js";
77
+ /** How a grid layer's columns and rows map onto world axes (`"xz"` top-down, `"xy"` side view). */
78
+ export type { EditorGridAxes } from "./grid.js";
79
+ /** A sparse, editor-owned tile grid serialized on the scene document. */
80
+ export type { EditorGridLayer } from "./grid.js";
81
+ /** One selectable value in a grid layer's palette — value id, glyph, color, and typed payload. */
82
+ export type { EditorGridPaletteEntry } from "./grid.js";
83
+ /** One resolved cell of a grid layer — its column, row, and value id. */
84
+ export type { EditorGridCell } from "./grid.js";
85
+ /** A single paint/erase edit: set cell `col,row` to `value` (empty value erases). */
86
+ export type { EditorGridCellEdit } from "./grid.js";
87
+ /** Fields accepted when constructing a grid layer via `createGridLayer`. */
88
+ export type { CreateGridLayerInit } from "./grid.js";
89
+ export { exportAsciiGrid, exportCsvGrid, importAsciiGrid, importCsvGrid, } from "./gridAdapters.js";
90
+ /** Options for importing an ASCII/glyph map into a grid layer. */
91
+ export type { AsciiGridImportOptions } from "./gridAdapters.js";
92
+ /** Options for rendering a grid layer back out as an ASCII/glyph map. */
93
+ export type { AsciiGridExportOptions } from "./gridAdapters.js";
94
+ /** Options for importing a CSV grid (one value id per cell) into a grid layer. */
95
+ export type { CsvGridImportOptions } from "./gridAdapters.js";
96
+ /** Options for exporting a grid layer as CSV. */
97
+ export type { CsvGridExportOptions } from "./gridAdapters.js";
@@ -0,0 +1,10 @@
1
+ export { WELL_KNOWN_MARKER_KINDS, WELL_KNOWN_PATH_KINDS, WELL_KNOWN_VOLUME_KINDS, } from "./types.js";
2
+ export { applyEditorDocumentOverlay, cloneEditorDocument, collectDescendants, createEmptyEditorDocument, createPrefabFragment, decodeEditorDocument, editorChildren, editorDocumentBounds, editorDocumentExtras, editorDocumentSize, editorParentOf, editorRoots, exportEditorDocumentJson, extractEditorFragment, findEditorCatalog, findEditorCatalogEntry, findEditorCollection, findEditorMarker, findEditorNote, findEditorPath, findEditorPrefab, findEditorVolume, importEditorDocumentJson, isEditorObjectLocked, listEditorKinds, mergeEditorDocuments, normalizeEditorLayers, seedEditorCatalogs, wouldCreateCycle, } from "./document.js";
3
+ /** Creates an editor session with undo/redo history seeded from an initial document. */
4
+ export { createEditorSession } from "./commands.js";
5
+ /** Compact snapshot of a session state ΓÇö counts, selection, and the selected object. */
6
+ export { summarizeEditorSession } from "./commands.js";
7
+ export { applyDocumentPatch, applyRuntimeStateDelta, createDocumentLiveSync, getDocumentLiveSync, installDocumentLiveSync, runtimeEntityWriteBackCommand, subscribeDocumentLiveSyncInstall, } from "./liveSync.js";
8
+ export { consumeRuntimePlayStep, createRuntimePlayControl, getRuntimeInspectorValue, planRuntimeInspectorSet, runtimeEntityMetaWriteBackCommand, summarizeRuntimeInspector, } from "./runtimeInspector.js";
9
+ export { CURRENT_GRID_SCHEMA_VERSION, cloneGridLayer, createGridLayer, eraseGridCell, eyedropGridCell, fillGridRect, findGridPaletteEntry, floodFillGrid, forEachGridCell, getGridCell, getGridCellAtWorld, gridCellCount, gridCellEntries, gridCellKey, gridCellToWorld, gridCellsOfValue, gridEmptyValue, gridGlyphMap, inGridBounds, migrateGridLayer, paintGridCells, parseGridCellKey, resizeGridLayer, setGridCell, worldToGridCell, } from "./grid.js";
10
+ export { exportAsciiGrid, exportCsvGrid, importAsciiGrid, importCsvGrid, } from "./gridAdapters.js";
@@ -0,0 +1,127 @@
1
+ import { type EditorCommand } from "./commands.js";
2
+ import type { EditorDocument, EditorVec3 } from "./types.js";
3
+ /**
4
+ * One versioned document mutation on the live-sync stream. `snapshot` replaces the whole
5
+ * document; `commands` replays structural editor commands onto the current document.
6
+ * `baseRevision` must match the receiver's current revision unless `force` is set (document
7
+ * authority from the editor).
8
+ */
9
+ export type DocumentPatch = {
10
+ type: "snapshot";
11
+ revision?: number;
12
+ baseRevision: number;
13
+ document: EditorDocument;
14
+ } | {
15
+ type: "commands";
16
+ revision?: number;
17
+ baseRevision: number;
18
+ commands: readonly EditorCommand[];
19
+ };
20
+ /** Result of applying a {@link DocumentPatch} to a document + revision pair. */
21
+ export type ApplyDocumentPatchResult = {
22
+ ok: true;
23
+ document: EditorDocument;
24
+ revision: number;
25
+ patch: DocumentPatch;
26
+ } | {
27
+ ok: false;
28
+ error: string;
29
+ };
30
+ /** One live entity row the runtime may stream to the editor (play-mode inspector feed). */
31
+ export interface RuntimeEntityState {
32
+ id: string;
33
+ position?: EditorVec3;
34
+ rotationY?: number;
35
+ values?: Record<string, unknown>;
36
+ }
37
+ /** Full ephemeral runtime view held on the reverse channel — never mutates the document. */
38
+ export interface RuntimeStateSnapshot {
39
+ seq: number;
40
+ entities: Record<string, RuntimeEntityState>;
41
+ tunables: Record<string, unknown>;
42
+ }
43
+ /**
44
+ * Incremental runtime state for the reverse channel. Entity rows upsert by id; `removeIds`
45
+ * drop rows; `tunables` shallow-merge. Ephemeral unless written back as a document patch.
46
+ */
47
+ export interface RuntimeStateDelta {
48
+ seq: number;
49
+ at: number;
50
+ entities?: readonly RuntimeEntityState[];
51
+ removeIds?: readonly string[];
52
+ tunables?: Record<string, unknown>;
53
+ }
54
+ /** Event emitted when the authoritative document changes on a {@link DocumentLiveSync}. */
55
+ export interface DocumentLiveEvent {
56
+ document: EditorDocument;
57
+ revision: number;
58
+ patch: DocumentPatch;
59
+ }
60
+ /**
61
+ * Applies a versioned document patch. Rejects base-revision mismatches unless `force` (document
62
+ * is authoritative — the editor forces when publishing its own session state).
63
+ * @capability editor-live-sync apply a versioned document patch onto a live scene document
64
+ */
65
+ export declare function applyDocumentPatch(document: EditorDocument, revision: number, patch: DocumentPatch, options?: {
66
+ force?: boolean;
67
+ }): ApplyDocumentPatchResult;
68
+ /**
69
+ * Merges a runtime delta into a snapshot without touching the scene document — runtime overrides
70
+ * stay ephemeral until an explicit write-back produces a document patch.
71
+ * @capability editor-live-sync merge a runtime state delta into the reverse-channel snapshot
72
+ */
73
+ export declare function applyRuntimeStateDelta(snapshot: RuntimeStateSnapshot, delta: Omit<RuntimeStateDelta, "seq"> & {
74
+ seq?: number;
75
+ }): {
76
+ snapshot: RuntimeStateSnapshot;
77
+ delta: RuntimeStateDelta;
78
+ };
79
+ /**
80
+ * Builds an undoable document command from an ephemeral runtime entity row (write-back). Returns
81
+ * null when there is nothing to promote. Does not mutate document or clear the override — the
82
+ * caller dispatches the command and then clears the override.
83
+ * @capability editor-live-sync promote a runtime entity override into a document write-back command
84
+ */
85
+ export declare function runtimeEntityWriteBackCommand(document: EditorDocument, entity: RuntimeEntityState): EditorCommand | null;
86
+ /** Two-way live-sync bus: document patches out, runtime state deltas back. */
87
+ export interface DocumentLiveSync {
88
+ getDocument(): EditorDocument;
89
+ getRevision(): number;
90
+ applyPatch(patch: DocumentPatch, options?: {
91
+ force?: boolean;
92
+ }): ApplyDocumentPatchResult;
93
+ /** Document-authoritative full replace (editor session mirror). */
94
+ replaceDocument(document: EditorDocument): DocumentLiveEvent;
95
+ pullPatches(sinceRevision: number): DocumentPatch[];
96
+ subscribeDocument(listener: (event: DocumentLiveEvent) => void): () => void;
97
+ getRuntimeState(): RuntimeStateSnapshot;
98
+ pushRuntimeDelta(delta: Omit<RuntimeStateDelta, "seq">): RuntimeStateDelta;
99
+ pullRuntimeDeltas(sinceSeq: number): RuntimeStateDelta[];
100
+ subscribeRuntime(listener: (delta: RuntimeStateDelta, snapshot: RuntimeStateSnapshot) => void): () => void;
101
+ setRuntimeOverride(entity: RuntimeEntityState): void;
102
+ clearRuntimeOverride(id: string): void;
103
+ getRuntimeOverrides(): Readonly<Record<string, RuntimeEntityState>>;
104
+ /**
105
+ * Promote an ephemeral override into a document command patch when the id exists in the
106
+ * document. Clears the override only after a successful apply.
107
+ */
108
+ writeBackOverride(id: string): ApplyDocumentPatchResult | {
109
+ ok: false;
110
+ error: string;
111
+ };
112
+ }
113
+ /**
114
+ * Creates an in-memory two-way live-sync bus seeded from an initial document. Document is
115
+ * authoritative; runtime overrides are ephemeral until {@link DocumentLiveSync.writeBackOverride}.
116
+ * @capability editor-live-sync two-way document/runtime live-sync bus for editor↔game
117
+ */
118
+ export declare function createDocumentLiveSync(initial: EditorDocument): DocumentLiveSync;
119
+ /** Publishes a live-sync bus globally so AuthoredScene / games can subscribe without prop drilling. */
120
+ export declare function installDocumentLiveSync(sync: DocumentLiveSync): () => void;
121
+ /** Returns the globally installed live-sync bus, or null when none is mounted. */
122
+ export declare function getDocumentLiveSync(): DocumentLiveSync | null;
123
+ /**
124
+ * Subscribe to install/uninstall of the global live-sync bus (AuthoredScene re-attaches when the
125
+ * editor host mounts over a running game).
126
+ */
127
+ export declare function subscribeDocumentLiveSyncInstall(listener: () => void): () => void;
@@ -0,0 +1,249 @@
1
+ import { createEditorSession } from "./commands.js";
2
+ import { cloneEditorDocument } from "./document.js";
3
+ const MAX_PATCH_LOG = 64;
4
+ const MAX_RUNTIME_LOG = 128;
5
+ /**
6
+ * Applies a versioned document patch. Rejects base-revision mismatches unless `force` (document
7
+ * is authoritative — the editor forces when publishing its own session state).
8
+ * @capability editor-live-sync apply a versioned document patch onto a live scene document
9
+ */
10
+ export function applyDocumentPatch(document, revision, patch, options) {
11
+ if (!options?.force && patch.baseRevision !== revision) {
12
+ return {
13
+ ok: false,
14
+ error: `baseRevision mismatch: patch=${patch.baseRevision} current=${revision}`,
15
+ };
16
+ }
17
+ if (patch.type === "snapshot") {
18
+ const nextDoc = cloneEditorDocument(patch.document);
19
+ const nextRevision = revision + 1;
20
+ return {
21
+ ok: true,
22
+ document: nextDoc,
23
+ revision: nextRevision,
24
+ patch: { ...patch, revision: nextRevision, document: nextDoc },
25
+ };
26
+ }
27
+ if (patch.commands.length === 0) {
28
+ return { ok: false, error: "commands patch is empty" };
29
+ }
30
+ const session = createEditorSession(cloneEditorDocument(document));
31
+ for (const command of patch.commands) {
32
+ session.dispatch(command);
33
+ }
34
+ const nextDoc = session.getState().document;
35
+ const nextRevision = revision + 1;
36
+ return {
37
+ ok: true,
38
+ document: nextDoc,
39
+ revision: nextRevision,
40
+ patch: { ...patch, revision: nextRevision },
41
+ };
42
+ }
43
+ /**
44
+ * Merges a runtime delta into a snapshot without touching the scene document — runtime overrides
45
+ * stay ephemeral until an explicit write-back produces a document patch.
46
+ * @capability editor-live-sync merge a runtime state delta into the reverse-channel snapshot
47
+ */
48
+ export function applyRuntimeStateDelta(snapshot, delta) {
49
+ const entities = { ...snapshot.entities };
50
+ if (delta.removeIds !== undefined) {
51
+ for (const id of delta.removeIds)
52
+ delete entities[id];
53
+ }
54
+ if (delta.entities !== undefined) {
55
+ for (const row of delta.entities) {
56
+ const prev = entities[row.id];
57
+ entities[row.id] = {
58
+ id: row.id,
59
+ position: row.position ?? prev?.position,
60
+ rotationY: row.rotationY ?? prev?.rotationY,
61
+ values: row.values === undefined && prev?.values === undefined
62
+ ? undefined
63
+ : { ...prev?.values, ...row.values },
64
+ };
65
+ }
66
+ }
67
+ const tunables = delta.tunables === undefined ? snapshot.tunables : { ...snapshot.tunables, ...delta.tunables };
68
+ const seq = snapshot.seq + 1;
69
+ const applied = {
70
+ seq,
71
+ at: delta.at,
72
+ ...(delta.entities === undefined ? {} : { entities: delta.entities }),
73
+ ...(delta.removeIds === undefined ? {} : { removeIds: delta.removeIds }),
74
+ ...(delta.tunables === undefined ? {} : { tunables: delta.tunables }),
75
+ };
76
+ return { snapshot: { seq, entities, tunables }, delta: applied };
77
+ }
78
+ /**
79
+ * Builds an undoable document command from an ephemeral runtime entity row (write-back). Returns
80
+ * null when there is nothing to promote. Does not mutate document or clear the override — the
81
+ * caller dispatches the command and then clears the override.
82
+ * @capability editor-live-sync promote a runtime entity override into a document write-back command
83
+ */
84
+ export function runtimeEntityWriteBackCommand(document, entity) {
85
+ const marker = document.markers.find((entry) => entry.id === entity.id);
86
+ if (marker !== undefined) {
87
+ if (entity.position === undefined && entity.rotationY === undefined)
88
+ return null;
89
+ return {
90
+ type: "setTransform",
91
+ id: entity.id,
92
+ ...(entity.position === undefined ? {} : { position: { ...entity.position } }),
93
+ ...(entity.rotationY === undefined ? {} : { rotationY: entity.rotationY }),
94
+ };
95
+ }
96
+ const volume = document.volumes.find((entry) => entry.id === entity.id);
97
+ if (volume !== undefined) {
98
+ if (entity.position === undefined)
99
+ return null;
100
+ return { type: "setTransform", id: entity.id, position: { ...entity.position } };
101
+ }
102
+ const note = document.annotations.find((entry) => entry.id === entity.id);
103
+ if (note !== undefined) {
104
+ if (entity.position === undefined)
105
+ return null;
106
+ return { type: "setTransform", id: entity.id, position: { ...entity.position } };
107
+ }
108
+ return null;
109
+ }
110
+ /**
111
+ * Creates an in-memory two-way live-sync bus seeded from an initial document. Document is
112
+ * authoritative; runtime overrides are ephemeral until {@link DocumentLiveSync.writeBackOverride}.
113
+ * @capability editor-live-sync two-way document/runtime live-sync bus for editor↔game
114
+ */
115
+ export function createDocumentLiveSync(initial) {
116
+ let document = cloneEditorDocument(initial);
117
+ let revision = 0;
118
+ let runtime = { seq: 0, entities: {}, tunables: {} };
119
+ const overrides = {};
120
+ const patchLog = [];
121
+ const runtimeLog = [];
122
+ const documentListeners = new Set();
123
+ const runtimeListeners = new Set();
124
+ const emitDocument = (event) => {
125
+ for (const listener of documentListeners)
126
+ listener(event);
127
+ };
128
+ const commit = (result) => {
129
+ document = result.document;
130
+ revision = result.revision;
131
+ patchLog.push(result.patch);
132
+ if (patchLog.length > MAX_PATCH_LOG)
133
+ patchLog.splice(0, patchLog.length - MAX_PATCH_LOG);
134
+ const event = {
135
+ document,
136
+ revision,
137
+ patch: result.patch,
138
+ };
139
+ emitDocument(event);
140
+ return event;
141
+ };
142
+ return {
143
+ getDocument: () => document,
144
+ getRevision: () => revision,
145
+ applyPatch(patch, options) {
146
+ const result = applyDocumentPatch(document, revision, patch, options);
147
+ if (!result.ok)
148
+ return result;
149
+ commit(result);
150
+ return result;
151
+ },
152
+ replaceDocument(next) {
153
+ const result = applyDocumentPatch(document, revision, { type: "snapshot", baseRevision: revision, document: next }, { force: true });
154
+ if (!result.ok) {
155
+ throw new Error(result.error);
156
+ }
157
+ return commit(result);
158
+ },
159
+ pullPatches(sinceRevision) {
160
+ return patchLog.filter((patch) => (patch.revision ?? 0) > sinceRevision);
161
+ },
162
+ subscribeDocument(listener) {
163
+ documentListeners.add(listener);
164
+ return () => {
165
+ documentListeners.delete(listener);
166
+ };
167
+ },
168
+ getRuntimeState: () => runtime,
169
+ pushRuntimeDelta(delta) {
170
+ const applied = applyRuntimeStateDelta(runtime, delta);
171
+ runtime = applied.snapshot;
172
+ runtimeLog.push(applied.delta);
173
+ if (runtimeLog.length > MAX_RUNTIME_LOG)
174
+ runtimeLog.splice(0, runtimeLog.length - MAX_RUNTIME_LOG);
175
+ for (const listener of runtimeListeners)
176
+ listener(applied.delta, runtime);
177
+ return applied.delta;
178
+ },
179
+ pullRuntimeDeltas(sinceSeq) {
180
+ return runtimeLog.filter((delta) => delta.seq > sinceSeq);
181
+ },
182
+ subscribeRuntime(listener) {
183
+ runtimeListeners.add(listener);
184
+ return () => {
185
+ runtimeListeners.delete(listener);
186
+ };
187
+ },
188
+ setRuntimeOverride(entity) {
189
+ const prev = overrides[entity.id];
190
+ overrides[entity.id] = {
191
+ id: entity.id,
192
+ position: entity.position ?? prev?.position,
193
+ rotationY: entity.rotationY ?? prev?.rotationY,
194
+ values: entity.values === undefined && prev?.values === undefined
195
+ ? undefined
196
+ : { ...prev?.values, ...entity.values },
197
+ };
198
+ },
199
+ clearRuntimeOverride(id) {
200
+ delete overrides[id];
201
+ },
202
+ getRuntimeOverrides: () => ({ ...overrides }),
203
+ writeBackOverride(id) {
204
+ const entity = overrides[id];
205
+ if (entity === undefined)
206
+ return { ok: false, error: `no runtime override for "${id}"` };
207
+ const command = runtimeEntityWriteBackCommand(document, entity);
208
+ if (command === null) {
209
+ return { ok: false, error: `override "${id}" has nothing to write back into the document` };
210
+ }
211
+ const result = applyDocumentPatch(document, revision, { type: "commands", baseRevision: revision, commands: [command] }, { force: true });
212
+ if (!result.ok)
213
+ return result;
214
+ commit(result);
215
+ delete overrides[id];
216
+ return result;
217
+ },
218
+ };
219
+ }
220
+ const GLOBAL_KEY = "__jgengineDocumentLiveSync";
221
+ const INSTALL_LISTENERS = new Set();
222
+ /** Publishes a live-sync bus globally so AuthoredScene / games can subscribe without prop drilling. */
223
+ export function installDocumentLiveSync(sync) {
224
+ const root = globalThis;
225
+ root[GLOBAL_KEY] = sync;
226
+ for (const listener of INSTALL_LISTENERS)
227
+ listener();
228
+ return () => {
229
+ if (root[GLOBAL_KEY] === sync)
230
+ delete root[GLOBAL_KEY];
231
+ for (const listener of INSTALL_LISTENERS)
232
+ listener();
233
+ };
234
+ }
235
+ /** Returns the globally installed live-sync bus, or null when none is mounted. */
236
+ export function getDocumentLiveSync() {
237
+ const root = globalThis;
238
+ return root[GLOBAL_KEY] ?? null;
239
+ }
240
+ /**
241
+ * Subscribe to install/uninstall of the global live-sync bus (AuthoredScene re-attaches when the
242
+ * editor host mounts over a running game).
243
+ */
244
+ export function subscribeDocumentLiveSyncInstall(listener) {
245
+ INSTALL_LISTENERS.add(listener);
246
+ return () => {
247
+ INSTALL_LISTENERS.delete(listener);
248
+ };
249
+ }