From 27dc0d353095f1f961ccec18d994960af367cb75 Mon Sep 17 00:00:00 2001 From: syuilo Date: Sun, 14 Jan 2024 12:59:58 +0900 Subject: [PATCH] enhance(drop-and-fusion): sweets mode --- .../sweets_monos/custard_color.svg | Bin 3087 -> 4521 bytes .../sweets_monos/pancakes_color.svg | Bin 25815 -> 25440 bytes .../sweets_monos/shortcake_color.svg | Bin 15485 -> 16834 bytes .../verts/chocolate_bar_color.svg | Bin 0 -> 525 bytes .../sweets_monos/verts/custard_color.svg | Bin 522 -> 511 bytes .../sweets_monos/verts/doughnut_color.svg | Bin 0 -> 568 bytes .../sweets_monos/verts/lollipop_color.svg | Bin 0 -> 554 bytes .../sweets_monos/verts/pancakes_color.svg | Bin 0 -> 582 bytes .../sweets_monos/verts/shaved_ice_color.svg | Bin 0 -> 547 bytes .../sweets_monos/verts/shortcake_color.svg | Bin 0 -> 499 bytes .../verts/soft_ice_cream_color.svg | Bin 0 -> 680 bytes .../src/pages/drop-and-fusion.game.vue | 65 +- .../frontend/src/pages/drop-and-fusion.vue | 2 +- .../src/scripts/drop-and-fusion-engine.ts | 584 ++++++++++++++++-- 14 files changed, 586 insertions(+), 65 deletions(-) create mode 100644 packages/frontend/assets/drop-and-fusion/sweets_monos/verts/chocolate_bar_color.svg create mode 100644 packages/frontend/assets/drop-and-fusion/sweets_monos/verts/doughnut_color.svg create mode 100644 packages/frontend/assets/drop-and-fusion/sweets_monos/verts/lollipop_color.svg create mode 100644 packages/frontend/assets/drop-and-fusion/sweets_monos/verts/pancakes_color.svg create mode 100644 packages/frontend/assets/drop-and-fusion/sweets_monos/verts/shaved_ice_color.svg create mode 100644 packages/frontend/assets/drop-and-fusion/sweets_monos/verts/shortcake_color.svg create mode 100644 packages/frontend/assets/drop-and-fusion/sweets_monos/verts/soft_ice_cream_color.svg diff --git a/packages/frontend/assets/drop-and-fusion/sweets_monos/custard_color.svg b/packages/frontend/assets/drop-and-fusion/sweets_monos/custard_color.svg index c76b3335e599f34d9e58263741d668f0bc67758d..d967fec7fe9c84d61d1fb61f09c030a15449f09f 100644 GIT binary patch literal 4521 zcmdT|(Qex|6n*bkaN0`>NR&v4BI(#IFsCa9cx$mH8@880vt(PVA{mkrJNx<_(lQz+ zR%~YruqJ>=iI-QGhll50dH8mHU69+XZt|)eIgADl$;xS!=H-0kTwQ+eDTg#|Ql?2! zmD$KCE9dQ-SHo{EK8!Da`}mGDw{!CG>buDgW8!$e|7$q*{fo;B^68iNgi+@E?|yQK zvuNAp!1q_H6{VZBqxYFrHU=+Ac;;$d_w}EV6vQ zXt#IwVrCA(D#~WG=RG_K0^_$c8LW%E{JhVQX{~)bYE1{tGMQq%%Q|ba`Zn9n$4x%l znQx!aX?5)zr0xn#n&m~|)i*^p$ZoT;O4IXckuP_jG;Ljd&OC&Z{Z-}VpssGp^t^j| zowr$CJV;)k4zOf>77gWls{5z|wbI0E-Z8zSdUNw<4L_m7NBZ}48Hqa-m|jh_31(taJO-Eo6YwnPj7&$4?bSNi7{H@>$rI>_ zuO{A~lQd6?_$!N7J{9lKpLg1oX0ztrSvRVe)W`v8o|P@hAyZqOfY7p$gEVxvY1SNR z33q7laNbS1D)Sb4e*^LTWQ6)ddDTFpx5Jl@gpvnTN-LI|UZ;dm%wf}3OH$2dO@`!x zcXT3d9(&WOsOmvI|MQGR(7Qmo3g^)dRd{dS-VGR3?12x;MX#F}@(IZm>IgR?>T|;b zh+n9Wi$?ZF!#Ui4-4HHi?xKx7_6?C+B1C^qpIViU5d zQc`S^Z`YSpF%Bq^n9!a;EEc*lcH_N^-sR>~yyD!Ikt=W>A4B)ROQid@fJNHX!j(|X zgI=Vq3~jw*ZSNfw1vVhJ;kX?1)5`{iEXh!N=)KH*4jIB1A_H=KjEy&iSl5kc2y%qM z2_%r3nZh$Xt5UuKn(%{l*1qj r6b3<0{LWyZRL7&p0KF9heVEq0C^BT`{Z9H(9QvD@d1!vUc=PHXNIEXl literal 3087 zcmd5;O;6iE5WV+TtjvWRy4f%9M@5jFO&|xV9$GHFAPbztlCdM(5cv0VAc`=}oyydtkS7Sy98N6epDT(8m1B>1kdQHV+`)J2FTMNBT3 z#9Uu6fr<7{v}GJ?h#LUM6hg!pW-eG5tcBIsNH?o7-2tCh{=G}^uFQ^)HgTHQJYFm|L?EPtzaR4Ml|&q)*B3hLK%;RU{&AhTy_5#=3%;Fgz2}A-K{)64B9Z zDm0M;@UFg*RYtOR>f5u_Mqh!sYUSmmt?{s1^I3AOIZ#65BRT*GQCqy}<_k$P@S#SAyy-Z5J9XrOnxG>z3_y4&dj%pt8G zq1)fdyLSjQyumHJJ3%KnvYfOH;_1TVVNCa$S4$o0!4eNCctTf($VSm2GED6h4#O8% zHz&z?&z5^N ss!-ahq6Y+_IFz7=B!Hp(1xcba1D}O&OA^gJ?m$V#?K$qg*H6Fv0V(idn*aa+ diff --git a/packages/frontend/assets/drop-and-fusion/sweets_monos/pancakes_color.svg b/packages/frontend/assets/drop-and-fusion/sweets_monos/pancakes_color.svg index 69ad069cc26ad63cdb8a305599067d444e367c33..94b2ab69b5ff9332deaa26c41ecdb25bc540078e 100644 GIT binary patch literal 25440 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 L^dFu0?l=DnWvf?H literal 25815 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 literal 15485 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 S^zkA<=XJ)Gz7GEBhu;8MDWOgP diff --git a/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/chocolate_bar_color.svg b/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/chocolate_bar_color.svg new file mode 100644 index 0000000000000000000000000000000000000000..5cd39cc9e30e1b2e6a112fdf528d74cea0798445 GIT binary patch literal 525 zcmZut(Qd*Z6n*zA7|#|;>k?b7CR1mYbeqX^%l6h3Y?%lRVC(*Vw6n=fLlsp(mis^wBYWFgNZW(xHGLXTLPNEXA%qpB&g<5p+29vKj-eF* literal 0 HcmV?d00001 diff --git a/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/custard_color.svg b/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/custard_color.svg index db547a5cfc12c92776015cff11a04d4f4cae07f7..dd4870dd7dc1cc3c87a13ea691a1875f907f1dcc 100644 GIT binary patch delta 62 zcmeBT`Om!JB%_(7j-jcKkuiugHqbFL_c1cnGuJUT@G;XfHUZH_AVH9-C?$P6E*t&g IvUEEx0Qhka00000 delta 73 zcmey*+{LotB%`B+j-jcKkqMYI(=jshF*X2^MkadZI>rV*=6c2^Ale8d2$lzFh*HwG NJUVW-hvx>i|JU>YYFNmE&&%(lSm)op)_QR_=1N^OlSu(5b{)tg={9_OpKryJDn zx9Dko&F|(2_X&AT=Y%X)3-tW5L^P&^+&o}}Yww$!kgn_EE{(0*lBFw~T2(CpkOUA+ z1e#GA3okH?2%S46d|lv_H3y7pskXKM&HkL3Vg$D^ZE-_v2lIHgg_$I*~qMk79qGCqhX zgTNBVSPC*51&C#w4x%*SbQ~f(Dh!YjXTYSKje`dw*g?rS6rnbN)&QrR0>#6~cTC_} I!ZNRVKTa8{>i_@% literal 0 HcmV?d00001 diff --git a/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/lollipop_color.svg b/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/lollipop_color.svg new file mode 100644 index 0000000000000000000000000000000000000000..d3778737a90c282cdc189a309c577ea39c00a8f3 GIT binary patch literal 554 zcmZuuT~EUx6n*zsAkSUtrB2sw)x=GW34SC_jlMMnSCm0Rah?C(+h!&%84qyp;hb|X zm)XU3ZOBIXRy$izh!aYbt(??$RnX_<^=Lv#8%irnXlbx#ScLuhiwx~_}6GVl@c*-}y~y{f}s_OEB41Ycp>;y@jqBuVePqvTto?bjh9WLd_B z+ku+5OEr4@g|OHR~t!V^H*=jT!lGqjI%T)=4?7jBfUkHhA}? zM%a$}blT?LeOo!*p=%wKHyV$ePjMIo*Q_Z+O=LmufJa=MMX5-mGr=R^7{I9*N05n0 z#6k1~E?|f`5)+XoyPcx~BA5t{!jqVfhX8tTA|Q*#0#4&GdiNghl;KD8<2yh41^xb~ Ar~m)} literal 0 HcmV?d00001 diff --git a/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/pancakes_color.svg b/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/pancakes_color.svg new file mode 100644 index 0000000000000000000000000000000000000000..b1a1a322e06b7cfd600fd06dabba40feaf669f2c GIT binary patch literal 582 zcmZuuU2oeU6n*cnU_28r*lBGiZlxt%HHod2mTubKEJI^f0v4um`tNt~TB()F!-aeA zIp=<`zB(N&I_fYQ?;6Z$hLLuiSH|rde82m$C@~si>r`vK(+zeWUtON9KW%R}yWe-$ zXgu!G-Ti0zb%XGNv0wRyvF&b)e*C;aoN~slzhi{^7>Am%X`1MiQy=#1CbUCux{(2p zB_NO(h;dF;R2WJm<;kenH#ir=38P+{eIH-FH$8KVUy4FYSyi%*qn&Ew9 zjKM$Z1+=68dgJQgpPX8~L=PtFU=3WgSiv$7ob}Mg9;pU@<4YnWFGwy+Qpj_%lm#he zK{L(?UrIrE1x5&(pUa$xr38E_c}DU~3NhP@6cJTQ<{3bfO{@!AmDMcr{{^6=FA6Bc UOQ^_!DN_S~FoRD@tGzt?2d6Ww!2kdN literal 0 HcmV?d00001 diff --git a/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/shaved_ice_color.svg b/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/shaved_ice_color.svg new file mode 100644 index 0000000000000000000000000000000000000000..00872c7a0c99475d9c549d3a573eeb7dae8d9931 GIT binary patch literal 547 zcmZuuU2no56n*zsFrI5Etsk{oO{UH)={A$;mhG)6XqgBNMeF|kE=H4?$ipS~aL&0O zj3%eOL`QCFp;d~hA7I2)p_x$I6t7oL?HHrl=8EM~E1qJd@nqZ@J|on;ZQZ@e92tZd1P!L>nPx+Z-fM_>n8k*szeIx`r6u;1}7iN@tQ5Ji>tnbBH&!g0Z2r}9O sn8q2fq9CJv7sHN2!mfJ^&pa2YLjdl8OX%!?494L8jS2jK+uOMH2YiR7ZU6uP literal 0 HcmV?d00001 diff --git a/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/shortcake_color.svg b/packages/frontend/assets/drop-and-fusion/sweets_monos/verts/shortcake_color.svg new file mode 100644 index 0000000000000000000000000000000000000000..e6ed1fbbf9eb8051c1d1616c9afb9adeed81d29f GIT binary patch literal 499 zcmZvYQE$Q^5XayB6pZJ#6fkbBR+FhSOS;Wux@CK73bssy2GF{1KWa3Yi98&+HpgpZn-(|i{2+I20&jRQivc%PFb7~~`l W`Z>N2XpRRS?C5WZyrZ2DVR}r%km=l z@4N2~SX>=<4cohZ@NFnLLd2O1o3`>{Tk`w6PqU1(VO)o5-L%1#Jhc4k@?!B}^=*0g z>-L%r`z^b@|7bri8J|h{GhRx$x?8dDKW-QTN_qX2GhUBlS4ep{9N-W`+i&GfzwTJxAl0A{;L@|qb|ZwzT=~!D4O!VP>N&Y z!{d8I%=28HPEXWg=++zRx9i>D`n@~rDew<(^d|&1?M_ZN^|v9>gKwHy|J1m`?OkZA zYQAZF_ZAt(zI}8vD#!h4eJJ|&DOB?pbmvFcH=dS4&FL~2jYYQ}YgU!~3mTyy(P&Xa zWHOO}j+Dhnm}$ZY;?&qoAWoCE378B8rl8WqrjX=XU=FD=HV2Jbs0eaQEh?dM$g|8U zeBCLCFcnG>J+~?*J7OUiqs|efQsk~Cmsp?yZQ|ERgCQG5hB4rT)9$%Er349Mf}Sl> V(22H4&De8$zqzDuFg@Po#XnI4!2|#R literal 0 HcmV?d00001 diff --git a/packages/frontend/src/pages/drop-and-fusion.game.vue b/packages/frontend/src/pages/drop-and-fusion.game.vue index f14f5dbff..a8fa953c3 100644 --- a/packages/frontend/src/pages/drop-and-fusion.game.vue +++ b/packages/frontend/src/pages/drop-and-fusion.game.vue @@ -93,6 +93,7 @@ SPDX-License-Identifier: AGPL-3.0-only
SCORE: {{ getScoreUnit(gameMode) }}
MAX CHAIN:
TOTAL EARNINGS:
+
おにぎり個分
{{ i18n.ts.replaying }}
@@ -152,6 +153,18 @@ SPDX-License-Identifier: AGPL-3.0-only +
+
+
FUSION RECIPE
+
+
+ +
+
+
+
+
+
Surrender @@ -416,70 +429,70 @@ const SWEETS_MONOS: FrontendMonoDefinition[] = [{ img: '/client-assets/drop-and-fusion/sweets_monos/shortcake_color.svg', imgSizeX: 32, imgSizeY: 32, - spriteScale: 1.12, + spriteScale: 1, }, { id: 'f3468ef4-2e1e-4906-8795-f147f39f7e1f', sfxPitch: 0.5, img: '/client-assets/drop-and-fusion/sweets_monos/pancakes_color.svg', imgSizeX: 32, imgSizeY: 32, - spriteScale: 1.12, + spriteScale: 1, }, { id: 'bcb41129-6f2d-44ee-89d3-86eb2df564ba', sfxPitch: 0.75, img: '/client-assets/drop-and-fusion/sweets_monos/shaved_ice_color.svg', imgSizeX: 32, imgSizeY: 32, - spriteScale: 1.12, + spriteScale: 1, }, { id: 'f058e1ad-1981-409b-b3a7-302de0a43744', sfxPitch: 1, img: '/client-assets/drop-and-fusion/sweets_monos/soft_ice_cream_color.svg', imgSizeX: 32, imgSizeY: 32, - spriteScale: 1.12, + spriteScale: 1, }, { id: 'd22cfe38-5a3b-4b9c-a1a6-907930a3d732', sfxPitch: 1.5, img: '/client-assets/drop-and-fusion/sweets_monos/doughnut_color.svg', imgSizeX: 32, imgSizeY: 32, - spriteScale: 1.12, + spriteScale: 1, }, { id: '79867083-a073-427e-ae82-07a70d9f3b4f', sfxPitch: 2, img: '/client-assets/drop-and-fusion/sweets_monos/custard_color.svg', imgSizeX: 32, imgSizeY: 32, - spriteScale: 1.12, + spriteScale: 1, }, { id: '2e152a12-a567-4100-b4d4-d15d81ba47b1', sfxPitch: 2.5, img: '/client-assets/drop-and-fusion/sweets_monos/chocolate_bar_color.svg', imgSizeX: 32, imgSizeY: 32, - spriteScale: 1.12, + spriteScale: 1, }, { id: '12250376-2258-4716-8eec-b3a7239461fc', sfxPitch: 3, img: '/client-assets/drop-and-fusion/sweets_monos/lollipop_color.svg', imgSizeX: 32, imgSizeY: 32, - spriteScale: 1.12, + spriteScale: 1, }, { id: '4d4f2668-4be7-44a3-aa3a-856df6e25aa6', sfxPitch: 3.5, img: '/client-assets/drop-and-fusion/sweets_monos/candy_color.svg', imgSizeX: 32, imgSizeY: 32, - spriteScale: 1.12, + spriteScale: 1, }, { id: 'c9984b40-4045-44c3-b260-d47b7b4625b2', sfxPitch: 4, img: '/client-assets/drop-and-fusion/sweets_monos/cookie_color.svg', imgSizeX: 32, imgSizeY: 32, - spriteScale: 1.12, + spriteScale: 1, }]; const props = defineProps<{ @@ -510,11 +523,13 @@ function getScoreUnit(gameMode: string) { function getMonoRenderOptions(mono: Mono) { const def = monoDefinitions.value.find(x => x.id === mono.id)!; return { + sprite: { texture: def.img, xScale: (mono.sizeX / def.imgSizeX) * def.spriteScale, yScale: (mono.sizeY / def.imgSizeY) * def.spriteScale, }, + }; } @@ -1147,21 +1162,25 @@ onMounted(async () => { } /* -const getVerticesFromSvg = async (path: string) => { - const svgDoc = await fetch(path) - .then((response) => response.text()) - .then((svgString) => { - const parser = new DOMParser(); - return parser.parseFromString(svgString, 'image/svg+xml'); + const getVerticesFromSvg = async (path: string) => { + const svgDoc = await fetch(path) + .then((response) => response.text()) + .then((svgString) => { + const parser = new DOMParser(); + return parser.parseFromString(svgString, 'image/svg+xml'); + }); + const pathDatas = svgDoc.querySelectorAll('path'); + if (!pathDatas) return; + const vertices = Array.from(pathDatas).map((pathData) => { + return Matter.Svg.pathToVertices(pathData); }); - const pathDatas = svgDoc.querySelectorAll('path'); - if (!pathDatas) return; - const vertices = Array.from(pathDatas).map((pathData) => { - return Matter.Svg.pathToVertices(pathData); + return vertices; + }; + + getVerticesFromSvg('/client-assets/drop-and-fusion/sweets_monos/verts/doughnut_color.svg').then((vertices) => { + console.log('doughnut_color', vertices); }); - return vertices; -}; -*/ + */ await start(); diff --git a/packages/frontend/src/pages/drop-and-fusion.vue b/packages/frontend/src/pages/drop-and-fusion.vue index 5fc71f700..18d3f56ca 100644 --- a/packages/frontend/src/pages/drop-and-fusion.vue +++ b/packages/frontend/src/pages/drop-and-fusion.vue @@ -27,7 +27,7 @@ SPDX-License-Identifier: AGPL-3.0-only - + {{ i18n.ts.start }}
diff --git a/packages/frontend/src/scripts/drop-and-fusion-engine.ts b/packages/frontend/src/scripts/drop-and-fusion-engine.ts index 06668743e..7c75822a2 100644 --- a/packages/frontend/src/scripts/drop-and-fusion-engine.ts +++ b/packages/frontend/src/scripts/drop-and-fusion-engine.ts @@ -14,6 +14,7 @@ export type Mono = { sizeY: number; shape: 'circle' | 'rectangle' | 'custom'; vertices?: Matter.Vector[][]; + verticesSize?: number; score: number; dropCandidate: boolean; }; @@ -280,47 +281,439 @@ const SQUARE_MONOS: Mono[] = [{ dropCandidate: true, }]; -const SWEETS_BASE_SIZE = 30; -// TODO: custom shape vertices +const SWEETS_BASE_SIZE = 40; const SWEETS_MONOS: Mono[] = [{ id: '77f724c0-88be-4aeb-8e1a-a00ed18e3844', level: 10, sizeX: SWEETS_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, sizeY: SWEETS_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, - shape: 'circle', - score: 512, + shape: 'custom', + vertices: [ + [ + { + 'x': 14, + 'y': 2, + }, + { + 'x': 2, + 'y': 13, + }, + { + 'x': 2, + 'y': 31, + }, + { + 'x': 30, + 'y': 23, + }, + { + 'x': 30, + 'y': 7, + }, + { + 'x': 29, + 'y': 6, + }, + { + 'x': 20, + 'y': 4, + }, + { + 'x': 17, + 'y': 3, + }, + { + 'x': 16, + 'y': 2, + }, + ], + ], + verticesSize: 32, + score: 400, dropCandidate: false, }, { id: 'f3468ef4-2e1e-4906-8795-f147f39f7e1f', level: 9, sizeX: SWEETS_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, sizeY: SWEETS_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, - shape: 'circle', - score: 256, + shape: 'custom', + vertices: [ + [ + { + 'x': 15, + 'y': 2, + }, + { + 'x': 14, + 'y': 3, + }, + { + 'x': 8, + 'y': 4, + }, + { + 'x': 6, + 'y': 5, + }, + { + 'x': 4, + 'y': 8, + }, + { + 'x': 4, + 'y': 15, + }, + { + 'x': 2, + 'y': 19, + }, + { + 'x': 2, + 'y': 22.36, + }, + { + 'x': 3, + 'y': 25, + }, + { + 'x': 5, + 'y': 28, + }, + { + 'x': 10, + 'y': 30, + }, + { + 'x': 22, + 'y': 30, + }, + { + 'x': 27, + 'y': 28, + }, + { + 'x': 29, + 'y': 25, + }, + { + 'x': 30, + 'y': 22, + }, + { + 'x': 30, + 'y': 19, + }, + { + 'x': 28, + 'y': 15, + }, + { + 'x': 28, + 'y': 8, + }, + { + 'x': 26, + 'y': 5, + }, + { + 'x': 24, + 'y': 4, + }, + { + 'x': 18, + 'y': 3, + }, + { + 'x': 17, + 'y': 2, + }, + ], + ], + verticesSize: 32, + score: 380, dropCandidate: false, }, { id: 'bcb41129-6f2d-44ee-89d3-86eb2df564ba', level: 8, sizeX: SWEETS_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, sizeY: SWEETS_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, - shape: 'circle', - score: 128, + shape: 'custom', + vertices: [ + [ + { + 'x': 15, + 'y': 2, + }, + { + 'x': 11, + 'y': 3, + }, + { + 'x': 8, + 'y': 6, + }, + { + 'x': 7, + 'y': 8, + }, + { + 'x': 6, + 'y': 11, + }, + { + 'x': 6, + 'y': 13, + }, + { + 'x': 7, + 'y': 16, + }, + { + 'x': 8, + 'y': 18, + }, + { + 'x': 15, + 'y': 30, + }, + { + 'x': 17, + 'y': 30, + }, + { + 'x': 24, + 'y': 18, + }, + { + 'x': 25, + 'y': 16, + }, + { + 'x': 26, + 'y': 13, + }, + { + 'x': 26, + 'y': 11, + }, + { + 'x': 25, + 'y': 8, + }, + { + 'x': 24, + 'y': 6, + }, + { + 'x': 21, + 'y': 3, + }, + { + 'x': 17, + 'y': 2, + }, + ], + ], + verticesSize: 32, + score: 300, dropCandidate: false, }, { id: 'f058e1ad-1981-409b-b3a7-302de0a43744', level: 7, sizeX: SWEETS_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, sizeY: SWEETS_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, - shape: 'circle', - score: 64, + shape: 'custom', + vertices: [ + [ + { + 'x': 17, + 'y': 2.541, + }, + { + 'x': 14, + 'y': 5.402, + }, + { + 'x': 10, + 'y': 7, + }, + { + 'x': 10, + 'y': 10.367, + }, + { + 'x': 8, + 'y': 11, + }, + { + 'x': 8, + 'y': 14, + }, + { + 'x': 5.781, + 'y': 16.265, + }, + { + 'x': 6.594, + 'y': 19.627, + }, + { + 'x': 9.414, + 'y': 21, + }, + { + 'x': 12, + 'y': 29.988, + }, + { + 'x': 21, + 'y': 29.988, + }, + { + 'x': 22.016, + 'y': 22.629, + }, + { + 'x': 23, + 'y': 21.772, + }, + { + 'x': 23, + 'y': 19.202, + }, + { + 'x': 25.783, + 'y': 17.473, + }, + { + 'x': 25.783, + 'y': 14.727, + }, + { + 'x': 24, + 'y': 13.173, + }, + { + 'x': 24, + 'y': 10.367, + }, + { + 'x': 22, + 'y': 9.233, + }, + { + 'x': 22, + 'y': 6.454, + }, + { + 'x': 18, + 'y': 5, + }, + ], + ], + verticesSize: 32, + score: 300, dropCandidate: false, }, { id: 'd22cfe38-5a3b-4b9c-a1a6-907930a3d732', level: 6, sizeX: SWEETS_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, sizeY: SWEETS_BASE_SIZE * 1.25 * 1.25 * 1.25 * 1.25 * 1.25, - shape: 'circle', - score: 32, + shape: 'custom', + vertices: [ + [ + { + 'x': 15, + 'y': 2, + }, + { + 'x': 11, + 'y': 3, + }, + { + 'x': 8, + 'y': 5, + }, + { + 'x': 7, + 'y': 6, + }, + { + 'x': 5, + 'y': 9, + }, + { + 'x': 4, + 'y': 12, + }, + { + 'x': 4, + 'y': 20, + }, + { + 'x': 5, + 'y': 23, + }, + { + 'x': 7, + 'y': 26, + }, + { + 'x': 11, + 'y': 29, + }, + { + 'x': 14, + 'y': 30, + }, + { + 'x': 18, + 'y': 30, + }, + { + 'x': 21, + 'y': 29, + }, + { + 'x': 25, + 'y': 26, + }, + { + 'x': 27, + 'y': 23, + }, + { + 'x': 28, + 'y': 20, + }, + { + 'x': 28, + 'y': 12, + }, + { + 'x': 27, + 'y': 9, + }, + { + 'x': 25, + 'y': 6, + }, + { + 'x': 24, + 'y': 5, + }, + { + 'x': 21, + 'y': 3, + }, + { + 'x': 17, + 'y': 2, + }, + ], + ], + verticesSize: 32, + score: 250, dropCandidate: false, }, { id: '79867083-a073-427e-ae82-07a70d9f3b4f', @@ -331,56 +724,163 @@ const SWEETS_MONOS: Mono[] = [{ vertices: [ [ { - 'x': 8, + 'x': 9, 'y': 15, }, { - 'x': 24, + 'x': 23, 'y': 15, }, - { - 'x': 26, - 'y': 26, - }, { 'x': 30, - 'y': 26, + 'y': 27, }, { - 'x': 24.7, + 'x': 25.7, 'y': 30, }, { - 'x': 7.34, + 'x': 6.34, 'y': 30, }, { 'x': 2, - 'y': 26, - }, - { - 'x': 6, - 'y': 26, + 'y': 27, }, ], ], - score: 16, + verticesSize: 32, + score: 200, dropCandidate: true, }, { id: '2e152a12-a567-4100-b4d4-d15d81ba47b1', level: 4, sizeX: SWEETS_BASE_SIZE * 1.25 * 1.25 * 1.25, sizeY: SWEETS_BASE_SIZE * 1.25 * 1.25 * 1.25, - shape: 'circle', - score: 8, + shape: 'custom', + vertices: [ + [ + { + 'x': 12, + 'y': 2, + }, + { + 'x': 2, + 'y': 12, + }, + { + 'x': 2, + 'y': 14, + }, + { + 'x': 18, + 'y': 30, + }, + { + 'x': 20, + 'y': 30, + }, + { + 'x': 30, + 'y': 20, + }, + { + 'x': 30, + 'y': 18, + }, + { + 'x': 14, + 'y': 2, + }, + ], + ], + verticesSize: 32, + score: 200, dropCandidate: true, }, { id: '12250376-2258-4716-8eec-b3a7239461fc', level: 3, sizeX: SWEETS_BASE_SIZE * 1.25 * 1.25, sizeY: SWEETS_BASE_SIZE * 1.25 * 1.25, - shape: 'circle', - score: 4, + shape: 'custom', + vertices: [ + [ + { + 'x': 12, + 'y': 2, + }, + { + 'x': 7, + 'y': 3, + }, + { + 'x': 3, + 'y': 7, + }, + { + 'x': 2, + 'y': 12, + }, + { + 'x': 3, + 'y': 16, + }, + { + 'x': 5, + 'y': 19, + }, + { + 'x': 8, + 'y': 21, + }, + { + 'x': 12, + 'y': 22, + }, + { + 'x': 18, + 'y': 21, + }, + { + 'x': 27, + 'y': 30, + }, + { + 'x': 30, + 'y': 30, + }, + { + 'x': 30, + 'y': 27, + }, + { + 'x': 21, + 'y': 18, + }, + { + 'x': 22, + 'y': 14.25, + }, + { + 'x': 22, + 'y': 11, + }, + { + 'x': 21, + 'y': 8, + }, + { + 'x': 19, + 'y': 5, + }, + { + 'x': 16.5, + 'y': 3, + }, + ], + ], + verticesSize: 32, + score: 120, dropCandidate: true, }, { id: '4d4f2668-4be7-44a3-aa3a-856df6e25aa6', @@ -392,14 +892,14 @@ const SWEETS_MONOS: Mono[] = [{ [ { 'x': 12, - 'y': 1.9180000000000001, + 'y': 1.9, }, { 'x': 4, 'y': 4, }, { - 'x': 2.016, + 'x': 2, 'y': 12, }, { @@ -419,7 +919,7 @@ const SWEETS_MONOS: Mono[] = [{ 'y': 25.372, }, { - 'x': 16.008, + 'x': 16, 'y': 26, }, { @@ -455,7 +955,7 @@ const SWEETS_MONOS: Mono[] = [{ 'y': 7, }, { - 'x': 16.008, + 'x': 16, 'y': 6, }, { @@ -464,7 +964,8 @@ const SWEETS_MONOS: Mono[] = [{ }, ], ], - score: 2, + verticesSize: 32, + score: 20, dropCandidate: true, }, { id: 'c9984b40-4045-44c3-b260-d47b7b4625b2', @@ -472,7 +973,7 @@ const SWEETS_MONOS: Mono[] = [{ sizeX: SWEETS_BASE_SIZE, sizeY: SWEETS_BASE_SIZE, shape: 'circle', - score: 1, + score: 30, dropCandidate: true, }]; @@ -524,7 +1025,7 @@ export class DropAndFusionGame extends EventEmitter<{ private stock: { id: string; mono: Mono }[] = []; private holding: { id: string; mono: Mono } | null = null; - private get monoDefinitions() { + public get monoDefinitions() { switch (this.gameMode) { case 'normal': return NORAML_MONOS; case 'yen': return YEN_MONOS; @@ -646,8 +1147,8 @@ export class DropAndFusionGame extends EventEmitter<{ return Matter.Bodies.rectangle(x, y, mono.sizeX, mono.sizeY, options); } else if (mono.shape === 'custom') { return Matter.Bodies.fromVertices(x, y, mono.vertices!.map(i => i.map(j => ({ - x: (j.x / 32) * mono.sizeX, - y: (j.y / 32) * mono.sizeY, + x: (j.x / mono.verticesSize!) * mono.sizeX, + y: (j.y / mono.verticesSize!) * mono.sizeY, }))), options); } else { throw new Error('unrecognized shape'); @@ -687,7 +1188,8 @@ export class DropAndFusionGame extends EventEmitter<{ this.emit('monoAdded', nextMono); } - const comboBonus = this.gameMode === 'yen' ? 1 : 1 + ((this.combo - 1) / 5); + const hasComboBonus = this.gameMode !== 'yen' && this.gameMode !== 'sweets'; + const comboBonus = hasComboBonus ? 1 + ((this.combo - 1) / 5) : 1; const additionalScore = Math.round(currentMono.score * comboBonus); this.score += additionalScore;