itemTemplates.js 8.1 KB

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