@jgengine/core 0.10.0 → 0.12.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 (727) hide show
  1. package/CHANGELOG.md +39 -2
  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/populationDirector.d.ts +103 -0
  21. package/dist/ai/populationDirector.js +190 -0
  22. package/dist/ai/pursuit.d.ts +56 -0
  23. package/dist/ai/pursuit.js +53 -0
  24. package/dist/ai/spawnDirector.d.ts +7 -2
  25. package/dist/ai/spawnDirector.js +18 -15
  26. package/dist/ai/spawnPoint.d.ts +3 -1
  27. package/dist/ai/spawnPoint.js +3 -1
  28. package/dist/ai/targetAcquisition.d.ts +84 -0
  29. package/dist/ai/targetAcquisition.js +92 -0
  30. package/dist/anim/easing.d.ts +19 -0
  31. package/dist/anim/easing.js +19 -0
  32. package/dist/anim/oscillator.d.ts +12 -0
  33. package/dist/anim/oscillator.js +25 -0
  34. package/dist/area/areaEffectField.d.ts +127 -0
  35. package/dist/area/areaEffectField.js +175 -0
  36. package/dist/area/stackPolicy.d.ts +47 -0
  37. package/dist/area/stackPolicy.js +99 -0
  38. package/dist/authoring.d.ts +2 -1
  39. package/dist/authoring.js +2 -1
  40. package/dist/board/laneBoard.d.ts +13 -0
  41. package/dist/board/laneBoard.js +13 -0
  42. package/dist/board/timelineBoard.d.ts +10 -0
  43. package/dist/board/timelineBoard.js +10 -0
  44. package/dist/combat/abilityKit.d.ts +18 -0
  45. package/dist/combat/abilityKit.js +24 -9
  46. package/dist/combat/animationState.d.ts +5 -0
  47. package/dist/combat/animationState.js +5 -0
  48. package/dist/combat/breakMeters.d.ts +10 -0
  49. package/dist/combat/breakMeters.js +10 -0
  50. package/dist/combat/castRunner.d.ts +5 -0
  51. package/dist/combat/castRunner.js +5 -0
  52. package/dist/combat/comboPoints.d.ts +5 -0
  53. package/dist/combat/comboPoints.js +5 -0
  54. package/dist/combat/comboString.d.ts +5 -0
  55. package/dist/combat/comboString.js +5 -0
  56. package/dist/combat/damageInterceptors.d.ts +192 -0
  57. package/dist/combat/damageInterceptors.js +251 -0
  58. package/dist/combat/damageMatchup.d.ts +68 -0
  59. package/dist/combat/damageMatchup.js +42 -0
  60. package/dist/combat/damageResolution.d.ts +63 -0
  61. package/dist/combat/damageResolution.js +50 -0
  62. package/dist/combat/death.d.ts +7 -1
  63. package/dist/combat/death.js +5 -0
  64. package/dist/combat/deathReason.d.ts +14 -0
  65. package/dist/combat/deathReason.js +1 -0
  66. package/dist/combat/defensiveWindow.d.ts +5 -0
  67. package/dist/combat/defensiveWindow.js +5 -0
  68. package/dist/combat/dotField.d.ts +5 -1
  69. package/dist/combat/dotField.js +5 -1
  70. package/dist/combat/downed.d.ts +5 -0
  71. package/dist/combat/downed.js +5 -0
  72. package/dist/combat/effects.d.ts +5 -0
  73. package/dist/combat/effects.js +5 -0
  74. package/dist/combat/encounterSequence.d.ts +258 -0
  75. package/dist/combat/encounterSequence.js +426 -0
  76. package/dist/combat/hitReaction.d.ts +57 -1
  77. package/dist/combat/hitReaction.js +45 -5
  78. package/dist/combat/magazine.d.ts +54 -0
  79. package/dist/combat/magazine.js +96 -0
  80. package/dist/combat/projectiles.d.ts +5 -0
  81. package/dist/combat/projectiles.js +32 -14
  82. package/dist/combat/receivedDamage.d.ts +117 -0
  83. package/dist/combat/receivedDamage.js +92 -0
  84. package/dist/combat/regenShield.d.ts +5 -1
  85. package/dist/combat/regenShield.js +5 -1
  86. package/dist/combat/renderCues.d.ts +51 -0
  87. package/dist/combat/renderCues.js +44 -0
  88. package/dist/combat/resourcePool.d.ts +5 -0
  89. package/dist/combat/resourcePool.js +5 -0
  90. package/dist/combat/rewardAllocation.d.ts +121 -0
  91. package/dist/combat/rewardAllocation.js +251 -0
  92. package/dist/combat/shotOrigin.d.ts +18 -1
  93. package/dist/combat/shotOrigin.js +39 -0
  94. package/dist/combat/statusApplication.d.ts +96 -0
  95. package/dist/combat/statusApplication.js +81 -0
  96. package/dist/combat/telegraph.d.ts +11 -2
  97. package/dist/combat/telegraph.js +11 -2
  98. package/dist/combat/thresholdCrossings.d.ts +85 -0
  99. package/dist/combat/thresholdCrossings.js +116 -0
  100. package/dist/combat.d.ts +35 -0
  101. package/dist/combat.js +35 -0
  102. package/dist/commands/commandRegistry.d.ts +11 -0
  103. package/dist/commands/commandRegistry.js +9 -2
  104. package/dist/crafting/crop.d.ts +18 -0
  105. package/dist/crafting/crop.js +18 -0
  106. package/dist/crafting/production.d.ts +5 -0
  107. package/dist/crafting/production.js +5 -0
  108. package/dist/devtools/controls.d.ts +38 -0
  109. package/dist/devtools/controls.js +181 -0
  110. package/dist/devtools/devtools.d.ts +5 -197
  111. package/dist/devtools/devtools.js +38 -774
  112. package/dist/devtools/discover.d.ts +32 -0
  113. package/dist/devtools/discover.js +240 -0
  114. package/dist/devtools/fallbackSeams.d.ts +50 -0
  115. package/dist/devtools/fallbackSeams.js +111 -0
  116. package/dist/devtools/frame.d.ts +15 -0
  117. package/dist/devtools/frame.js +247 -0
  118. package/dist/devtools/logs.d.ts +15 -0
  119. package/dist/devtools/logs.js +86 -0
  120. package/dist/devtools/overrides.d.ts +16 -0
  121. package/dist/devtools/overrides.js +66 -0
  122. package/dist/devtools/rewriteTunables.d.ts +17 -0
  123. package/dist/devtools/rewriteTunables.js +276 -0
  124. package/dist/devtools/saveEndpoint.d.ts +46 -0
  125. package/dist/devtools/saveEndpoint.js +48 -0
  126. package/dist/devtools/transformTunables.d.ts +3 -0
  127. package/dist/devtools/transformTunables.js +3 -0
  128. package/dist/devtools/tunableSchema.d.ts +31 -0
  129. package/dist/devtools/tunableSchema.js +31 -0
  130. package/dist/devtools/types.d.ts +212 -0
  131. package/dist/devtools/types.js +1 -0
  132. package/dist/economy/auctionBook.d.ts +122 -0
  133. package/dist/economy/auctionBook.js +213 -0
  134. package/dist/economy/currency.d.ts +12 -1
  135. package/dist/economy/currency.js +12 -1
  136. package/dist/economy/listingBook.d.ts +91 -0
  137. package/dist/economy/listingBook.js +144 -0
  138. package/dist/economy/priceHistory.d.ts +44 -0
  139. package/dist/economy/priceHistory.js +89 -0
  140. package/dist/economy/resourceLedger.d.ts +222 -0
  141. package/dist/economy/resourceLedger.js +353 -0
  142. package/dist/economy/sharedWallet.d.ts +14 -0
  143. package/dist/economy/sharedWallet.js +14 -0
  144. package/dist/economy/techTree.d.ts +12 -0
  145. package/dist/economy/techTree.js +12 -0
  146. package/dist/economy/unlockPoints.d.ts +92 -0
  147. package/dist/economy/unlockPoints.js +103 -0
  148. package/dist/economy/wallet.d.ts +26 -2
  149. package/dist/economy/wallet.js +35 -6
  150. package/dist/editor/commandApply.d.ts +5 -0
  151. package/dist/editor/commandApply.js +755 -0
  152. package/dist/editor/commands.d.ts +235 -7
  153. package/dist/editor/commands.js +82 -124
  154. package/dist/editor/directives.d.ts +94 -0
  155. package/dist/editor/directives.js +206 -0
  156. package/dist/editor/document.d.ts +194 -13
  157. package/dist/editor/document.js +1166 -19
  158. package/dist/editor/entityCatalog.d.ts +42 -0
  159. package/dist/editor/entityCatalog.js +101 -0
  160. package/dist/editor/environment.d.ts +74 -0
  161. package/dist/editor/environment.js +169 -0
  162. package/dist/editor/grid.d.ts +229 -0
  163. package/dist/editor/grid.js +366 -0
  164. package/dist/editor/gridAdapters.d.ts +80 -0
  165. package/dist/editor/gridAdapters.js +134 -0
  166. package/dist/editor/index.d.ts +98 -6
  167. package/dist/editor/index.js +13 -2
  168. package/dist/editor/liveSync.d.ts +127 -0
  169. package/dist/editor/liveSync.js +249 -0
  170. package/dist/editor/minimap.d.ts +31 -0
  171. package/dist/editor/minimap.js +73 -0
  172. package/dist/editor/runtimeInspector.d.ts +88 -0
  173. package/dist/editor/runtimeInspector.js +239 -0
  174. package/dist/editor/streamer.d.ts +66 -0
  175. package/dist/editor/streamer.js +68 -0
  176. package/dist/editor/types.d.ts +250 -1
  177. package/dist/editor/world.d.ts +136 -0
  178. package/dist/editor/world.js +303 -0
  179. package/dist/faction/reputation.d.ts +5 -0
  180. package/dist/faction/reputation.js +5 -0
  181. package/dist/format/distance.d.ts +17 -0
  182. package/dist/format/distance.js +18 -0
  183. package/dist/format/duration.d.ts +27 -0
  184. package/dist/format/duration.js +45 -0
  185. package/dist/format/speed.d.ts +17 -0
  186. package/dist/format/speed.js +25 -0
  187. package/dist/game/breeding.d.ts +161 -0
  188. package/dist/game/breeding.js +181 -0
  189. package/dist/game/cameraConfig.d.ts +451 -0
  190. package/dist/game/cameraConfig.js +1 -0
  191. package/dist/game/connectedPlayers.d.ts +6 -4
  192. package/dist/game/connectedPlayers.js +2 -2
  193. package/dist/game/cosmetics.d.ts +9 -0
  194. package/dist/game/cosmetics.js +16 -0
  195. package/dist/game/defineGame.d.ts +110 -5
  196. package/dist/game/defineGame.js +49 -4
  197. package/dist/game/defineSystem.d.ts +90 -0
  198. package/dist/game/defineSystem.js +47 -0
  199. package/dist/game/dialogue.d.ts +33 -0
  200. package/dist/game/dialogue.js +21 -0
  201. package/dist/game/events.d.ts +63 -13
  202. package/dist/game/events.js +5 -0
  203. package/dist/game/feed.d.ts +33 -0
  204. package/dist/game/feed.js +35 -2
  205. package/dist/game/gamePhase.d.ts +11 -0
  206. package/dist/game/gamePhase.js +16 -0
  207. package/dist/game/leaderboard.d.ts +5 -0
  208. package/dist/game/leaderboard.js +5 -0
  209. package/dist/game/loadout.d.ts +5 -0
  210. package/dist/game/loadout.js +5 -0
  211. package/dist/game/lootFilter.d.ts +2 -0
  212. package/dist/game/lootFilter.js +2 -0
  213. package/dist/game/lootPipeline.d.ts +164 -0
  214. package/dist/game/lootPipeline.js +216 -0
  215. package/dist/game/lootTable.d.ts +19 -2
  216. package/dist/game/lootTable.js +15 -5
  217. package/dist/game/objectives.d.ts +43 -0
  218. package/dist/game/objectives.js +36 -0
  219. package/dist/game/paramLayers.d.ts +148 -0
  220. package/dist/game/paramLayers.js +185 -0
  221. package/dist/game/ping.d.ts +5 -0
  222. package/dist/game/ping.js +5 -0
  223. package/dist/game/playableGame.d.ts +116 -432
  224. package/dist/game/playableGame.js +1 -1
  225. package/dist/game/progression.d.ts +35 -0
  226. package/dist/game/progression.js +19 -0
  227. package/dist/game/quest.d.ts +8 -0
  228. package/dist/game/quest.js +30 -3
  229. package/dist/game/race.d.ts +141 -0
  230. package/dist/game/race.js +169 -0
  231. package/dist/game/recordBook.d.ts +3 -1
  232. package/dist/game/recordBook.js +4 -1
  233. package/dist/game/ruleSelection.d.ts +75 -0
  234. package/dist/game/ruleSelection.js +127 -0
  235. package/dist/game/runDraft.d.ts +5 -0
  236. package/dist/game/runDraft.js +5 -0
  237. package/dist/game/saveStore.d.ts +111 -0
  238. package/dist/game/saveStore.js +312 -0
  239. package/dist/game/snapshotHistory.d.ts +67 -0
  240. package/dist/game/snapshotHistory.js +95 -0
  241. package/dist/game/social.d.ts +38 -1
  242. package/dist/game/social.js +71 -0
  243. package/dist/game/spawnPoints.d.ts +5 -0
  244. package/dist/game/spawnPoints.js +5 -0
  245. package/dist/game/systemRuntime.d.ts +50 -0
  246. package/dist/game/systemRuntime.js +157 -0
  247. package/dist/game/systemSchedule.d.ts +72 -0
  248. package/dist/game/systemSchedule.js +242 -0
  249. package/dist/game/toasts.d.ts +43 -0
  250. package/dist/game/toasts.js +44 -0
  251. package/dist/game/trade.d.ts +10 -0
  252. package/dist/game/trade.js +10 -0
  253. package/dist/game/tribe.d.ts +184 -0
  254. package/dist/game/tribe.js +432 -0
  255. package/dist/game/unlocks.d.ts +8 -0
  256. package/dist/game/unlocks.js +16 -0
  257. package/dist/game/vfxInstance.d.ts +138 -0
  258. package/dist/game/vfxInstance.js +96 -0
  259. package/dist/game/worldItem.d.ts +17 -4
  260. package/dist/game/worldItem.js +17 -4
  261. package/dist/gameplay.d.ts +93 -0
  262. package/dist/gameplay.js +93 -0
  263. package/dist/index.d.ts +5 -14
  264. package/dist/index.js +5 -14
  265. package/dist/input/actionBindings.d.ts +23 -6
  266. package/dist/input/actionBindings.js +23 -6
  267. package/dist/input/axisInput.d.ts +7 -2
  268. package/dist/input/axisInput.js +7 -2
  269. package/dist/input/controlGroups.d.ts +67 -0
  270. package/dist/input/controlGroups.js +41 -0
  271. package/dist/input/touchScheme.d.ts +82 -6
  272. package/dist/input/touchScheme.js +123 -10
  273. package/dist/interaction/lockpick.d.ts +61 -0
  274. package/dist/interaction/lockpick.js +168 -0
  275. package/dist/interaction/proximityPrompt.d.ts +2 -0
  276. package/dist/interaction/proximityPrompt.js +2 -0
  277. package/dist/interaction/qte.d.ts +5 -0
  278. package/dist/interaction/qte.js +5 -0
  279. package/dist/interaction/skillCheck.d.ts +5 -0
  280. package/dist/interaction/skillCheck.js +5 -0
  281. package/dist/inventory/encumbrance.d.ts +69 -0
  282. package/dist/inventory/encumbrance.js +68 -0
  283. package/dist/inventory/inventoryModel.d.ts +12 -0
  284. package/dist/inventory/inventoryModel.js +12 -0
  285. package/dist/inventory/shapedGrid.d.ts +16 -0
  286. package/dist/inventory/shapedGrid.js +16 -0
  287. package/dist/inventory/slotModel.d.ts +10 -0
  288. package/dist/inventory/slotModel.js +10 -0
  289. package/dist/item/durability.d.ts +5 -0
  290. package/dist/item/durability.js +6 -3
  291. package/dist/item/itemIdentity.d.ts +171 -0
  292. package/dist/item/itemIdentity.js +138 -0
  293. package/dist/item/itemInstanceRegistry.d.ts +32 -0
  294. package/dist/item/itemInstanceRegistry.js +34 -0
  295. package/dist/item/itemgen.d.ts +163 -0
  296. package/dist/item/itemgen.js +151 -0
  297. package/dist/item/modularItem.d.ts +5 -0
  298. package/dist/item/modularItem.js +5 -0
  299. package/dist/item/use.d.ts +5 -0
  300. package/dist/item/use.js +5 -0
  301. package/dist/item/useBehavior.d.ts +142 -0
  302. package/dist/item/useBehavior.js +105 -0
  303. package/dist/item/weapon.d.ts +5 -0
  304. package/dist/item/weapon.js +5 -0
  305. package/dist/math/scalar.d.ts +25 -0
  306. package/dist/math/scalar.js +47 -0
  307. package/dist/meta/changelog.d.ts +4 -1
  308. package/dist/meta/changelog.js +39 -2
  309. package/dist/movement/avoidance.d.ts +45 -0
  310. package/dist/movement/avoidance.js +123 -0
  311. package/dist/movement/cameraRig.d.ts +8 -0
  312. package/dist/movement/cameraRig.js +8 -0
  313. package/dist/movement/dash.d.ts +11 -0
  314. package/dist/movement/dash.js +11 -0
  315. package/dist/movement/formation.d.ts +135 -0
  316. package/dist/movement/formation.js +194 -0
  317. package/dist/movement/glideModel.d.ts +5 -0
  318. package/dist/movement/glideModel.js +5 -0
  319. package/dist/movement/grappleSwing.d.ts +5 -0
  320. package/dist/movement/grappleSwing.js +5 -0
  321. package/dist/movement/leaderTrail.d.ts +5 -0
  322. package/dist/movement/leaderTrail.js +5 -0
  323. package/dist/movement/movementModel.d.ts +50 -9
  324. package/dist/movement/movementModel.js +75 -29
  325. package/dist/movement/playerMovement.js +167 -12
  326. package/dist/movement/poseState.d.ts +13 -0
  327. package/dist/movement/poseState.js +16 -0
  328. package/dist/movement/steering.d.ts +8 -0
  329. package/dist/movement/steering.js +18 -0
  330. package/dist/multiplayer/combatSnapshot.d.ts +3 -0
  331. package/dist/multiplayer/combatSnapshot.js +16 -8
  332. package/dist/multiplayer/lagCompensation.d.ts +5 -0
  333. package/dist/multiplayer/lagCompensation.js +5 -0
  334. package/dist/multiplayer/presenceModel.d.ts +11 -1
  335. package/dist/multiplayer/presenceModel.js +17 -1
  336. package/dist/multiplayer/simultaneousCommit.d.ts +3 -0
  337. package/dist/multiplayer/simultaneousCommit.js +3 -0
  338. package/dist/multiplayer.d.ts +11 -0
  339. package/dist/multiplayer.js +11 -0
  340. package/dist/nav/pathFollow.d.ts +57 -0
  341. package/dist/nav/pathFollow.js +109 -0
  342. package/dist/orders/orderKinds.d.ts +156 -0
  343. package/dist/orders/orderKinds.js +197 -0
  344. package/dist/orders/orderQueue.d.ts +208 -0
  345. package/dist/orders/orderQueue.js +211 -0
  346. package/dist/physics/drivableVehicle.d.ts +31 -0
  347. package/dist/physics/drivableVehicle.js +16 -0
  348. package/dist/physics/flightDynamics.d.ts +82 -0
  349. package/dist/physics/flightDynamics.js +165 -0
  350. package/dist/physics/gravityField.d.ts +25 -0
  351. package/dist/physics/gravityField.js +41 -0
  352. package/dist/physics/kinematicVehicle.d.ts +108 -1
  353. package/dist/physics/kinematicVehicle.js +212 -15
  354. package/dist/physics/physicsWorld.d.ts +50 -12
  355. package/dist/physics/physicsWorld.js +120 -122
  356. package/dist/physics/radialImpulse.d.ts +25 -0
  357. package/dist/physics/radialImpulse.js +27 -0
  358. package/dist/physics/vehicleObstacles.d.ts +44 -0
  359. package/dist/physics/vehicleObstacles.js +115 -0
  360. package/dist/procedural.d.ts +3 -0
  361. package/dist/procedural.js +3 -0
  362. package/dist/progression/statGraph.d.ts +116 -0
  363. package/dist/progression/statGraph.js +318 -0
  364. package/dist/puzzle/cellGrid.d.ts +9 -0
  365. package/dist/puzzle/cellGrid.js +9 -0
  366. package/dist/puzzle/fallingPiece.d.ts +9 -0
  367. package/dist/puzzle/fallingPiece.js +9 -0
  368. package/dist/puzzle/nonogram.d.ts +39 -0
  369. package/dist/puzzle/nonogram.js +136 -0
  370. package/dist/random/nameGen.d.ts +5 -0
  371. package/dist/random/nameGen.js +5 -0
  372. package/dist/random/pick.d.ts +8 -0
  373. package/dist/random/pick.js +31 -0
  374. package/dist/random/rng.d.ts +26 -1
  375. package/dist/random/rng.js +32 -9
  376. package/dist/random/seedLink.d.ts +4 -0
  377. package/dist/random/seedLink.js +4 -0
  378. package/dist/relation/keyedValues.d.ts +54 -0
  379. package/dist/relation/keyedValues.js +115 -0
  380. package/dist/relation/thresholds.d.ts +62 -0
  381. package/dist/relation/thresholds.js +62 -0
  382. package/dist/render/color.d.ts +12 -0
  383. package/dist/render/color.js +26 -0
  384. package/dist/render/lookPreset.d.ts +41 -0
  385. package/dist/render/lookPreset.js +29 -0
  386. package/dist/render/postProcessing.d.ts +20 -0
  387. package/dist/render/postProcessing.js +21 -1
  388. package/dist/rules/predicate.d.ts +53 -0
  389. package/dist/rules/predicate.js +64 -0
  390. package/dist/rules/ruleEffects.d.ts +38 -0
  391. package/dist/rules/ruleEffects.js +37 -0
  392. package/dist/rules/triggeredRules.d.ts +160 -0
  393. package/dist/rules/triggeredRules.js +241 -0
  394. package/dist/runtime/adapter.d.ts +55 -3
  395. package/dist/runtime/adapter.js +57 -1
  396. package/dist/runtime/cameraDirector.d.ts +1 -0
  397. package/dist/runtime/cameraDirector.js +1 -0
  398. package/dist/runtime/commandRunner.d.ts +1 -0
  399. package/dist/runtime/commandRunner.js +1 -0
  400. package/dist/runtime/context/combat.d.ts +51 -0
  401. package/dist/runtime/context/combat.js +130 -0
  402. package/dist/runtime/context/combatFx.d.ts +23 -0
  403. package/dist/runtime/context/combatFx.js +161 -0
  404. package/dist/runtime/context/deathLoot.d.ts +30 -0
  405. package/dist/runtime/context/deathLoot.js +39 -0
  406. package/dist/runtime/context/player.d.ts +48 -0
  407. package/dist/runtime/context/player.js +125 -0
  408. package/dist/runtime/context/registries.d.ts +13 -0
  409. package/dist/runtime/context/registries.js +84 -0
  410. package/dist/runtime/context/scene.d.ts +59 -0
  411. package/dist/runtime/context/scene.js +291 -0
  412. package/dist/runtime/context/snapshotCodecs.d.ts +12 -0
  413. package/dist/runtime/context/snapshotCodecs.js +26 -0
  414. package/dist/runtime/context/worldItems.d.ts +21 -0
  415. package/dist/runtime/context/worldItems.js +37 -0
  416. package/dist/runtime/descriptors/baseline.d.ts +48 -0
  417. package/dist/runtime/descriptors/baseline.js +157 -0
  418. package/dist/runtime/descriptors/features.d.ts +79 -0
  419. package/dist/runtime/descriptors/features.js +299 -0
  420. package/dist/runtime/gameContext.d.ts +2 -327
  421. package/dist/runtime/gameContext.js +273 -778
  422. package/dist/runtime/gameContextTypes.d.ts +467 -0
  423. package/dist/runtime/gameContextTypes.js +1 -0
  424. package/dist/runtime/gameRuntime.d.ts +1 -0
  425. package/dist/runtime/gameRuntime.js +1 -0
  426. package/dist/runtime/headlessRunner.d.ts +62 -0
  427. package/dist/runtime/headlessRunner.js +45 -0
  428. package/dist/runtime/hostPersistence.d.ts +12 -0
  429. package/dist/runtime/hostPersistence.js +12 -0
  430. package/dist/runtime/hostPolicy.d.ts +51 -0
  431. package/dist/runtime/hostPolicy.js +68 -0
  432. package/dist/runtime/hostedGameRunner.d.ts +11 -4
  433. package/dist/runtime/hostedGameRunner.js +27 -3
  434. package/dist/runtime/hostedWorldSession.d.ts +15 -5
  435. package/dist/runtime/hostedWorldSession.js +12 -4
  436. package/dist/runtime/inputSnapshot.d.ts +8 -3
  437. package/dist/runtime/inputSnapshot.js +6 -2
  438. package/dist/runtime/motionIntents.d.ts +11 -2
  439. package/dist/runtime/motionIntents.js +16 -2
  440. package/dist/runtime/perContext.d.ts +15 -0
  441. package/dist/runtime/perContext.js +21 -0
  442. package/dist/runtime/runtimeSave.d.ts +79 -0
  443. package/dist/runtime/runtimeSave.js +105 -0
  444. package/dist/runtime/save.d.ts +4 -0
  445. package/dist/runtime/save.js +4 -0
  446. package/dist/runtime/snapshot.d.ts +7 -0
  447. package/dist/runtime/snapshot.js +7 -0
  448. package/dist/runtime/visibility.d.ts +2 -1
  449. package/dist/runtime/visibility.js +2 -1
  450. package/dist/runtime/worldChannel.d.ts +7 -3
  451. package/dist/runtime/worldChannel.js +51 -6
  452. package/dist/runtime/worldMirror.d.ts +14 -2
  453. package/dist/runtime/worldMirror.js +15 -2
  454. package/dist/runtime/worldProjection.d.ts +47 -0
  455. package/dist/runtime/worldProjection.js +52 -0
  456. package/dist/runtime/worldReplication.d.ts +30 -7
  457. package/dist/runtime/worldReplication.js +41 -9
  458. package/dist/runtime/worldSnapshot.d.ts +42 -3
  459. package/dist/runtime/worldSnapshot.js +34 -7
  460. package/dist/scene/assetCatalog.d.ts +26 -0
  461. package/dist/scene/assetCatalog.js +4 -0
  462. package/dist/scene/assetDiagnostics.d.ts +69 -0
  463. package/dist/scene/assetDiagnostics.js +110 -0
  464. package/dist/scene/assetGenerator.d.ts +65 -0
  465. package/dist/scene/assetGenerator.js +64 -0
  466. package/dist/scene/assetSpace.d.ts +137 -0
  467. package/dist/scene/assetSpace.js +257 -0
  468. package/dist/scene/authoredTriggers.d.ts +219 -0
  469. package/dist/scene/authoredTriggers.js +454 -0
  470. package/dist/scene/behaviorRuntime.d.ts +75 -0
  471. package/dist/scene/behaviorRuntime.js +217 -0
  472. package/dist/scene/behaviors.d.ts +14 -2
  473. package/dist/scene/behaviors.js +7 -2
  474. package/dist/scene/bodyBind.d.ts +60 -0
  475. package/dist/scene/bodyBind.js +51 -0
  476. package/dist/scene/builtinSceneKinds.d.ts +5 -0
  477. package/dist/scene/builtinSceneKinds.js +67 -0
  478. package/dist/scene/colliders.d.ts +71 -1
  479. package/dist/scene/colliders.js +145 -1
  480. package/dist/scene/collisionMesh.d.ts +94 -0
  481. package/dist/scene/collisionMesh.js +699 -0
  482. package/dist/scene/companion.d.ts +147 -0
  483. package/dist/scene/companion.js +193 -0
  484. package/dist/scene/entityStats.d.ts +18 -11
  485. package/dist/scene/entityStats.js +21 -16
  486. package/dist/scene/entityStore.d.ts +12 -1
  487. package/dist/scene/entityStore.js +15 -0
  488. package/dist/scene/facing.d.ts +18 -0
  489. package/dist/scene/facing.js +26 -0
  490. package/dist/scene/modelSockets.d.ts +33 -0
  491. package/dist/scene/modelSockets.js +29 -0
  492. package/dist/scene/objectQuery.d.ts +2 -0
  493. package/dist/scene/objectQuery.js +2 -0
  494. package/dist/scene/objectStore.d.ts +4 -0
  495. package/dist/scene/objectStore.js +6 -0
  496. package/dist/scene/possession.d.ts +8 -0
  497. package/dist/scene/possession.js +14 -0
  498. package/dist/scene/roster.d.ts +3 -0
  499. package/dist/scene/roster.js +12 -0
  500. package/dist/scene/sceneKinds.d.ts +256 -0
  501. package/dist/scene/sceneKinds.js +218 -0
  502. package/dist/scene/sceneOwnership.d.ts +169 -0
  503. package/dist/scene/sceneOwnership.js +179 -0
  504. package/dist/scene/sceneRaycast.js +15 -0
  505. package/dist/scene/selectionBookmarks.d.ts +93 -0
  506. package/dist/scene/selectionBookmarks.js +122 -0
  507. package/dist/scene/vehicleSeat.d.ts +68 -0
  508. package/dist/scene/vehicleSeat.js +59 -0
  509. package/dist/sensor/concealment.d.ts +3 -0
  510. package/dist/sensor/concealment.js +3 -0
  511. package/dist/sensor/freezeMonitor.d.ts +1 -0
  512. package/dist/sensor/freezeMonitor.js +1 -0
  513. package/dist/sensor/frustumSensor.d.ts +7 -3
  514. package/dist/sensor/frustumSensor.js +7 -3
  515. package/dist/sensor/hiddenStateProbe.d.ts +5 -2
  516. package/dist/sensor/hiddenStateProbe.js +5 -2
  517. package/dist/sensor/recordingBuffer.d.ts +2 -1
  518. package/dist/sensor/recordingBuffer.js +2 -1
  519. package/dist/sensor/replayLoop.d.ts +6 -2
  520. package/dist/sensor/replayLoop.js +6 -2
  521. package/dist/sensor/revealQuery.d.ts +2 -1
  522. package/dist/sensor/revealQuery.js +2 -1
  523. package/dist/sensor/visionCone.d.ts +10 -3
  524. package/dist/sensor/visionCone.js +10 -3
  525. package/dist/session/contestedChannel.d.ts +1 -0
  526. package/dist/session/contestedChannel.js +1 -0
  527. package/dist/session/extraction.d.ts +1 -0
  528. package/dist/session/extraction.js +1 -0
  529. package/dist/session/roles.d.ts +6 -0
  530. package/dist/session/roles.js +6 -0
  531. package/dist/session/roundState.d.ts +8 -0
  532. package/dist/session/roundState.js +2 -0
  533. package/dist/settings/settingsModel.d.ts +1 -0
  534. package/dist/settings/settingsModel.js +1 -0
  535. package/dist/stats/accumulatorMeter.d.ts +6 -0
  536. package/dist/stats/accumulatorMeter.js +6 -0
  537. package/dist/stats/eventMeter.d.ts +5 -0
  538. package/dist/stats/eventMeter.js +5 -0
  539. package/dist/stats/rollCheck.d.ts +5 -0
  540. package/dist/stats/rollCheck.js +5 -0
  541. package/dist/stats/spawnLevelStats.d.ts +110 -0
  542. package/dist/stats/spawnLevelStats.js +140 -0
  543. package/dist/stats/statModifiers.d.ts +5 -0
  544. package/dist/stats/statModifiers.js +5 -0
  545. package/dist/stats/statPool.d.ts +70 -0
  546. package/dist/stats/statPool.js +59 -0
  547. package/dist/store/changeSignal.d.ts +3 -0
  548. package/dist/store/changeSignal.js +2 -0
  549. package/dist/store/defineKeyedStore.d.ts +38 -0
  550. package/dist/store/defineKeyedStore.js +42 -0
  551. package/dist/store/defineStore.d.ts +33 -0
  552. package/dist/store/defineStore.js +35 -0
  553. package/dist/store/observableKeyedStore.d.ts +7 -0
  554. package/dist/store/observableKeyedStore.js +35 -2
  555. package/dist/survival/decayMeter.d.ts +55 -0
  556. package/dist/survival/decayMeter.js +130 -57
  557. package/dist/survival/moodle.d.ts +2 -0
  558. package/dist/survival/regionHealth.d.ts +6 -0
  559. package/dist/survival/regionHealth.js +6 -3
  560. package/dist/tactics/fallingGrid.d.ts +4 -2
  561. package/dist/tactics/fallingGrid.js +4 -2
  562. package/dist/tactics/predictiveQuery.d.ts +3 -0
  563. package/dist/tactics/predictiveQuery.js +3 -0
  564. package/dist/tactics/snapshot.d.ts +2 -0
  565. package/dist/tactics/snapshot.js +2 -0
  566. package/dist/tactics/surface.d.ts +1 -0
  567. package/dist/tactics/surface.js +1 -0
  568. package/dist/tactics/tacticalGrid.d.ts +1 -0
  569. package/dist/tactics/tacticalGrid.js +1 -0
  570. package/dist/time/beatClock.d.ts +14 -4
  571. package/dist/time/beatClock.js +14 -4
  572. package/dist/time/calendarClock.d.ts +3 -0
  573. package/dist/time/calendarClock.js +3 -0
  574. package/dist/time/idleProgress.d.ts +4 -0
  575. package/dist/time/idleProgress.js +4 -0
  576. package/dist/time/simClock.d.ts +2 -0
  577. package/dist/time/simClock.js +20 -5
  578. package/dist/ui/actionModel.d.ts +110 -0
  579. package/dist/ui/actionModel.js +159 -0
  580. package/dist/ui/gameLayout.d.ts +30 -11
  581. package/dist/ui/gameLayout.js +30 -11
  582. package/dist/ui/hudDocument.d.ts +114 -0
  583. package/dist/ui/hudDocument.js +220 -0
  584. package/dist/ui/hudLayout.d.ts +38 -1
  585. package/dist/ui/hudLayout.js +220 -17
  586. package/dist/ui/selectionModel.d.ts +92 -0
  587. package/dist/ui/selectionModel.js +88 -0
  588. package/dist/ui/tooltipModel.d.ts +63 -0
  589. package/dist/ui/tooltipModel.js +82 -0
  590. package/dist/ui.d.ts +15 -0
  591. package/dist/ui.js +15 -0
  592. package/dist/visibility/bounds.d.ts +8 -1
  593. package/dist/visibility/bounds.js +8 -1
  594. package/dist/visibility/frustum.d.ts +12 -3
  595. package/dist/visibility/frustum.js +12 -3
  596. package/dist/work/jobQueue.d.ts +201 -0
  597. package/dist/work/jobQueue.js +253 -0
  598. package/dist/work/unitTraining.d.ts +58 -0
  599. package/dist/work/unitTraining.js +52 -0
  600. package/dist/world/authoredEntities.d.ts +29 -0
  601. package/dist/world/authoredEntities.js +29 -0
  602. package/dist/world/authoredObjects.d.ts +72 -0
  603. package/dist/world/authoredObjects.js +81 -0
  604. package/dist/world/authoredSpawn.d.ts +39 -0
  605. package/dist/world/authoredSpawn.js +37 -0
  606. package/dist/world/buildSockets.d.ts +152 -0
  607. package/dist/world/buildSockets.js +188 -0
  608. package/dist/world/buildingGenerator.d.ts +18 -0
  609. package/dist/world/buildingGenerator.js +62 -0
  610. package/dist/world/buildings.d.ts +5 -0
  611. package/dist/world/buildings.js +5 -0
  612. package/dist/world/catenary.d.ts +22 -0
  613. package/dist/world/catenary.js +69 -0
  614. package/dist/world/cityBlocks.d.ts +152 -0
  615. package/dist/world/cityBlocks.js +670 -0
  616. package/dist/world/cityContent.d.ts +77 -0
  617. package/dist/world/cityContent.js +261 -0
  618. package/dist/world/cityGeometry.d.ts +114 -0
  619. package/dist/world/cityGeometry.js +573 -0
  620. package/dist/world/cityKind.d.ts +314 -0
  621. package/dist/world/cityKind.js +1578 -0
  622. package/dist/world/features.d.ts +133 -10
  623. package/dist/world/features.js +66 -6
  624. package/dist/world/footprintGrid.d.ts +59 -0
  625. package/dist/world/footprintGrid.js +141 -0
  626. package/dist/world/geometry.d.ts +64 -0
  627. package/dist/world/geometry.js +94 -0
  628. package/dist/world/grassKind.d.ts +51 -0
  629. package/dist/world/grassKind.js +101 -0
  630. package/dist/world/markers.d.ts +50 -4
  631. package/dist/world/markers.js +49 -0
  632. package/dist/world/massing.js +1 -1
  633. package/dist/world/minimapBake.d.ts +78 -0
  634. package/dist/world/minimapBake.js +208 -0
  635. package/dist/world/minimapTrack.d.ts +17 -0
  636. package/dist/world/minimapTrack.js +22 -0
  637. package/dist/world/pathInstances.d.ts +27 -0
  638. package/dist/world/pathInstances.js +27 -0
  639. package/dist/world/pathNetwork.d.ts +159 -0
  640. package/dist/world/pathNetwork.js +684 -0
  641. package/dist/world/pathTerrain.d.ts +80 -0
  642. package/dist/world/pathTerrain.js +142 -0
  643. package/dist/world/place.d.ts +166 -0
  644. package/dist/world/place.js +96 -0
  645. package/dist/world/placeAsset.d.ts +81 -0
  646. package/dist/world/placeAsset.js +79 -0
  647. package/dist/world/placement.d.ts +4 -0
  648. package/dist/world/placement.js +4 -0
  649. package/dist/world/placementController.d.ts +6 -0
  650. package/dist/world/placementController.js +6 -0
  651. package/dist/world/poleLineKind.d.ts +40 -0
  652. package/dist/world/poleLineKind.js +97 -0
  653. package/dist/world/polyline.d.ts +34 -0
  654. package/dist/world/polyline.js +88 -0
  655. package/dist/world/resourceNode.d.ts +109 -0
  656. package/dist/world/resourceNode.js +140 -0
  657. package/dist/world/roads.d.ts +8 -0
  658. package/dist/world/roads.js +38 -0
  659. package/dist/world/scatter.js +2 -20
  660. package/dist/world/scatterRegion.d.ts +164 -0
  661. package/dist/world/scatterRegion.js +409 -0
  662. package/dist/world/sceneShapes.d.ts +43 -0
  663. package/dist/world/sceneShapes.js +1 -0
  664. package/dist/world/segment.d.ts +27 -0
  665. package/dist/world/segment.js +43 -0
  666. package/dist/world/soilKind.d.ts +48 -0
  667. package/dist/world/soilKind.js +92 -0
  668. package/dist/world/spatialSample.d.ts +241 -0
  669. package/dist/world/spatialSample.js +465 -0
  670. package/dist/world/streets.d.ts +29 -0
  671. package/dist/world/streets.js +55 -0
  672. package/dist/world/terraform.d.ts +213 -1
  673. package/dist/world/terraform.js +627 -22
  674. package/dist/world/terrain.d.ts +164 -20
  675. package/dist/world/terrain.js +325 -41
  676. package/dist/world/terrainGuides.d.ts +182 -0
  677. package/dist/world/terrainGuides.js +343 -0
  678. package/dist/world/vec2.d.ts +81 -0
  679. package/dist/world/vec2.js +128 -0
  680. package/dist/world/vec3.d.ts +49 -0
  681. package/dist/world/vec3.js +76 -0
  682. package/dist/world/vegetation.d.ts +71 -0
  683. package/dist/world/vegetation.js +151 -0
  684. package/dist/world/visibilityField.d.ts +154 -0
  685. package/dist/world/visibilityField.js +271 -0
  686. package/dist/world/volumetricClouds.d.ts +52 -0
  687. package/dist/world/volumetricClouds.js +43 -0
  688. package/dist/world/walls.d.ts +9 -0
  689. package/dist/world/walls.js +9 -0
  690. package/dist/world/waterKind.d.ts +55 -0
  691. package/dist/world/waterKind.js +99 -0
  692. package/dist/world.d.ts +141 -0
  693. package/dist/world.js +141 -0
  694. package/package.json +32 -8
  695. package/skills/game-design/SKILL.md +28 -0
  696. package/skills/game-design/agents/openai.yaml +4 -0
  697. package/skills/game-design/references/application-playbook.md +170 -0
  698. package/skills/game-design/references/field-guide.md +288 -0
  699. package/skills/jgengine/SKILL.md +54 -0
  700. package/skills/jgengine/api.md +527 -0
  701. package/skills/jgengine/capabilities.md +131 -0
  702. package/skills/jgengine/recipes/minimal-game.md +88 -0
  703. package/skills/jgengine-combat/SKILL.md +38 -0
  704. package/skills/jgengine-combat/api.md +585 -0
  705. package/skills/jgengine-combat/capabilities.md +213 -0
  706. package/skills/jgengine-combat/recipes/portable-stat-pools.md +122 -0
  707. package/skills/jgengine-combat/reference.md +108 -0
  708. package/skills/jgengine-gameplay/SKILL.md +39 -0
  709. package/skills/jgengine-gameplay/api.md +1920 -0
  710. package/skills/jgengine-gameplay/capabilities.md +454 -0
  711. package/skills/jgengine-gameplay/reference-systems.md +56 -0
  712. package/skills/jgengine-world/SKILL.md +51 -0
  713. package/skills/jgengine-world/api.md +3056 -0
  714. package/skills/jgengine-world/capabilities.md +476 -0
  715. package/skills/jgengine-world/recipes/commanding-entities.md +128 -0
  716. package/skills/jgengine-world/reference.md +261 -0
  717. package/dist/cartridge/runtime.d.ts +0 -15
  718. package/dist/cartridge/runtime.js +0 -556
  719. package/dist/cartridge/spec.d.ts +0 -188
  720. package/dist/cartridge/spec.js +0 -19
  721. package/dist/cartridge/validate.d.ts +0 -2
  722. package/dist/cartridge/validate.js +0 -78
  723. package/dist/store/engineStore.d.ts +0 -22
  724. package/dist/store/engineStore.js +0 -50
  725. package/dist/store/features.d.ts +0 -10
  726. package/dist/store/features.js +0 -23
  727. package/llms.txt +0 -5389
@@ -0,0 +1,276 @@
1
+ /** Renders a tunable value as TS source, or null when the value has no safe literal form.
2
+ * @internal
3
+ */
4
+ export function formatTunableLiteral(value) {
5
+ if (typeof value === "number")
6
+ return Number.isFinite(value) ? String(value) : null;
7
+ if (typeof value === "boolean")
8
+ return String(value);
9
+ if (typeof value === "string")
10
+ return JSON.stringify(value);
11
+ if (Array.isArray(value)) {
12
+ const parts = [];
13
+ for (const item of value) {
14
+ if (typeof item !== "number" || !Number.isFinite(item))
15
+ return null;
16
+ parts.push(String(item));
17
+ }
18
+ return `[${parts.join(", ")}]`;
19
+ }
20
+ return null;
21
+ }
22
+ function isIdentifierStart(ch) {
23
+ return /[A-Za-z_$]/.test(ch);
24
+ }
25
+ function isIdentifierPart(ch) {
26
+ return /[\w$]/.test(ch);
27
+ }
28
+ function skipWhitespaceAndComments(code, at) {
29
+ let i = at;
30
+ while (i < code.length) {
31
+ const ch = code[i];
32
+ if (ch === " " || ch === "\t" || ch === "\n" || ch === "\r") {
33
+ i += 1;
34
+ continue;
35
+ }
36
+ if (ch === "/" && code[i + 1] === "/") {
37
+ const end = code.indexOf("\n", i);
38
+ i = end < 0 ? code.length : end + 1;
39
+ continue;
40
+ }
41
+ if (ch === "/" && code[i + 1] === "*") {
42
+ const end = code.indexOf("*/", i + 2);
43
+ i = end < 0 ? code.length : end + 2;
44
+ continue;
45
+ }
46
+ break;
47
+ }
48
+ return i;
49
+ }
50
+ function skipString(code, at) {
51
+ const quote = code[at];
52
+ let i = at + 1;
53
+ while (i < code.length) {
54
+ const ch = code[i];
55
+ if (ch === "\\") {
56
+ i += 2;
57
+ continue;
58
+ }
59
+ if (ch === quote)
60
+ return i + 1;
61
+ if (quote === "`" && ch === "$" && code[i + 1] === "{") {
62
+ const end = skipBalanced(code, i + 1);
63
+ if (end < 0)
64
+ return -1;
65
+ i = end;
66
+ continue;
67
+ }
68
+ i += 1;
69
+ }
70
+ return -1;
71
+ }
72
+ const CLOSERS = { "{": "}", "[": "]", "(": ")" };
73
+ function skipBalanced(code, at) {
74
+ const open = code[at];
75
+ const close = CLOSERS[open];
76
+ if (close === undefined)
77
+ return -1;
78
+ let depth = 0;
79
+ let i = at;
80
+ while (i < code.length) {
81
+ const ch = code[i];
82
+ if (ch === '"' || ch === "'" || ch === "`") {
83
+ i = skipString(code, i);
84
+ if (i < 0)
85
+ return -1;
86
+ continue;
87
+ }
88
+ if (ch === "/" && (code[i + 1] === "/" || code[i + 1] === "*")) {
89
+ i = skipWhitespaceAndComments(code, i);
90
+ continue;
91
+ }
92
+ if (ch === "{" || ch === "[" || ch === "(")
93
+ depth += 1;
94
+ else if (ch === "}" || ch === "]" || ch === ")") {
95
+ depth -= 1;
96
+ if (depth === 0)
97
+ return i + 1;
98
+ }
99
+ i += 1;
100
+ }
101
+ return -1;
102
+ }
103
+ function trimTrailingWhitespace(code, start, end) {
104
+ let i = end;
105
+ while (i > start && /\s/.test(code[i - 1]))
106
+ i -= 1;
107
+ return i;
108
+ }
109
+ function scalarEnd(code, at) {
110
+ let i = at;
111
+ while (i < code.length) {
112
+ const ch = code[i];
113
+ if (ch === '"' || ch === "'" || ch === "`") {
114
+ i = skipString(code, i);
115
+ if (i < 0)
116
+ return -1;
117
+ continue;
118
+ }
119
+ if (ch === "{" || ch === "[" || ch === "(") {
120
+ i = skipBalanced(code, i);
121
+ if (i < 0)
122
+ return -1;
123
+ continue;
124
+ }
125
+ if (ch === "," || ch === "}" || ch === "]" || ch === ";" || ch === ")") {
126
+ return trimTrailingWhitespace(code, at, i);
127
+ }
128
+ if (ch === "/" && (code[i + 1] === "/" || code[i + 1] === "*")) {
129
+ return trimTrailingWhitespace(code, at, i);
130
+ }
131
+ i += 1;
132
+ }
133
+ return trimTrailingWhitespace(code, at, i);
134
+ }
135
+ function readPropertyName(code, at) {
136
+ const ch = code[at];
137
+ if (ch === '"' || ch === "'") {
138
+ const end = skipString(code, at);
139
+ if (end < 0)
140
+ return null;
141
+ return { name: code.slice(at + 1, end - 1), end };
142
+ }
143
+ if (isIdentifierStart(ch) || /[0-9]/.test(ch)) {
144
+ let i = at;
145
+ while (i < code.length && (isIdentifierPart(code[i]) || code[i] === "."))
146
+ i += 1;
147
+ return { name: code.slice(at, i), end: i };
148
+ }
149
+ return null;
150
+ }
151
+ function findInObject(code, objStart, segment) {
152
+ let i = objStart + 1;
153
+ while (i < code.length) {
154
+ i = skipWhitespaceAndComments(code, i);
155
+ if (i >= code.length || code[i] === "}")
156
+ return null;
157
+ if (code[i] === ",") {
158
+ i += 1;
159
+ continue;
160
+ }
161
+ if (code.startsWith("...", i)) {
162
+ const end = scalarEnd(code, i + 3);
163
+ if (end < 0)
164
+ return null;
165
+ i = end;
166
+ continue;
167
+ }
168
+ const prop = readPropertyName(code, i);
169
+ if (prop === null)
170
+ return null;
171
+ let j = skipWhitespaceAndComments(code, prop.end);
172
+ if (code[j] === "(") {
173
+ const afterParams = skipBalanced(code, j);
174
+ if (afterParams < 0)
175
+ return null;
176
+ j = skipWhitespaceAndComments(code, afterParams);
177
+ if (code[j] !== "{")
178
+ return null;
179
+ const afterBody = skipBalanced(code, j);
180
+ if (afterBody < 0)
181
+ return null;
182
+ i = afterBody;
183
+ continue;
184
+ }
185
+ if (code[j] !== ":") {
186
+ if (prop.name === segment)
187
+ return null;
188
+ i = j;
189
+ continue;
190
+ }
191
+ const valueStart = skipWhitespaceAndComments(code, j + 1);
192
+ const first = code[valueStart];
193
+ const valueEnd = first === "{" || first === "[" || first === "("
194
+ ? skipBalanced(code, valueStart)
195
+ : scalarEnd(code, valueStart);
196
+ if (valueEnd < 0)
197
+ return null;
198
+ if (prop.name === segment)
199
+ return { start: valueStart, end: valueEnd };
200
+ i = valueEnd;
201
+ }
202
+ return null;
203
+ }
204
+ function findInArray(code, arrStart, index) {
205
+ let i = arrStart + 1;
206
+ let at = 0;
207
+ while (i < code.length) {
208
+ i = skipWhitespaceAndComments(code, i);
209
+ if (i >= code.length || code[i] === "]")
210
+ return null;
211
+ const first = code[i];
212
+ const end = first === "{" || first === "[" || first === "("
213
+ ? skipBalanced(code, i)
214
+ : scalarEnd(code, i);
215
+ if (end < 0)
216
+ return null;
217
+ if (at === index)
218
+ return { start: i, end };
219
+ at += 1;
220
+ i = skipWhitespaceAndComments(code, end);
221
+ if (code[i] === ",")
222
+ i += 1;
223
+ }
224
+ return null;
225
+ }
226
+ function exportInitializerStart(code, exportName) {
227
+ const pattern = new RegExp(`export\\s+(?:const|let)\\s+${exportName.replace(/[$]/g, "\\$&")}\\b[^=;\\n]*=`);
228
+ const match = pattern.exec(code);
229
+ if (match === null)
230
+ return -1;
231
+ return skipWhitespaceAndComments(code, match.index + match[0].length);
232
+ }
233
+ /**
234
+ * Rewrites one tunable's literal inside TS source: `exportName` names the `export const/let`,
235
+ * `path` descends object keys and array indices to the scalar, and `value` becomes the new
236
+ * literal. Returns the updated source, or null when the target cannot be safely located.
237
+ * @internal
238
+ */
239
+ export function rewriteTunableExport(code, exportName, path, value) {
240
+ const literal = formatTunableLiteral(value);
241
+ if (literal === null)
242
+ return null;
243
+ const start = exportInitializerStart(code, exportName);
244
+ if (start < 0)
245
+ return null;
246
+ let span;
247
+ const first = code[start];
248
+ if (path.length === 0) {
249
+ const end = first === "{" || first === "[" || first === "("
250
+ ? skipBalanced(code, start)
251
+ : scalarEnd(code, start);
252
+ if (end < 0)
253
+ return null;
254
+ span = { start, end };
255
+ }
256
+ else {
257
+ let container = { start, end: start };
258
+ if (first !== "{" && first !== "[")
259
+ return null;
260
+ let cursor = start;
261
+ for (const segment of path) {
262
+ const ch = code[cursor];
263
+ const found = ch === "{"
264
+ ? findInObject(code, cursor, segment)
265
+ : ch === "[" && /^\d+$/.test(segment)
266
+ ? findInArray(code, cursor, Number(segment))
267
+ : null;
268
+ if (found === null)
269
+ return null;
270
+ container = found;
271
+ cursor = found.start;
272
+ }
273
+ span = container;
274
+ }
275
+ return `${code.slice(0, span.start)}${literal}${code.slice(span.end)}`;
276
+ }
@@ -0,0 +1,46 @@
1
+ /** One write request the dev save endpoint accepts: a scene document or tunable deltas. */
2
+ export type SaveEndpointRequest = {
3
+ kind: "editor-document";
4
+ gameId: string;
5
+ json: string;
6
+ } | {
7
+ kind: "tunables";
8
+ gameId: string;
9
+ deltas: readonly {
10
+ table: string;
11
+ key: string;
12
+ value: unknown;
13
+ }[];
14
+ };
15
+ /** Result envelope the dev save endpoint returns for every write request. */
16
+ export interface SaveEndpointResponse {
17
+ ok: boolean;
18
+ path?: string;
19
+ applied?: number;
20
+ skipped?: readonly {
21
+ table: string;
22
+ key: string;
23
+ reason: string;
24
+ }[];
25
+ error?: string;
26
+ }
27
+ /** Where dev-time saves land: the endpoint URL plus the Games/<gameId> directory it targets. */
28
+ export interface SaveEndpointInfo {
29
+ url: string;
30
+ gameId: string;
31
+ }
32
+ /** True once a bundler or Node marks the build as production — the signal
33
+ * `installSaveEndpoint` refuses to run under, even if a caller forgot its own
34
+ * `import.meta.env.DEV` guard.
35
+ * @internal
36
+ */
37
+ export declare function isProductionEnvironment(): boolean;
38
+ /** Publishes the dev-server save endpoint so editor and devtools UIs show Save buttons.
39
+ * No-ops in a production build even if the caller forgot its own DEV guard.
40
+ * @internal
41
+ */
42
+ export declare function installSaveEndpoint(url: string, gameId: string): () => void;
43
+ /** Returns the installed dev save endpoint, or null when saves cannot reach disk.
44
+ * @internal
45
+ */
46
+ export declare function getSaveEndpoint(): SaveEndpointInfo | null;
@@ -0,0 +1,48 @@
1
+ const GLOBAL_KEY = "__jgengineSaveEndpoint";
2
+ function readImportMetaEnv() {
3
+ try {
4
+ const meta = import.meta;
5
+ return meta.env ?? {};
6
+ }
7
+ catch {
8
+ return {};
9
+ }
10
+ }
11
+ function readProcessNodeEnv() {
12
+ const proc = globalThis.process;
13
+ return proc?.env?.NODE_ENV;
14
+ }
15
+ /** True once a bundler or Node marks the build as production — the signal
16
+ * `installSaveEndpoint` refuses to run under, even if a caller forgot its own
17
+ * `import.meta.env.DEV` guard.
18
+ * @internal
19
+ */
20
+ export function isProductionEnvironment() {
21
+ const env = readImportMetaEnv();
22
+ if (env.PROD === true)
23
+ return true;
24
+ if (env.DEV === true)
25
+ return false;
26
+ return (env.NODE_ENV ?? readProcessNodeEnv()) === "production";
27
+ }
28
+ /** Publishes the dev-server save endpoint so editor and devtools UIs show Save buttons.
29
+ * No-ops in a production build even if the caller forgot its own DEV guard.
30
+ * @internal
31
+ */
32
+ export function installSaveEndpoint(url, gameId) {
33
+ if (isProductionEnvironment())
34
+ return () => { };
35
+ const root = globalThis;
36
+ const info = { url, gameId };
37
+ root[GLOBAL_KEY] = info;
38
+ return () => {
39
+ if (root[GLOBAL_KEY] === info)
40
+ delete root[GLOBAL_KEY];
41
+ };
42
+ }
43
+ /** Returns the installed dev save endpoint, or null when saves cannot reach disk.
44
+ * @internal
45
+ */
46
+ export function getSaveEndpoint() {
47
+ return globalThis[GLOBAL_KEY] ?? null;
48
+ }
@@ -2,8 +2,11 @@ export interface TunableTransformResult {
2
2
  code: string;
3
3
  bound: string[];
4
4
  }
5
+ /** @internal */
5
6
  export declare function transformTunableExports(code: string, table: string): TunableTransformResult;
7
+ /** @internal */
6
8
  export declare function tunableModuleTable(id: string): string | null;
9
+ /** @internal */
7
10
  export declare function tunableDiscoveryPlugin(): {
8
11
  name: string;
9
12
  enforce: "pre";
@@ -1,4 +1,5 @@
1
1
  const TUNABLE_EXPORT_PATTERN = /^export const ([A-Za-z_$][\w$]*)((?:\s*:\s*[^=;\r\n]+?)?)\s*=\s*("#(?:[0-9a-fA-F]{3,8})"|'#(?:[0-9a-fA-F]{3,8})'|[^"'`;{}<>\r\n]+?)\s*;[ \t]*$/gm;
2
+ /** @internal */
2
3
  export function transformTunableExports(code, table) {
3
4
  const bound = [];
4
5
  const rewritten = code.replace(TUNABLE_EXPORT_PATTERN, (_match, name, annotation, expression) => {
@@ -17,12 +18,14 @@ export function transformTunableExports(code, table) {
17
18
  }
18
19
  const GAME_MODULE_PATTERN = /[/\\]Games[/\\][^/\\]+[/\\]src[/\\](.+)\.(ts|tsx)$/;
19
20
  const SKIP_MODULE_PATTERN = /(\.test\.|[/\\]main\.tsx$)/;
21
+ /** @internal */
20
22
  export function tunableModuleTable(id) {
21
23
  if (SKIP_MODULE_PATTERN.test(id))
22
24
  return null;
23
25
  const match = GAME_MODULE_PATTERN.exec(id);
24
26
  return match === null ? null : match[1].replace(/\\/g, "/");
25
27
  }
28
+ /** @internal */
26
29
  export function tunableDiscoveryPlugin() {
27
30
  return {
28
31
  name: "jgengine-tunable-discovery",
@@ -56,42 +56,70 @@ export interface ResolvedAxisBounds {
56
56
  readonly max: readonly number[];
57
57
  readonly step: readonly number[];
58
58
  }
59
+ /** @internal */
59
60
  export declare function isFiniteNumber(value: unknown): value is number;
61
+ /** @internal */
60
62
  export declare function escapePathSegment(segment: string): string;
63
+ /** @internal */
61
64
  export declare function unescapePathSegment(segment: string): string;
65
+ /** @internal */
62
66
  export declare function joinTunablePath(parent: string, segment: string): string;
67
+ /** @internal */
63
68
  export declare function splitTunablePath(path: string): string[];
69
+ /** @internal */
64
70
  export declare function parseColor(input: unknown): NormalizedColor | null;
71
+ /** @internal */
65
72
  export declare function formatColor(rgb: string, alpha: number, withAlpha: boolean): string | null;
73
+ /** @internal */
66
74
  export declare function normalizeColorValue(input: unknown, forceAlpha?: boolean): string | null;
75
+ /** @internal */
67
76
  export declare function isColorString(value: unknown): value is string;
77
+ /** @internal */
68
78
  export declare function vecLength(kind: "vec2" | "vec3" | "vec4"): number;
79
+ /** @internal */
69
80
  export declare function isNumericTuple(value: unknown, length: number): value is number[];
81
+ /** @internal */
70
82
  export declare function isIntervalShape(value: unknown): value is TunableInterval;
83
+ /** @internal */
71
84
  export declare function expandAxisMeta(length: number, labels: readonly string[] | undefined, min: number | readonly number[] | undefined, max: number | readonly number[] | undefined, step: number | readonly number[] | undefined, sample: readonly number[]): ResolvedAxisBounds;
85
+ /** @internal */
72
86
  export declare function clampAxisValue(value: number, min: number, max: number): number;
87
+ /** @internal */
73
88
  export declare function parseVec(kind: "vec2" | "vec3" | "vec4", raw: unknown, bounds: ResolvedAxisBounds): number[] | null;
89
+ /** @internal */
74
90
  export declare function parseInterval(raw: unknown, options: {
75
91
  min?: number;
76
92
  max?: number;
77
93
  step?: number;
78
94
  integer?: boolean;
79
95
  }): TunableInterval | null;
96
+ /** @internal */
80
97
  export declare function convertAngle(value: number, from: AngleUnit, to: AngleUnit): number;
98
+ /** @internal */
81
99
  export declare function normalizeAngle(value: number, unit: AngleUnit, options: {
82
100
  min?: number;
83
101
  max?: number;
84
102
  wrap?: boolean;
85
103
  }): number;
104
+ /** @internal */
86
105
  export declare function resolveChoices<T>(options: readonly T[] | undefined, choices: readonly TunableChoice<T>[] | undefined): readonly TunableChoice<T>[] | undefined;
106
+ /** @internal */
87
107
  export declare function choiceValues(choices: readonly TunableChoice[] | undefined): readonly unknown[] | undefined;
108
+ /** @internal */
88
109
  export declare function findChoice(choices: readonly TunableChoice[] | undefined, raw: unknown): TunableChoice | undefined;
110
+ /** @internal */
89
111
  export declare function parseEnumValue(raw: unknown, choices: readonly TunableChoice[] | undefined): unknown | null;
112
+ /** @internal */
90
113
  export declare function coerceSelectWrite(raw: unknown, choices: readonly TunableChoice[] | undefined, options: readonly unknown[] | undefined): unknown | null;
114
+ /** @internal */
91
115
  export declare function inferKind(initial: unknown, options?: TunableOptions): DevtoolsControlKind;
116
+ /** @internal */
92
117
  export declare function discoverableKind(value: unknown, meta?: ScanFieldMeta): DevtoolsControlKind | null;
118
+ /** @internal */
93
119
  export declare function isScannableContainer(value: unknown): value is Record<string, unknown>;
120
+ /** @internal */
94
121
  export declare function ownWritableDataKeys(target: Record<string, unknown>): string[];
122
+ /** @internal */
95
123
  export declare function sliderBounds(initial: number, options: {
96
124
  min?: number;
97
125
  max?: number;
@@ -101,6 +129,7 @@ export declare function sliderBounds(initial: number, options: {
101
129
  max: number;
102
130
  step: number;
103
131
  };
132
+ /** @internal */
104
133
  export declare function validateControlValue(kind: DevtoolsControlKind, raw: unknown, context: {
105
134
  min?: number;
106
135
  max?: number;
@@ -136,5 +165,7 @@ export interface OverrideParseResult {
136
165
  readonly overrides: DevtoolsOverrides | null;
137
166
  readonly diagnostics: readonly string[];
138
167
  }
168
+ /** @internal */
139
169
  export declare function parseOverridesPayload(raw: unknown): OverrideParseResult;
170
+ /** @internal */
140
171
  export declare function cloneValue<T>(value: T): T;