itemTemplates.js 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. import i18n from "../i18n";
  2. import { nanoid } from "nanoid";
  3. import Rect from "./Rect";
  4. import Cube from "./Cube";
  5. import Round from "./Round";
  6. import Token from "./Token";
  7. import Image from "./Image";
  8. import Counter from "./Counter";
  9. import Dice from "./Dice";
  10. import DiceImage from "./DiceImage";
  11. import Note from "./Note";
  12. import Zone from "./Zone";
  13. import Meeple from "./Meeple";
  14. import Jewel from "./Jewel";
  15. import Pawn from "./Pawn";
  16. import CheckerBoard from "./CheckerBoard";
  17. import Cylinder from "./Cylinder";
  18. import ImageFormFields from "./forms/ImageFormFields";
  19. import CounterFormFields from "./forms/CounterFormFields";
  20. import RectFormFields from "./forms/RectFormFields";
  21. import CubeFormFields from "./forms/CubeFormFields";
  22. import RoundFormFields from "./forms/RoundFormFields";
  23. import DiceFormFields from "./forms/DiceFormFields";
  24. import DiceImageFormFields from "./forms/DiceImageFormFields";
  25. import NoteFormFields from "./forms/NoteFormFields";
  26. import ZoneFormFields from "./forms/ZoneFormFields";
  27. import TokenFormFields from "./forms/TokenFormFields";
  28. import MeepleFormFields from "./forms/MeepleFormFields";
  29. import JewelFormFields from "./forms/JewelFormFields";
  30. import PawnFormFields from "./forms/PawnFormFields";
  31. import CheckerBoardFormFields from "./forms/CheckerBoardFormFields";
  32. import CylinderFormFields from "./forms/CylinderFormFields";
  33. const defaultDiceImages = () => [
  34. {
  35. id: nanoid(),
  36. type: "external",
  37. content: "/game_assets/dice/one.svg",
  38. },
  39. {
  40. id: nanoid(),
  41. type: "external",
  42. content: "/game_assets/dice/two.svg",
  43. },
  44. {
  45. id: nanoid(),
  46. type: "external",
  47. content: "/game_assets/dice/three.svg",
  48. },
  49. {
  50. id: nanoid(),
  51. type: "external",
  52. content: "/game_assets/dice/four.svg",
  53. },
  54. {
  55. id: nanoid(),
  56. type: "external",
  57. content: "/game_assets/dice/five.svg",
  58. },
  59. {
  60. id: nanoid(),
  61. type: "external",
  62. content: "/game_assets/dice/six.svg",
  63. },
  64. ];
  65. const itemTemplates = {
  66. rect: {
  67. component: Rect,
  68. defaultActions: ["lock", "remove"],
  69. availableActions: [
  70. "stack",
  71. "alignAsLine",
  72. "alignAsSquare",
  73. "shuffle",
  74. "clone",
  75. "lock",
  76. "remove",
  77. ],
  78. form: RectFormFields,
  79. name: i18n.t("Rectangle"),
  80. template: {},
  81. },
  82. cube: {
  83. component: Cube,
  84. defaultActions: ["clone", "lock", "remove"],
  85. availableActions: [
  86. "stack",
  87. "alignAsLine",
  88. "alignAsSquare",
  89. "shuffle",
  90. "clone",
  91. "lock",
  92. "remove",
  93. ],
  94. form: CubeFormFields,
  95. name: i18n.t("Cube"),
  96. template: {},
  97. },
  98. cylinder: {
  99. component: Cylinder,
  100. defaultActions: ["clone", "lock", "remove"],
  101. availableActions: [
  102. "stack",
  103. "alignAsLine",
  104. "alignAsSquare",
  105. "shuffle",
  106. "clone",
  107. "lock",
  108. "remove",
  109. ],
  110. form: CylinderFormFields,
  111. name: i18n.t("Cylinder"),
  112. template: {},
  113. },
  114. round: {
  115. component: Round,
  116. defaultActions: ["clone", "lock", "remove"],
  117. availableActions: [
  118. "stack",
  119. "alignAsLine",
  120. "alignAsSquare",
  121. "shuffle",
  122. "clone",
  123. "lock",
  124. "remove",
  125. ],
  126. form: RoundFormFields,
  127. name: i18n.t("Round"),
  128. template: {},
  129. },
  130. token: {
  131. component: Token,
  132. defaultActions: ["clone", "lock", "remove"],
  133. availableActions: [
  134. "stack",
  135. "alignAsLine",
  136. "alignAsSquare",
  137. "shuffle",
  138. "clone",
  139. "lock",
  140. "remove",
  141. ],
  142. form: TokenFormFields,
  143. name: i18n.t("Token"),
  144. template: {},
  145. },
  146. meeple: {
  147. component: Meeple,
  148. defaultActions: ["clone", "lock", "remove"],
  149. availableActions: [
  150. "stack",
  151. "alignAsLine",
  152. "alignAsSquare",
  153. "shuffle",
  154. "clone",
  155. "lock",
  156. "remove",
  157. ],
  158. form: MeepleFormFields,
  159. name: i18n.t("Meeple"),
  160. template: {},
  161. },
  162. pawn: {
  163. component: Pawn,
  164. defaultActions: ["clone", "lock", "remove"],
  165. availableActions: [
  166. "stack",
  167. "alignAsLine",
  168. "alignAsSquare",
  169. "shuffle",
  170. "clone",
  171. "lock",
  172. "remove",
  173. ],
  174. form: PawnFormFields,
  175. name: i18n.t("Pawn"),
  176. template: {},
  177. },
  178. jewel: {
  179. component: Jewel,
  180. defaultActions: ["clone", "lock", "remove"],
  181. availableActions: [
  182. "stack",
  183. "alignAsLine",
  184. "alignAsSquare",
  185. "shuffle",
  186. "clone",
  187. "lock",
  188. "remove",
  189. ],
  190. form: JewelFormFields,
  191. name: i18n.t("Jewel"),
  192. template: {},
  193. },
  194. checkerboard: {
  195. component: CheckerBoard,
  196. defaultActions: ["clone", "lock", "remove"],
  197. availableActions: ["clone", "lock", "remove"],
  198. form: CheckerBoardFormFields,
  199. name: i18n.t("Checkerboard"),
  200. template: {
  201. layer: -1,
  202. },
  203. },
  204. image: {
  205. component: Image,
  206. defaultActions: (item) => {
  207. if (item.backContent) {
  208. return [
  209. "flip",
  210. "flipSelf",
  211. "tap",
  212. "stack",
  213. "shuffle",
  214. "clone",
  215. "lock",
  216. "remove",
  217. ];
  218. } else {
  219. return ["tap", "stack", "shuffle", "clone", "lock", "remove"];
  220. }
  221. },
  222. availableActions: (item) => {
  223. if (item.backContent) {
  224. return [
  225. "flip",
  226. "flipSelf",
  227. "tap",
  228. "rotate30",
  229. "rotate45",
  230. "rotate60",
  231. "rotate90",
  232. "rotate180",
  233. "stack",
  234. "alignAsLine",
  235. "alignAsSquare",
  236. "shuffle",
  237. "randomlyRotate30",
  238. "randomlyRotate45",
  239. "randomlyRotate60",
  240. "randomlyRotate90",
  241. "randomlyRotate180",
  242. "clone",
  243. "lock",
  244. "remove",
  245. ];
  246. } else {
  247. return [
  248. "tap",
  249. "rotate30",
  250. "rotate45",
  251. "rotate60",
  252. "rotate90",
  253. "rotate180",
  254. "stack",
  255. "alignAsLine",
  256. "alignAsSquare",
  257. "shuffle",
  258. "randomlyRotate30",
  259. "randomlyRotate45",
  260. "randomlyRotate60",
  261. "randomlyRotate90",
  262. "randomlyRotate180",
  263. "clone",
  264. "lock",
  265. "remove",
  266. ];
  267. }
  268. },
  269. form: ImageFormFields,
  270. name: i18n.t("Image"),
  271. template: {},
  272. },
  273. counter: {
  274. component: Counter,
  275. defaultActions: ["clone", "lock", "remove"],
  276. availableActions: ["clone", "lock", "remove"],
  277. form: CounterFormFields,
  278. name: i18n.t("Counter"),
  279. template: {},
  280. },
  281. dice: {
  282. component: Dice,
  283. defaultActions: ["clone", "lock", "remove"],
  284. availableActions: [
  285. "clone",
  286. "lock",
  287. "remove",
  288. "alignAsLine",
  289. "alignAsSquare",
  290. ],
  291. form: DiceFormFields,
  292. name: i18n.t("Dice"),
  293. template: {},
  294. },
  295. diceImage: {
  296. component: DiceImage,
  297. defaultActions: ["clone", "lock", "remove"],
  298. availableActions: [
  299. "clone",
  300. "lock",
  301. "remove",
  302. "alignAsLine",
  303. "alignAsSquare",
  304. ],
  305. form: DiceImageFormFields,
  306. name: i18n.t("Image dice"),
  307. template: () => ({
  308. images: defaultDiceImages(),
  309. side: 6,
  310. }),
  311. },
  312. note: {
  313. component: Note,
  314. defaultActions: ["shuffle", "clone", "lock", "remove"],
  315. availableActions: [
  316. "shuffle",
  317. "clone",
  318. "lock",
  319. "remove",
  320. "alignAsLine",
  321. "alignAsSquare",
  322. ],
  323. form: NoteFormFields,
  324. name: i18n.t("Note"),
  325. template: {},
  326. },
  327. zone: {
  328. component: Zone,
  329. defaultActions: ["clone", "lock", "remove"],
  330. availableActions: [
  331. "clone",
  332. "lock",
  333. "remove",
  334. "alignAsLine",
  335. "alignAsSquare",
  336. ],
  337. form: ZoneFormFields,
  338. name: i18n.t("Zone"),
  339. template: {
  340. layer: -1,
  341. },
  342. },
  343. };
  344. export const itemLibrary = Object.keys(itemTemplates).map((key) => ({
  345. type: key,
  346. ...itemTemplates[key],
  347. uid: nanoid(),
  348. }));
  349. export default itemTemplates;