itemTemplates.js 7.6 KB

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