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