murow 0.0.70 → 0.0.71

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 (439) hide show
  1. package/README.md +52 -37
  2. package/dist/cjs/core/binary-codec/binary-codec.js +1 -0
  3. package/dist/cjs/core/binary-codec/index.js +1 -0
  4. package/dist/cjs/core/driver/driver.js +1 -0
  5. package/dist/cjs/core/driver/drivers/immediate.js +1 -0
  6. package/dist/cjs/core/driver/drivers/index.js +1 -0
  7. package/dist/cjs/core/driver/drivers/raf.js +1 -0
  8. package/dist/cjs/core/driver/drivers/timeout.js +1 -0
  9. package/dist/cjs/core/driver/index.js +1 -0
  10. package/dist/cjs/core/events/event-system.js +1 -0
  11. package/dist/cjs/core/events/index.js +1 -0
  12. package/dist/cjs/core/fixed-ticker/fixed-ticker.js +1 -0
  13. package/dist/cjs/core/fixed-ticker/index.js +1 -0
  14. package/dist/cjs/core/free-list/free-list.js +1 -0
  15. package/dist/cjs/core/free-list/index.js +1 -0
  16. package/dist/cjs/core/generate-id/generate-id.js +1 -0
  17. package/dist/cjs/core/generate-id/index.js +1 -0
  18. package/dist/cjs/core/index.js +1 -0
  19. package/dist/cjs/core/input/index.js +1 -0
  20. package/dist/cjs/core/input/manager.js +1 -0
  21. package/dist/cjs/core/input/sources/browser.js +1 -0
  22. package/dist/cjs/core/input/sources/index.js +1 -0
  23. package/dist/cjs/core/input/types.js +1 -0
  24. package/dist/cjs/core/lerp/index.js +1 -0
  25. package/dist/cjs/core/lerp/lerp.js +1 -0
  26. package/dist/cjs/core/navmesh/index.js +1 -0
  27. package/dist/cjs/core/navmesh/navmesh-worker-pool.js +1 -0
  28. package/dist/cjs/core/navmesh/navmesh.js +1 -0
  29. package/dist/cjs/core/navmesh/navmesh.worker.js +1 -0
  30. package/dist/cjs/core/pooled-codec/index.js +1 -0
  31. package/dist/cjs/core/pooled-codec/pooled-codec.js +1 -0
  32. package/dist/cjs/core/prediction/index.js +1 -0
  33. package/dist/cjs/core/prediction/prediction.js +1 -0
  34. package/dist/cjs/core/ray/index.js +1 -0
  35. package/dist/cjs/core/ray/ray-2d.js +1 -0
  36. package/dist/cjs/core/ray/ray-3d.js +1 -0
  37. package/dist/cjs/core/simple-rng/index.js +1 -0
  38. package/dist/cjs/core/simple-rng/simple-rng.js +1 -0
  39. package/dist/cjs/core/sparse-batcher/index.js +1 -0
  40. package/dist/cjs/core/sparse-batcher/sparse-batcher.js +1 -0
  41. package/dist/cjs/ecs/component-store.js +1 -0
  42. package/dist/cjs/ecs/component.js +1 -0
  43. package/dist/cjs/ecs/entity-handle.js +1 -0
  44. package/dist/cjs/ecs/index.js +1 -0
  45. package/dist/cjs/ecs/system-builder.js +1 -0
  46. package/dist/cjs/ecs/world-systems.js +1 -0
  47. package/dist/cjs/ecs/world.js +1 -0
  48. package/dist/cjs/game/index.js +1 -0
  49. package/dist/cjs/game/loop/index.js +1 -0
  50. package/dist/cjs/game/loop/loop.js +1 -0
  51. package/dist/cjs/index.js +1 -0
  52. package/dist/cjs/net/adapters/browser-websocket.js +1 -0
  53. package/dist/cjs/net/adapters/bun-websocket.js +1 -0
  54. package/dist/cjs/net/buffer-pool.js +1 -0
  55. package/dist/cjs/net/client.js +1 -0
  56. package/dist/cjs/net/index.js +1 -0
  57. package/dist/cjs/net/server.js +1 -0
  58. package/dist/cjs/net/types.js +1 -0
  59. package/dist/cjs/net/validators.js +1 -0
  60. package/dist/cjs/protocol/index.js +1 -0
  61. package/dist/cjs/protocol/intent/define-intent.js +1 -0
  62. package/dist/cjs/protocol/intent/index.js +1 -0
  63. package/dist/cjs/protocol/intent/intent-registry.js +1 -0
  64. package/dist/cjs/protocol/intent/intent.js +1 -0
  65. package/dist/cjs/protocol/rpc/define-rpc.js +1 -0
  66. package/dist/cjs/protocol/rpc/index.js +1 -0
  67. package/dist/cjs/protocol/rpc/rpc-registry.js +1 -0
  68. package/dist/cjs/protocol/rpc/rpc.js +1 -0
  69. package/dist/cjs/protocol/snapshot/index.js +1 -0
  70. package/dist/cjs/protocol/snapshot/snapshot-codec.js +1 -0
  71. package/dist/cjs/protocol/snapshot/snapshot-registry.js +1 -0
  72. package/dist/cjs/protocol/snapshot/snapshot.js +1 -0
  73. package/dist/cjs/renderer/base-2d-renderer.js +1 -0
  74. package/dist/cjs/renderer/base-3d-renderer.js +1 -0
  75. package/dist/cjs/renderer/base-renderer.js +1 -0
  76. package/dist/cjs/renderer/index.js +1 -0
  77. package/dist/cjs/renderer/types.js +1 -0
  78. package/dist/esm/core/binary-codec/binary-codec.js +1 -0
  79. package/dist/esm/core/binary-codec/index.js +1 -0
  80. package/dist/esm/core/driver/driver.js +1 -0
  81. package/dist/esm/core/driver/drivers/immediate.js +1 -0
  82. package/dist/esm/core/driver/drivers/index.js +1 -0
  83. package/dist/esm/core/driver/drivers/raf.js +1 -0
  84. package/dist/esm/core/driver/drivers/timeout.js +1 -0
  85. package/dist/esm/core/driver/index.js +1 -0
  86. package/dist/esm/core/events/event-system.js +1 -0
  87. package/dist/esm/core/events/index.js +1 -0
  88. package/dist/esm/core/fixed-ticker/fixed-ticker.js +1 -0
  89. package/dist/esm/core/fixed-ticker/index.js +1 -0
  90. package/dist/esm/core/free-list/free-list.js +1 -0
  91. package/dist/esm/core/free-list/index.js +1 -0
  92. package/dist/esm/core/generate-id/generate-id.js +1 -0
  93. package/dist/esm/core/generate-id/index.js +1 -0
  94. package/dist/esm/core/index.js +1 -0
  95. package/dist/esm/core/input/index.js +1 -0
  96. package/dist/esm/core/input/manager.js +1 -0
  97. package/dist/esm/core/input/sources/browser.js +1 -0
  98. package/dist/esm/core/input/sources/index.js +1 -0
  99. package/dist/esm/core/input/types.js +0 -0
  100. package/dist/esm/core/lerp/index.js +1 -0
  101. package/dist/esm/core/lerp/lerp.js +1 -0
  102. package/dist/esm/core/navmesh/index.js +1 -0
  103. package/dist/esm/core/navmesh/navmesh-worker-pool.js +1 -0
  104. package/dist/esm/core/navmesh/navmesh.js +1 -0
  105. package/dist/esm/core/navmesh/navmesh.worker.js +1 -0
  106. package/dist/esm/core/pooled-codec/index.js +1 -0
  107. package/dist/esm/core/pooled-codec/pooled-codec.js +1 -0
  108. package/dist/esm/core/prediction/index.js +1 -0
  109. package/dist/esm/core/prediction/prediction.js +1 -0
  110. package/dist/esm/core/ray/index.js +1 -0
  111. package/dist/esm/core/ray/ray-2d.js +1 -0
  112. package/dist/esm/core/ray/ray-3d.js +1 -0
  113. package/dist/esm/core/simple-rng/index.js +1 -0
  114. package/dist/esm/core/simple-rng/simple-rng.js +1 -0
  115. package/dist/esm/core/sparse-batcher/index.js +1 -0
  116. package/dist/esm/core/sparse-batcher/sparse-batcher.js +1 -0
  117. package/dist/esm/ecs/component-store.js +1 -0
  118. package/dist/esm/ecs/component.js +1 -0
  119. package/dist/esm/ecs/entity-handle.js +1 -0
  120. package/dist/esm/ecs/index.js +1 -0
  121. package/dist/esm/ecs/system-builder.js +1 -0
  122. package/dist/esm/ecs/world-systems.js +1 -0
  123. package/dist/esm/ecs/world.js +1 -0
  124. package/dist/esm/game/index.js +1 -0
  125. package/dist/esm/game/loop/index.js +1 -0
  126. package/dist/esm/game/loop/loop.js +1 -0
  127. package/dist/esm/index.js +1 -0
  128. package/dist/esm/net/adapters/browser-websocket.js +1 -0
  129. package/dist/esm/net/adapters/bun-websocket.js +1 -0
  130. package/dist/esm/net/buffer-pool.js +1 -0
  131. package/dist/esm/net/client.js +1 -0
  132. package/dist/esm/net/index.js +1 -0
  133. package/dist/esm/net/server.js +1 -0
  134. package/dist/esm/net/types.js +1 -0
  135. package/dist/esm/net/validators.js +1 -0
  136. package/dist/esm/protocol/index.js +1 -0
  137. package/dist/esm/protocol/intent/define-intent.js +1 -0
  138. package/dist/esm/protocol/intent/index.js +1 -0
  139. package/dist/esm/protocol/intent/intent-registry.js +1 -0
  140. package/dist/esm/protocol/intent/intent.js +0 -0
  141. package/dist/esm/protocol/rpc/define-rpc.js +1 -0
  142. package/dist/esm/protocol/rpc/index.js +1 -0
  143. package/dist/esm/protocol/rpc/rpc-registry.js +1 -0
  144. package/dist/esm/protocol/rpc/rpc.js +0 -0
  145. package/dist/esm/protocol/snapshot/index.js +1 -0
  146. package/dist/esm/protocol/snapshot/snapshot-codec.js +1 -0
  147. package/dist/esm/protocol/snapshot/snapshot-registry.js +1 -0
  148. package/dist/esm/protocol/snapshot/snapshot.js +1 -0
  149. package/dist/esm/renderer/base-2d-renderer.js +1 -0
  150. package/dist/esm/renderer/base-3d-renderer.js +1 -0
  151. package/dist/esm/renderer/base-renderer.js +1 -0
  152. package/dist/esm/renderer/index.js +1 -0
  153. package/dist/esm/renderer/types.js +0 -0
  154. package/dist/{core → types/core}/binary-codec/binary-codec.d.ts +4 -0
  155. package/dist/{core → types/core}/events/event-system.d.ts +14 -33
  156. package/dist/types/core/free-list/free-list.d.ts +31 -0
  157. package/dist/types/core/free-list/index.d.ts +1 -0
  158. package/dist/{core → types/core}/index.d.ts +5 -0
  159. package/dist/{core → types/core}/input/index.d.ts +1 -0
  160. package/dist/{core → types/core}/input/manager.d.ts +2 -0
  161. package/dist/{core → types/core}/navmesh/navmesh.d.ts +1 -21
  162. package/dist/types/core/ray/index.d.ts +2 -0
  163. package/dist/types/core/ray/ray-2d.d.ts +37 -0
  164. package/dist/types/core/ray/ray-3d.d.ts +42 -0
  165. package/dist/types/core/simple-rng/index.d.ts +1 -0
  166. package/dist/types/core/simple-rng/simple-rng.d.ts +36 -0
  167. package/dist/types/core/sparse-batcher/index.d.ts +1 -0
  168. package/dist/types/core/sparse-batcher/sparse-batcher.d.ts +55 -0
  169. package/dist/{ecs → types/ecs}/world.d.ts +11 -0
  170. package/dist/{game → types/game}/loop/loop.d.ts +33 -29
  171. package/dist/{index.d.ts → types/index.d.ts} +1 -0
  172. package/dist/{net → types/net}/index.d.ts +2 -2
  173. package/dist/types/renderer/base-2d-renderer.d.ts +13 -0
  174. package/dist/types/renderer/base-3d-renderer.d.ts +10 -0
  175. package/dist/types/renderer/base-renderer.d.ts +21 -0
  176. package/dist/types/renderer/index.d.ts +4 -0
  177. package/dist/types/renderer/types.d.ts +79 -0
  178. package/dist/webgpu/cjs/index.js +6004 -0
  179. package/dist/webgpu/esm/index.js +5972 -0
  180. package/dist/webgpu/types/2d/animation.d.ts +97 -0
  181. package/dist/webgpu/types/2d/renderer.d.ts +55 -0
  182. package/dist/webgpu/types/2d/shader.d.ts +61 -0
  183. package/dist/webgpu/types/2d/sprite-accessor.d.ts +47 -0
  184. package/dist/webgpu/types/3d/gltf-skin-parser.d.ts +101 -0
  185. package/dist/webgpu/types/3d/morph-animation.d.ts +69 -0
  186. package/dist/webgpu/types/3d/morph-animation.test.d.ts +1 -0
  187. package/dist/webgpu/types/3d/renderer.d.ts +216 -0
  188. package/dist/webgpu/types/3d/shader.d.ts +136 -0
  189. package/dist/webgpu/types/3d/skeletal-animation-compute/index.d.ts +2 -0
  190. package/dist/webgpu/types/3d/skeletal-animation-compute/kernel.d.ts +8 -0
  191. package/dist/webgpu/types/3d/skeletal-animation-compute/packer.d.ts +32 -0
  192. package/dist/webgpu/types/3d/skeletal-animation.d.ts +90 -0
  193. package/dist/webgpu/types/camera/camera-2d.d.ts +53 -0
  194. package/dist/webgpu/types/camera/camera-2d.test.d.ts +1 -0
  195. package/dist/webgpu/types/camera/camera-3d.d.ts +81 -0
  196. package/dist/webgpu/types/camera/camera-3d.test.d.ts +1 -0
  197. package/dist/webgpu/types/camera/index.d.ts +2 -0
  198. package/dist/webgpu/types/compute/compute-builder.d.ts +123 -0
  199. package/dist/webgpu/types/compute/compute-builder.test.d.ts +1 -0
  200. package/dist/webgpu/types/core/constants.d.ts +59 -0
  201. package/dist/webgpu/types/core/constants.test.d.ts +1 -0
  202. package/dist/webgpu/types/core/index.d.ts +2 -0
  203. package/dist/webgpu/types/core/math.d.ts +37 -0
  204. package/dist/webgpu/types/core/types.d.ts +125 -0
  205. package/dist/webgpu/types/core/types.test.d.ts +1 -0
  206. package/dist/webgpu/types/geometry/built-in.d.ts +58 -0
  207. package/dist/webgpu/types/geometry/built-in.test.d.ts +1 -0
  208. package/dist/webgpu/types/geometry/geometry-builder.d.ts +281 -0
  209. package/dist/webgpu/types/geometry/geometry-builder.test.d.ts +1 -0
  210. package/dist/webgpu/types/geometry/index.d.ts +2 -0
  211. package/dist/webgpu/types/index.d.ts +32 -0
  212. package/dist/webgpu/types/particle/emitter.d.ts +36 -0
  213. package/dist/webgpu/types/shaders/index.d.ts +2 -0
  214. package/dist/webgpu/types/shaders/runtime-transpile.d.ts +18 -0
  215. package/dist/webgpu/types/shaders/sprite-2d.wgsl.d.ts +10 -0
  216. package/dist/webgpu/types/shaders/typegpu.d.ts +9 -0
  217. package/dist/webgpu/types/shaders/utils.d.ts +28 -0
  218. package/dist/webgpu/types/shaders/utils.test.d.ts +1 -0
  219. package/dist/webgpu/types/spritesheet/index.d.ts +1 -0
  220. package/dist/webgpu/types/spritesheet/spritesheet.d.ts +57 -0
  221. package/dist/webgpu/types/spritesheet/spritesheet.test.d.ts +1 -0
  222. package/package.json +96 -26
  223. package/dist/core/binary-codec/binary-codec.js +0 -354
  224. package/dist/core/binary-codec/index.js +0 -1
  225. package/dist/core/driver/driver.js +0 -47
  226. package/dist/core/driver/drivers/immediate.js +0 -61
  227. package/dist/core/driver/drivers/index.js +0 -3
  228. package/dist/core/driver/drivers/raf.js +0 -62
  229. package/dist/core/driver/drivers/timeout.js +0 -71
  230. package/dist/core/driver/index.js +0 -2
  231. package/dist/core/events/event-system.js +0 -88
  232. package/dist/core/events/index.js +0 -1
  233. package/dist/core/fixed-ticker/fixed-ticker.js +0 -105
  234. package/dist/core/fixed-ticker/index.js +0 -1
  235. package/dist/core/generate-id/generate-id.js +0 -25
  236. package/dist/core/generate-id/index.js +0 -1
  237. package/dist/core/index.js +0 -10
  238. package/dist/core/input/index.js +0 -2
  239. package/dist/core/input/manager.js +0 -211
  240. package/dist/core/input/sources/browser.js +0 -29
  241. package/dist/core/input/sources/index.js +0 -1
  242. package/dist/core/lerp/index.js +0 -1
  243. package/dist/core/lerp/lerp.js +0 -42
  244. package/dist/core/navmesh/index.js +0 -1
  245. package/dist/core/navmesh/navmesh-worker-pool.js +0 -180
  246. package/dist/core/navmesh/navmesh.js +0 -799
  247. package/dist/core/navmesh/navmesh.worker.js +0 -79
  248. package/dist/core/pooled-codec/index.js +0 -1
  249. package/dist/core/pooled-codec/pooled-codec.js +0 -410
  250. package/dist/core/prediction/index.js +0 -1
  251. package/dist/core/prediction/prediction.js +0 -99
  252. package/dist/core.esm.js +0 -1
  253. package/dist/core.js +0 -1
  254. package/dist/ecs/component-store.js +0 -175
  255. package/dist/ecs/component.js +0 -43
  256. package/dist/ecs/entity-handle.js +0 -515
  257. package/dist/ecs/example.js +0 -125
  258. package/dist/ecs/index.js +0 -4
  259. package/dist/ecs/system-builder.js +0 -249
  260. package/dist/ecs/world-systems.js +0 -79
  261. package/dist/ecs/world.js +0 -767
  262. package/dist/game/index.js +0 -1
  263. package/dist/game/loop/index.js +0 -1
  264. package/dist/game/loop/loop.js +0 -108
  265. package/dist/index.js +0 -26
  266. package/dist/net/adapters/browser-websocket.js +0 -74
  267. package/dist/net/adapters/bun-websocket.js +0 -245
  268. package/dist/net/buffer-pool.js +0 -89
  269. package/dist/net/client.js +0 -586
  270. package/dist/net/index.js +0 -58
  271. package/dist/net/server.js +0 -974
  272. package/dist/net/types.js +0 -31
  273. package/dist/net/validators.js +0 -88
  274. package/dist/protocol/index.js +0 -92
  275. package/dist/protocol/intent/define-intent.js +0 -125
  276. package/dist/protocol/intent/index.js +0 -91
  277. package/dist/protocol/intent/intent-registry.js +0 -91
  278. package/dist/protocol/rpc/define-rpc.js +0 -84
  279. package/dist/protocol/rpc/index.js +0 -3
  280. package/dist/protocol/rpc/rpc-registry.js +0 -159
  281. package/dist/protocol/rpc/rpc.js +0 -12
  282. package/dist/protocol/snapshot/index.js +0 -43
  283. package/dist/protocol/snapshot/snapshot-codec.js +0 -67
  284. package/dist/protocol/snapshot/snapshot-registry.js +0 -168
  285. package/dist/protocol/snapshot/snapshot.js +0 -30
  286. package/src/core/binary-codec/README.md +0 -60
  287. package/src/core/binary-codec/binary-codec.test.ts +0 -300
  288. package/src/core/binary-codec/binary-codec.ts +0 -448
  289. package/src/core/binary-codec/index.ts +0 -1
  290. package/src/core/driver/README.md +0 -97
  291. package/src/core/driver/driver.test.ts +0 -414
  292. package/src/core/driver/driver.ts +0 -71
  293. package/src/core/driver/drivers/immediate.ts +0 -66
  294. package/src/core/driver/drivers/index.ts +0 -3
  295. package/src/core/driver/drivers/raf.ts +0 -67
  296. package/src/core/driver/drivers/timeout.ts +0 -77
  297. package/src/core/driver/index.ts +0 -2
  298. package/src/core/events/README.md +0 -47
  299. package/src/core/events/event-system.test.ts +0 -243
  300. package/src/core/events/event-system.ts +0 -140
  301. package/src/core/events/index.ts +0 -1
  302. package/src/core/fixed-ticker/README.md +0 -77
  303. package/src/core/fixed-ticker/fixed-ticker.test.ts +0 -151
  304. package/src/core/fixed-ticker/fixed-ticker.ts +0 -174
  305. package/src/core/fixed-ticker/index.ts +0 -1
  306. package/src/core/generate-id/README.md +0 -18
  307. package/src/core/generate-id/generate-id.test.ts +0 -79
  308. package/src/core/generate-id/generate-id.ts +0 -37
  309. package/src/core/generate-id/index.ts +0 -1
  310. package/src/core/index.ts +0 -10
  311. package/src/core/input/README.md +0 -24
  312. package/src/core/input/index.ts +0 -2
  313. package/src/core/input/manager.ts +0 -259
  314. package/src/core/input/sources/browser.ts +0 -39
  315. package/src/core/input/sources/index.ts +0 -1
  316. package/src/core/input/types.ts +0 -40
  317. package/src/core/lerp/README.md +0 -79
  318. package/src/core/lerp/index.ts +0 -1
  319. package/src/core/lerp/lerp.test.ts +0 -90
  320. package/src/core/lerp/lerp.ts +0 -42
  321. package/src/core/navmesh/README.md +0 -164
  322. package/src/core/navmesh/index.ts +0 -1
  323. package/src/core/navmesh/navmesh-worker-pool.ts +0 -236
  324. package/src/core/navmesh/navmesh-workers.test.ts +0 -356
  325. package/src/core/navmesh/navmesh.test.ts +0 -344
  326. package/src/core/navmesh/navmesh.ts +0 -1047
  327. package/src/core/navmesh/navmesh.worker.ts +0 -147
  328. package/src/core/pooled-codec/README.md +0 -70
  329. package/src/core/pooled-codec/index.ts +0 -1
  330. package/src/core/pooled-codec/pooled-codec.test.ts +0 -862
  331. package/src/core/pooled-codec/pooled-codec.ts +0 -504
  332. package/src/core/prediction/README.md +0 -64
  333. package/src/core/prediction/index.ts +0 -1
  334. package/src/core/prediction/prediction.test.ts +0 -423
  335. package/src/core/prediction/prediction.ts +0 -112
  336. package/src/ecs/README.md +0 -427
  337. package/src/ecs/benchmark.test.ts +0 -1645
  338. package/src/ecs/component-store.ts +0 -198
  339. package/src/ecs/component.ts +0 -90
  340. package/src/ecs/entity-handle.test.ts +0 -393
  341. package/src/ecs/entity-handle.ts +0 -563
  342. package/src/ecs/example.ts +0 -152
  343. package/src/ecs/index.ts +0 -4
  344. package/src/ecs/system-builder.ts +0 -404
  345. package/src/ecs/world-systems.ts +0 -83
  346. package/src/ecs/world.test.ts +0 -310
  347. package/src/ecs/world.ts +0 -904
  348. package/src/game/index.ts +0 -1
  349. package/src/game/loop/README.md +0 -32
  350. package/src/game/loop/index.ts +0 -1
  351. package/src/game/loop/loop.ts +0 -236
  352. package/src/index.ts +0 -32
  353. package/src/net/README.md +0 -474
  354. package/src/net/adapters/browser-websocket.ts +0 -86
  355. package/src/net/adapters/bun-websocket.ts +0 -292
  356. package/src/net/buffer-pool.ts +0 -106
  357. package/src/net/client.test.ts +0 -807
  358. package/src/net/client.ts +0 -695
  359. package/src/net/index.ts +0 -60
  360. package/src/net/server.test.ts +0 -799
  361. package/src/net/server.ts +0 -1152
  362. package/src/net/types.ts +0 -228
  363. package/src/net/validators.ts +0 -104
  364. package/src/protocol/README.md +0 -469
  365. package/src/protocol/index.ts +0 -93
  366. package/src/protocol/intent/define-intent.test.ts +0 -397
  367. package/src/protocol/intent/define-intent.ts +0 -201
  368. package/src/protocol/intent/index.ts +0 -94
  369. package/src/protocol/intent/intent-registry.test.ts +0 -198
  370. package/src/protocol/intent/intent-registry.ts +0 -112
  371. package/src/protocol/intent/intent.ts +0 -12
  372. package/src/protocol/rpc/define-rpc.test.ts +0 -141
  373. package/src/protocol/rpc/define-rpc.ts +0 -113
  374. package/src/protocol/rpc/index.ts +0 -3
  375. package/src/protocol/rpc/rpc-registry.test.ts +0 -168
  376. package/src/protocol/rpc/rpc-registry.ts +0 -176
  377. package/src/protocol/rpc/rpc.ts +0 -37
  378. package/src/protocol/snapshot/index.ts +0 -45
  379. package/src/protocol/snapshot/snapshot-codec.test.ts +0 -138
  380. package/src/protocol/snapshot/snapshot-codec.ts +0 -87
  381. package/src/protocol/snapshot/snapshot-registry.test.ts +0 -310
  382. package/src/protocol/snapshot/snapshot-registry.ts +0 -201
  383. package/src/protocol/snapshot/snapshot.test.ts +0 -76
  384. package/src/protocol/snapshot/snapshot.ts +0 -41
  385. /package/dist/{core → types/core}/binary-codec/index.d.ts +0 -0
  386. /package/dist/{core → types/core}/driver/driver.d.ts +0 -0
  387. /package/dist/{core → types/core}/driver/drivers/immediate.d.ts +0 -0
  388. /package/dist/{core → types/core}/driver/drivers/index.d.ts +0 -0
  389. /package/dist/{core → types/core}/driver/drivers/raf.d.ts +0 -0
  390. /package/dist/{core → types/core}/driver/drivers/timeout.d.ts +0 -0
  391. /package/dist/{core → types/core}/driver/index.d.ts +0 -0
  392. /package/dist/{core → types/core}/events/index.d.ts +0 -0
  393. /package/dist/{core → types/core}/fixed-ticker/fixed-ticker.d.ts +0 -0
  394. /package/dist/{core → types/core}/fixed-ticker/index.d.ts +0 -0
  395. /package/dist/{core → types/core}/generate-id/generate-id.d.ts +0 -0
  396. /package/dist/{core → types/core}/generate-id/index.d.ts +0 -0
  397. /package/dist/{core → types/core}/input/sources/browser.d.ts +0 -0
  398. /package/dist/{core → types/core}/input/sources/index.d.ts +0 -0
  399. /package/dist/{core → types/core}/input/types.d.ts +0 -0
  400. /package/dist/{core → types/core}/lerp/index.d.ts +0 -0
  401. /package/dist/{core → types/core}/lerp/lerp.d.ts +0 -0
  402. /package/dist/{core → types/core}/navmesh/index.d.ts +0 -0
  403. /package/dist/{core → types/core}/navmesh/navmesh-worker-pool.d.ts +0 -0
  404. /package/dist/{core → types/core}/navmesh/navmesh.worker.d.ts +0 -0
  405. /package/dist/{core → types/core}/pooled-codec/index.d.ts +0 -0
  406. /package/dist/{core → types/core}/pooled-codec/pooled-codec.d.ts +0 -0
  407. /package/dist/{core → types/core}/prediction/index.d.ts +0 -0
  408. /package/dist/{core → types/core}/prediction/prediction.d.ts +0 -0
  409. /package/dist/{ecs → types/ecs}/component-store.d.ts +0 -0
  410. /package/dist/{ecs → types/ecs}/component.d.ts +0 -0
  411. /package/dist/{ecs → types/ecs}/entity-handle.d.ts +0 -0
  412. /package/dist/{ecs → types/ecs}/example.d.ts +0 -0
  413. /package/dist/{ecs → types/ecs}/index.d.ts +0 -0
  414. /package/dist/{ecs → types/ecs}/system-builder.d.ts +0 -0
  415. /package/dist/{ecs → types/ecs}/world-systems.d.ts +0 -0
  416. /package/dist/{game → types/game}/index.d.ts +0 -0
  417. /package/dist/{game → types/game}/loop/index.d.ts +0 -0
  418. /package/dist/{net → types/net}/adapters/browser-websocket.d.ts +0 -0
  419. /package/dist/{net → types/net}/adapters/bun-websocket.d.ts +0 -0
  420. /package/dist/{net → types/net}/buffer-pool.d.ts +0 -0
  421. /package/dist/{net → types/net}/client.d.ts +0 -0
  422. /package/dist/{net → types/net}/server.d.ts +0 -0
  423. /package/dist/{net → types/net}/types.d.ts +0 -0
  424. /package/dist/{net → types/net}/validators.d.ts +0 -0
  425. /package/dist/{protocol → types/protocol}/index.d.ts +0 -0
  426. /package/dist/{protocol → types/protocol}/intent/define-intent.d.ts +0 -0
  427. /package/dist/{protocol → types/protocol}/intent/index.d.ts +0 -0
  428. /package/dist/{protocol → types/protocol}/intent/intent-registry.d.ts +0 -0
  429. /package/dist/{protocol → types/protocol}/intent/intent.d.ts +0 -0
  430. /package/dist/{protocol → types/protocol}/rpc/define-rpc.d.ts +0 -0
  431. /package/dist/{protocol → types/protocol}/rpc/index.d.ts +0 -0
  432. /package/dist/{protocol → types/protocol}/rpc/rpc-registry.d.ts +0 -0
  433. /package/dist/{protocol → types/protocol}/rpc/rpc.d.ts +0 -0
  434. /package/dist/{protocol → types/protocol}/snapshot/index.d.ts +0 -0
  435. /package/dist/{protocol → types/protocol}/snapshot/snapshot-codec.d.ts +0 -0
  436. /package/dist/{protocol → types/protocol}/snapshot/snapshot-registry.d.ts +0 -0
  437. /package/dist/{protocol → types/protocol}/snapshot/snapshot.d.ts +0 -0
  438. /package/dist/{core/input/types.js → webgpu/types/2d/animation.test.d.ts} +0 -0
  439. /package/dist/{protocol/intent/intent.js → webgpu/types/2d/sprite-accessor.test.d.ts} +0 -0
@@ -1,515 +0,0 @@
1
- /**
2
- * Syntactic sugar wrapper for entity operations.
3
- *
4
- * **Optimized for performance** - Uses raw component store access with inline caching
5
- * to bypass validation overhead in the public World API.
6
- *
7
- * Performance optimizations:
8
- * - Inline caching: Component indices cached on first access (~29% faster)
9
- * - Direct store access: Skips validation checks (has-component, error throwing)
10
- * - Zero allocations: No intermediate objects created
11
- *
12
- * @example
13
- * ```typescript
14
- * // Fluent chaining API
15
- * const player = world.entity(world.spawn())
16
- * .add(Transform, { x: 0, y: 0, rotation: 0 })
17
- * .add(Health, { current: 100, max: 100 })
18
- * .add(Velocity, { vx: 0, vy: 0 });
19
- *
20
- * // Use the handle - with inline cached store access
21
- * player.update(Transform, { x: 10 });
22
- * const health = player.get(Health);
23
- *
24
- * // Access raw entity ID
25
- * console.log(player.id); // number
26
- * ```
27
- *
28
- * @example
29
- * ```typescript
30
- * // EntityHandle with inline caching is faster:
31
- * // World API - validates every call:
32
- * world.update(entity, Transform, { x: 10 }); // Map.get() + hasComponentBit + validation
33
- * world.update(entity, Transform, { x: 20 }); // Map.get() + hasComponentBit + validation
34
- *
35
- * // EntityHandle - cached direct access:
36
- * handle.update(Transform, { x: 10 }); // Map.get() + cache + store.update
37
- * handle.update(Transform, { x: 20 }); // Cached! store.update only
38
- * ```
39
- */
40
- export class EntityHandle {
41
- /**
42
- * Creates an entity handle wrapping a world and entity ID.
43
- *
44
- * **Note**: Prefer using `world.entity(id)` factory method for cleaner code.
45
- *
46
- * @param world - The world managing this entity
47
- * @param id - The entity ID
48
- *
49
- * @example
50
- * ```typescript
51
- * // Direct construction (verbose)
52
- * const handle = new EntityHandle(world, world.spawn());
53
- *
54
- * // Preferred factory method (cleaner)
55
- * const handle = world.entity(world.spawn());
56
- * ```
57
- */
58
- constructor(world, _id) {
59
- this.world = world;
60
- this._id = _id;
61
- // Instance batching state
62
- this.isBatching = false;
63
- }
64
- /**
65
- * Internal method to reset the entity ID for handle reuse.
66
- * @internal
67
- */
68
- _reset(id) {
69
- this._id = id;
70
- }
71
- /**
72
- * Get component index with inline caching on the Component object.
73
- * First call does Map.get() and caches on component.__cachedIndex.
74
- * Subsequent calls use the cached value (~29% faster).
75
- *
76
- * @internal
77
- */
78
- getComponentIndex(component) {
79
- // Check if index is already cached on the component object
80
- let index = component.__cachedIndex;
81
- if (index === undefined) {
82
- // First access: lookup and cache
83
- index = component.__worldIndex;
84
- component.__cachedIndex = index;
85
- }
86
- return index;
87
- }
88
- /**
89
- * Get direct TypedArray access to a specific field.
90
- * Cached on Component object for maximum performance.
91
- *
92
- * **Zero-cost abstraction** - Same speed as RAW API after first access.
93
- *
94
- * @param component - Component definition
95
- * @param field - Field name
96
- * @returns TypedArray with direct access to the field
97
- *
98
- * @example
99
- * ```typescript
100
- * const transformX = entity.field(Transform, 'x');
101
- * const velocityVx = entity.field(Velocity, 'vx');
102
- *
103
- * // Direct array access - same as RAW API!
104
- * transformX[entity.id] += velocityVx[entity.id] * dt;
105
- * ```
106
- */
107
- field(component, field) {
108
- // Cache key on component object
109
- const cacheKey = `__fieldCache_${String(field)}`;
110
- let array = component[cacheKey];
111
- if (array === undefined) {
112
- // First access: get store and cache array
113
- const index = this.getComponentIndex(component);
114
- array = this.world.componentStoresArray[index].getFieldArray(field);
115
- component[cacheKey] = array;
116
- }
117
- return array;
118
- }
119
- /**
120
- * Add a component to this entity with initial data.
121
- * Returns `this` for method chaining.
122
- *
123
- * @param component - Component definition to add
124
- * @param data - Initial component data
125
- * @returns This handle for chaining
126
- *
127
- * @example
128
- * ```typescript
129
- * entity
130
- * .add(Transform, { x: 0, y: 0, rotation: 0 })
131
- * .add(Health, { current: 100, max: 100 });
132
- * ```
133
- */
134
- add(component, data) {
135
- this.world.add(this._id, component, data);
136
- return this;
137
- }
138
- /**
139
- * Get component data for this entity.
140
- * Returns a readonly reusable object (zero allocations).
141
- *
142
- * In batch mode, returns cached data if available (from prepare() call).
143
- *
144
- * @param component - Component to retrieve
145
- * @returns Readonly component data
146
- *
147
- * @example
148
- * ```typescript
149
- * const transform = entity.get(Transform);
150
- * console.log(transform.x, transform.y);
151
- * ```
152
- */
153
- get(component) {
154
- // In batch mode, check inline cache first
155
- if (this.isBatching) {
156
- const cached = component.__batchCache;
157
- if (cached !== undefined) {
158
- return cached;
159
- }
160
- }
161
- const index = this.getComponentIndex(component);
162
- return this.world.componentStoresArray[index].get(this._id);
163
- }
164
- /**
165
- * Pre-fetch and cache component data for batch mode.
166
- * Use this before get() calls in beginUpdate() blocks for better performance.
167
- *
168
- * Only has effect in batch mode - does nothing when called outside beginUpdate().
169
- *
170
- * @param components - Components to pre-fetch
171
- * @returns This handle for chaining
172
- *
173
- * @example
174
- * ```typescript
175
- * entity.beginUpdate().prepare(Transform, Velocity);
176
- *
177
- * const transform = entity.get(Transform); // Uses cached data
178
- * const velocity = entity.get(Velocity); // Uses cached data
179
- *
180
- * entity
181
- * .setField(Transform, 'x', transform.x + velocity.vx * dt)
182
- * .setField(Transform, 'y', transform.y + velocity.vy * dt)
183
- * .flush();
184
- * ```
185
- */
186
- prepare(...components) {
187
- if (this.isBatching) {
188
- const prepared = EntityHandle.preparedComponents;
189
- let count = EntityHandle.preparedCount;
190
- for (let i = 0; i < components.length; i++) {
191
- const component = components[i];
192
- const index = this.getComponentIndex(component);
193
- const data = this.world.componentStoresArray[index].get(this._id);
194
- component.__batchCache = data;
195
- // Track for cleanup
196
- if (count < prepared.length) {
197
- prepared[count] = component;
198
- }
199
- else {
200
- prepared.push(component);
201
- }
202
- count++;
203
- }
204
- EntityHandle.preparedCount = count;
205
- }
206
- return this;
207
- }
208
- /**
209
- * Update specific fields of a component.
210
- * Returns `this` for method chaining.
211
- *
212
- * More efficient than get + set for partial changes.
213
- *
214
- * @param component - Component to update
215
- * @param data - Partial data to update
216
- * @returns This handle for chaining
217
- *
218
- * @example
219
- * ```typescript
220
- * // Update single field
221
- * entity.update(Transform, { x: 150 });
222
- *
223
- * // Chain multiple updates
224
- * entity
225
- * .update(Transform, { x: 100, y: 200 })
226
- * .update(Health, { current: 50 });
227
- * ```
228
- */
229
- update(component, data) {
230
- const index = this.getComponentIndex(component);
231
- this.world.componentStoresArray[index].update(this._id, data);
232
- return this;
233
- }
234
- /**
235
- * Update fields using an updater function that mutates the component data directly.
236
- * Zero allocations - the function mutates the mutable data object in place.
237
- *
238
- * @param component - Component to update
239
- * @param updater - Function that receives mutable data and mutates it directly
240
- * @returns This handle for chaining
241
- *
242
- * @example
243
- * ```typescript
244
- * // Mutate fields directly
245
- * entity.setFields(Transform, function (t) {
246
- * t.x += velocity.vx * dt;
247
- * t.y += velocity.vy * dt;
248
- * });
249
- *
250
- * // Conditional mutation
251
- * entity.setFields(Health, function (h) {
252
- * if (h.current < h.max) {
253
- * h.current += 5;
254
- * }
255
- * });
256
- * ```
257
- */
258
- setFields(component, updater) {
259
- const index = this.getComponentIndex(component);
260
- const store = this.world.componentStoresArray[index];
261
- const mutable = store.getMutable(this._id);
262
- updater(mutable);
263
- store.set(this._id, mutable);
264
- return this;
265
- }
266
- /**
267
- * Set a single field directly without allocating an object.
268
- * Zero-cost operation - same speed as RAW API.
269
- *
270
- * When batching is enabled (via beginUpdate()), this queues the update
271
- * instead of applying it immediately. Call flush() to apply batched updates.
272
- *
273
- * @param component - Component to update
274
- * @param field - Field name
275
- * @param value - New value
276
- * @returns This handle for chaining
277
- *
278
- * @example
279
- * ```typescript
280
- * // Immediate update
281
- * entity.setField(Transform, 'x', 150);
282
- *
283
- * // Batched updates (reduced allocations, better JIT)
284
- * entity.beginUpdate()
285
- * .setField(Transform, 'x', 150)
286
- * .setField(Transform, 'y', 200)
287
- * .setField(Health, 'current', 50)
288
- * .flush();
289
- * ```
290
- */
291
- setField(component, field, value) {
292
- const index = this.getComponentIndex(component);
293
- const store = this.world.componentStoresArray[index];
294
- const array = store.getFieldArray(field);
295
- if (this.isBatching) {
296
- // Queue update for batching using parallel arrays
297
- const len = EntityHandle.batchLength;
298
- EntityHandle.batchArrays[len] = array;
299
- EntityHandle.batchIndices[len] = this._id;
300
- EntityHandle.batchValues[len] = value;
301
- EntityHandle.batchLength++;
302
- }
303
- else {
304
- // Apply immediately
305
- array[this._id] = value;
306
- }
307
- return this;
308
- }
309
- /**
310
- * Get a single field value directly.
311
- * More efficient than get() when you only need one field.
312
- *
313
- * @param component - Component to read from
314
- * @param field - Field name
315
- * @returns Field value
316
- *
317
- * @example
318
- * ```typescript
319
- * const x = entity.getField(Transform, 'x');
320
- * const health = entity.getField(Health, 'current');
321
- * ```
322
- */
323
- getField(component, field) {
324
- const index = this.getComponentIndex(component);
325
- const store = this.world.componentStoresArray[index];
326
- const array = store.getFieldArray(field);
327
- return array[this._id];
328
- }
329
- /**
330
- * Set component data for this entity, overwriting all fields.
331
- * Returns `this` for method chaining.
332
- *
333
- * @param component - Component to set
334
- * @param data - Complete component data
335
- * @returns This handle for chaining
336
- *
337
- * @example
338
- * ```typescript
339
- * entity.set(Transform, { x: 100, y: 200, rotation: 0 });
340
- * ```
341
- */
342
- set(component, data) {
343
- const index = this.getComponentIndex(component);
344
- this.world.componentStoresArray[index].set(this._id, data);
345
- return this;
346
- }
347
- /**
348
- * Check if this entity has a specific component.
349
- *
350
- * @param component - Component to check
351
- * @returns True if entity has the component
352
- *
353
- * @example
354
- * ```typescript
355
- * if (entity.has(Health)) {
356
- * const health = entity.get(Health);
357
- * }
358
- * ```
359
- */
360
- has(component) {
361
- return this.world.has(this._id, component);
362
- }
363
- /**
364
- * Remove a component from this entity.
365
- * Returns `this` for method chaining.
366
- *
367
- * @param component - Component to remove
368
- * @returns This handle for chaining
369
- *
370
- * @example
371
- * ```typescript
372
- * entity
373
- * .remove(Velocity)
374
- * .remove(Health);
375
- * ```
376
- */
377
- remove(component) {
378
- this.world.remove(this._id, component);
379
- return this;
380
- }
381
- /**
382
- * Despawn this entity, removing all components.
383
- * The entity ID will be reused.
384
- *
385
- * **Note**: This handle becomes invalid after despawning.
386
- *
387
- * @example
388
- * ```typescript
389
- * entity.despawn();
390
- * // entity is now invalid - don't use it!
391
- * ```
392
- */
393
- despawn() {
394
- this.world.despawn(this._id);
395
- }
396
- /**
397
- * Check if this entity is alive.
398
- *
399
- * @returns True if entity exists in the world
400
- *
401
- * @example
402
- * ```typescript
403
- * if (entity.isAlive()) {
404
- * entity.update(Health, { current: 0 });
405
- * }
406
- * ```
407
- */
408
- isAlive() {
409
- return this.world.isAlive(this._id);
410
- }
411
- /**
412
- * Get the raw entity ID.
413
- *
414
- * Use this when you need to pass the entity to raw World API methods
415
- * or store the ID for later use.
416
- *
417
- * @example
418
- * ```typescript
419
- * const id = entity.id;
420
- * world.add(id, Transform, { x: 0, y: 0, rotation: 0 });
421
- * ```
422
- */
423
- get id() {
424
- return this._id;
425
- }
426
- /**
427
- * Get a mutable copy of component data.
428
- *
429
- * **Note**: This allocates a new object. Use sparingly in hot paths.
430
- *
431
- * @param component - Component to retrieve
432
- * @returns Mutable copy of component data
433
- *
434
- * @example
435
- * ```typescript
436
- * const transform = entity.getMutable(Transform);
437
- * transform.x = 100; // OK to mutate
438
- * entity.set(Transform, transform);
439
- * ```
440
- */
441
- getMutable(component) {
442
- const index = this.getComponentIndex(component);
443
- return this.world.componentStoresArray[index].getMutable(this._id);
444
- }
445
- /**
446
- * Begin batching updates for better performance.
447
- * All setField() calls will be queued until flush() is called.
448
- *
449
- * **Benefits:**
450
- * - Reduced allocations (reusable batch array)
451
- * - Better JIT optimization (predictable pattern)
452
- * - Reduced GC pressure
453
- *
454
- * @returns This handle for chaining
455
- *
456
- * @example
457
- * ```typescript
458
- * // Batch multiple field updates
459
- * entity.beginUpdate()
460
- * .setField(Transform, 'x', 150)
461
- * .setField(Transform, 'y', 200)
462
- * .setField(Transform, 'rotation', 1.5)
463
- * .flush();
464
- * ```
465
- */
466
- beginUpdate() {
467
- this.isBatching = true;
468
- EntityHandle.batchLength = 0;
469
- return this;
470
- }
471
- /**
472
- * Apply all batched updates.
473
- * Resets batching mode - subsequent setField() calls apply immediately.
474
- *
475
- * @returns This handle for chaining
476
- *
477
- * @example
478
- * ```typescript
479
- * entity.beginUpdate()
480
- * .setField(Transform, 'x', 150)
481
- * .setField(Health, 'current', 50)
482
- * .flush(); // Applies both updates
483
- * ```
484
- */
485
- flush() {
486
- const arrays = EntityHandle.batchArrays;
487
- const indices = EntityHandle.batchIndices;
488
- const values = EntityHandle.batchValues;
489
- const len = EntityHandle.batchLength;
490
- // Apply all batched updates
491
- for (let i = 0; i < len; i++) {
492
- arrays[i][indices[i]] = values[i];
493
- }
494
- // Clear prepared component caches
495
- const prepared = EntityHandle.preparedComponents;
496
- const prepCount = EntityHandle.preparedCount;
497
- for (let i = 0; i < prepCount; i++) {
498
- const component = prepared[i];
499
- component.__batchCache = undefined;
500
- }
501
- // Reset batching state
502
- this.isBatching = false;
503
- EntityHandle.batchLength = 0;
504
- EntityHandle.preparedCount = 0;
505
- return this;
506
- }
507
- }
508
- // Reusable update batch - parallel arrays for better cache locality
509
- EntityHandle.batchArrays = [];
510
- EntityHandle.batchIndices = [];
511
- EntityHandle.batchValues = [];
512
- EntityHandle.batchLength = 0;
513
- // Track prepared components to clear cache
514
- EntityHandle.preparedComponents = [];
515
- EntityHandle.preparedCount = 0;
@@ -1,125 +0,0 @@
1
- /**
2
- * ECS Usage Example
3
- *
4
- * This example demonstrates how to use the ECS for a simple game.
5
- */
6
- import { defineComponent, World } from "./index";
7
- import { BinaryCodec } from "../core/binary-codec";
8
- // 1. Define components using BinaryCodec schemas
9
- const Transform = defineComponent("Transform", {
10
- x: BinaryCodec.f32,
11
- y: BinaryCodec.f32,
12
- rotation: BinaryCodec.f32,
13
- });
14
- const Velocity = defineComponent("Velocity", {
15
- vx: BinaryCodec.f32,
16
- vy: BinaryCodec.f32,
17
- });
18
- const Health = defineComponent("Health", {
19
- current: BinaryCodec.u16,
20
- max: BinaryCodec.u16,
21
- });
22
- const Damage = defineComponent("Damage", {
23
- amount: BinaryCodec.u16,
24
- });
25
- // 2. Create systems
26
- class MovementSystem {
27
- update(world, deltaTime) {
28
- for (const entity of world.query(Transform, Velocity)) {
29
- const transform = world.get(entity, Transform); // Readonly!
30
- const velocity = world.get(entity, Velocity); // Readonly!
31
- // Update position using update() (efficient partial update)
32
- world.update(entity, Transform, {
33
- x: transform.x + velocity.vx * deltaTime,
34
- y: transform.y + velocity.vy * deltaTime,
35
- });
36
- }
37
- }
38
- }
39
- class HealthSystem {
40
- update(world) {
41
- for (const entity of world.query(Health)) {
42
- const health = world.get(entity, Health);
43
- // Despawn dead entities
44
- if (health.current <= 0) {
45
- console.log(`Entity ${entity} died`);
46
- world.despawn(entity);
47
- }
48
- }
49
- }
50
- }
51
- class CombatSystem {
52
- update(world) {
53
- // Simple collision-based damage (in real game, use spatial partitioning)
54
- const combatants = Array.from(world.query(Transform, Health, Damage));
55
- for (let i = 0; i < combatants.length; i++) {
56
- for (let j = i + 1; j < combatants.length; j++) {
57
- const e1 = combatants[i];
58
- const e2 = combatants[j];
59
- const t1 = world.get(e1, Transform);
60
- const t2 = world.get(e2, Transform);
61
- // Check collision (simple distance check)
62
- const dx = t1.x - t2.x;
63
- const dy = t1.y - t2.y;
64
- const dist = Math.sqrt(dx * dx + dy * dy);
65
- if (dist < 10) {
66
- // Apply damage
67
- const d1 = world.get(e1, Damage);
68
- const d2 = world.get(e2, Damage);
69
- world.update(e1, Health, { current: world.get(e1, Health).current - d2.amount });
70
- world.update(e2, Health, { current: world.get(e2, Health).current - d1.amount });
71
- console.log(`Entities ${e1} and ${e2} collided! Applying damage.`);
72
- }
73
- }
74
- }
75
- }
76
- }
77
- // 3. Create world and spawn entities
78
- function runExample() {
79
- const world = new World({
80
- maxEntities: 1000,
81
- components: [Transform, Velocity, Health, Damage],
82
- });
83
- // Spawn player
84
- const player = world.spawn();
85
- world.add(player, Transform, { x: 0, y: 0, rotation: 0 });
86
- world.add(player, Velocity, { vx: 100, vy: 0 });
87
- world.add(player, Health, { current: 100, max: 100 });
88
- world.add(player, Damage, { amount: 10 });
89
- // Spawn enemies
90
- for (let i = 0; i < 5; i++) {
91
- const enemy = world.spawn();
92
- world.add(enemy, Transform, { x: 200 + i * 50, y: 0, rotation: 0 });
93
- world.add(enemy, Velocity, { vx: -50, vy: 0 });
94
- world.add(enemy, Health, { current: 50, max: 50 });
95
- world.add(enemy, Damage, { amount: 5 });
96
- }
97
- console.log(`Spawned ${world.getEntityCount()} entities`);
98
- // 4. Create systems
99
- const movementSystem = new MovementSystem();
100
- const combatSystem = new CombatSystem();
101
- const healthSystem = new HealthSystem();
102
- // 5. Game loop
103
- const deltaTime = 0.016; // 60 FPS
104
- let tick = 0;
105
- const interval = setInterval(() => {
106
- tick++;
107
- // Update systems
108
- movementSystem.update(world, deltaTime);
109
- combatSystem.update(world);
110
- healthSystem.update(world);
111
- // Log stats every 10 ticks
112
- if (tick % 10 === 0) {
113
- console.log(`Tick ${tick}: ${world.getEntityCount()} entities alive`);
114
- }
115
- // Stop after 100 ticks or when all entities are dead
116
- if (tick >= 100 || world.getEntityCount() === 0) {
117
- clearInterval(interval);
118
- console.log("Simulation ended");
119
- }
120
- }, deltaTime * 1000);
121
- }
122
- // Run the example
123
- if (import.meta.main) {
124
- runExample();
125
- }
package/dist/ecs/index.js DELETED
@@ -1,4 +0,0 @@
1
- export { defineComponent } from "./component";
2
- export { ComponentStore } from "./component-store";
3
- export { World } from "./world";
4
- export { EntityHandle } from "./entity-handle";