@nice2dev/game-engine 0.1.0 → 1.0.3

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 (294) hide show
  1. package/CHANGELOG.md +193 -1
  2. package/dist/cjs/ai/BehaviorTree.js +1215 -0
  3. package/dist/cjs/ai/BehaviorTree.js.map +1 -0
  4. package/dist/cjs/ai/StateMachine.js +783 -0
  5. package/dist/cjs/ai/StateMachine.js.map +1 -0
  6. package/dist/cjs/audio/AudioBridge.js +454 -0
  7. package/dist/cjs/audio/AudioBridge.js.map +1 -0
  8. package/dist/cjs/devtools/GameplayAnalytics.js +651 -0
  9. package/dist/cjs/devtools/GameplayAnalytics.js.map +1 -0
  10. package/dist/cjs/dialogue/DialogueSystem.js +1023 -0
  11. package/dist/cjs/dialogue/DialogueSystem.js.map +1 -0
  12. package/dist/cjs/editor/NiceGameEditor.js +569 -71
  13. package/dist/cjs/editor/NiceGameEditor.js.map +1 -1
  14. package/dist/cjs/editor/ShaderGraph.js +1616 -0
  15. package/dist/cjs/editor/ShaderGraph.js.map +1 -0
  16. package/dist/cjs/editor/TimelineEditor.js +819 -0
  17. package/dist/cjs/editor/TimelineEditor.js.map +1 -0
  18. package/dist/cjs/engine/SaveSystemV2.js +494 -0
  19. package/dist/cjs/engine/SaveSystemV2.js.map +1 -0
  20. package/dist/cjs/export/GodotExporter.js +1102 -0
  21. package/dist/cjs/export/GodotExporter.js.map +1 -0
  22. package/dist/cjs/export/PlatformExporter.js +236 -0
  23. package/dist/cjs/export/PlatformExporter.js.map +1 -0
  24. package/dist/cjs/export/ThreeJSExporter.js +1116 -0
  25. package/dist/cjs/export/ThreeJSExporter.js.map +1 -0
  26. package/dist/cjs/export/UnityExporter.js +1193 -0
  27. package/dist/cjs/export/UnityExporter.js.map +1 -0
  28. package/dist/cjs/export/WebExporter.js +1036 -0
  29. package/dist/cjs/export/WebExporter.js.map +1 -0
  30. package/dist/cjs/export/index.js +58 -0
  31. package/dist/cjs/export/index.js.map +1 -0
  32. package/dist/cjs/i18n/useTranslation.js +11 -11
  33. package/dist/cjs/import/AsepriteImporter.js +761 -0
  34. package/dist/cjs/import/AsepriteImporter.js.map +1 -0
  35. package/dist/cjs/import/DragonBonesImporter.js +499 -0
  36. package/dist/cjs/import/DragonBonesImporter.js.map +1 -0
  37. package/dist/cjs/import/GameMakerImporter.js +559 -0
  38. package/dist/cjs/import/GameMakerImporter.js.map +1 -0
  39. package/dist/cjs/import/GodotSceneImporter.js +824 -0
  40. package/dist/cjs/import/GodotSceneImporter.js.map +1 -0
  41. package/dist/cjs/import/LDtkImporter.js +481 -0
  42. package/dist/cjs/import/LDtkImporter.js.map +1 -0
  43. package/dist/cjs/import/Live2DImporter.js +553 -0
  44. package/dist/cjs/import/Live2DImporter.js.map +1 -0
  45. package/dist/cjs/import/NdgFormat.js +499 -0
  46. package/dist/cjs/import/NdgFormat.js.map +1 -0
  47. package/dist/cjs/import/OgmoImporter.js +529 -0
  48. package/dist/cjs/import/OgmoImporter.js.map +1 -0
  49. package/dist/cjs/import/RPGMakerImporter.js +520 -0
  50. package/dist/cjs/import/RPGMakerImporter.js.map +1 -0
  51. package/dist/cjs/import/SceneImporter.js +449 -0
  52. package/dist/cjs/import/SceneImporter.js.map +1 -0
  53. package/dist/cjs/import/SpineImporter.js +583 -0
  54. package/dist/cjs/import/SpineImporter.js.map +1 -0
  55. package/dist/cjs/import/SpriterImporter.js +652 -0
  56. package/dist/cjs/import/SpriterImporter.js.map +1 -0
  57. package/dist/cjs/import/TiledMapImporter.js +859 -0
  58. package/dist/cjs/import/TiledMapImporter.js.map +1 -0
  59. package/dist/cjs/import/UnitySceneImporter.js +732 -0
  60. package/dist/cjs/import/UnitySceneImporter.js.map +1 -0
  61. package/dist/cjs/import/index.js +305 -0
  62. package/dist/cjs/import/index.js.map +1 -0
  63. package/dist/cjs/index.js +291 -1
  64. package/dist/cjs/index.js.map +1 -1
  65. package/dist/cjs/input/GamepadNavigation.js +21 -21
  66. package/dist/cjs/input/useGamepads.js +6 -6
  67. package/dist/cjs/integration/IconSprite.js +281 -0
  68. package/dist/cjs/integration/IconSprite.js.map +1 -0
  69. package/dist/cjs/inventory/InventorySystem.js +930 -0
  70. package/dist/cjs/inventory/InventorySystem.js.map +1 -0
  71. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/AbortController.js.map +1 -1
  72. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/AccessTokenHttpClient.js.map +1 -1
  73. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js.map +1 -1
  74. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js.map +1 -1
  75. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Errors.js.map +1 -1
  76. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js.map +1 -1
  77. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js.map +1 -1
  78. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HeaderNames.js.map +1 -1
  79. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HttpClient.js.map +1 -1
  80. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HttpConnection.js.map +1 -1
  81. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HubConnection.js.map +1 -1
  82. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js.map +1 -1
  83. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js.map +1 -1
  84. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ILogger.js.map +1 -1
  85. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ITransport.js.map +1 -1
  86. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js.map +1 -1
  87. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Loggers.js.map +1 -1
  88. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js.map +1 -1
  89. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/MessageBuffer.js.map +1 -1
  90. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js.map +1 -1
  91. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Subject.js.map +1 -1
  92. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js.map +1 -1
  93. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/Utils.js.map +1 -1
  94. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js.map +1 -1
  95. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js.map +1 -1
  96. package/dist/cjs/node_modules/@microsoft/signalr/dist/esm/pkg-version.js.map +1 -1
  97. package/dist/cjs/quest/QuestSystem.js +924 -0
  98. package/dist/cjs/quest/QuestSystem.js.map +1 -0
  99. package/dist/cjs/rendering/WebGPURenderPipeline.js +658 -0
  100. package/dist/cjs/rendering/WebGPURenderPipeline.js.map +1 -0
  101. package/dist/cjs/scripting/GraphToAST.js +567 -0
  102. package/dist/cjs/scripting/GraphToAST.js.map +1 -0
  103. package/dist/cjs/scripting/LanguageExporter.js +321 -0
  104. package/dist/cjs/scripting/LanguageExporter.js.map +1 -0
  105. package/dist/cjs/scripting/ScriptAST.js +67 -0
  106. package/dist/cjs/scripting/ScriptAST.js.map +1 -0
  107. package/dist/cjs/scripting/VisualScripting2.js +1140 -0
  108. package/dist/cjs/scripting/VisualScripting2.js.map +1 -0
  109. package/dist/cjs/scripting/exporters/CSharpExporter.js +503 -0
  110. package/dist/cjs/scripting/exporters/CSharpExporter.js.map +1 -0
  111. package/dist/cjs/scripting/exporters/GDScriptExporter.js +452 -0
  112. package/dist/cjs/scripting/exporters/GDScriptExporter.js.map +1 -0
  113. package/dist/cjs/scripting/exporters/LuaExporter.js +457 -0
  114. package/dist/cjs/scripting/exporters/LuaExporter.js.map +1 -0
  115. package/dist/cjs/scripting/exporters/PythonExporter.js +565 -0
  116. package/dist/cjs/scripting/exporters/PythonExporter.js.map +1 -0
  117. package/dist/cjs/scripting/exporters/RustExporter.js +525 -0
  118. package/dist/cjs/scripting/exporters/RustExporter.js.map +1 -0
  119. package/dist/cjs/scripting/exporters/TypeScriptExporter.js +570 -0
  120. package/dist/cjs/scripting/exporters/TypeScriptExporter.js.map +1 -0
  121. package/dist/cjs/systems/ParticleSystem2.js +1478 -0
  122. package/dist/cjs/systems/ParticleSystem2.js.map +1 -0
  123. package/dist/cjs/xr/ARVR.js.map +1 -1
  124. package/dist/esm/ai/BehaviorTree.js +1186 -0
  125. package/dist/esm/ai/BehaviorTree.js.map +1 -0
  126. package/dist/esm/ai/StateMachine.js +767 -0
  127. package/dist/esm/ai/StateMachine.js.map +1 -0
  128. package/dist/esm/audio/AudioBridge.js +446 -0
  129. package/dist/esm/audio/AudioBridge.js.map +1 -0
  130. package/dist/esm/devtools/GameplayAnalytics.js +639 -0
  131. package/dist/esm/devtools/GameplayAnalytics.js.map +1 -0
  132. package/dist/esm/dialogue/DialogueSystem.js +1008 -0
  133. package/dist/esm/dialogue/DialogueSystem.js.map +1 -0
  134. package/dist/esm/editor/NiceGameEditor.js +556 -58
  135. package/dist/esm/editor/NiceGameEditor.js.map +1 -1
  136. package/dist/esm/editor/ShaderGraph.js +1606 -0
  137. package/dist/esm/editor/ShaderGraph.js.map +1 -0
  138. package/dist/esm/editor/TimelineEditor.js +800 -0
  139. package/dist/esm/editor/TimelineEditor.js.map +1 -0
  140. package/dist/esm/engine/SaveSystemV2.js +487 -0
  141. package/dist/esm/engine/SaveSystemV2.js.map +1 -0
  142. package/dist/esm/export/GodotExporter.js +1100 -0
  143. package/dist/esm/export/GodotExporter.js.map +1 -0
  144. package/dist/esm/export/PlatformExporter.js +230 -0
  145. package/dist/esm/export/PlatformExporter.js.map +1 -0
  146. package/dist/esm/export/ThreeJSExporter.js +1114 -0
  147. package/dist/esm/export/ThreeJSExporter.js.map +1 -0
  148. package/dist/esm/export/UnityExporter.js +1191 -0
  149. package/dist/esm/export/UnityExporter.js.map +1 -0
  150. package/dist/esm/export/WebExporter.js +1033 -0
  151. package/dist/esm/export/WebExporter.js.map +1 -0
  152. package/dist/esm/export/index.js +44 -0
  153. package/dist/esm/export/index.js.map +1 -0
  154. package/dist/esm/import/AsepriteImporter.js +759 -0
  155. package/dist/esm/import/AsepriteImporter.js.map +1 -0
  156. package/dist/esm/import/DragonBonesImporter.js +496 -0
  157. package/dist/esm/import/DragonBonesImporter.js.map +1 -0
  158. package/dist/esm/import/GameMakerImporter.js +556 -0
  159. package/dist/esm/import/GameMakerImporter.js.map +1 -0
  160. package/dist/esm/import/GodotSceneImporter.js +822 -0
  161. package/dist/esm/import/GodotSceneImporter.js.map +1 -0
  162. package/dist/esm/import/LDtkImporter.js +479 -0
  163. package/dist/esm/import/LDtkImporter.js.map +1 -0
  164. package/dist/esm/import/Live2DImporter.js +550 -0
  165. package/dist/esm/import/Live2DImporter.js.map +1 -0
  166. package/dist/esm/import/NdgFormat.js +490 -0
  167. package/dist/esm/import/NdgFormat.js.map +1 -0
  168. package/dist/esm/import/OgmoImporter.js +526 -0
  169. package/dist/esm/import/OgmoImporter.js.map +1 -0
  170. package/dist/esm/import/RPGMakerImporter.js +517 -0
  171. package/dist/esm/import/RPGMakerImporter.js.map +1 -0
  172. package/dist/esm/import/SceneImporter.js +441 -0
  173. package/dist/esm/import/SceneImporter.js.map +1 -0
  174. package/dist/esm/import/SpineImporter.js +580 -0
  175. package/dist/esm/import/SpineImporter.js.map +1 -0
  176. package/dist/esm/import/SpriterImporter.js +649 -0
  177. package/dist/esm/import/SpriterImporter.js.map +1 -0
  178. package/dist/esm/import/TiledMapImporter.js +857 -0
  179. package/dist/esm/import/TiledMapImporter.js.map +1 -0
  180. package/dist/esm/import/UnitySceneImporter.js +730 -0
  181. package/dist/esm/import/UnitySceneImporter.js.map +1 -0
  182. package/dist/esm/import/index.js +279 -0
  183. package/dist/esm/import/index.js.map +1 -0
  184. package/dist/esm/index.js +47 -3
  185. package/dist/esm/index.js.map +1 -1
  186. package/dist/esm/integration/IconSprite.js +266 -0
  187. package/dist/esm/integration/IconSprite.js.map +1 -0
  188. package/dist/esm/inventory/InventorySystem.js +924 -0
  189. package/dist/esm/inventory/InventorySystem.js.map +1 -0
  190. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/AbortController.js.map +1 -1
  191. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/AccessTokenHttpClient.js.map +1 -1
  192. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/DefaultHttpClient.js.map +1 -1
  193. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/DefaultReconnectPolicy.js.map +1 -1
  194. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Errors.js.map +1 -1
  195. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/FetchHttpClient.js.map +1 -1
  196. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HandshakeProtocol.js.map +1 -1
  197. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HeaderNames.js.map +1 -1
  198. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HttpClient.js.map +1 -1
  199. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HttpConnection.js.map +1 -1
  200. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HubConnection.js.map +1 -1
  201. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/HubConnectionBuilder.js.map +1 -1
  202. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/IHubProtocol.js.map +1 -1
  203. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ILogger.js.map +1 -1
  204. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ITransport.js.map +1 -1
  205. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/JsonHubProtocol.js.map +1 -1
  206. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Loggers.js.map +1 -1
  207. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/LongPollingTransport.js.map +1 -1
  208. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/MessageBuffer.js.map +1 -1
  209. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/ServerSentEventsTransport.js.map +1 -1
  210. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Subject.js.map +1 -1
  211. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/TextMessageFormat.js.map +1 -1
  212. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/Utils.js.map +1 -1
  213. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/WebSocketTransport.js.map +1 -1
  214. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/XhrHttpClient.js.map +1 -1
  215. package/dist/esm/node_modules/@microsoft/signalr/dist/esm/pkg-version.js.map +1 -1
  216. package/dist/esm/quest/QuestSystem.js +916 -0
  217. package/dist/esm/quest/QuestSystem.js.map +1 -0
  218. package/dist/esm/rendering/WebGPURenderPipeline.js +642 -0
  219. package/dist/esm/rendering/WebGPURenderPipeline.js.map +1 -0
  220. package/dist/esm/scripting/GraphToAST.js +564 -0
  221. package/dist/esm/scripting/GraphToAST.js.map +1 -0
  222. package/dist/esm/scripting/LanguageExporter.js +311 -0
  223. package/dist/esm/scripting/LanguageExporter.js.map +1 -0
  224. package/dist/esm/scripting/ScriptAST.js +52 -0
  225. package/dist/esm/scripting/ScriptAST.js.map +1 -0
  226. package/dist/esm/scripting/VisualScripting2.js +1130 -0
  227. package/dist/esm/scripting/VisualScripting2.js.map +1 -0
  228. package/dist/esm/scripting/exporters/CSharpExporter.js +501 -0
  229. package/dist/esm/scripting/exporters/CSharpExporter.js.map +1 -0
  230. package/dist/esm/scripting/exporters/GDScriptExporter.js +450 -0
  231. package/dist/esm/scripting/exporters/GDScriptExporter.js.map +1 -0
  232. package/dist/esm/scripting/exporters/LuaExporter.js +455 -0
  233. package/dist/esm/scripting/exporters/LuaExporter.js.map +1 -0
  234. package/dist/esm/scripting/exporters/PythonExporter.js +563 -0
  235. package/dist/esm/scripting/exporters/PythonExporter.js.map +1 -0
  236. package/dist/esm/scripting/exporters/RustExporter.js +523 -0
  237. package/dist/esm/scripting/exporters/RustExporter.js.map +1 -0
  238. package/dist/esm/scripting/exporters/TypeScriptExporter.js +568 -0
  239. package/dist/esm/scripting/exporters/TypeScriptExporter.js.map +1 -0
  240. package/dist/esm/systems/ParticleSystem2.js +1471 -0
  241. package/dist/esm/systems/ParticleSystem2.js.map +1 -0
  242. package/dist/esm/xr/ARVR.js.map +1 -1
  243. package/dist/types/__tests__/setup.d.ts +1 -1
  244. package/dist/types/ai/BehaviorTree.d.ts +375 -0
  245. package/dist/types/ai/StateMachine.d.ts +296 -0
  246. package/dist/types/audio/AudioBridge.d.ts +199 -0
  247. package/dist/types/devtools/GameplayAnalytics.d.ts +279 -0
  248. package/dist/types/dialogue/DialogueSystem.d.ts +326 -0
  249. package/dist/types/dialogue/index.d.ts +2 -0
  250. package/dist/types/editor/NiceGameEditor.d.ts +12 -1
  251. package/dist/types/editor/ShaderGraph.d.ts +207 -0
  252. package/dist/types/editor/TimelineEditor.d.ts +393 -0
  253. package/dist/types/engine/SaveSystemV2.d.ts +155 -0
  254. package/dist/types/export/GodotExporter.d.ts +56 -0
  255. package/dist/types/export/PlatformExporter.d.ts +201 -0
  256. package/dist/types/export/ThreeJSExporter.d.ts +40 -0
  257. package/dist/types/export/UnityExporter.d.ts +69 -0
  258. package/dist/types/export/WebExporter.d.ts +58 -0
  259. package/dist/types/export/index.d.ts +19 -0
  260. package/dist/types/import/AsepriteImporter.d.ts +46 -0
  261. package/dist/types/import/DragonBonesImporter.d.ts +331 -0
  262. package/dist/types/import/GameMakerImporter.d.ts +375 -0
  263. package/dist/types/import/GodotSceneImporter.d.ts +34 -0
  264. package/dist/types/import/LDtkImporter.d.ts +177 -0
  265. package/dist/types/import/Live2DImporter.d.ts +237 -0
  266. package/dist/types/import/NdgFormat.d.ts +387 -0
  267. package/dist/types/import/OgmoImporter.d.ts +237 -0
  268. package/dist/types/import/RPGMakerImporter.d.ts +186 -0
  269. package/dist/types/import/SceneImporter.d.ts +276 -0
  270. package/dist/types/import/SpineImporter.d.ts +372 -0
  271. package/dist/types/import/SpriterImporter.d.ts +230 -0
  272. package/dist/types/import/TiledMapImporter.d.ts +57 -0
  273. package/dist/types/import/UnitySceneImporter.d.ts +87 -0
  274. package/dist/types/import/index.d.ts +59 -0
  275. package/dist/types/index.d.ts +46 -18
  276. package/dist/types/integration/IconSprite.d.ts +196 -0
  277. package/dist/types/inventory/InventorySystem.d.ts +336 -0
  278. package/dist/types/performance/WebGPUCompute.d.ts +0 -10
  279. package/dist/types/quest/QuestSystem.d.ts +287 -0
  280. package/dist/types/rendering/WebGPURenderPipeline.d.ts +255 -0
  281. package/dist/types/scripting/GraphToAST.d.ts +55 -0
  282. package/dist/types/scripting/LanguageExporter.d.ts +136 -0
  283. package/dist/types/scripting/ScriptAST.d.ts +312 -0
  284. package/dist/types/scripting/VisualScripting2.d.ts +353 -0
  285. package/dist/types/scripting/exporters/CSharpExporter.d.ts +44 -0
  286. package/dist/types/scripting/exporters/GDScriptExporter.d.ts +46 -0
  287. package/dist/types/scripting/exporters/LuaExporter.d.ts +46 -0
  288. package/dist/types/scripting/exporters/PythonExporter.d.ts +49 -0
  289. package/dist/types/scripting/exporters/RustExporter.d.ts +46 -0
  290. package/dist/types/scripting/exporters/TypeScriptExporter.d.ts +48 -0
  291. package/dist/types/scripting/exporters/index.d.ts +8 -0
  292. package/dist/types/scripting/index.d.ts +11 -0
  293. package/dist/types/systems/ParticleSystem2.d.ts +646 -0
  294. package/package.json +7 -1
@@ -0,0 +1,639 @@
1
+ import React, { useState, useEffect, useRef, useMemo, useCallback } from 'react';
2
+
3
+ /* ────────────────────────────────────────────────────────────────
4
+ Gameplay Analytics — Telemetry, heatmaps & session recording
5
+
6
+ Comprehensive gameplay analytics with:
7
+ - Event-based telemetry pipeline with batching
8
+ - Spatial heatmaps (death, traversal, interaction, combat)
9
+ - Session recording and playback
10
+ - Funnel analysis and retention tracking
11
+ - Performance metrics collection
12
+ ──────────────────────────────────────────────────────────────── */
13
+ const DEFAULT_TELEMETRY_CONFIG = {
14
+ enabled: true,
15
+ batchSize: 50,
16
+ flushIntervalMs: 30000,
17
+ maxBufferSize: 10000,
18
+ categories: [],
19
+ sampleRate: 1,
20
+ };
21
+ const DEFAULT_HEATMAP_CONFIG = {
22
+ type: 'death',
23
+ cellSize: 1,
24
+ bounds: { minX: -50, minY: -50, maxX: 50, maxY: 50 },
25
+ colorStops: [
26
+ { value: 0, color: 'rgba(0, 0, 255, 0)' },
27
+ { value: 0.25, color: 'rgba(0, 0, 255, 0.5)' },
28
+ { value: 0.5, color: 'rgba(0, 255, 0, 0.7)' },
29
+ { value: 0.75, color: 'rgba(255, 255, 0, 0.8)' },
30
+ { value: 1, color: 'rgba(255, 0, 0, 1)' },
31
+ ],
32
+ maxValue: 0,
33
+ blurRadius: 1,
34
+ };
35
+ const DEFAULT_RECORDING_CONFIG = {
36
+ enabled: false,
37
+ fps: 10,
38
+ maxDurationMs: 600000, // 10 minutes
39
+ recordTypes: ['position', 'action', 'state-change'],
40
+ recordPosition: true,
41
+ compress: true,
42
+ };
43
+ /* ══════════════════════════════════════════════════════════════
44
+ TELEMETRY PIPELINE
45
+ ══════════════════════════════════════════════════════════════ */
46
+ class TelemetryPipeline {
47
+ constructor(eventBus, config = {}) {
48
+ this.buffer = [];
49
+ this.flushed = [];
50
+ this.flushTimer = null;
51
+ this.eventCounter = 0;
52
+ this.config = { ...DEFAULT_TELEMETRY_CONFIG, ...config };
53
+ this.eventBus = eventBus;
54
+ this.sessionId = this.generateId();
55
+ if (this.config.enabled)
56
+ this.startFlushTimer();
57
+ }
58
+ generateId() {
59
+ return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
60
+ }
61
+ /** Track a telemetry event */
62
+ track(category, name, data = {}, position) {
63
+ if (!this.config.enabled)
64
+ return;
65
+ if (this.config.categories.length > 0 && !this.config.categories.includes(category))
66
+ return;
67
+ if (this.config.sampleRate < 1 && Math.random() > this.config.sampleRate)
68
+ return;
69
+ const event = {
70
+ id: `evt-${++this.eventCounter}`,
71
+ category,
72
+ name,
73
+ timestamp: Date.now(),
74
+ sessionId: this.sessionId,
75
+ data,
76
+ position,
77
+ };
78
+ this.buffer.push(event);
79
+ if (this.buffer.length >= this.config.batchSize) {
80
+ this.flush();
81
+ }
82
+ // Trim buffer if too large
83
+ if (this.buffer.length > this.config.maxBufferSize) {
84
+ this.buffer = this.buffer.slice(-this.config.maxBufferSize);
85
+ }
86
+ }
87
+ /** Flush buffered events */
88
+ flush() {
89
+ if (this.buffer.length === 0)
90
+ return [];
91
+ const batch = [...this.buffer];
92
+ this.buffer = [];
93
+ this.flushed.push(batch);
94
+ this.eventBus.emit('analytics:flush', { count: batch.length });
95
+ return batch;
96
+ }
97
+ startFlushTimer() {
98
+ this.flushTimer = setInterval(() => this.flush(), this.config.flushIntervalMs);
99
+ }
100
+ /** Get all events (current buffer + flushed) */
101
+ getAllEvents() {
102
+ return [...this.flushed.flat(), ...this.buffer];
103
+ }
104
+ /** Get events by category */
105
+ getByCategory(category) {
106
+ return this.getAllEvents().filter(e => e.category === category);
107
+ }
108
+ /** Get event count by name */
109
+ countByName(name) {
110
+ return this.getAllEvents().filter(e => e.name === name).length;
111
+ }
112
+ getSessionId() {
113
+ return this.sessionId;
114
+ }
115
+ getBufferSize() {
116
+ return this.buffer.length;
117
+ }
118
+ getTotalEvents() {
119
+ return this.flushed.reduce((s, b) => s + b.length, 0) + this.buffer.length;
120
+ }
121
+ clear() {
122
+ this.buffer = [];
123
+ this.flushed = [];
124
+ this.eventCounter = 0;
125
+ }
126
+ destroy() {
127
+ if (this.flushTimer)
128
+ clearInterval(this.flushTimer);
129
+ this.flush();
130
+ }
131
+ }
132
+ /* ══════════════════════════════════════════════════════════════
133
+ HEATMAP GENERATOR
134
+ ══════════════════════════════════════════════════════════════ */
135
+ class HeatmapGenerator {
136
+ constructor(config = {}) {
137
+ this.grid = new Map();
138
+ this.totalEvents = 0;
139
+ this.config = { ...DEFAULT_HEATMAP_CONFIG, ...config };
140
+ }
141
+ cellKey(cx, cy) {
142
+ return `${cx},${cy}`;
143
+ }
144
+ worldToCell(wx, wy) {
145
+ return [
146
+ Math.floor((wx - this.config.bounds.minX) / this.config.cellSize),
147
+ Math.floor((wy - this.config.bounds.minY) / this.config.cellSize),
148
+ ];
149
+ }
150
+ /** Add an event at a world position */
151
+ addEvent(x, y, weight = 1) {
152
+ var _a;
153
+ if (x < this.config.bounds.minX || x > this.config.bounds.maxX ||
154
+ y < this.config.bounds.minY || y > this.config.bounds.maxY)
155
+ return;
156
+ const [cx, cy] = this.worldToCell(x, y);
157
+ const key = this.cellKey(cx, cy);
158
+ this.grid.set(key, ((_a = this.grid.get(key)) !== null && _a !== void 0 ? _a : 0) + weight);
159
+ this.totalEvents++;
160
+ }
161
+ /** Add events from telemetry data */
162
+ addFromTelemetry(events) {
163
+ for (const event of events) {
164
+ if (event.position) {
165
+ this.addEvent(event.position.x, event.position.y);
166
+ }
167
+ }
168
+ }
169
+ /** Get the grid as an array of cells with normalized values */
170
+ getCells() {
171
+ const cells = [];
172
+ let maxVal = this.config.maxValue;
173
+ if (maxVal <= 0) {
174
+ // Auto-detect max value
175
+ maxVal = 0;
176
+ for (const v of this.grid.values()) {
177
+ if (v > maxVal)
178
+ maxVal = v;
179
+ }
180
+ }
181
+ if (maxVal === 0)
182
+ maxVal = 1;
183
+ for (const [key, value] of this.grid) {
184
+ const [cx, cy] = key.split(',').map(Number);
185
+ cells.push({
186
+ x: cx,
187
+ y: cy,
188
+ value: Math.min(value / maxVal, 1),
189
+ events: value,
190
+ });
191
+ }
192
+ return cells;
193
+ }
194
+ /** Apply Gaussian blur to the grid */
195
+ getBlurredCells() {
196
+ var _a;
197
+ const cells = this.getCells();
198
+ if (this.config.blurRadius <= 0)
199
+ return cells;
200
+ const radius = this.config.blurRadius;
201
+ const cellMap = new Map();
202
+ // Build raw map
203
+ for (const cell of cells) {
204
+ cellMap.set(this.cellKey(cell.x, cell.y), cell.events);
205
+ }
206
+ // Apply blur
207
+ const blurred = [];
208
+ const sigma = radius / 2;
209
+ const kernel = [];
210
+ for (let dy = -radius; dy <= radius; dy++) {
211
+ const row = [];
212
+ for (let dx = -radius; dx <= radius; dx++) {
213
+ row.push(Math.exp(-(dx * dx + dy * dy) / (2 * sigma * sigma)));
214
+ }
215
+ kernel.push(row);
216
+ }
217
+ // Normalize kernel
218
+ let kernelSum = 0;
219
+ for (const row of kernel)
220
+ for (const v of row)
221
+ kernelSum += v;
222
+ const visited = new Set();
223
+ for (const cell of cells) {
224
+ for (let dy = -radius; dy <= radius; dy++) {
225
+ for (let dx = -radius; dx <= radius; dx++) {
226
+ const nx = cell.x + dx;
227
+ const ny = cell.y + dy;
228
+ const key = this.cellKey(nx, ny);
229
+ if (visited.has(key))
230
+ continue;
231
+ visited.add(key);
232
+ let sum = 0;
233
+ for (let ky = -radius; ky <= radius; ky++) {
234
+ for (let kx = -radius; kx <= radius; kx++) {
235
+ const srcKey = this.cellKey(nx + kx, ny + ky);
236
+ const srcVal = (_a = cellMap.get(srcKey)) !== null && _a !== void 0 ? _a : 0;
237
+ sum += srcVal * kernel[ky + radius][kx + radius];
238
+ }
239
+ }
240
+ const normalized = sum / kernelSum;
241
+ if (normalized > 0.001) {
242
+ blurred.push({ x: nx, y: ny, value: 0, events: normalized });
243
+ }
244
+ }
245
+ }
246
+ }
247
+ // Normalize values
248
+ let maxVal = this.config.maxValue;
249
+ if (maxVal <= 0) {
250
+ maxVal = Math.max(...blurred.map(c => c.events), 1);
251
+ }
252
+ for (const cell of blurred) {
253
+ cell.value = Math.min(cell.events / maxVal, 1);
254
+ }
255
+ return blurred;
256
+ }
257
+ /** Render heatmap to a canvas */
258
+ renderToCanvas(ctx, width, height) {
259
+ const cells = this.getBlurredCells();
260
+ const { bounds, cellSize, colorStops } = this.config;
261
+ const worldW = bounds.maxX - bounds.minX;
262
+ const worldH = bounds.maxY - bounds.minY;
263
+ const scaleX = width / worldW;
264
+ const scaleY = height / worldH;
265
+ const cellW = cellSize * scaleX;
266
+ const cellH = cellSize * scaleY;
267
+ ctx.clearRect(0, 0, width, height);
268
+ for (const cell of cells) {
269
+ const screenX = cell.x * cellSize * scaleX;
270
+ const screenY = cell.y * cellSize * scaleY;
271
+ // Interpolate color from stops
272
+ const color = this.interpolateColor(cell.value, colorStops);
273
+ ctx.fillStyle = color;
274
+ ctx.fillRect(screenX, screenY, cellW + 1, cellH + 1);
275
+ }
276
+ }
277
+ interpolateColor(value, stops) {
278
+ if (stops.length === 0)
279
+ return 'transparent';
280
+ if (stops.length === 1)
281
+ return stops[0].color;
282
+ for (let i = 0; i < stops.length - 1; i++) {
283
+ if (value >= stops[i].value && value <= stops[i + 1].value) {
284
+ const t = (value - stops[i].value) / (stops[i + 1].value - stops[i].value);
285
+ return this.lerpColor(stops[i].color, stops[i + 1].color, t);
286
+ }
287
+ }
288
+ return stops[stops.length - 1].color;
289
+ }
290
+ lerpColor(a, b, t) {
291
+ const parse = (c) => {
292
+ const m = c.match(/[\d.]+/g);
293
+ return m ? m.map(Number) : [0, 0, 0, 1];
294
+ };
295
+ const ca = parse(a);
296
+ const cb = parse(b);
297
+ const r = Math.round(ca[0] + (cb[0] - ca[0]) * t);
298
+ const g = Math.round(ca[1] + (cb[1] - ca[1]) * t);
299
+ const bl = Math.round(ca[2] + (cb[2] - ca[2]) * t);
300
+ const al = ca[3] + (cb[3] - ca[3]) * t;
301
+ return `rgba(${r}, ${g}, ${bl}, ${al.toFixed(2)})`;
302
+ }
303
+ getTotalEvents() {
304
+ return this.totalEvents;
305
+ }
306
+ getConfig() {
307
+ return this.config;
308
+ }
309
+ clear() {
310
+ this.grid.clear();
311
+ this.totalEvents = 0;
312
+ }
313
+ }
314
+ /* ══════════════════════════════════════════════════════════════
315
+ SESSION RECORDER
316
+ ══════════════════════════════════════════════════════════════ */
317
+ class SessionRecorder {
318
+ constructor(config = {}) {
319
+ this.recording = false;
320
+ this.frames = [];
321
+ this.startedAt = 0;
322
+ this.lastFrameTime = 0;
323
+ this.pendingEvents = [];
324
+ this.recordTimer = null;
325
+ this.config = { ...DEFAULT_RECORDING_CONFIG, ...config };
326
+ this.sessionId = `sess-${Date.now().toString(36)}`;
327
+ }
328
+ /** Start recording */
329
+ start() {
330
+ if (this.recording)
331
+ return;
332
+ this.recording = true;
333
+ this.startedAt = Date.now();
334
+ this.lastFrameTime = this.startedAt;
335
+ this.frames = [];
336
+ const intervalMs = 1000 / this.config.fps;
337
+ this.recordTimer = setInterval(() => this.captureFrame(), intervalMs);
338
+ }
339
+ /** Stop recording and return the session */
340
+ stop(sceneId = 'unknown', buildVersion = '0.0.0') {
341
+ this.recording = false;
342
+ if (this.recordTimer) {
343
+ clearInterval(this.recordTimer);
344
+ this.recordTimer = null;
345
+ }
346
+ // Capture any remaining events
347
+ if (this.pendingEvents.length > 0)
348
+ this.captureFrame();
349
+ const endedAt = Date.now();
350
+ const recording = {
351
+ id: `rec-${Date.now().toString(36)}`,
352
+ sessionId: this.sessionId,
353
+ startedAt: this.startedAt,
354
+ endedAt,
355
+ durationMs: endedAt - this.startedAt,
356
+ frameCount: this.frames.length,
357
+ frames: this.frames,
358
+ metadata: { sceneId, buildVersion, tags: [] },
359
+ sizeBytes: 0,
360
+ };
361
+ // Estimate size
362
+ recording.sizeBytes = JSON.stringify(recording.frames).length;
363
+ return recording;
364
+ }
365
+ /** Add an event to the current frame batch */
366
+ recordEvent(type, data) {
367
+ if (!this.recording)
368
+ return;
369
+ if (this.config.recordTypes.length > 0 && !this.config.recordTypes.includes(type))
370
+ return;
371
+ this.pendingEvents.push({ type, data });
372
+ }
373
+ /** Record player position (convenience) */
374
+ recordPosition(x, y, z) {
375
+ if (!this.config.recordPosition)
376
+ return;
377
+ this.recordEvent('position', { x, y, z });
378
+ }
379
+ captureFrame() {
380
+ const now = Date.now();
381
+ // Check max duration
382
+ if (this.config.maxDurationMs > 0 && now - this.startedAt > this.config.maxDurationMs) {
383
+ this.stop();
384
+ return;
385
+ }
386
+ const frame = {
387
+ timestamp: now,
388
+ delta: now - this.lastFrameTime,
389
+ events: [...this.pendingEvents],
390
+ };
391
+ this.frames.push(frame);
392
+ this.pendingEvents = [];
393
+ this.lastFrameTime = now;
394
+ }
395
+ isRecording() {
396
+ return this.recording;
397
+ }
398
+ getFrameCount() {
399
+ return this.frames.length;
400
+ }
401
+ getDurationMs() {
402
+ return this.recording ? Date.now() - this.startedAt : 0;
403
+ }
404
+ }
405
+ /* ══════════════════════════════════════════════════════════════
406
+ SESSION PLAYER (Playback)
407
+ ══════════════════════════════════════════════════════════════ */
408
+ class SessionPlayer {
409
+ constructor() {
410
+ this.recording = null;
411
+ this.currentFrame = 0;
412
+ this.playing = false;
413
+ this.speed = 1;
414
+ this.playTimer = null;
415
+ this.onFrame = null;
416
+ }
417
+ load(recording) {
418
+ this.recording = recording;
419
+ this.currentFrame = 0;
420
+ this.stop();
421
+ }
422
+ /** Start playback */
423
+ play(onFrame) {
424
+ if (!this.recording || this.playing)
425
+ return;
426
+ this.playing = true;
427
+ this.onFrame = onFrame;
428
+ this.advanceFrame();
429
+ }
430
+ advanceFrame() {
431
+ if (!this.recording || !this.playing || this.currentFrame >= this.recording.frames.length) {
432
+ this.stop();
433
+ return;
434
+ }
435
+ const frame = this.recording.frames[this.currentFrame];
436
+ if (this.onFrame)
437
+ this.onFrame(frame, this.currentFrame);
438
+ this.currentFrame++;
439
+ if (this.currentFrame < this.recording.frames.length) {
440
+ const nextFrame = this.recording.frames[this.currentFrame];
441
+ const delay = (nextFrame.delta || 100) / this.speed;
442
+ this.playTimer = setTimeout(() => this.advanceFrame(), delay);
443
+ }
444
+ else {
445
+ this.stop();
446
+ }
447
+ }
448
+ stop() {
449
+ this.playing = false;
450
+ if (this.playTimer) {
451
+ clearTimeout(this.playTimer);
452
+ this.playTimer = null;
453
+ }
454
+ }
455
+ pause() {
456
+ this.playing = false;
457
+ if (this.playTimer) {
458
+ clearTimeout(this.playTimer);
459
+ this.playTimer = null;
460
+ }
461
+ }
462
+ seek(frameIndex) {
463
+ if (!this.recording)
464
+ return;
465
+ this.currentFrame = Math.max(0, Math.min(frameIndex, this.recording.frameCount - 1));
466
+ }
467
+ setSpeed(speed) {
468
+ this.speed = Math.max(0.1, Math.min(10, speed));
469
+ }
470
+ getProgress() {
471
+ if (!this.recording || this.recording.frameCount === 0)
472
+ return 0;
473
+ return this.currentFrame / this.recording.frameCount;
474
+ }
475
+ isPlaying() {
476
+ return this.playing;
477
+ }
478
+ }
479
+ /* ══════════════════════════════════════════════════════════════
480
+ FUNNEL TRACKER
481
+ ══════════════════════════════════════════════════════════════ */
482
+ class FunnelTracker {
483
+ constructor() {
484
+ this.funnels = new Map();
485
+ this.progress = new Map(); // funnelId → stepId → sessionIds
486
+ }
487
+ define(funnel) {
488
+ this.funnels.set(funnel.id, funnel);
489
+ const stepMap = new Map();
490
+ for (const step of funnel.steps) {
491
+ stepMap.set(step.id, new Set());
492
+ }
493
+ this.progress.set(funnel.id, stepMap);
494
+ }
495
+ /** Record that a session reached a funnel step */
496
+ recordStep(funnelId, stepEventName, sessionId) {
497
+ var _a;
498
+ const funnel = this.funnels.get(funnelId);
499
+ if (!funnel)
500
+ return;
501
+ const step = funnel.steps.find(s => s.eventName === stepEventName);
502
+ if (!step)
503
+ return;
504
+ const stepMap = this.progress.get(funnelId);
505
+ (_a = stepMap === null || stepMap === void 0 ? void 0 : stepMap.get(step.id)) === null || _a === void 0 ? void 0 : _a.add(sessionId);
506
+ }
507
+ /** Get funnel analysis */
508
+ analyze(funnelId) {
509
+ var _a, _b;
510
+ const funnel = this.funnels.get(funnelId);
511
+ const stepMap = this.progress.get(funnelId);
512
+ if (!funnel || !stepMap)
513
+ return [];
514
+ const result = [];
515
+ let prevCount = 0;
516
+ for (const step of funnel.steps) {
517
+ const count = (_b = (_a = stepMap.get(step.id)) === null || _a === void 0 ? void 0 : _a.size) !== null && _b !== void 0 ? _b : 0;
518
+ const dropOff = prevCount > 0 ? 1 - count / prevCount : 0;
519
+ result.push({
520
+ id: step.id,
521
+ name: step.name,
522
+ count,
523
+ dropOffRate: result.length === 0 ? 0 : dropOff,
524
+ });
525
+ prevCount = count;
526
+ }
527
+ return result;
528
+ }
529
+ getFunnels() {
530
+ return Array.from(this.funnels.values());
531
+ }
532
+ }
533
+ /* ══════════════════════════════════════════════════════════════
534
+ GAMEPLAY ANALYTICS (Main class)
535
+ ══════════════════════════════════════════════════════════════ */
536
+ class GameplayAnalytics {
537
+ constructor(eventBus, telemetryConfig, recordingConfig) {
538
+ this.heatmaps = new Map();
539
+ this.eventBus = eventBus;
540
+ this.telemetry = new TelemetryPipeline(eventBus, telemetryConfig);
541
+ this.recorder = new SessionRecorder(recordingConfig);
542
+ this.funnels = new FunnelTracker();
543
+ }
544
+ /** Create or get a heatmap */
545
+ heatmap(id, config) {
546
+ let hm = this.heatmaps.get(id);
547
+ if (!hm) {
548
+ hm = new HeatmapGenerator(config);
549
+ this.heatmaps.set(id, hm);
550
+ }
551
+ return hm;
552
+ }
553
+ /** Track and automatically distribute to relevant heatmaps */
554
+ trackEvent(category, name, data = {}, position) {
555
+ this.telemetry.track(category, name, data, position);
556
+ // Auto-feed heatmaps
557
+ if (position) {
558
+ for (const [_, hm] of this.heatmaps) {
559
+ hm.addEvent(position.x, position.y);
560
+ }
561
+ }
562
+ // Auto-feed session recorder
563
+ this.recorder.recordEvent('action', { category, name, ...data });
564
+ if (position) {
565
+ this.recorder.recordPosition(position.x, position.y, position.z);
566
+ }
567
+ // Auto-feed funnel tracker
568
+ for (const funnel of this.funnels.getFunnels()) {
569
+ this.funnels.recordStep(funnel.id, name, this.telemetry.getSessionId());
570
+ }
571
+ }
572
+ /** Get summary stats */
573
+ getSummary() {
574
+ return {
575
+ totalEvents: this.telemetry.getTotalEvents(),
576
+ sessionId: this.telemetry.getSessionId(),
577
+ heatmapCount: this.heatmaps.size,
578
+ isRecording: this.recorder.isRecording(),
579
+ recordedFrames: this.recorder.getFrameCount(),
580
+ };
581
+ }
582
+ destroy() {
583
+ this.telemetry.destroy();
584
+ if (this.recorder.isRecording())
585
+ this.recorder.stop();
586
+ this.heatmaps.clear();
587
+ }
588
+ }
589
+ /* ══════════════════════════════════════════════════════════════
590
+ REACT HOOK
591
+ ══════════════════════════════════════════════════════════════ */
592
+ function useGameplayAnalytics(eventBus, telemetryConfig, recordingConfig) {
593
+ const analyticsRef = useRef(null);
594
+ const analytics = useMemo(() => {
595
+ if (!analyticsRef.current) {
596
+ analyticsRef.current = new GameplayAnalytics(eventBus, telemetryConfig, recordingConfig);
597
+ }
598
+ return analyticsRef.current;
599
+ }, [eventBus]);
600
+ useEffect(() => {
601
+ return () => {
602
+ analytics.destroy();
603
+ analyticsRef.current = null;
604
+ };
605
+ }, [analytics]);
606
+ const trackEvent = useCallback((category, name, data, position) => analytics.trackEvent(category, name, data, position), [analytics]);
607
+ const [summary, setSummary] = useState(analytics.getSummary());
608
+ const refreshSummary = useCallback(() => {
609
+ setSummary(analytics.getSummary());
610
+ }, [analytics]);
611
+ return {
612
+ analytics,
613
+ trackEvent,
614
+ summary,
615
+ refreshSummary,
616
+ startRecording: () => analytics.recorder.start(),
617
+ stopRecording: (sceneId) => analytics.recorder.stop(sceneId),
618
+ heatmap: (id, config) => analytics.heatmap(id, config),
619
+ };
620
+ }
621
+ const AnalyticsDashboard = ({ analytics, className, style, }) => {
622
+ const [summary, setSummary] = useState(analytics.getSummary());
623
+ useEffect(() => {
624
+ const timer = setInterval(() => setSummary(analytics.getSummary()), 1000);
625
+ return () => clearInterval(timer);
626
+ }, [analytics]);
627
+ const statStyle = {
628
+ display: 'flex', justifyContent: 'space-between', padding: '4px 0',
629
+ borderBottom: '1px solid rgba(128,128,128,0.2)',
630
+ };
631
+ return React.createElement('div', {
632
+ className: `nice-analytics-dashboard ${className !== null && className !== void 0 ? className : ''}`.trim(),
633
+ style: { padding: 16, fontFamily: 'monospace', fontSize: 13, ...style },
634
+ }, React.createElement('h3', { style: { margin: '0 0 12px 0' } }, 'Gameplay Analytics'), React.createElement('div', { style: statStyle }, React.createElement('span', null, 'Session ID'), React.createElement('code', null, summary.sessionId)), React.createElement('div', { style: statStyle }, React.createElement('span', null, 'Total Events'), React.createElement('span', null, String(summary.totalEvents))), React.createElement('div', { style: statStyle }, React.createElement('span', null, 'Heatmaps'), React.createElement('span', null, String(summary.heatmapCount))), React.createElement('div', { style: statStyle }, React.createElement('span', null, 'Recording'), React.createElement('span', null, summary.isRecording ? `ON (${summary.recordedFrames} frames)` : 'OFF')));
635
+ };
636
+ AnalyticsDashboard.displayName = 'AnalyticsDashboard';
637
+
638
+ export { AnalyticsDashboard, DEFAULT_HEATMAP_CONFIG, DEFAULT_RECORDING_CONFIG, DEFAULT_TELEMETRY_CONFIG, FunnelTracker, GameplayAnalytics, HeatmapGenerator, SessionPlayer, SessionRecorder, TelemetryPipeline, useGameplayAnalytics };
639
+ //# sourceMappingURL=GameplayAnalytics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GameplayAnalytics.js","sources":["../../../src/devtools/GameplayAnalytics.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}