@nice2dev/game-engine 0.1.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 (519) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/LICENSE +21 -0
  3. package/README.md +105 -0
  4. package/dist/cjs/accessibility/Accessibility.js +162 -0
  5. package/dist/cjs/accessibility/Accessibility.js.map +1 -0
  6. package/dist/cjs/ai/AI.js +321 -0
  7. package/dist/cjs/ai/AI.js.map +1 -0
  8. package/dist/cjs/animation/Animation.js +233 -0
  9. package/dist/cjs/animation/Animation.js.map +1 -0
  10. package/dist/cjs/audio/AudioAdvanced.js +262 -0
  11. package/dist/cjs/audio/AudioAdvanced.js.map +1 -0
  12. package/dist/cjs/audio/AudioManager.js +248 -0
  13. package/dist/cjs/audio/AudioManager.js.map +1 -0
  14. package/dist/cjs/core/EventBus.js +63 -0
  15. package/dist/cjs/core/EventBus.js.map +1 -0
  16. package/dist/cjs/core/GameClock.js +70 -0
  17. package/dist/cjs/core/GameClock.js.map +1 -0
  18. package/dist/cjs/core/GameConfig.js +86 -0
  19. package/dist/cjs/core/GameConfig.js.map +1 -0
  20. package/dist/cjs/core/GameLoop.js +93 -0
  21. package/dist/cjs/core/GameLoop.js.map +1 -0
  22. package/dist/cjs/core/ServiceLocator.js +73 -0
  23. package/dist/cjs/core/ServiceLocator.js.map +1 -0
  24. package/dist/cjs/core/Validation.js +119 -0
  25. package/dist/cjs/core/Validation.js.map +1 -0
  26. package/dist/cjs/core/math.js +116 -0
  27. package/dist/cjs/core/math.js.map +1 -0
  28. package/dist/cjs/devtools/DevTools.js +560 -0
  29. package/dist/cjs/devtools/DevTools.js.map +1 -0
  30. package/dist/cjs/devtools/DeveloperExperience.js +562 -0
  31. package/dist/cjs/devtools/DeveloperExperience.js.map +1 -0
  32. package/dist/cjs/docs/DocGenerator.js +357 -0
  33. package/dist/cjs/docs/DocGenerator.js.map +1 -0
  34. package/dist/cjs/ecs/World.js +280 -0
  35. package/dist/cjs/ecs/World.js.map +1 -0
  36. package/dist/cjs/editor/AdvancedEditor.js +149 -0
  37. package/dist/cjs/editor/AdvancedEditor.js.map +1 -0
  38. package/dist/cjs/editor/AssetManager.js +190 -0
  39. package/dist/cjs/editor/AssetManager.js.map +1 -0
  40. package/dist/cjs/editor/DebugTools.js +187 -0
  41. package/dist/cjs/editor/DebugTools.js.map +1 -0
  42. package/dist/cjs/editor/NiceGameEditor.js +361 -0
  43. package/dist/cjs/editor/NiceGameEditor.js.map +1 -0
  44. package/dist/cjs/editor/SceneEditor.js +223 -0
  45. package/dist/cjs/editor/SceneEditor.js.map +1 -0
  46. package/dist/cjs/engine/NiceGameEngine.js +172 -0
  47. package/dist/cjs/engine/NiceGameEngine.js.map +1 -0
  48. package/dist/cjs/enterprise/Enterprise.js +258 -0
  49. package/dist/cjs/enterprise/Enterprise.js.map +1 -0
  50. package/dist/cjs/i18n/I18n.js +634 -0
  51. package/dist/cjs/i18n/I18n.js.map +1 -0
  52. package/dist/cjs/i18n/useTranslation.js +100 -0
  53. package/dist/cjs/i18n/useTranslation.js.map +1 -0
  54. package/dist/cjs/index.js +526 -0
  55. package/dist/cjs/index.js.map +1 -0
  56. package/dist/cjs/input/GamepadNavigation.js +181 -0
  57. package/dist/cjs/input/GamepadNavigation.js.map +1 -0
  58. package/dist/cjs/input/InputManager.js +404 -0
  59. package/dist/cjs/input/InputManager.js.map +1 -0
  60. package/dist/cjs/input/useGamepads.js +86 -0
  61. package/dist/cjs/input/useGamepads.js.map +1 -0
  62. package/dist/cjs/kids/KidMode.js +670 -0
  63. package/dist/cjs/kids/KidMode.js.map +1 -0
  64. package/dist/cjs/kids/KidTools.js +533 -0
  65. package/dist/cjs/kids/KidTools.js.map +1 -0
  66. package/dist/cjs/monetization/Monetization.js +197 -0
  67. package/dist/cjs/monetization/Monetization.js.map +1 -0
  68. package/dist/cjs/multiplayer/LocalMultiplayer.js +288 -0
  69. package/dist/cjs/multiplayer/LocalMultiplayer.js.map +1 -0
  70. package/dist/cjs/multiplayer/MiniGameTypes.js +70 -0
  71. package/dist/cjs/multiplayer/MiniGameTypes.js.map +1 -0
  72. package/dist/cjs/network/MultiplayerTransport.js +109 -0
  73. package/dist/cjs/network/MultiplayerTransport.js.map +1 -0
  74. package/dist/cjs/network/Networking.js +569 -0
  75. package/dist/cjs/network/Networking.js.map +1 -0
  76. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/AbortController.js +32 -0
  77. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/AbortController.js.map +1 -0
  78. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/AccessTokenHttpClient.js +51 -0
  79. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/AccessTokenHttpClient.js.map +1 -0
  80. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js +46 -0
  81. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js.map +1 -0
  82. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js +18 -0
  83. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js.map +1 -0
  84. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Errors.js +145 -0
  85. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Errors.js.map +1 -0
  86. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js +161 -0
  87. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js.map +1 -0
  88. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js +56 -0
  89. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js.map +1 -0
  90. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HeaderNames.js +11 -0
  91. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HeaderNames.js.map +1 -0
  92. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HttpClient.js +52 -0
  93. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HttpClient.js.map +1 -0
  94. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HttpConnection.js +576 -0
  95. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HttpConnection.js.map +1 -0
  96. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HubConnection.js +956 -0
  97. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HubConnection.js.map +1 -0
  98. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js +149 -0
  99. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js.map +1 -0
  100. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js +25 -0
  101. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js.map +1 -0
  102. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ILogger.js +27 -0
  103. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ILogger.js.map +1 -0
  104. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ITransport.js +26 -0
  105. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ITransport.js.map +1 -0
  106. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js +124 -0
  107. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js.map +1 -0
  108. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Loggers.js +17 -0
  109. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Loggers.js.map +1 -0
  110. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js +188 -0
  111. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js.map +1 -0
  112. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/MessageBuffer.js +199 -0
  113. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/MessageBuffer.js.map +1 -0
  114. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js +108 -0
  115. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js.map +1 -0
  116. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Subject.js +38 -0
  117. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Subject.js.map +1 -0
  118. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js +24 -0
  119. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js.map +1 -0
  120. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Utils.js +264 -0
  121. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Utils.js.map +1 -0
  122. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js +160 -0
  123. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js.map +1 -0
  124. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js +88 -0
  125. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js.map +1 -0
  126. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/index.js +50 -0
  127. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/index.js.map +1 -0
  128. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/pkg-version.js +6 -0
  129. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/pkg-version.js.map +1 -0
  130. package/dist/cjs/pathfinding/Pathfinding.js +255 -0
  131. package/dist/cjs/pathfinding/Pathfinding.js.map +1 -0
  132. package/dist/cjs/performance/BenchmarkSuite.js +318 -0
  133. package/dist/cjs/performance/BenchmarkSuite.js.map +1 -0
  134. package/dist/cjs/performance/Performance.js +180 -0
  135. package/dist/cjs/performance/Performance.js.map +1 -0
  136. package/dist/cjs/performance/PerformanceAdvanced.js +628 -0
  137. package/dist/cjs/performance/PerformanceAdvanced.js.map +1 -0
  138. package/dist/cjs/physics/PhysicsAdvanced.js +432 -0
  139. package/dist/cjs/physics/PhysicsAdvanced.js.map +1 -0
  140. package/dist/cjs/physics/PhysicsEngine2D.js +445 -0
  141. package/dist/cjs/physics/PhysicsEngine2D.js.map +1 -0
  142. package/dist/cjs/plugins/PluginSDK.js +488 -0
  143. package/dist/cjs/plugins/PluginSDK.js.map +1 -0
  144. package/dist/cjs/plugins/PluginTestKit.js +368 -0
  145. package/dist/cjs/plugins/PluginTestKit.js.map +1 -0
  146. package/dist/cjs/procedural/Procedural.js +288 -0
  147. package/dist/cjs/procedural/Procedural.js.map +1 -0
  148. package/dist/cjs/procedural/WorldBuilding.js +246 -0
  149. package/dist/cjs/procedural/WorldBuilding.js.map +1 -0
  150. package/dist/cjs/release/MobileExport.js +149 -0
  151. package/dist/cjs/release/MobileExport.js.map +1 -0
  152. package/dist/cjs/release/Release.js +151 -0
  153. package/dist/cjs/release/Release.js.map +1 -0
  154. package/dist/cjs/rendering/Camera2D.js +129 -0
  155. package/dist/cjs/rendering/Camera2D.js.map +1 -0
  156. package/dist/cjs/rendering/Renderer2D.js +337 -0
  157. package/dist/cjs/rendering/Renderer2D.js.map +1 -0
  158. package/dist/cjs/runtime3d/Runtime3D.js +381 -0
  159. package/dist/cjs/runtime3d/Runtime3D.js.map +1 -0
  160. package/dist/cjs/runtime3d/SceneEditor3D.js +316 -0
  161. package/dist/cjs/runtime3d/SceneEditor3D.js.map +1 -0
  162. package/dist/cjs/scene/SceneManager.js +186 -0
  163. package/dist/cjs/scene/SceneManager.js.map +1 -0
  164. package/dist/cjs/scripting/NodeGraph.js +573 -0
  165. package/dist/cjs/scripting/NodeGraph.js.map +1 -0
  166. package/dist/cjs/social/Social.js +91 -0
  167. package/dist/cjs/social/Social.js.map +1 -0
  168. package/dist/cjs/templates/ActionTemplates.js +229 -0
  169. package/dist/cjs/templates/ActionTemplates.js.map +1 -0
  170. package/dist/cjs/templates/PartyTemplates.js +221 -0
  171. package/dist/cjs/templates/PartyTemplates.js.map +1 -0
  172. package/dist/cjs/templates/PuzzleTemplates.js +283 -0
  173. package/dist/cjs/templates/PuzzleTemplates.js.map +1 -0
  174. package/dist/cjs/templates/RPGTemplates.js +209 -0
  175. package/dist/cjs/templates/RPGTemplates.js.map +1 -0
  176. package/dist/cjs/templates/SportsTemplates.js +272 -0
  177. package/dist/cjs/templates/SportsTemplates.js.map +1 -0
  178. package/dist/cjs/templates/StrategyTemplates.js +173 -0
  179. package/dist/cjs/templates/StrategyTemplates.js.map +1 -0
  180. package/dist/cjs/templates/WaveDefense.js +470 -0
  181. package/dist/cjs/templates/WaveDefense.js.map +1 -0
  182. package/dist/cjs/tilemap/Tilemap.js +208 -0
  183. package/dist/cjs/tilemap/Tilemap.js.map +1 -0
  184. package/dist/cjs/tutorials/TutorialBranching.js +392 -0
  185. package/dist/cjs/tutorials/TutorialBranching.js.map +1 -0
  186. package/dist/cjs/tutorials/TutorialEngine.js +903 -0
  187. package/dist/cjs/tutorials/TutorialEngine.js.map +1 -0
  188. package/dist/cjs/tutorials/TutorialOverlay.js +602 -0
  189. package/dist/cjs/tutorials/TutorialOverlay.js.map +1 -0
  190. package/dist/cjs/tutorials/content/Tutorials_T05_T08.js +816 -0
  191. package/dist/cjs/tutorials/content/Tutorials_T05_T08.js.map +1 -0
  192. package/dist/cjs/tutorials/content/Tutorials_T09_T11.js +741 -0
  193. package/dist/cjs/tutorials/content/Tutorials_T09_T11.js.map +1 -0
  194. package/dist/cjs/tutorials/content/Tutorials_T12_T15.js +786 -0
  195. package/dist/cjs/tutorials/content/Tutorials_T12_T15.js.map +1 -0
  196. package/dist/cjs/ui/GameUI.js +312 -0
  197. package/dist/cjs/ui/GameUI.js.map +1 -0
  198. package/dist/cjs/xr/ARVR.js +197 -0
  199. package/dist/cjs/xr/ARVR.js.map +1 -0
  200. package/dist/esm/accessibility/Accessibility.js +153 -0
  201. package/dist/esm/accessibility/Accessibility.js.map +1 -0
  202. package/dist/esm/ai/AI.js +302 -0
  203. package/dist/esm/ai/AI.js.map +1 -0
  204. package/dist/esm/animation/Animation.js +227 -0
  205. package/dist/esm/animation/Animation.js.map +1 -0
  206. package/dist/esm/audio/AudioAdvanced.js +243 -0
  207. package/dist/esm/audio/AudioAdvanced.js.map +1 -0
  208. package/dist/esm/audio/AudioManager.js +246 -0
  209. package/dist/esm/audio/AudioManager.js.map +1 -0
  210. package/dist/esm/core/EventBus.js +61 -0
  211. package/dist/esm/core/EventBus.js.map +1 -0
  212. package/dist/esm/core/GameClock.js +68 -0
  213. package/dist/esm/core/GameClock.js.map +1 -0
  214. package/dist/esm/core/GameConfig.js +80 -0
  215. package/dist/esm/core/GameConfig.js.map +1 -0
  216. package/dist/esm/core/GameLoop.js +91 -0
  217. package/dist/esm/core/GameLoop.js.map +1 -0
  218. package/dist/esm/core/ServiceLocator.js +70 -0
  219. package/dist/esm/core/ServiceLocator.js.map +1 -0
  220. package/dist/esm/core/Validation.js +108 -0
  221. package/dist/esm/core/Validation.js.map +1 -0
  222. package/dist/esm/core/math.js +114 -0
  223. package/dist/esm/core/math.js.map +1 -0
  224. package/dist/esm/devtools/DevTools.js +555 -0
  225. package/dist/esm/devtools/DevTools.js.map +1 -0
  226. package/dist/esm/devtools/DeveloperExperience.js +547 -0
  227. package/dist/esm/devtools/DeveloperExperience.js.map +1 -0
  228. package/dist/esm/docs/DocGenerator.js +353 -0
  229. package/dist/esm/docs/DocGenerator.js.map +1 -0
  230. package/dist/esm/ecs/World.js +276 -0
  231. package/dist/esm/ecs/World.js.map +1 -0
  232. package/dist/esm/editor/AdvancedEditor.js +141 -0
  233. package/dist/esm/editor/AdvancedEditor.js.map +1 -0
  234. package/dist/esm/editor/AssetManager.js +188 -0
  235. package/dist/esm/editor/AssetManager.js.map +1 -0
  236. package/dist/esm/editor/DebugTools.js +179 -0
  237. package/dist/esm/editor/DebugTools.js.map +1 -0
  238. package/dist/esm/editor/NiceGameEditor.js +355 -0
  239. package/dist/esm/editor/NiceGameEditor.js.map +1 -0
  240. package/dist/esm/editor/SceneEditor.js +209 -0
  241. package/dist/esm/editor/SceneEditor.js.map +1 -0
  242. package/dist/esm/engine/NiceGameEngine.js +170 -0
  243. package/dist/esm/engine/NiceGameEngine.js.map +1 -0
  244. package/dist/esm/enterprise/Enterprise.js +246 -0
  245. package/dist/esm/enterprise/Enterprise.js.map +1 -0
  246. package/dist/esm/i18n/I18n.js +622 -0
  247. package/dist/esm/i18n/I18n.js.map +1 -0
  248. package/dist/esm/i18n/useTranslation.js +95 -0
  249. package/dist/esm/i18n/useTranslation.js.map +1 -0
  250. package/dist/esm/index.js +71 -0
  251. package/dist/esm/index.js.map +1 -0
  252. package/dist/esm/input/GamepadNavigation.js +178 -0
  253. package/dist/esm/input/GamepadNavigation.js.map +1 -0
  254. package/dist/esm/input/InputManager.js +399 -0
  255. package/dist/esm/input/InputManager.js.map +1 -0
  256. package/dist/esm/input/useGamepads.js +83 -0
  257. package/dist/esm/input/useGamepads.js.map +1 -0
  258. package/dist/esm/kids/KidMode.js +663 -0
  259. package/dist/esm/kids/KidMode.js.map +1 -0
  260. package/dist/esm/kids/KidTools.js +529 -0
  261. package/dist/esm/kids/KidTools.js.map +1 -0
  262. package/dist/esm/monetization/Monetization.js +186 -0
  263. package/dist/esm/monetization/Monetization.js.map +1 -0
  264. package/dist/esm/multiplayer/LocalMultiplayer.js +284 -0
  265. package/dist/esm/multiplayer/LocalMultiplayer.js.map +1 -0
  266. package/dist/esm/multiplayer/MiniGameTypes.js +60 -0
  267. package/dist/esm/multiplayer/MiniGameTypes.js.map +1 -0
  268. package/dist/esm/network/MultiplayerTransport.js +106 -0
  269. package/dist/esm/network/MultiplayerTransport.js.map +1 -0
  270. package/dist/esm/network/Networking.js +561 -0
  271. package/dist/esm/network/Networking.js.map +1 -0
  272. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/AbortController.js +30 -0
  273. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/AbortController.js.map +1 -0
  274. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/AccessTokenHttpClient.js +49 -0
  275. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/AccessTokenHttpClient.js.map +1 -0
  276. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js +44 -0
  277. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js.map +1 -0
  278. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js +16 -0
  279. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js.map +1 -0
  280. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Errors.js +136 -0
  281. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Errors.js.map +1 -0
  282. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js +159 -0
  283. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js.map +1 -0
  284. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js +54 -0
  285. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js.map +1 -0
  286. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HeaderNames.js +9 -0
  287. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HeaderNames.js.map +1 -0
  288. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HttpClient.js +49 -0
  289. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HttpClient.js.map +1 -0
  290. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HttpConnection.js +573 -0
  291. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HttpConnection.js.map +1 -0
  292. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HubConnection.js +954 -0
  293. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HubConnection.js.map +1 -0
  294. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js +147 -0
  295. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js.map +1 -0
  296. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js +25 -0
  297. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js.map +1 -0
  298. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ILogger.js +27 -0
  299. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ILogger.js.map +1 -0
  300. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ITransport.js +26 -0
  301. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ITransport.js.map +1 -0
  302. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js +122 -0
  303. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js.map +1 -0
  304. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Loggers.js +15 -0
  305. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Loggers.js.map +1 -0
  306. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js +186 -0
  307. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js.map +1 -0
  308. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/MessageBuffer.js +197 -0
  309. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/MessageBuffer.js.map +1 -0
  310. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js +106 -0
  311. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js.map +1 -0
  312. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Subject.js +36 -0
  313. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Subject.js.map +1 -0
  314. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js +22 -0
  315. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js.map +1 -0
  316. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Utils.js +249 -0
  317. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Utils.js.map +1 -0
  318. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js +158 -0
  319. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js.map +1 -0
  320. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js +86 -0
  321. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js.map +1 -0
  322. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/index.js +13 -0
  323. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/index.js.map +1 -0
  324. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/pkg-version.js +4 -0
  325. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/pkg-version.js.map +1 -0
  326. package/dist/esm/pathfinding/Pathfinding.js +250 -0
  327. package/dist/esm/pathfinding/Pathfinding.js.map +1 -0
  328. package/dist/esm/performance/BenchmarkSuite.js +315 -0
  329. package/dist/esm/performance/BenchmarkSuite.js.map +1 -0
  330. package/dist/esm/performance/Performance.js +171 -0
  331. package/dist/esm/performance/Performance.js.map +1 -0
  332. package/dist/esm/performance/PerformanceAdvanced.js +620 -0
  333. package/dist/esm/performance/PerformanceAdvanced.js.map +1 -0
  334. package/dist/esm/physics/PhysicsAdvanced.js +417 -0
  335. package/dist/esm/physics/PhysicsAdvanced.js.map +1 -0
  336. package/dist/esm/physics/PhysicsEngine2D.js +442 -0
  337. package/dist/esm/physics/PhysicsEngine2D.js.map +1 -0
  338. package/dist/esm/plugins/PluginSDK.js +484 -0
  339. package/dist/esm/plugins/PluginSDK.js.map +1 -0
  340. package/dist/esm/plugins/PluginTestKit.js +359 -0
  341. package/dist/esm/plugins/PluginTestKit.js.map +1 -0
  342. package/dist/esm/procedural/Procedural.js +282 -0
  343. package/dist/esm/procedural/Procedural.js.map +1 -0
  344. package/dist/esm/procedural/WorldBuilding.js +225 -0
  345. package/dist/esm/procedural/WorldBuilding.js.map +1 -0
  346. package/dist/esm/release/MobileExport.js +142 -0
  347. package/dist/esm/release/MobileExport.js.map +1 -0
  348. package/dist/esm/release/Release.js +141 -0
  349. package/dist/esm/release/Release.js.map +1 -0
  350. package/dist/esm/rendering/Camera2D.js +127 -0
  351. package/dist/esm/rendering/Camera2D.js.map +1 -0
  352. package/dist/esm/rendering/Renderer2D.js +334 -0
  353. package/dist/esm/rendering/Renderer2D.js.map +1 -0
  354. package/dist/esm/runtime3d/Runtime3D.js +371 -0
  355. package/dist/esm/runtime3d/Runtime3D.js.map +1 -0
  356. package/dist/esm/runtime3d/SceneEditor3D.js +299 -0
  357. package/dist/esm/runtime3d/SceneEditor3D.js.map +1 -0
  358. package/dist/esm/scene/SceneManager.js +184 -0
  359. package/dist/esm/scene/SceneManager.js.map +1 -0
  360. package/dist/esm/scripting/NodeGraph.js +568 -0
  361. package/dist/esm/scripting/NodeGraph.js.map +1 -0
  362. package/dist/esm/social/Social.js +85 -0
  363. package/dist/esm/social/Social.js.map +1 -0
  364. package/dist/esm/templates/ActionTemplates.js +217 -0
  365. package/dist/esm/templates/ActionTemplates.js.map +1 -0
  366. package/dist/esm/templates/PartyTemplates.js +204 -0
  367. package/dist/esm/templates/PartyTemplates.js.map +1 -0
  368. package/dist/esm/templates/PuzzleTemplates.js +267 -0
  369. package/dist/esm/templates/PuzzleTemplates.js.map +1 -0
  370. package/dist/esm/templates/RPGTemplates.js +196 -0
  371. package/dist/esm/templates/RPGTemplates.js.map +1 -0
  372. package/dist/esm/templates/SportsTemplates.js +257 -0
  373. package/dist/esm/templates/SportsTemplates.js.map +1 -0
  374. package/dist/esm/templates/StrategyTemplates.js +157 -0
  375. package/dist/esm/templates/StrategyTemplates.js.map +1 -0
  376. package/dist/esm/templates/WaveDefense.js +467 -0
  377. package/dist/esm/templates/WaveDefense.js.map +1 -0
  378. package/dist/esm/tilemap/Tilemap.js +205 -0
  379. package/dist/esm/tilemap/Tilemap.js.map +1 -0
  380. package/dist/esm/tutorials/TutorialBranching.js +388 -0
  381. package/dist/esm/tutorials/TutorialBranching.js.map +1 -0
  382. package/dist/esm/tutorials/TutorialEngine.js +897 -0
  383. package/dist/esm/tutorials/TutorialEngine.js.map +1 -0
  384. package/dist/esm/tutorials/TutorialOverlay.js +600 -0
  385. package/dist/esm/tutorials/TutorialOverlay.js.map +1 -0
  386. package/dist/esm/tutorials/content/Tutorials_T05_T08.js +810 -0
  387. package/dist/esm/tutorials/content/Tutorials_T05_T08.js.map +1 -0
  388. package/dist/esm/tutorials/content/Tutorials_T09_T11.js +736 -0
  389. package/dist/esm/tutorials/content/Tutorials_T09_T11.js.map +1 -0
  390. package/dist/esm/tutorials/content/Tutorials_T12_T15.js +780 -0
  391. package/dist/esm/tutorials/content/Tutorials_T12_T15.js.map +1 -0
  392. package/dist/esm/ui/GameUI.js +310 -0
  393. package/dist/esm/ui/GameUI.js.map +1 -0
  394. package/dist/esm/xr/ARVR.js +182 -0
  395. package/dist/esm/xr/ARVR.js.map +1 -0
  396. package/dist/types/__tests__/setup.d.ts +1 -0
  397. package/dist/types/accessibility/Accessibility.d.ts +82 -0
  398. package/dist/types/accessibility/index.d.ts +1 -0
  399. package/dist/types/ai/AI.d.ts +140 -0
  400. package/dist/types/ai/index.d.ts +1 -0
  401. package/dist/types/animation/Animation.d.ts +90 -0
  402. package/dist/types/animation/index.d.ts +1 -0
  403. package/dist/types/audio/AudioAdvanced.d.ts +190 -0
  404. package/dist/types/audio/AudioManager.d.ts +55 -0
  405. package/dist/types/audio/index.d.ts +1 -0
  406. package/dist/types/community/Community.d.ts +112 -0
  407. package/dist/types/community/index.d.ts +1 -0
  408. package/dist/types/core/EventBus.d.ts +16 -0
  409. package/dist/types/core/GameClock.d.ts +29 -0
  410. package/dist/types/core/GameConfig.d.ts +20 -0
  411. package/dist/types/core/GameLoop.d.ts +32 -0
  412. package/dist/types/core/ServiceLocator.d.ts +36 -0
  413. package/dist/types/core/TypeSafety.d.ts +190 -0
  414. package/dist/types/core/Validation.d.ts +24 -0
  415. package/dist/types/core/index.d.ts +7 -0
  416. package/dist/types/core/math.d.ts +32 -0
  417. package/dist/types/core/types.d.ts +130 -0
  418. package/dist/types/devtools/AssetStore.d.ts +133 -0
  419. package/dist/types/devtools/DevTools.d.ts +217 -0
  420. package/dist/types/devtools/DeveloperExperience.d.ts +123 -0
  421. package/dist/types/devtools/index.d.ts +3 -0
  422. package/dist/types/docs/APIPlayground.d.ts +26 -0
  423. package/dist/types/docs/Cookbook.d.ts +18 -0
  424. package/dist/types/docs/DocGenerator.d.ts +83 -0
  425. package/dist/types/docs/Guides.d.ts +18 -0
  426. package/dist/types/docs/index.d.ts +4 -0
  427. package/dist/types/ecs/World.d.ts +219 -0
  428. package/dist/types/ecs/index.d.ts +1 -0
  429. package/dist/types/editor/AdvancedEditor.d.ts +267 -0
  430. package/dist/types/editor/AssetManager.d.ts +45 -0
  431. package/dist/types/editor/DebugTools.d.ts +74 -0
  432. package/dist/types/editor/NiceGameEditor.d.ts +115 -0
  433. package/dist/types/editor/SceneEditor.d.ts +37 -0
  434. package/dist/types/editor/index.d.ts +8 -0
  435. package/dist/types/engine/NiceGameEngine.d.ts +53 -0
  436. package/dist/types/engine/index.d.ts +2 -0
  437. package/dist/types/enterprise/Enterprise.d.ts +217 -0
  438. package/dist/types/enterprise/index.d.ts +1 -0
  439. package/dist/types/epic/index.d.ts +10 -0
  440. package/dist/types/i18n/I18n.d.ts +107 -0
  441. package/dist/types/i18n/index.d.ts +2 -0
  442. package/dist/types/i18n/useTranslation.d.ts +74 -0
  443. package/dist/types/index.d.ts +127 -0
  444. package/dist/types/input/GamepadNavigation.d.ts +34 -0
  445. package/dist/types/input/InputManager.d.ts +77 -0
  446. package/dist/types/input/index.d.ts +3 -0
  447. package/dist/types/input/useGamepads.d.ts +39 -0
  448. package/dist/types/kids/KidMode.d.ts +207 -0
  449. package/dist/types/kids/KidTools.d.ts +135 -0
  450. package/dist/types/kids/index.d.ts +2 -0
  451. package/dist/types/legendary/index.d.ts +57 -0
  452. package/dist/types/monetization/Monetization.d.ts +224 -0
  453. package/dist/types/monetization/index.d.ts +1 -0
  454. package/dist/types/multiplayer/LocalMultiplayer.d.ts +61 -0
  455. package/dist/types/multiplayer/MiniGameTypes.d.ts +70 -0
  456. package/dist/types/multiplayer/index.d.ts +3 -0
  457. package/dist/types/network/MultiplayerTransport.d.ts +71 -0
  458. package/dist/types/network/Networking.d.ts +199 -0
  459. package/dist/types/network/index.d.ts +2 -0
  460. package/dist/types/pathfinding/Pathfinding.d.ts +42 -0
  461. package/dist/types/pathfinding/index.d.ts +1 -0
  462. package/dist/types/performance/AssetCompression.d.ts +137 -0
  463. package/dist/types/performance/BenchmarkSuite.d.ts +99 -0
  464. package/dist/types/performance/Performance.d.ts +87 -0
  465. package/dist/types/performance/PerformanceAdvanced.d.ts +220 -0
  466. package/dist/types/performance/WASMModules.d.ts +65 -0
  467. package/dist/types/performance/WebGPUCompute.d.ts +164 -0
  468. package/dist/types/performance/index.d.ts +1 -0
  469. package/dist/types/physics/PhysicsAdvanced.d.ts +148 -0
  470. package/dist/types/physics/PhysicsEngine2D.d.ts +66 -0
  471. package/dist/types/physics/index.d.ts +1 -0
  472. package/dist/types/plugins/PluginSDK.d.ts +134 -0
  473. package/dist/types/plugins/PluginTestKit.d.ts +107 -0
  474. package/dist/types/plugins/index.d.ts +2 -0
  475. package/dist/types/procedural/Procedural.d.ts +90 -0
  476. package/dist/types/procedural/WorldBuilding.d.ts +200 -0
  477. package/dist/types/procedural/index.d.ts +2 -0
  478. package/dist/types/release/MobileExport.d.ts +218 -0
  479. package/dist/types/release/Release.d.ts +81 -0
  480. package/dist/types/release/index.d.ts +1 -0
  481. package/dist/types/rendering/Camera2D.d.ts +39 -0
  482. package/dist/types/rendering/Renderer2D.d.ts +41 -0
  483. package/dist/types/rendering/index.d.ts +2 -0
  484. package/dist/types/runtime3d/Runtime3D.d.ts +259 -0
  485. package/dist/types/runtime3d/SceneEditor3D.d.ts +186 -0
  486. package/dist/types/runtime3d/index.d.ts +2 -0
  487. package/dist/types/scene/SceneManager.d.ts +59 -0
  488. package/dist/types/scene/index.d.ts +2 -0
  489. package/dist/types/scripting/NodeGraph.d.ts +84 -0
  490. package/dist/types/scripting/index.d.ts +2 -0
  491. package/dist/types/social/Social.d.ts +245 -0
  492. package/dist/types/social/index.d.ts +1 -0
  493. package/dist/types/templates/ActionTemplates.d.ts +173 -0
  494. package/dist/types/templates/PartyTemplates.d.ts +195 -0
  495. package/dist/types/templates/PuzzleTemplates.d.ts +127 -0
  496. package/dist/types/templates/RPGTemplates.d.ts +210 -0
  497. package/dist/types/templates/SportsTemplates.d.ts +162 -0
  498. package/dist/types/templates/StrategyTemplates.d.ts +264 -0
  499. package/dist/types/templates/WaveDefense.d.ts +92 -0
  500. package/dist/types/templates/index.d.ts +2 -0
  501. package/dist/types/tilemap/Tilemap.d.ts +66 -0
  502. package/dist/types/tilemap/index.d.ts +1 -0
  503. package/dist/types/tutorials/TutorialBranching.d.ts +132 -0
  504. package/dist/types/tutorials/TutorialEditor.d.ts +43 -0
  505. package/dist/types/tutorials/TutorialEngine.d.ts +237 -0
  506. package/dist/types/tutorials/TutorialOverlay.d.ts +79 -0
  507. package/dist/types/tutorials/VoiceNarration.d.ts +75 -0
  508. package/dist/types/tutorials/content/Tutorials_T04.d.ts +3 -0
  509. package/dist/types/tutorials/content/Tutorials_T05_T08.d.ts +6 -0
  510. package/dist/types/tutorials/content/Tutorials_T09_T11.d.ts +5 -0
  511. package/dist/types/tutorials/content/Tutorials_T12_T15.d.ts +6 -0
  512. package/dist/types/tutorials/content/UITutorials.d.ts +14 -0
  513. package/dist/types/tutorials/content/index.d.ts +5 -0
  514. package/dist/types/tutorials/index.d.ts +6 -0
  515. package/dist/types/ui/GameUI.d.ts +97 -0
  516. package/dist/types/ui/index.d.ts +2 -0
  517. package/dist/types/xr/ARVR.d.ts +252 -0
  518. package/dist/types/xr/index.d.ts +1 -0
  519. package/package.json +88 -0
@@ -0,0 +1,359 @@
1
+ import { EventBus } from '../core/EventBus.js';
2
+
3
+ /* ────────────────────────────────────────────────────────────────
4
+ Plugin Test Kit — Testing framework for 3rd party plugins
5
+
6
+ Sprint L9: Automated plugin testing with sandboxed context,
7
+ lifecycle assertions, extension point verification, and
8
+ snapshot testing for plugin storage.
9
+ ──────────────────────────────────────────────────────────────── */
10
+ /* ══════════════════════════════════════════════════════════════
11
+ In-Memory Test Storage
12
+ ══════════════════════════════════════════════════════════════ */
13
+ class TestPluginStorage {
14
+ constructor() {
15
+ this.data = new Map();
16
+ }
17
+ get(key) {
18
+ return this.data.get(key);
19
+ }
20
+ set(key, value) {
21
+ this.data.set(key, value);
22
+ }
23
+ remove(key) {
24
+ this.data.delete(key);
25
+ }
26
+ clear() {
27
+ this.data.clear();
28
+ }
29
+ keys() {
30
+ return Array.from(this.data.keys());
31
+ }
32
+ /** Snapshot current storage state for assertions. */
33
+ snapshot() {
34
+ const result = {};
35
+ for (const [k, v] of this.data) {
36
+ result[k] = v;
37
+ }
38
+ return result;
39
+ }
40
+ get size() {
41
+ return this.data.size;
42
+ }
43
+ }
44
+ /* ══════════════════════════════════════════════════════════════
45
+ Test Plugin Context — sandboxed context for testing
46
+ ══════════════════════════════════════════════════════════════ */
47
+ class TestPluginContext {
48
+ constructor(manifest) {
49
+ this.logs = [];
50
+ this.warnings = [];
51
+ this.registeredExtensions = new Map();
52
+ this.log = (message) => {
53
+ this.logs.push(message);
54
+ };
55
+ this.warn = (message) => {
56
+ this.warnings.push(message);
57
+ };
58
+ this.registerExtension = (point, entry) => {
59
+ let list = this.registeredExtensions.get(point);
60
+ if (!list) {
61
+ list = [];
62
+ this.registeredExtensions.set(point, list);
63
+ }
64
+ list.push(entry);
65
+ };
66
+ this.unregisterExtension = (point, entry) => {
67
+ const list = this.registeredExtensions.get(point);
68
+ if (list) {
69
+ const idx = list.indexOf(entry);
70
+ if (idx >= 0)
71
+ list.splice(idx, 1);
72
+ }
73
+ };
74
+ this.manifest = manifest;
75
+ this.events = new EventBus();
76
+ this.storage = new TestPluginStorage();
77
+ }
78
+ /* ── Assertion helpers ─────────────────────────────────────── */
79
+ /** Get all extensions registered for a given point. */
80
+ getExtensions(point) {
81
+ var _a;
82
+ return ((_a = this.registeredExtensions.get(point)) !== null && _a !== void 0 ? _a : []);
83
+ }
84
+ /** Count extensions for a given point. */
85
+ extensionCount(point) {
86
+ var _a;
87
+ return ((_a = this.registeredExtensions.get(point)) !== null && _a !== void 0 ? _a : []).length;
88
+ }
89
+ /** Check if any extension was registered for a given point. */
90
+ hasExtension(point) {
91
+ return this.extensionCount(point) > 0;
92
+ }
93
+ /** Get storage snapshot for assertion/comparison. */
94
+ storageSnapshot() {
95
+ return this.storage.snapshot();
96
+ }
97
+ /** Reset context to fresh state (between tests). */
98
+ reset() {
99
+ this.logs.length = 0;
100
+ this.warnings.length = 0;
101
+ this.registeredExtensions.clear();
102
+ this.storage.clear();
103
+ }
104
+ }
105
+ /* ══════════════════════════════════════════════════════════════
106
+ Assertion Utilities
107
+ ══════════════════════════════════════════════════════════════ */
108
+ class PluginAssertionError extends Error {
109
+ constructor(message) {
110
+ super(message);
111
+ this.name = 'PluginAssertionError';
112
+ }
113
+ }
114
+ const pluginAssert = {
115
+ /** Assert value is truthy. */
116
+ ok(value, message) {
117
+ if (!value) {
118
+ throw new PluginAssertionError(message !== null && message !== void 0 ? message : `Expected truthy, got ${String(value)}`);
119
+ }
120
+ },
121
+ /** Assert strict equality. */
122
+ equal(actual, expected, message) {
123
+ if (actual !== expected) {
124
+ throw new PluginAssertionError(message !== null && message !== void 0 ? message : `Expected ${String(expected)}, got ${String(actual)}`);
125
+ }
126
+ },
127
+ /** Assert not equal. */
128
+ notEqual(actual, notExpected, message) {
129
+ if (actual === notExpected) {
130
+ throw new PluginAssertionError(message !== null && message !== void 0 ? message : `Expected not ${String(notExpected)}`);
131
+ }
132
+ },
133
+ /** Assert deep equality (JSON comparison). */
134
+ deepEqual(actual, expected, message) {
135
+ const a = JSON.stringify(actual);
136
+ const b = JSON.stringify(expected);
137
+ if (a !== b) {
138
+ throw new PluginAssertionError(message !== null && message !== void 0 ? message : `Deep equality failed.\nActual: ${a}\nExpected: ${b}`);
139
+ }
140
+ },
141
+ /** Assert that a function throws. */
142
+ throws(fn, message) {
143
+ let threw = false;
144
+ try {
145
+ fn();
146
+ }
147
+ catch (_a) {
148
+ threw = true;
149
+ }
150
+ if (!threw) {
151
+ throw new PluginAssertionError(message !== null && message !== void 0 ? message : 'Expected function to throw');
152
+ }
153
+ },
154
+ /** Assert async function throws. */
155
+ async throwsAsync(fn, message) {
156
+ let threw = false;
157
+ try {
158
+ await fn();
159
+ }
160
+ catch (_a) {
161
+ threw = true;
162
+ }
163
+ if (!threw) {
164
+ throw new PluginAssertionError(message !== null && message !== void 0 ? message : 'Expected async function to throw');
165
+ }
166
+ },
167
+ /** Assert array contains element. */
168
+ contains(arr, item, message) {
169
+ if (arr.indexOf(item) < 0) {
170
+ throw new PluginAssertionError(message !== null && message !== void 0 ? message : `Array does not contain ${String(item)}`);
171
+ }
172
+ },
173
+ /** Assert string includes substring. */
174
+ includes(str, substr, message) {
175
+ if (!str.includes(substr)) {
176
+ throw new PluginAssertionError(message !== null && message !== void 0 ? message : `"${str}" does not include "${substr}"`);
177
+ }
178
+ },
179
+ /** Assert extension was registered. */
180
+ hasExtension(ctx, point, message) {
181
+ if (!ctx.hasExtension(point)) {
182
+ throw new PluginAssertionError(message !== null && message !== void 0 ? message : `No extension registered for "${point}"`);
183
+ }
184
+ },
185
+ /** Assert extension count. */
186
+ extensionCount(ctx, point, expected, message) {
187
+ const actual = ctx.extensionCount(point);
188
+ if (actual !== expected) {
189
+ throw new PluginAssertionError(message !== null && message !== void 0 ? message : `Expected ${expected} extensions for "${point}", got ${actual}`);
190
+ }
191
+ },
192
+ /** Assert log message was emitted. */
193
+ logged(ctx, substr, message) {
194
+ const found = ctx.logs.some(l => l.includes(substr));
195
+ if (!found) {
196
+ throw new PluginAssertionError(message !== null && message !== void 0 ? message : `No log message containing "${substr}". Logs: [${ctx.logs.join(', ')}]`);
197
+ }
198
+ },
199
+ /** Assert warning was emitted. */
200
+ warned(ctx, substr, message) {
201
+ const found = ctx.warnings.some(w => w.includes(substr));
202
+ if (!found) {
203
+ throw new PluginAssertionError(message !== null && message !== void 0 ? message : `No warning containing "${substr}". Warnings: [${ctx.warnings.join(', ')}]`);
204
+ }
205
+ },
206
+ };
207
+ /* ══════════════════════════════════════════════════════════════
208
+ Plugin Test Runner
209
+ ══════════════════════════════════════════════════════════════ */
210
+ class PluginTestRunner {
211
+ constructor() {
212
+ this.tests = [];
213
+ this._beforeEach = null;
214
+ this._afterEach = null;
215
+ }
216
+ /** Add a test case. */
217
+ test(name, fn) {
218
+ this.tests.push({ name, fn });
219
+ return this;
220
+ }
221
+ /** Add a skipped test case. */
222
+ skip(name, fn) {
223
+ this.tests.push({ name, fn, skip: true });
224
+ return this;
225
+ }
226
+ /** Run something before each test. */
227
+ beforeEach(fn) {
228
+ this._beforeEach = fn;
229
+ return this;
230
+ }
231
+ /** Run something after each test. */
232
+ afterEach(fn) {
233
+ this._afterEach = fn;
234
+ return this;
235
+ }
236
+ /** Run all tests against a plugin. */
237
+ async run(plugin, suiteName) {
238
+ const manifest = plugin.manifest;
239
+ const ctx = new TestPluginContext(manifest);
240
+ const results = [];
241
+ let passed = 0;
242
+ let failed = 0;
243
+ let skipped = 0;
244
+ const suiteStart = performance.now();
245
+ for (const tc of this.tests) {
246
+ if (tc.skip) {
247
+ results.push({ name: tc.name, status: 'skipped', duration: 0 });
248
+ skipped++;
249
+ continue;
250
+ }
251
+ ctx.reset();
252
+ const start = performance.now();
253
+ try {
254
+ if (this._beforeEach)
255
+ await this._beforeEach(ctx);
256
+ await tc.fn(ctx);
257
+ if (this._afterEach)
258
+ await this._afterEach(ctx);
259
+ results.push({
260
+ name: tc.name,
261
+ status: 'passed',
262
+ duration: performance.now() - start,
263
+ });
264
+ passed++;
265
+ }
266
+ catch (err) {
267
+ results.push({
268
+ name: tc.name,
269
+ status: 'failed',
270
+ duration: performance.now() - start,
271
+ error: err instanceof Error ? err.message : String(err),
272
+ });
273
+ failed++;
274
+ }
275
+ }
276
+ return {
277
+ pluginId: manifest.id,
278
+ suiteName: suiteName !== null && suiteName !== void 0 ? suiteName : `${manifest.name} tests`,
279
+ results,
280
+ passed,
281
+ failed,
282
+ skipped,
283
+ totalDuration: performance.now() - suiteStart,
284
+ };
285
+ }
286
+ }
287
+ /* ══════════════════════════════════════════════════════════════
288
+ Convenience: Quick Plugin Test
289
+ ══════════════════════════════════════════════════════════════ */
290
+ /** Create a default manifest for testing. */
291
+ function createTestManifest(overrides) {
292
+ return {
293
+ id: 'com.test.plugin',
294
+ name: 'Test Plugin',
295
+ version: '1.0.0',
296
+ description: 'A plugin for testing',
297
+ author: 'Test',
298
+ types: ['component'],
299
+ engineVersion: '>=0.1.0',
300
+ ...overrides,
301
+ };
302
+ }
303
+ /** Quick lifecycle test — activate, verify, deactivate. */
304
+ async function testPluginLifecycle(plugin) {
305
+ const runner = new PluginTestRunner();
306
+ runner
307
+ .test('should activate without errors', async (ctx) => {
308
+ await plugin.activate(ctx);
309
+ })
310
+ .test('should register at least one extension', async (ctx) => {
311
+ await plugin.activate(ctx);
312
+ let total = 0;
313
+ for (const [, entries] of ctx.registeredExtensions) {
314
+ total += entries.length;
315
+ }
316
+ pluginAssert.ok(total > 0, 'Plugin should register at least one extension');
317
+ })
318
+ .test('should deactivate without errors', async (ctx) => {
319
+ await plugin.activate(ctx);
320
+ if (plugin.deactivate) {
321
+ await plugin.deactivate(ctx);
322
+ }
323
+ })
324
+ .test('should survive activate → deactivate → activate cycle', async (ctx) => {
325
+ await plugin.activate(ctx);
326
+ if (plugin.deactivate)
327
+ await plugin.deactivate(ctx);
328
+ ctx.reset();
329
+ await plugin.activate(ctx);
330
+ })
331
+ .test('should produce log output', async (ctx) => {
332
+ await plugin.activate(ctx);
333
+ pluginAssert.ok(ctx.logs.length > 0, 'Plugin should log something on activation');
334
+ });
335
+ return runner.run(plugin, `${plugin.manifest.name} lifecycle`);
336
+ }
337
+ /** Format test results as a readable string. */
338
+ function formatTestResults(suite) {
339
+ const lines = [
340
+ `━━━ ${suite.suiteName} (${suite.pluginId}) ━━━`,
341
+ '',
342
+ ];
343
+ for (const r of suite.results) {
344
+ const icon = r.status === 'passed' ? '✓' : r.status === 'failed' ? '✗' : '○';
345
+ const ms = r.duration.toFixed(1);
346
+ lines.push(` ${icon} ${r.name} (${ms}ms)`);
347
+ if (r.error) {
348
+ lines.push(` → ${r.error}`);
349
+ }
350
+ }
351
+ lines.push('');
352
+ lines.push(` ${suite.passed} passed, ${suite.failed} failed, ${suite.skipped} skipped`);
353
+ lines.push(` Total: ${suite.totalDuration.toFixed(1)}ms`);
354
+ lines.push('');
355
+ return lines.join('\n');
356
+ }
357
+
358
+ export { PluginAssertionError, PluginTestRunner, TestPluginContext, TestPluginStorage, createTestManifest, formatTestResults, pluginAssert, testPluginLifecycle };
359
+ //# sourceMappingURL=PluginTestKit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PluginTestKit.js","sources":["../../../src/plugins/PluginTestKit.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
@@ -0,0 +1,282 @@
1
+ /* ────────────────────────────────────────────────────────────────
2
+ Procedural Generation — Random, Noise, Wave, LootTable
3
+ ──────────────────────────────────────────────────────────────── */
4
+ /* ────────────────────────────────────────────────────────────────
5
+ SEEDED RANDOM (xoshiro128**)
6
+ ──────────────────────────────────────────────────────────────── */
7
+ class SeededRandom {
8
+ constructor(seed = Date.now()) {
9
+ this.s = new Uint32Array(4);
10
+ // SplitMix32 seed expansion
11
+ let z = seed >>> 0;
12
+ for (let i = 0; i < 4; i++) {
13
+ z = (z + 0x9e3779b9) >>> 0;
14
+ let t = z ^ (z >>> 16);
15
+ t = Math.imul(t, 0x21f0aaad);
16
+ t = t ^ (t >>> 15);
17
+ t = Math.imul(t, 0x735a2d97);
18
+ t = t ^ (t >>> 15);
19
+ this.s[i] = t >>> 0;
20
+ }
21
+ }
22
+ /** Returns [0, 1). */
23
+ next() {
24
+ const s = this.s;
25
+ const result = Math.imul(rotl(Math.imul(s[1], 5), 7), 9) >>> 0;
26
+ const t = s[1] << 9;
27
+ s[2] ^= s[0];
28
+ s[3] ^= s[1];
29
+ s[1] ^= s[2];
30
+ s[0] ^= s[3];
31
+ s[2] ^= t;
32
+ s[3] = rotl(s[3], 11);
33
+ return (result >>> 0) / 0x100000000;
34
+ }
35
+ /** Returns integer in [min, max] (inclusive). */
36
+ int(min, max) {
37
+ return min + Math.floor(this.next() * (max - min + 1));
38
+ }
39
+ /** Returns float in [min, max). */
40
+ float(min, max) {
41
+ return min + this.next() * (max - min);
42
+ }
43
+ /** Returns true with given probability (0-1). */
44
+ chance(probability) {
45
+ return this.next() < probability;
46
+ }
47
+ /** Pick a random element from an array. */
48
+ pick(arr) {
49
+ return arr[Math.floor(this.next() * arr.length)];
50
+ }
51
+ /** Shuffle array in-place (Fisher-Yates). */
52
+ shuffle(arr) {
53
+ for (let i = arr.length - 1; i > 0; i--) {
54
+ const j = Math.floor(this.next() * (i + 1));
55
+ const tmp = arr[i];
56
+ arr[i] = arr[j];
57
+ arr[j] = tmp;
58
+ }
59
+ return arr;
60
+ }
61
+ /** Weighted random pick. Returns index. */
62
+ weighted(weights) {
63
+ let total = 0;
64
+ for (const w of weights)
65
+ total += w;
66
+ let r = this.next() * total;
67
+ for (let i = 0; i < weights.length; i++) {
68
+ r -= weights[i];
69
+ if (r <= 0)
70
+ return i;
71
+ }
72
+ return weights.length - 1;
73
+ }
74
+ /** Random color. */
75
+ color(alpha = 1) {
76
+ return { r: this.next(), g: this.next(), b: this.next(), a: alpha };
77
+ }
78
+ /** Random unit vector. */
79
+ unitVec2() {
80
+ const angle = this.next() * Math.PI * 2;
81
+ return { x: Math.cos(angle), y: Math.sin(angle) };
82
+ }
83
+ /** Random point inside a circle. */
84
+ insideCircle(radius) {
85
+ const a = this.next() * Math.PI * 2;
86
+ const r = Math.sqrt(this.next()) * radius;
87
+ return { x: Math.cos(a) * r, y: Math.sin(a) * r };
88
+ }
89
+ }
90
+ function rotl(x, k) {
91
+ return ((x << k) | (x >>> (32 - k))) >>> 0;
92
+ }
93
+ /* ────────────────────────────────────────────────────────────────
94
+ PERLIN NOISE (2D, improved)
95
+ ──────────────────────────────────────────────────────────────── */
96
+ class PerlinNoise {
97
+ constructor(seed = 0) {
98
+ this.perm = new Uint8Array(512);
99
+ const rng = new SeededRandom(seed);
100
+ const p = new Uint8Array(256);
101
+ for (let i = 0; i < 256; i++)
102
+ p[i] = i;
103
+ // Shuffle
104
+ for (let i = 255; i > 0; i--) {
105
+ const j = rng.int(0, i);
106
+ const tmp = p[i];
107
+ p[i] = p[j];
108
+ p[j] = tmp;
109
+ }
110
+ for (let i = 0; i < 512; i++)
111
+ this.perm[i] = p[i & 255];
112
+ }
113
+ /** Get noise value at (x, y) → [-1, 1]. */
114
+ noise2D(x, y) {
115
+ const X = Math.floor(x) & 255;
116
+ const Y = Math.floor(y) & 255;
117
+ const xf = x - Math.floor(x);
118
+ const yf = y - Math.floor(y);
119
+ const u = fade(xf);
120
+ const v = fade(yf);
121
+ const p = this.perm;
122
+ const A = p[X] + Y;
123
+ const B = p[X + 1] + Y;
124
+ return lerp(lerp(grad(p[A], xf, yf), grad(p[B], xf - 1, yf), u), lerp(grad(p[A + 1], xf, yf - 1), grad(p[B + 1], xf - 1, yf - 1), u), v);
125
+ }
126
+ /** Fractal Brownian Motion (layered noise). */
127
+ fbm(x, y, octaves = 4, lacunarity = 2, gain = 0.5) {
128
+ let value = 0;
129
+ let amplitude = 1;
130
+ let frequency = 1;
131
+ let maxValue = 0;
132
+ for (let i = 0; i < octaves; i++) {
133
+ value += this.noise2D(x * frequency, y * frequency) * amplitude;
134
+ maxValue += amplitude;
135
+ amplitude *= gain;
136
+ frequency *= lacunarity;
137
+ }
138
+ return value / maxValue;
139
+ }
140
+ }
141
+ function fade(t) {
142
+ return t * t * t * (t * (t * 6 - 15) + 10);
143
+ }
144
+ function lerp(a, b, t) {
145
+ return a + t * (b - a);
146
+ }
147
+ function grad(hash, x, y) {
148
+ const h = hash & 3;
149
+ const u = h < 2 ? x : y;
150
+ const v = h < 2 ? y : x;
151
+ return ((h & 1) === 0 ? u : -u) + ((h & 2) === 0 ? v : -v);
152
+ }
153
+ class WaveGenerator {
154
+ constructor(seed) {
155
+ this.rng = new SeededRandom(seed);
156
+ }
157
+ generateWave(waveNumber, config) {
158
+ const totalEnemies = Math.floor(config.baseEnemyCount * Math.pow(config.countGrowth, waveNumber - 1));
159
+ // Filter types available at this wave
160
+ const available = config.typeProbabilities.filter(tp => waveNumber >= tp.minWave);
161
+ if (available.length === 0)
162
+ return [];
163
+ const weights = available.map(a => a.weight);
164
+ const entries = [];
165
+ let remaining = totalEnemies;
166
+ let cumulativeDelay = 0;
167
+ while (remaining > 0) {
168
+ const groupCount = Math.min(remaining, this.rng.int(config.groupSize[0], config.groupSize[1]));
169
+ const typeIdx = this.rng.weighted(weights);
170
+ entries.push({
171
+ type: available[typeIdx].type,
172
+ count: groupCount,
173
+ delay: cumulativeDelay,
174
+ spawnInterval: this.rng.float(config.spawnInterval[0], config.spawnInterval[1]),
175
+ });
176
+ remaining -= groupCount;
177
+ cumulativeDelay += this.rng.float(config.groupDelay[0], config.groupDelay[1]);
178
+ }
179
+ return entries;
180
+ }
181
+ }
182
+ class LootTable {
183
+ constructor(drops, seed) {
184
+ this.drops = drops;
185
+ this.rng = new SeededRandom(seed);
186
+ }
187
+ /** Roll N items from the table. */
188
+ roll(count, level = 1) {
189
+ var _a;
190
+ const eligible = this.drops.filter(d => !d.minLevel || level >= d.minLevel);
191
+ if (eligible.length === 0)
192
+ return [];
193
+ const weights = eligible.map(d => d.weight);
194
+ const results = [];
195
+ const rollCounts = new Map();
196
+ for (let i = 0; i < count; i++) {
197
+ // rebuild weights excluding maxed-out items
198
+ const currentWeights = eligible.map((d, idx) => {
199
+ var _a;
200
+ if (d.maxPerRoll != null) {
201
+ const used = (_a = rollCounts.get(d.id)) !== null && _a !== void 0 ? _a : 0;
202
+ if (used >= d.maxPerRoll)
203
+ return 0;
204
+ }
205
+ return weights[idx];
206
+ });
207
+ if (currentWeights.every(w => w === 0))
208
+ break;
209
+ const idx = this.rng.weighted(currentWeights);
210
+ const drop = eligible[idx];
211
+ const qty = this.rng.int(drop.quantity[0], drop.quantity[1]);
212
+ results.push({ id: drop.id, quantity: qty });
213
+ rollCounts.set(drop.id, ((_a = rollCounts.get(drop.id)) !== null && _a !== void 0 ? _a : 0) + 1);
214
+ }
215
+ return results;
216
+ }
217
+ /** Simple yes/no chance to drop each item independently. */
218
+ rollEach(level = 1) {
219
+ const results = [];
220
+ for (const drop of this.drops) {
221
+ if (drop.minLevel != null && level < drop.minLevel)
222
+ continue;
223
+ // Normalize weight as probability (assume max total = 100)
224
+ if (this.rng.chance(drop.weight / 100)) {
225
+ results.push({ id: drop.id, quantity: this.rng.int(drop.quantity[0], drop.quantity[1]) });
226
+ }
227
+ }
228
+ return results;
229
+ }
230
+ }
231
+ /* ────────────────────────────────────────────────────────────────
232
+ PROCEDURAL SPRITE — Generate simple procedural sprites
233
+ ──────────────────────────────────────────────────────────────── */
234
+ class ProceduralSprite {
235
+ constructor(seed) {
236
+ this.rng = new SeededRandom(seed);
237
+ }
238
+ /**
239
+ * Generate a symmetrical pixel art sprite as ImageData.
240
+ * Good for enemies, ships, items.
241
+ */
242
+ generate(width, height, palette, symmetry = 'horizontal') {
243
+ const data = new ImageData(width, height);
244
+ const halfW = symmetry === 'horizontal' || symmetry === 'both' ? Math.ceil(width / 2) : width;
245
+ const halfH = symmetry === 'vertical' || symmetry === 'both' ? Math.ceil(height / 2) : height;
246
+ // Generate half, then mirror
247
+ const grid = new Array(halfW * halfH).fill(false);
248
+ const colors = new Array(halfW * halfH).fill(0);
249
+ for (let i = 0; i < grid.length; i++) {
250
+ if (this.rng.chance(0.45)) {
251
+ grid[i] = true;
252
+ colors[i] = this.rng.int(0, palette.length - 1);
253
+ }
254
+ }
255
+ // Write to ImageData
256
+ for (let y = 0; y < height; y++) {
257
+ for (let x = 0; x < width; x++) {
258
+ let sx = x;
259
+ let sy = y;
260
+ if ((symmetry === 'horizontal' || symmetry === 'both') && x >= halfW) {
261
+ sx = width - 1 - x;
262
+ }
263
+ if ((symmetry === 'vertical' || symmetry === 'both') && y >= halfH) {
264
+ sy = height - 1 - y;
265
+ }
266
+ const idx = sy * halfW + sx;
267
+ if (grid[idx]) {
268
+ const c = palette[colors[idx]];
269
+ const px = (y * width + x) * 4;
270
+ data.data[px] = (c.r * 255) | 0;
271
+ data.data[px + 1] = (c.g * 255) | 0;
272
+ data.data[px + 2] = (c.b * 255) | 0;
273
+ data.data[px + 3] = (c.a * 255) | 0;
274
+ }
275
+ }
276
+ }
277
+ return data;
278
+ }
279
+ }
280
+
281
+ export { LootTable, PerlinNoise, ProceduralSprite, SeededRandom, WaveGenerator };
282
+ //# sourceMappingURL=Procedural.js.map