create-mud 2.2.17-f52b1476f04ce0be68691e3b021a81e0fb9cce99 → 2.2.17-f88e48e47ceb4a29a3862a3f3b85891490952f0e

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 (317) hide show
  1. package/README.md +4 -2
  2. package/dist/cli.d.ts +1 -2
  3. package/dist/cli.js +2 -9
  4. package/dist/cli.js.map +1 -1
  5. package/{templates → dist/templates}/react/packages/client/src/mud/Synced.tsx +1 -1
  6. package/{templates → dist/templates}/react/packages/contracts/mud.config.ts +7 -0
  7. package/{templates → dist/templates}/react/packages/contracts/test/MoveTest.t.sol +2 -0
  8. package/{templates/react-ecs → dist/templates/react}/packages/contracts/test/WorldTest.t.sol +5 -0
  9. package/{templates/react → dist/templates/react-ecs}/package.json +2 -1
  10. package/{templates → dist/templates}/react-ecs/packages/client/package.json +9 -16
  11. package/dist/templates/react-ecs/packages/client/src/App.tsx +29 -0
  12. package/dist/templates/react-ecs/packages/client/src/mud/createSystemCalls.ts +51 -0
  13. package/dist/templates/react-ecs/packages/client/src/mud/getNetworkConfig.ts +77 -0
  14. package/{templates/react → dist/templates/threejs}/packages/client/index.html +2 -2
  15. package/dist/templates/threejs/packages/client/src/MUDContext.tsx +21 -0
  16. package/dist/templates/threejs/packages/client/src/index.tsx +34 -0
  17. package/{templates/react → dist/templates/threejs}/packages/client/vite.config.ts +7 -2
  18. package/{templates/react-ecs → dist/templates/threejs}/packages/contracts/.env +1 -1
  19. package/dist/templates/vanilla/gitignore +7 -0
  20. package/dist/templates/vanilla/mprocs.yaml +13 -0
  21. package/dist/templates/vanilla/packages/client/gitignore +3 -0
  22. package/dist/templates/vanilla/packages/client/src/mud/createClientComponents.ts +21 -0
  23. package/dist/templates/vanilla/packages/client/src/mud/setup.ts +21 -0
  24. package/dist/templates/vanilla/packages/client/src/mud/setupNetwork.ts +106 -0
  25. package/dist/templates/vanilla/packages/client/src/mud/supportedChains.ts +20 -0
  26. package/dist/templates/vanilla/packages/client/src/mud/world.ts +3 -0
  27. package/{templates/react → dist/templates/vanilla}/packages/client/tsconfig.json +1 -1
  28. package/dist/templates/vanilla/packages/contracts/.env +11 -0
  29. package/dist/templates/vanilla/packages/contracts/gitignore +9 -0
  30. package/dist/templates/vanilla/packages/contracts/mud.config.ts +13 -0
  31. package/{templates/react → dist/templates/vanilla}/packages/contracts/package.json +0 -1
  32. package/{templates/react → dist/templates/vanilla}/packages/contracts/script/PostDeploy.s.sol +5 -1
  33. package/{templates/react/packages/contracts/src/codegen/common.sol → dist/templates/vanilla/packages/contracts/src/codegen/index.sol} +1 -6
  34. package/{templates/react-ecs/packages/contracts/src/codegen/tables/EntityCount.sol → dist/templates/vanilla/packages/contracts/src/codegen/tables/Counter.sol} +35 -35
  35. package/dist/templates/vanilla/packages/contracts/src/codegen/world/IIncrementSystem.sol +13 -0
  36. package/dist/templates/vanilla/packages/contracts/src/codegen/world/IWorld.sol +16 -0
  37. package/dist/templates/vanilla/packages/contracts/src/systems/IncrementSystem.sol +14 -0
  38. package/dist/templates/vanilla/packages/contracts/test/CounterTest.t.sol +31 -0
  39. package/dist/templates/vanilla/packages/contracts/worlds.json +5 -0
  40. package/package.json +11 -17
  41. package/bin/cli.js +0 -4
  42. package/templates/react/.gitignore_ +0 -16
  43. package/templates/react/mprocs.yaml +0 -21
  44. package/templates/react/packages/client/.gitignore_ +0 -1
  45. package/templates/react/packages/client/postcss.config.cjs +0 -6
  46. package/templates/react/packages/client/src/game/useKeyboardMovement.ts +0 -26
  47. package/templates/react/packages/client/src/index.tsx +0 -19
  48. package/templates/react/packages/client/src/mud/Explorer.tsx +0 -32
  49. package/templates/react/packages/client/src/mud/useWorldContract.ts +0 -44
  50. package/templates/react/packages/client/src/ui/AsyncButton.tsx +0 -41
  51. package/templates/react/packages/client/src/ui/ErrorFallback.tsx +0 -58
  52. package/templates/react/packages/client/src/ui/icons/ArrowDownIcon.tsx +0 -22
  53. package/templates/react/packages/client/src/ui/icons/MUDIcon.tsx +0 -25
  54. package/templates/react/packages/client/src/wagmiConfig.ts +0 -49
  55. package/templates/react/packages/client/tailwind.config.ts +0 -10
  56. package/templates/react/packages/contracts/.env +0 -11
  57. package/templates/react/packages/contracts/.gitignore_ +0 -13
  58. package/templates/react/packages/contracts/test/WorldTest.t.sol +0 -16
  59. package/templates/react/packages/contracts/worlds.json +0 -5
  60. package/templates/react-ecs/packages/client/src/App.tsx +0 -74
  61. package/templates/react-ecs/packages/client/src/Providers.tsx +0 -29
  62. package/templates/react-ecs/packages/client/src/common.ts +0 -27
  63. package/templates/react-ecs/packages/client/src/game/GameMap.tsx +0 -112
  64. package/templates/react-ecs/packages/client/src/mud/Synced.tsx +0 -14
  65. package/templates/react-ecs/packages/client/src/mud/recs.ts +0 -6
  66. package/templates/react-ecs/packages/client/src/mud/useSyncStatus.ts +0 -17
  67. package/templates/react-ecs/packages/contracts/mud.config.ts +0 -18
  68. package/templates/react-ecs/packages/contracts/out/IWorld.sol/IWorld.abi.json +0 -2039
  69. package/templates/react-ecs/packages/contracts/src/Entity.sol +0 -20
  70. package/templates/react-ecs/packages/contracts/src/MoveSystem.sol +0 -30
  71. package/templates/react-ecs/packages/contracts/src/SpawnSystem.sol +0 -18
  72. package/templates/react-ecs/packages/contracts/src/codegen/index.sol +0 -8
  73. package/templates/react-ecs/packages/contracts/src/codegen/tables/Owner.sol +0 -202
  74. package/templates/react-ecs/packages/contracts/src/codegen/tables/Position.sol +0 -321
  75. package/templates/react-ecs/packages/contracts/src/codegen/world/IMoveSystem.sol +0 -16
  76. package/templates/react-ecs/packages/contracts/src/codegen/world/ISpawnSystem.sol +0 -15
  77. package/templates/react-ecs/packages/contracts/src/codegen/world/IWorld.sol +0 -17
  78. package/templates/react-ecs/packages/contracts/src/createEntity.sol +0 -11
  79. package/templates/react-ecs/packages/contracts/test/MoveTest.t.sol +0 -39
  80. /package/{templates → dist/templates}/phaser/.eslintrc +0 -0
  81. /package/{templates → dist/templates}/phaser/.gitattributes +0 -0
  82. /package/{templates → dist/templates}/phaser/.vscode/extensions.json +0 -0
  83. /package/{templates → dist/templates}/phaser/.vscode/settings.json +0 -0
  84. /package/{templates/phaser/.gitignore_ → dist/templates/phaser/gitignore} +0 -0
  85. /package/{templates → dist/templates}/phaser/mprocs.yaml +0 -0
  86. /package/{templates → dist/templates}/phaser/package.json +0 -0
  87. /package/{templates → dist/templates}/phaser/packages/art/README.md +0 -0
  88. /package/{templates → dist/templates}/phaser/packages/art/config-sprites.json +0 -0
  89. /package/{templates/phaser/packages/art/.gitignore_ → dist/templates/phaser/packages/art/gitignore} +0 -0
  90. /package/{templates → dist/templates}/phaser/packages/art/package.json +0 -0
  91. /package/{templates → dist/templates}/phaser/packages/art/scripts/cli.mjs +0 -0
  92. /package/{templates → dist/templates}/phaser/packages/art/scripts/export-tiled-types.ts +0 -0
  93. /package/{templates → dist/templates}/phaser/packages/art/sprites/golem/attack/0.png +0 -0
  94. /package/{templates → dist/templates}/phaser/packages/art/sprites/golem/attack/1.png +0 -0
  95. /package/{templates → dist/templates}/phaser/packages/art/sprites/golem/attack/2.png +0 -0
  96. /package/{templates → dist/templates}/phaser/packages/art/sprites/golem/attack/3.png +0 -0
  97. /package/{templates → dist/templates}/phaser/packages/art/sprites/golem/attack/4.png +0 -0
  98. /package/{templates → dist/templates}/phaser/packages/art/sprites/golem/attack/5.png +0 -0
  99. /package/{templates → dist/templates}/phaser/packages/art/sprites/golem/death/0.png +0 -0
  100. /package/{templates → dist/templates}/phaser/packages/art/sprites/golem/death/1.png +0 -0
  101. /package/{templates → dist/templates}/phaser/packages/art/sprites/golem/death/2.png +0 -0
  102. /package/{templates → dist/templates}/phaser/packages/art/sprites/golem/idle/0.png +0 -0
  103. /package/{templates → dist/templates}/phaser/packages/art/sprites/golem/idle/1.png +0 -0
  104. /package/{templates → dist/templates}/phaser/packages/art/sprites/golem/idle/2.png +0 -0
  105. /package/{templates → dist/templates}/phaser/packages/art/sprites/golem/idle/3.png +0 -0
  106. /package/{templates → dist/templates}/phaser/packages/art/tilesets/images/world.png +0 -0
  107. /package/{templates → dist/templates}/phaser/packages/art/tilesets/world.tsx +0 -0
  108. /package/{templates → dist/templates}/phaser/packages/client/.env +0 -0
  109. /package/{templates → dist/templates}/phaser/packages/client/.eslintrc +0 -0
  110. /package/{templates/phaser/packages/client/.gitignore_ → dist/templates/phaser/packages/client/gitignore} +0 -0
  111. /package/{templates → dist/templates}/phaser/packages/client/index.html +0 -0
  112. /package/{templates → dist/templates}/phaser/packages/client/package.json +0 -0
  113. /package/{templates → dist/templates}/phaser/packages/client/public/assets/atlases/atlas.json +0 -0
  114. /package/{templates → dist/templates}/phaser/packages/client/public/assets/atlases/atlas.png +0 -0
  115. /package/{templates → dist/templates}/phaser/packages/client/public/assets/tilesets/world.png +0 -0
  116. /package/{templates → dist/templates}/phaser/packages/client/src/artTypes/world.ts +0 -0
  117. /package/{templates → dist/templates}/phaser/packages/client/src/index.tsx +0 -0
  118. /package/{templates → dist/templates}/phaser/packages/client/src/layers/network/createNetworkLayer.ts +0 -0
  119. /package/{templates → dist/templates}/phaser/packages/client/src/layers/phaser/configurePhaser.ts +0 -0
  120. /package/{templates → dist/templates}/phaser/packages/client/src/layers/phaser/constants.ts +0 -0
  121. /package/{templates → dist/templates}/phaser/packages/client/src/layers/phaser/createPhaserLayer.ts +0 -0
  122. /package/{templates → dist/templates}/phaser/packages/client/src/layers/phaser/systems/createCamera.ts +0 -0
  123. /package/{templates → dist/templates}/phaser/packages/client/src/layers/phaser/systems/createMapSystem.ts +0 -0
  124. /package/{templates → dist/templates}/phaser/packages/client/src/layers/phaser/systems/index.ts +0 -0
  125. /package/{templates → dist/templates}/phaser/packages/client/src/layers/phaser/systems/registerSystems.ts +0 -0
  126. /package/{templates → dist/templates}/phaser/packages/client/src/mud/createClientComponents.ts +0 -0
  127. /package/{templates → dist/templates}/phaser/packages/client/src/mud/createSystemCalls.ts +0 -0
  128. /package/{templates → dist/templates}/phaser/packages/client/src/mud/getNetworkConfig.ts +0 -0
  129. /package/{templates → dist/templates}/phaser/packages/client/src/mud/setup.ts +0 -0
  130. /package/{templates → dist/templates}/phaser/packages/client/src/mud/setupNetwork.ts +0 -0
  131. /package/{templates → dist/templates}/phaser/packages/client/src/mud/supportedChains.ts +0 -0
  132. /package/{templates → dist/templates}/phaser/packages/client/src/mud/world.ts +0 -0
  133. /package/{templates → dist/templates}/phaser/packages/client/src/store.ts +0 -0
  134. /package/{templates → dist/templates}/phaser/packages/client/src/ui/App.tsx +0 -0
  135. /package/{templates → dist/templates}/phaser/packages/client/src/ui/LoadingScreen/BootScreen.tsx +0 -0
  136. /package/{templates → dist/templates}/phaser/packages/client/src/ui/LoadingScreen/LoadingBar.tsx +0 -0
  137. /package/{templates → dist/templates}/phaser/packages/client/src/ui/LoadingScreen/LoadingScreen.tsx +0 -0
  138. /package/{templates → dist/templates}/phaser/packages/client/src/ui/LoadingScreen/index.ts +0 -0
  139. /package/{templates → dist/templates}/phaser/packages/client/src/ui/PhaserLayer.tsx +0 -0
  140. /package/{templates → dist/templates}/phaser/packages/client/src/ui/UIRoot.tsx +0 -0
  141. /package/{templates → dist/templates}/phaser/packages/client/src/ui/Wrapper.tsx +0 -0
  142. /package/{templates → dist/templates}/phaser/packages/client/src/ui/hooks/useNetworkLayer.tsx +0 -0
  143. /package/{templates → dist/templates}/phaser/packages/client/src/ui/hooks/usePhaserLayer.tsx +0 -0
  144. /package/{templates → dist/templates}/phaser/packages/client/src/ui/hooks/usePromiseValue.ts +0 -0
  145. /package/{templates → dist/templates}/phaser/packages/client/src/ui/theme/ClickWrapper.tsx +0 -0
  146. /package/{templates → dist/templates}/phaser/packages/client/src/ui/theme/SpriteImage.tsx +0 -0
  147. /package/{templates → dist/templates}/phaser/packages/client/tsconfig.json +0 -0
  148. /package/{templates → dist/templates}/phaser/packages/client/vite.config.ts +0 -0
  149. /package/{templates → dist/templates}/phaser/packages/contracts/.env +0 -0
  150. /package/{templates → dist/templates}/phaser/packages/contracts/.prettierrc +0 -0
  151. /package/{templates → dist/templates}/phaser/packages/contracts/.solhint.json +0 -0
  152. /package/{templates → dist/templates}/phaser/packages/contracts/foundry.toml +0 -0
  153. /package/{templates/phaser/packages/contracts/.gitignore_ → dist/templates/phaser/packages/contracts/gitignore} +0 -0
  154. /package/{templates → dist/templates}/phaser/packages/contracts/mud.config.ts +0 -0
  155. /package/{templates → dist/templates}/phaser/packages/contracts/package.json +0 -0
  156. /package/{templates → dist/templates}/phaser/packages/contracts/remappings.txt +0 -0
  157. /package/{templates → dist/templates}/phaser/packages/contracts/script/PostDeploy.s.sol +0 -0
  158. /package/{templates → dist/templates}/phaser/packages/contracts/src/codegen/index.sol +0 -0
  159. /package/{templates → dist/templates}/phaser/packages/contracts/src/codegen/tables/Counter.sol +0 -0
  160. /package/{templates → dist/templates}/phaser/packages/contracts/src/codegen/world/IIncrementSystem.sol +0 -0
  161. /package/{templates → dist/templates}/phaser/packages/contracts/src/codegen/world/IWorld.sol +0 -0
  162. /package/{templates → dist/templates}/phaser/packages/contracts/src/systems/IncrementSystem.sol +0 -0
  163. /package/{templates → dist/templates}/phaser/packages/contracts/test/CounterTest.t.sol +0 -0
  164. /package/{templates → dist/templates}/phaser/packages/contracts/tsconfig.json +0 -0
  165. /package/{templates → dist/templates}/phaser/packages/contracts/worlds.json +0 -0
  166. /package/{templates → dist/templates}/phaser/packages/contracts/worlds.json.d.ts +0 -0
  167. /package/{templates → dist/templates}/phaser/pnpm-workspace.yaml +0 -0
  168. /package/{templates → dist/templates}/phaser/tsconfig.json +0 -0
  169. /package/{templates → dist/templates}/react/.eslintrc +0 -0
  170. /package/{templates → dist/templates}/react/.gitattributes +0 -0
  171. /package/{templates → dist/templates}/react/.vscode/extensions.json +0 -0
  172. /package/{templates → dist/templates}/react/.vscode/settings.json +0 -0
  173. /package/{templates/react-ecs/.gitignore_ → dist/templates/react/gitignore} +0 -0
  174. /package/{templates/react-ecs → dist/templates/react}/mprocs.yaml +0 -0
  175. /package/{templates/react-ecs → dist/templates/react}/package.json +0 -0
  176. /package/{templates → dist/templates}/react/packages/client/.env +0 -0
  177. /package/{templates → dist/templates}/react/packages/client/.eslintrc +0 -0
  178. /package/{templates/react-ecs/packages/client/.gitignore_ → dist/templates/react/packages/client/gitignore} +0 -0
  179. /package/{templates/react-ecs → dist/templates/react}/packages/client/index.html +0 -0
  180. /package/{templates → dist/templates}/react/packages/client/package.json +0 -0
  181. /package/{templates/react-ecs → dist/templates/react}/packages/client/postcss.config.cjs +0 -0
  182. /package/{templates → dist/templates}/react/packages/client/src/App.tsx +0 -0
  183. /package/{templates → dist/templates}/react/packages/client/src/Providers.tsx +0 -0
  184. /package/{templates → dist/templates}/react/packages/client/src/common.ts +0 -0
  185. /package/{templates → dist/templates}/react/packages/client/src/game/GameMap.tsx +0 -0
  186. /package/{templates/react-ecs → dist/templates/react}/packages/client/src/game/useKeyboardMovement.ts +0 -0
  187. /package/{templates/react-ecs → dist/templates/react}/packages/client/src/index.tsx +0 -0
  188. /package/{templates/react-ecs → dist/templates/react}/packages/client/src/mud/Explorer.tsx +0 -0
  189. /package/{templates → dist/templates}/react/packages/client/src/mud/stash.ts +0 -0
  190. /package/{templates → dist/templates}/react/packages/client/src/mud/useSyncStatus.ts +0 -0
  191. /package/{templates/react-ecs → dist/templates/react}/packages/client/src/mud/useWorldContract.ts +0 -0
  192. /package/{templates/react-ecs → dist/templates/react}/packages/client/src/ui/AsyncButton.tsx +0 -0
  193. /package/{templates/react-ecs → dist/templates/react}/packages/client/src/ui/ErrorFallback.tsx +0 -0
  194. /package/{templates/react-ecs → dist/templates/react}/packages/client/src/ui/icons/ArrowDownIcon.tsx +0 -0
  195. /package/{templates/react-ecs → dist/templates/react}/packages/client/src/ui/icons/MUDIcon.tsx +0 -0
  196. /package/{templates/react-ecs → dist/templates/react}/packages/client/src/wagmiConfig.ts +0 -0
  197. /package/{templates/react-ecs → dist/templates/react}/packages/client/tailwind.config.ts +0 -0
  198. /package/{templates/react-ecs → dist/templates/react}/packages/client/tsconfig.json +0 -0
  199. /package/{templates/react-ecs → dist/templates/react}/packages/client/vite.config.ts +0 -0
  200. /package/{templates/vanilla → dist/templates/react}/packages/contracts/.env +0 -0
  201. /package/{templates → dist/templates}/react/packages/contracts/.prettierrc +0 -0
  202. /package/{templates → dist/templates}/react/packages/contracts/.solhint.json +0 -0
  203. /package/{templates → dist/templates}/react/packages/contracts/foundry.toml +0 -0
  204. /package/{templates/react-ecs/packages/contracts/.gitignore_ → dist/templates/react/packages/contracts/gitignore} +0 -0
  205. /package/{templates → dist/templates}/react/packages/contracts/out/IWorld.sol/IWorld.abi.json +0 -0
  206. /package/{templates/react-ecs → dist/templates/react}/packages/contracts/package.json +0 -0
  207. /package/{templates → dist/templates}/react/packages/contracts/remappings.txt +0 -0
  208. /package/{templates/react-ecs → dist/templates/react}/packages/contracts/script/PostDeploy.s.sol +0 -0
  209. /package/{templates → dist/templates}/react/packages/contracts/src/MoveSystem.sol +0 -0
  210. /package/{templates/react-ecs → dist/templates/react}/packages/contracts/src/codegen/common.sol +0 -0
  211. /package/{templates → dist/templates}/react/packages/contracts/src/codegen/index.sol +0 -0
  212. /package/{templates → dist/templates}/react/packages/contracts/src/codegen/tables/Position.sol +0 -0
  213. /package/{templates → dist/templates}/react/packages/contracts/src/codegen/world/IMoveSystem.sol +0 -0
  214. /package/{templates → dist/templates}/react/packages/contracts/src/codegen/world/IWorld.sol +0 -0
  215. /package/{templates → dist/templates}/react/packages/contracts/tsconfig.json +0 -0
  216. /package/{templates/react-ecs → dist/templates/react}/packages/contracts/worlds.json +0 -0
  217. /package/{templates → dist/templates}/react/packages/contracts/worlds.json.d.ts +0 -0
  218. /package/{templates → dist/templates}/react/pnpm-workspace.yaml +0 -0
  219. /package/{templates → dist/templates}/react/tsconfig.json +0 -0
  220. /package/{templates → dist/templates}/react-ecs/.eslintrc +0 -0
  221. /package/{templates → dist/templates}/react-ecs/.gitattributes +0 -0
  222. /package/{templates → dist/templates}/react-ecs/.vscode/extensions.json +0 -0
  223. /package/{templates → dist/templates}/react-ecs/.vscode/settings.json +0 -0
  224. /package/{templates/threejs/.gitignore_ → dist/templates/react-ecs/gitignore} +0 -0
  225. /package/{templates/threejs → dist/templates/react-ecs}/mprocs.yaml +0 -0
  226. /package/{templates → dist/templates}/react-ecs/packages/client/.env +0 -0
  227. /package/{templates → dist/templates}/react-ecs/packages/client/.eslintrc +0 -0
  228. /package/{templates/threejs/packages/client/.gitignore_ → dist/templates/react-ecs/packages/client/gitignore} +0 -0
  229. /package/{templates/threejs → dist/templates/react-ecs}/packages/client/index.html +0 -0
  230. /package/{templates/threejs → dist/templates/react-ecs}/packages/client/src/MUDContext.tsx +0 -0
  231. /package/{templates/threejs → dist/templates/react-ecs}/packages/client/src/index.tsx +0 -0
  232. /package/{templates/threejs → dist/templates/react-ecs}/packages/client/src/mud/createClientComponents.ts +0 -0
  233. /package/{templates/vanilla → dist/templates/react-ecs}/packages/client/src/mud/setup.ts +0 -0
  234. /package/{templates/vanilla → dist/templates/react-ecs}/packages/client/src/mud/setupNetwork.ts +0 -0
  235. /package/{templates/threejs → dist/templates/react-ecs}/packages/client/src/mud/supportedChains.ts +0 -0
  236. /package/{templates/threejs → dist/templates/react-ecs}/packages/client/src/mud/world.ts +0 -0
  237. /package/{templates/threejs → dist/templates/react-ecs}/packages/client/tsconfig.json +0 -0
  238. /package/{templates/threejs → dist/templates/react-ecs}/packages/client/vite.config.ts +0 -0
  239. /package/{templates/threejs → dist/templates/react-ecs}/packages/contracts/.env +0 -0
  240. /package/{templates → dist/templates}/react-ecs/packages/contracts/.prettierrc +0 -0
  241. /package/{templates → dist/templates}/react-ecs/packages/contracts/.solhint.json +0 -0
  242. /package/{templates → dist/templates}/react-ecs/packages/contracts/foundry.toml +0 -0
  243. /package/{templates/threejs/packages/contracts/.gitignore_ → dist/templates/react-ecs/packages/contracts/gitignore} +0 -0
  244. /package/{templates/vanilla → dist/templates/react-ecs}/packages/contracts/mud.config.ts +0 -0
  245. /package/{templates/vanilla → dist/templates/react-ecs}/packages/contracts/package.json +0 -0
  246. /package/{templates → dist/templates}/react-ecs/packages/contracts/remappings.txt +0 -0
  247. /package/{templates/vanilla → dist/templates/react-ecs}/packages/contracts/script/PostDeploy.s.sol +0 -0
  248. /package/{templates/vanilla → dist/templates/react-ecs}/packages/contracts/src/codegen/index.sol +0 -0
  249. /package/{templates/vanilla → dist/templates/react-ecs}/packages/contracts/src/codegen/tables/Counter.sol +0 -0
  250. /package/{templates/vanilla → dist/templates/react-ecs}/packages/contracts/src/codegen/world/IIncrementSystem.sol +0 -0
  251. /package/{templates/vanilla → dist/templates/react-ecs}/packages/contracts/src/codegen/world/IWorld.sol +0 -0
  252. /package/{templates/vanilla → dist/templates/react-ecs}/packages/contracts/src/systems/IncrementSystem.sol +0 -0
  253. /package/{templates/vanilla → dist/templates/react-ecs}/packages/contracts/test/CounterTest.t.sol +0 -0
  254. /package/{templates → dist/templates}/react-ecs/packages/contracts/tsconfig.json +0 -0
  255. /package/{templates/threejs → dist/templates/react-ecs}/packages/contracts/worlds.json +0 -0
  256. /package/{templates → dist/templates}/react-ecs/packages/contracts/worlds.json.d.ts +0 -0
  257. /package/{templates → dist/templates}/react-ecs/pnpm-workspace.yaml +0 -0
  258. /package/{templates → dist/templates}/react-ecs/tsconfig.json +0 -0
  259. /package/{templates → dist/templates}/threejs/.eslintrc +0 -0
  260. /package/{templates → dist/templates}/threejs/.gitattributes +0 -0
  261. /package/{templates → dist/templates}/threejs/.vscode/extensions.json +0 -0
  262. /package/{templates → dist/templates}/threejs/.vscode/settings.json +0 -0
  263. /package/{templates/vanilla/.gitignore_ → dist/templates/threejs/gitignore} +0 -0
  264. /package/{templates/vanilla → dist/templates/threejs}/mprocs.yaml +0 -0
  265. /package/{templates → dist/templates}/threejs/package.json +0 -0
  266. /package/{templates → dist/templates}/threejs/packages/client/.env +0 -0
  267. /package/{templates → dist/templates}/threejs/packages/client/.eslintrc +0 -0
  268. /package/{templates/vanilla/packages/client/.gitignore_ → dist/templates/threejs/packages/client/gitignore} +0 -0
  269. /package/{templates → dist/templates}/threejs/packages/client/package.json +0 -0
  270. /package/{templates → dist/templates}/threejs/packages/client/src/App.tsx +0 -0
  271. /package/{templates/vanilla → dist/templates/threejs}/packages/client/src/mud/createClientComponents.ts +0 -0
  272. /package/{templates → dist/templates}/threejs/packages/client/src/mud/createSystemCalls.ts +0 -0
  273. /package/{templates → dist/templates}/threejs/packages/client/src/mud/getNetworkConfig.ts +0 -0
  274. /package/{templates → dist/templates}/threejs/packages/client/src/mud/setup.ts +0 -0
  275. /package/{templates → dist/templates}/threejs/packages/client/src/mud/setupNetwork.ts +0 -0
  276. /package/{templates/vanilla → dist/templates/threejs}/packages/client/src/mud/supportedChains.ts +0 -0
  277. /package/{templates/vanilla → dist/templates/threejs}/packages/client/src/mud/world.ts +0 -0
  278. /package/{templates → dist/templates}/threejs/packages/client/src/useKeyboardMovement.ts +0 -0
  279. /package/{templates/vanilla → dist/templates/threejs}/packages/client/tsconfig.json +0 -0
  280. /package/{templates → dist/templates}/threejs/packages/contracts/.prettierrc +0 -0
  281. /package/{templates → dist/templates}/threejs/packages/contracts/.solhint.json +0 -0
  282. /package/{templates → dist/templates}/threejs/packages/contracts/foundry.toml +0 -0
  283. /package/{templates/vanilla/packages/contracts/.gitignore_ → dist/templates/threejs/packages/contracts/gitignore} +0 -0
  284. /package/{templates → dist/templates}/threejs/packages/contracts/mud.config.ts +0 -0
  285. /package/{templates → dist/templates}/threejs/packages/contracts/package.json +0 -0
  286. /package/{templates → dist/templates}/threejs/packages/contracts/remappings.txt +0 -0
  287. /package/{templates → dist/templates}/threejs/packages/contracts/src/codegen/index.sol +0 -0
  288. /package/{templates → dist/templates}/threejs/packages/contracts/src/codegen/tables/Position.sol +0 -0
  289. /package/{templates → dist/templates}/threejs/packages/contracts/src/codegen/world/IMoveSystem.sol +0 -0
  290. /package/{templates → dist/templates}/threejs/packages/contracts/src/codegen/world/IWorld.sol +0 -0
  291. /package/{templates → dist/templates}/threejs/packages/contracts/src/systems/MoveSystem.sol +0 -0
  292. /package/{templates → dist/templates}/threejs/packages/contracts/test/WorldTest.t.sol +0 -0
  293. /package/{templates → dist/templates}/threejs/packages/contracts/tsconfig.json +0 -0
  294. /package/{templates/vanilla → dist/templates/threejs}/packages/contracts/worlds.json +0 -0
  295. /package/{templates → dist/templates}/threejs/packages/contracts/worlds.json.d.ts +0 -0
  296. /package/{templates → dist/templates}/threejs/pnpm-workspace.yaml +0 -0
  297. /package/{templates → dist/templates}/threejs/tsconfig.json +0 -0
  298. /package/{templates → dist/templates}/vanilla/.eslintrc +0 -0
  299. /package/{templates → dist/templates}/vanilla/.gitattributes +0 -0
  300. /package/{templates → dist/templates}/vanilla/.vscode/extensions.json +0 -0
  301. /package/{templates → dist/templates}/vanilla/.vscode/settings.json +0 -0
  302. /package/{templates → dist/templates}/vanilla/package.json +0 -0
  303. /package/{templates → dist/templates}/vanilla/packages/client/.env +0 -0
  304. /package/{templates → dist/templates}/vanilla/packages/client/index.html +0 -0
  305. /package/{templates → dist/templates}/vanilla/packages/client/package.json +0 -0
  306. /package/{templates → dist/templates}/vanilla/packages/client/src/index.ts +0 -0
  307. /package/{templates → dist/templates}/vanilla/packages/client/src/mud/createSystemCalls.ts +0 -0
  308. /package/{templates → dist/templates}/vanilla/packages/client/src/mud/getNetworkConfig.ts +0 -0
  309. /package/{templates → dist/templates}/vanilla/packages/client/vite.config.ts +0 -0
  310. /package/{templates → dist/templates}/vanilla/packages/contracts/.prettierrc +0 -0
  311. /package/{templates → dist/templates}/vanilla/packages/contracts/.solhint.json +0 -0
  312. /package/{templates → dist/templates}/vanilla/packages/contracts/foundry.toml +0 -0
  313. /package/{templates → dist/templates}/vanilla/packages/contracts/remappings.txt +0 -0
  314. /package/{templates → dist/templates}/vanilla/packages/contracts/tsconfig.json +0 -0
  315. /package/{templates → dist/templates}/vanilla/packages/contracts/worlds.json.d.ts +0 -0
  316. /package/{templates → dist/templates}/vanilla/pnpm-workspace.yaml +0 -0
  317. /package/{templates → dist/templates}/vanilla/tsconfig.json +0 -0
@@ -1,58 +0,0 @@
1
- import { wait } from "@latticexyz/common/utils";
2
- import { useEffect, useRef, useState } from "react";
3
- import { FallbackProps } from "react-error-boundary";
4
-
5
- export function ErrorFallback({ error, resetErrorBoundary }: FallbackProps) {
6
- const when = new Date();
7
- const isMounted = useRef(false);
8
- const [retries, setRetries] = useState(1);
9
-
10
- useEffect(() => {
11
- isMounted.current = true;
12
- return () => {
13
- isMounted.current = false;
14
- };
15
- });
16
-
17
- return (
18
- <div className="fixed inset-0 overflow-auto bg-red-50">
19
- <div className="w-full max-w-screen-md mx-auto py-16 px-8 space-y-12">
20
- <h1 className="text-4xl font-black text-red-500">Oops! It broke :(</h1>
21
- <div className="space-y-6">
22
- <div className="relative">
23
- <div className="p-6 bg-red-100 border-l-8 -ml-[8px] border-red-500 font-semibold whitespace-pre-wrap">
24
- {error instanceof Error ? error.message : String(error)}
25
- </div>
26
- {error instanceof Error && error.stack ? (
27
- <div className="p-6 bg-white font-mono text-sm overflow-auto whitespace-pre">{error.stack}</div>
28
- ) : null}
29
- <div className="absolute top-full right-0 text-sm text-stone-400" title={when.toISOString()}>
30
- {when.toLocaleString()}
31
- </div>
32
- </div>
33
-
34
- {retries > 0 ? (
35
- <button
36
- type="button"
37
- className="group bg-red-500 text-white px-4 py-2 rounded-md hover:bg-red-600 active:bg-red-700 transition aria-busy:pointer-events-none aria-busy:animate-pulse"
38
- onClick={async (event) => {
39
- // if we retry and the same error occurs, it'll look like the button click did nothing
40
- // so we'll fake a pending state here to give users an indication something is happening
41
- event.currentTarget.ariaBusy = "true";
42
- await wait(1000);
43
- resetErrorBoundary();
44
- if (isMounted.current) {
45
- setRetries((value) => value - 1);
46
- event.currentTarget.ariaBusy = null;
47
- }
48
- }}
49
- >
50
- <span className="group-aria-busy:hidden">Retry?</span>
51
- <span className="hidden group-aria-busy:inline">Retrying…</span>
52
- </button>
53
- ) : null}
54
- </div>
55
- </div>
56
- </div>
57
- );
58
- }
@@ -1,22 +0,0 @@
1
- import { DetailedHTMLProps, SVGAttributes } from "react";
2
- import { twMerge } from "tailwind-merge";
3
-
4
- export type Props = DetailedHTMLProps<SVGAttributes<SVGSVGElement>, SVGSVGElement>;
5
-
6
- export function ArrowDownIcon({ className, ...props }: Props) {
7
- return (
8
- <svg
9
- className={twMerge("h-[1em] w-[1em]", className)}
10
- xmlns="http://www.w3.org/2000/svg"
11
- viewBox="0 0 16 16"
12
- fill="currentColor"
13
- {...props}
14
- >
15
- <path
16
- fillRule="evenodd"
17
- d="M8 2a.75.75 0 0 1 .75.75v8.69l3.22-3.22a.75.75 0 1 1 1.06 1.06l-4.5 4.5a.75.75 0 0 1-1.06 0l-4.5-4.5a.75.75 0 0 1 1.06-1.06l3.22 3.22V2.75A.75.75 0 0 1 8 2Z"
18
- clipRule="evenodd"
19
- />
20
- </svg>
21
- );
22
- }
@@ -1,25 +0,0 @@
1
- import { DetailedHTMLProps, SVGAttributes } from "react";
2
- import { twMerge } from "tailwind-merge";
3
-
4
- export type Props = DetailedHTMLProps<SVGAttributes<SVGSVGElement>, SVGSVGElement>;
5
-
6
- export function MUDIcon({ className, ...props }: Props) {
7
- return (
8
- <svg
9
- xmlns="http://www.w3.org/2000/svg"
10
- viewBox="0 0 8 8"
11
- fill="currentColor"
12
- shapeRendering="crispEdges"
13
- className={twMerge("-my-[0.125em] h-[1.25em] w-[1.25em]", className)}
14
- {...props}
15
- >
16
- {/* eslint-disable-next-line max-len */}
17
- <path d="M0 0h1v1H0zm0 1h1v1H0zm0 1h1v1H0zm0 1h1v1H0zm0 1h1v1H0zm0 1h1v1H0zm0 1h1v1H0zm0 1h1v1H0zm1 0h1v1H1zm1 0h1v1H2zm1 0h1v1H3zm1 0h1v1H4zm1 0h1v1H5zm2-1h1v1H7zm0 1h1v1H7zM6 7h1v1H6zm1-2h1v1H7zm0-1h1v1H7zm0-1h1v1H7z" />
18
- <path
19
- d="M2 2h1v1H2zm0 1h1v1H2zm0 1h1v1H2zm0 1h1v1H2zm1-3h1v1H3zm1 0h1v1H4zm1 0h1v1H5zm0 1h1v1H5zm0 1h1v1H5zm0 1h1v1H5zM4 5h1v1H4zM3 5h1v1H3z"
20
- opacity=".5"
21
- />
22
- <path d="M7 2h1v1H7zm0-1h1v1H7zM1 0h1v1H1zm1 0h1v1H2zm1 0h1v1H3zm1 0h1v1H4zm1 0h1v1H5zm1 0h1v1H6zm1 0h1v1H7z" />
23
- </svg>
24
- );
25
- }
@@ -1,49 +0,0 @@
1
- import { Chain, http, webSocket } from "viem";
2
- import { anvil } from "viem/chains";
3
- import { createWagmiConfig } from "@latticexyz/entrykit/internal";
4
- import { rhodolite, garnet, redstone } from "@latticexyz/common/chains";
5
- import { chainId } from "./common";
6
-
7
- export const chains = [
8
- redstone,
9
- garnet,
10
- rhodolite,
11
- {
12
- ...anvil,
13
- contracts: {
14
- ...anvil.contracts,
15
- paymaster: {
16
- address: "0xf03E61E7421c43D9068Ca562882E98d1be0a6b6e",
17
- },
18
- },
19
- blockExplorers: {
20
- default: {} as never,
21
- worldsExplorer: {
22
- name: "MUD Worlds Explorer",
23
- url: "http://localhost:13690/anvil/worlds",
24
- },
25
- },
26
- },
27
- ] as const satisfies Chain[];
28
-
29
- export const transports = {
30
- [anvil.id]: webSocket(),
31
- [garnet.id]: http(),
32
- [rhodolite.id]: http(),
33
- [redstone.id]: http(),
34
- } as const;
35
-
36
- export const wagmiConfig = createWagmiConfig({
37
- chainId,
38
- // TODO: swap this with another default project ID or leave empty
39
- walletConnectProjectId: "14ce88fdbc0f9c294e26ec9b4d848e44",
40
- appName: document.title,
41
- chains,
42
- transports,
43
- pollingInterval: {
44
- [anvil.id]: 2000,
45
- [garnet.id]: 2000,
46
- [rhodolite.id]: 2000,
47
- [redstone.id]: 2000,
48
- },
49
- });
@@ -1,10 +0,0 @@
1
- import { Config } from "tailwindcss/types/config";
2
-
3
- export default {
4
- content: ["./**/*.{html,js,jsx,ts,tsx}", "!./node_modules"],
5
- theme: {},
6
- plugins: [],
7
- future: {
8
- hoverOnlyWhenSupported: true,
9
- },
10
- } satisfies Config;
@@ -1,11 +0,0 @@
1
- # This .env file is for demonstration purposes only.
2
- #
3
- # This should usually be excluded via .gitignore and the env vars attached to
4
- # your deployment environment, but we're including this here for ease of local
5
- # development. Please do not commit changes to this file!
6
- #
7
- # Enable debug logs for MUD CLI
8
- DEBUG=mud:*
9
- #
10
- # Anvil default private key
11
- PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
@@ -1,13 +0,0 @@
1
- # foundry
2
- cache
3
- broadcast
4
- out/*
5
- !out/IWorld.sol
6
- out/IWorld.sol/*
7
- !out/IWorld.sol/IWorld.abi.json
8
- !out/IWorld.sol/IWorld.abi.d.json.ts
9
-
10
- # mud
11
- .mud
12
- deploys
13
- *.db*
@@ -1,16 +0,0 @@
1
- // SPDX-License-Identifier: MIT
2
- pragma solidity >=0.8.24;
3
-
4
- import "forge-std/Test.sol";
5
- import { MudTest } from "@latticexyz/world/test/MudTest.t.sol";
6
-
7
- contract WorldTest is MudTest {
8
- function testWorldDeployed() public {
9
- uint256 codeSize;
10
- address addr = worldAddress;
11
- assembly {
12
- codeSize := extcodesize(addr)
13
- }
14
- assertTrue(codeSize > 0);
15
- }
16
- }
@@ -1,5 +0,0 @@
1
- {
2
- "31337": {
3
- "address": "0xfdf868ea710ffd8cd33b829c5aff79edd15ecd5f"
4
- }
5
- }
@@ -1,74 +0,0 @@
1
- import { AccountButton } from "@latticexyz/entrykit/internal";
2
- import { Direction, Entity } from "./common";
3
- import mudConfig from "contracts/mud.config";
4
- import { useMemo } from "react";
5
- import { GameMap } from "./game/GameMap";
6
- import { useWorldContract } from "./mud/useWorldContract";
7
- import { Synced } from "./mud/Synced";
8
- import { useSync } from "@latticexyz/store-sync/react";
9
- import { components } from "./mud/recs";
10
- import { useEntityQuery } from "@latticexyz/react";
11
- import { Has, getComponentValueStrict } from "@latticexyz/recs";
12
- import { Address } from "viem";
13
-
14
- export function App() {
15
- const playerEntities = useEntityQuery([Has(components.Owner), Has(components.Position)]);
16
- const players = useMemo(
17
- () =>
18
- playerEntities.map((entity) => {
19
- const owner = getComponentValueStrict(components.Owner, entity);
20
- const position = getComponentValueStrict(components.Position, entity);
21
- return {
22
- entity: entity as Entity,
23
- owner: owner.owner as Address,
24
- x: position.x,
25
- y: position.y,
26
- };
27
- }),
28
- [playerEntities],
29
- );
30
-
31
- const sync = useSync();
32
- const worldContract = useWorldContract();
33
-
34
- const onMove = useMemo(
35
- () =>
36
- sync.data && worldContract
37
- ? async (entity: Entity, direction: Direction) => {
38
- const tx = await worldContract.write.app__move([entity, mudConfig.enums.Direction.indexOf(direction)]);
39
- await sync.data.waitForTransaction(tx);
40
- }
41
- : undefined,
42
- [sync.data, worldContract],
43
- );
44
-
45
- const onSpawn = useMemo(
46
- () =>
47
- sync.data && worldContract
48
- ? async () => {
49
- const tx = await worldContract.write.app__spawn();
50
- await sync.data.waitForTransaction(tx);
51
- }
52
- : undefined,
53
- [sync.data, worldContract],
54
- );
55
-
56
- return (
57
- <>
58
- <div className="fixed inset-0 grid place-items-center p-4">
59
- <Synced
60
- fallback={({ message, percentage }) => (
61
- <div className="tabular-nums">
62
- {message} ({percentage.toFixed(1)}%)…
63
- </div>
64
- )}
65
- >
66
- <GameMap players={players} onMove={onMove} onSpawn={onSpawn} />
67
- </Synced>
68
- </div>
69
- <div className="fixed top-2 right-2">
70
- <AccountButton />
71
- </div>
72
- </>
73
- );
74
- }
@@ -1,29 +0,0 @@
1
- import { WagmiProvider } from "wagmi";
2
- import { QueryClientProvider, QueryClient } from "@tanstack/react-query";
3
- import { ReactNode } from "react";
4
- import { SyncProvider } from "@latticexyz/store-sync/react";
5
- import { defineConfig, EntryKitProvider } from "@latticexyz/entrykit/internal";
6
- import { wagmiConfig } from "./wagmiConfig";
7
- import { chainId, getWorldAddress, startBlock } from "./common";
8
- import { syncAdapter } from "./mud/recs";
9
-
10
- const queryClient = new QueryClient();
11
-
12
- export type Props = {
13
- children: ReactNode;
14
- };
15
-
16
- export function Providers({ children }: Props) {
17
- const worldAddress = getWorldAddress();
18
- return (
19
- <WagmiProvider config={wagmiConfig}>
20
- <QueryClientProvider client={queryClient}>
21
- <EntryKitProvider config={defineConfig({ chainId, worldAddress })}>
22
- <SyncProvider chainId={chainId} address={worldAddress} startBlock={startBlock} adapter={syncAdapter}>
23
- {children}
24
- </SyncProvider>
25
- </EntryKitProvider>
26
- </QueryClientProvider>
27
- </WagmiProvider>
28
- );
29
- }
@@ -1,27 +0,0 @@
1
- import mudConfig from "contracts/mud.config";
2
- import { chains } from "./wagmiConfig";
3
- import { Chain, Hex } from "viem";
4
-
5
- export const chainId = import.meta.env.CHAIN_ID;
6
- export const worldAddress = import.meta.env.WORLD_ADDRESS;
7
- export const startBlock = import.meta.env.START_BLOCK;
8
-
9
- export const url = new URL(window.location.href);
10
-
11
- export type Entity = Hex;
12
- export type Direction = (typeof mudConfig.enums.Direction)[number];
13
-
14
- export function getWorldAddress() {
15
- if (!worldAddress) {
16
- throw new Error("No world address configured. Is the world still deploying?");
17
- }
18
- return worldAddress;
19
- }
20
-
21
- export function getChain(): Chain {
22
- const chain = chains.find((c) => c.id === chainId);
23
- if (!chain) {
24
- throw new Error(`No chain configured for chain ID ${chainId}.`);
25
- }
26
- return chain;
27
- }
@@ -1,112 +0,0 @@
1
- import { serialize, useAccount } from "wagmi";
2
- import { useKeyboardMovement } from "./useKeyboardMovement";
3
- import { Address, Hex, hexToBigInt, keccak256 } from "viem";
4
- import { ArrowDownIcon } from "../ui/icons/ArrowDownIcon";
5
- import { twMerge } from "tailwind-merge";
6
- import { Direction, Entity } from "../common";
7
- import mudConfig from "contracts/mud.config";
8
- import { AsyncButton } from "../ui/AsyncButton";
9
- import { useAccountModal } from "@latticexyz/entrykit/internal";
10
- import { useMemo } from "react";
11
-
12
- export type Props = {
13
- readonly players?: {
14
- readonly entity: Entity;
15
- readonly owner: Address;
16
- readonly x: number;
17
- readonly y: number;
18
- }[];
19
- readonly onMove?: (entity: Entity, direction: Direction) => Promise<void>;
20
- readonly onSpawn?: () => Promise<void>;
21
- };
22
-
23
- const size = 40;
24
- const scale = 100 / size;
25
-
26
- function getColorAngle(seed: Hex) {
27
- return Number(hexToBigInt(keccak256(seed)) % 360n);
28
- }
29
-
30
- const rotateClassName = {
31
- North: "rotate-0",
32
- East: "rotate-90",
33
- South: "rotate-180",
34
- West: "-rotate-90",
35
- } as const satisfies Record<Direction, `${"" | "-"}rotate-${number}`>;
36
-
37
- export function GameMap({ players = [], onMove, onSpawn }: Props) {
38
- const { openAccountModal } = useAccountModal();
39
- const { address: userAddress } = useAccount();
40
-
41
- const currentPlayer = players.find((player) => player.owner.toLowerCase() === userAddress?.toLowerCase());
42
-
43
- useKeyboardMovement(
44
- useMemo(
45
- () => (onMove && currentPlayer ? (direction: Direction) => onMove(currentPlayer.entity, direction) : undefined),
46
- [currentPlayer, onMove],
47
- ),
48
- );
49
-
50
- return (
51
- <div className="aspect-square w-full max-w-[40rem]">
52
- <div className="relative w-full h-full border-8 border-black/10">
53
- {currentPlayer && onMove
54
- ? mudConfig.enums.Direction.map((direction) => (
55
- <button
56
- key={direction}
57
- title={`Move ${direction.toLowerCase()}`}
58
- className={twMerge(
59
- "outline-0 absolute inset-0 cursor-pointer grid p-4",
60
- rotateClassName[direction],
61
- "transition bg-gradient-to-t from-transparent via-transparent to-blue-50 text-blue-400 opacity-0 hover:opacity-40 active:opacity-100",
62
- )}
63
- style={{ clipPath: "polygon(0% 0%, 100% 0%, 50% 50%)" }}
64
- onClick={() => onMove(currentPlayer.entity, direction)}
65
- >
66
- <ArrowDownIcon className="rotate-180 text-4xl self-start justify-self-center" />
67
- </button>
68
- ))
69
- : null}
70
-
71
- {players.map((player) => (
72
- <div
73
- key={player.entity}
74
- className="absolute bg-current"
75
- style={{
76
- color: `hwb(${getColorAngle(player.owner)} 40% 20%)`,
77
- width: `${scale}%`,
78
- height: `${scale}%`,
79
- left: `${((((player.x + size / 2) % size) + size) % size) * scale}%`,
80
- top: `${((size - ((player.y + size / 2) % size)) % size) * scale}%`,
81
- }}
82
- title={serialize(player, null, 2)}
83
- >
84
- {player === currentPlayer ? <div className="w-full h-full bg-current animate-ping opacity-50" /> : null}
85
- </div>
86
- ))}
87
-
88
- {!currentPlayer ? (
89
- onSpawn ? (
90
- <div className="absolute inset-0 grid place-items-center">
91
- <AsyncButton
92
- className="group outline-0 p-4 border-4 border-green-400 transition ring-green-300 hover:ring-4 active:scale-95 rounded-lg text-lg font-medium aria-busy:pointer-events-none aria-busy:animate-pulse"
93
- onClick={() => onSpawn()}
94
- >
95
- Spawn<span className="hidden group-aria-busy:inline">ing…</span>
96
- </AsyncButton>
97
- </div>
98
- ) : (
99
- <div className="absolute inset-0 grid place-items-center">
100
- <button
101
- className="group outline-0 p-4 border-4 border-green-400 transition ring-green-300 hover:ring-4 active:scale-95 rounded-lg text-lg font-medium aria-busy:pointer-events-none aria-busy:animate-pulse"
102
- onClick={openAccountModal}
103
- >
104
- Sign in to play
105
- </button>
106
- </div>
107
- )
108
- ) : null}
109
- </div>
110
- </div>
111
- );
112
- }
@@ -1,14 +0,0 @@
1
- import { ReactNode } from "react";
2
- import { useSyncStatus } from "./useSyncStatus";
3
- import { ComponentValue } from "@latticexyz/recs";
4
- import { components } from "./recs";
5
-
6
- export type Props = {
7
- children: ReactNode;
8
- fallback?: (props: ComponentValue<(typeof components)["SyncProgress"]["schema"]>) => ReactNode;
9
- };
10
-
11
- export function Synced({ children, fallback }: Props) {
12
- const status = useSyncStatus();
13
- return status.isLive ? children : fallback?.(status);
14
- }
@@ -1,6 +0,0 @@
1
- import { createWorld } from "@latticexyz/recs";
2
- import { createSyncAdapter } from "@latticexyz/store-sync/recs";
3
- import config from "contracts/mud.config";
4
-
5
- export const world = createWorld();
6
- export const { syncAdapter, components } = createSyncAdapter({ world, config });
@@ -1,17 +0,0 @@
1
- import { initialProgress } from "@latticexyz/store-sync/internal";
2
- import { SyncStep } from "@latticexyz/store-sync";
3
- import { useMemo } from "react";
4
- import { useComponentValue } from "@latticexyz/react";
5
- import { singletonEntity } from "@latticexyz/store-sync/recs";
6
- import { components } from "./recs";
7
-
8
- export function useSyncStatus() {
9
- const progress = useComponentValue(components.SyncProgress, singletonEntity, initialProgress);
10
- return useMemo(
11
- () => ({
12
- ...progress,
13
- isLive: progress.step === SyncStep.LIVE,
14
- }),
15
- [progress],
16
- );
17
- }
@@ -1,18 +0,0 @@
1
- import { defineWorld } from "@latticexyz/world";
2
-
3
- export default defineWorld({
4
- namespace: "app",
5
- userTypes: {
6
- Entity: { type: "bytes32", filePath: "./src/Entity.sol" },
7
- },
8
- enums: {
9
- Direction: ["North", "East", "South", "West"],
10
- },
11
- tables: {
12
- // singletons
13
- EntityCount: { schema: { count: "uint256" }, key: [] },
14
- // components
15
- Owner: { id: "Entity", owner: "address" },
16
- Position: { id: "Entity", x: "int32", y: "int32" },
17
- },
18
- });