From 29a70f9c7875a6e42d355112e81b705396d93237 Mon Sep 17 00:00:00 2001 From: clmaisonha Date: Wed, 8 Jul 2020 01:41:02 +0200 Subject: [PATCH] =?UTF-8?q?Sauvegarde=20des=20infos=20des=20stats=20du=20r?= =?UTF-8?q?obot=20en=20json=20-=20Recharger=20la=20page=20en=20changeant?= =?UTF-8?q?=20de=20langue=20garde=20les=20stats=20du=20robots=20-=20R?= =?UTF-8?q?=C3=A9essayer=20un=20niveau=20=C3=A0=20la=20fin=20de=20celui-ci?= =?UTF-8?q?=20garde=20notre=20arbre=20d'action=20et=20nos=20statistiques?= =?UTF-8?q?=20-=20Modification=20de=20HealthBar=20pour=20impl=C3=A9menter?= =?UTF-8?q?=20l'=C3=A9criture=20dans=20la=20barre=20-=20Impl=C3=A9mentatio?= =?UTF-8?q?n=20de=20l'=C3=A9criture=20"Bouclier"=20et=20"Vie"=20dans=20leu?= =?UTF-8?q?rs=20barres=20respectives=20-=20L'edition=20d'action=20est=20no?= =?UTF-8?q?rmalement=20fonctionnelle=20-=20Cr=C3=A9ation=20des=20boutons?= =?UTF-8?q?=20modifier=20en=20anglais=20et=20en=20fran=C3=A7ais?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Code/assets/en/buttons/modify.png | Bin 0 -> 16459 bytes Code/assets/fr/buttons/modify.png | Bin 0 -> 22519 bytes Code/public/js/level2.min.js | 2 +- Code/public/js/level3.min.js | 2 +- Code/src/js/level2/AddAttack.js | 15 ++++-- Code/src/js/level2/AddCondition.js | 16 ++++-- Code/src/js/level2/AddMove.js | 17 +++++-- Code/src/js/level2/Bar.js | 9 ++-- Code/src/js/level2/CategoryBar.js | 25 +++++++--- Code/src/js/level2/Function.js | 29 ++++++++++- Code/src/js/level2/Game.js | 73 ++++++++++++++++++++-------- Code/src/js/level2/GamingBoard.js | 3 +- Code/src/js/level2/InitStat.js | 40 +++++++++++++++ Code/src/js/level2/LoadFile.js | 1 + Code/src/js/level2/Looser.js | 4 +- Code/src/js/level2/RectangleNode.js | 38 +++------------ Code/src/js/level2/Robot.js | 4 +- Code/src/js/level2/Winner.js | 4 +- Code/src/js/level3/AddNode.js | 26 ++++++++-- Code/src/js/level3/Finish.js | 11 +++-- Code/src/js/level3/HealthBar.js | 30 +++++++++--- 21 files changed, 245 insertions(+), 104 deletions(-) create mode 100644 Code/assets/en/buttons/modify.png create mode 100644 Code/assets/fr/buttons/modify.png create mode 100644 Code/src/js/level2/InitStat.js diff --git a/Code/assets/en/buttons/modify.png b/Code/assets/en/buttons/modify.png new file mode 100644 index 0000000000000000000000000000000000000000..21bdca466906894dc4d28b900a8cfe81a8d706a4 GIT binary patch literal 16459 zcmch;2V9fgvNsyKpp*cLR53IKfrOsWB~n9Ck)jBMB=p{U5tSfKiV%v}Q3OPKFH#Lv zq)8DF>AiRGd!p}t_ul88^PO|={qD{02jp36o>{YI&6@R}nMI_5o(4S~2OS6mqSw+y z-T;9pQNZ`)Q`8_3S<#ZHH}F8~s%h#00-a_d{g8puGR^~E#Ow@BJWX^_2#kx97#izh zg%k62as{YCAO&S#S2V@}=gDh@v$1nlgsfK8L3r)3iV$OIU8t_B8qU^E)88F;(_haJ za0hK{W!g>GtK!DNQvDSzi zNcF$Q0-h8hww|7@2yt;AA0IIvNii398*vyM4i|??h)YO_0u-Vie$Jj~Ur}cdzJG8) z;yf_!cCMawF3!9pj%X_vFHc1XAnBheIJy4K*4g7PH313}_eHyk!^EJZDg7pNwRQ1y z@vwFIFUbGy{$2sDhaL%3{04?nA0RYwN>i$jspUUFo^f$GK z=QVF&8hI8f9msp@H#;L_sgDk*8j!3 zq@I6M0M6I$zaS;`{7veLP;>VMTi7c0xAlX5rxSZN65_C)_Hv8*Um&JeIUNeP66 z)V~qCVC}5^{#(+&R~w<`;^^Y8>w*R3kc9AJF$ilHcPBKkGImaA8=SbSv(0ZQbafG0 z&K{ml9h%@Ny^E} z{^Nb53&x9NHKh0d>^iIq2H^2eS+F=+D{D9gCyE19A_|j~k`{%_qG6&~3>Io71G9!f zVG{q~rtfYCY<#rizj7r>g#|duN=sVHSYzb?C7~rn;nGr)B>6C+auO04S+tzAG+agw z!b@6f1i%Im2~FBviV)aejV2_UbM*StC@TR4KH@Oa@4xy@|C|1QcHeTg15^nJO|q6h zy1ofGE==Hk@)=8CH{ZleQ}br`Xh??KZW==VSjrJ zgr=PbuyOqU8uBL2?Vp4Hb`l6Q=FduCNLvhth4B7qw);=)@qf1Rf8O`8#Q|&nzuA0$ z$UI!EJ$=ybI8__KQ2v{({V#g^chNo2-v4{SCFJBV)@UhfQCYN83`+l zl_(mA#)`t=QZP|DNh_SFm6W8UEExS6i?cV*{a;MV73~h} z4^Ln#DMGB>U7UE)uC9)DnBVR}+}j!Z*YWzdIrDnD@cz?J{+BAl;@s{2W&Qtkl)pvb z{XaO~e`{_3Gq?T!^Ai1b7=O0E_y8| zgp-3y$YG@6z?me06}6I;!imaRTSG;qpfb{uvJ%!fISJr|`y-9Z|JyT(WI?~x@Gqe6 zA58#~Bz^rG!U7L}gJ7I9uxH%?i2J#rtq25?YScoi8v14|e-FrD?SHzv-W~lJCxcE_E1qyZ{$)eOj1n=p3$7z|B33{+S+>Q{BBoCmJIj)VxiDt~EfBslt?FTdPFy&l|S7U+SjjLsS_sGnA< zI7&k~@3|HG>e6ABlG?>Jue55O$j|@lAY@>7X z-LO>ty7#s1pxWlM*-V5Bn!5BeDdMlKnmY*HF<038mrnSki^5M4D+`ra=K9`Xh7WBD z^Y1*U=NNa0gx0z{KJI^TbqWl*bCx`X@~$0LiTU!gab)kqah}a}U)>vD$hE9rvD^wB zd%NwlL)a8_%k)Wm;p-y&%xkUcUSkAlZa1ZN>zS;ZDY39kRt=|Z z&f4blKU`HCwN!%y9B+JayEL)f zO$x8{k`?spoZ}VKi#?nWi}5R+!K)^^-Jicu{e7(m|&CwfKokYw7l{e!hO&kMzMeV^uO9in`i009qPYyh>aDIuUml5L5AwDz# zKFhBFo!IA$KhN#H-%|9s;Gs$~u*{VygF*@cOHb;%r<*u$ZhVQGDfM;SPQG2&7%A}h zmF7GlOX>?dfmM+?uX?J5_o|lgnyi+vM)({$wgO?B4REa7URbannTvN;jSlQJMQaH= zq@`ckc>7!=cUUTp%10UOS@OZu!MRJRMx&_pXN{kp{dmPtFj=_-Ufcd$o_#g-@h2Mc&zwxkXKaJ&pLMxXn?x#qrOh91Z zw2A+-fs_%kI>{C99tx44Pvi@>1gUqV93ld}Eq#90w_~Rt7)%N5=ntJ~5-FgLRaf%v zPNJCnzH2>C{~$i_e55jLHp^k_BGyK#lyLW z8SK61SJmW!y;d|kwm;`ox;)C^^Xqdv9p*`ui&~js7gZ4`QD0 zfrYHNDUyEIp50|+G9i=pnf{jVspC>6-!X62;HZo@h$lhJey^>)ze;$_g-QtT3;r-3 zupz&dK2uTK_H{@o6-yKSUU#!0^9d-c8ymXJdz7S;$chiSM<~BISVG=H5mL;Jx5!wU zut_;iuuz;07W-;r-X6I^=5|>k;M>VcY*HZ$jIO{nHRucAOdP$b0!9X$Se%t>-LHh0 z{>oU~NPLn)L1$aR>(MoIvck}IfSPE2Yg9QV6mg&+F=Li~li{e#{YpYj@#iG|Ub%f0 z0RtOJX5#JJ7TO6FWND0Vl}}6dl+VPUgPLmQzM$CmOs(M`Johdl*(LebyKV3$kERrL zHpmukqOqY%Mo+_x|Migg)@$LlmT<^!CjE%>rZ^Yz25el2D5xAcs+#TO+*aI!&zLh^ zjURoo6_n8CdT{T&vd>$#6qAqlzlErYUrYHOrXcqwBm4tz%&r!qR|bJV3(_fyd?)9J zwuZ*5cp>E9!f=@4%~1JJozO%HQIx_q`;5mClsy)%vwgMhv~6006C+@q*T_C*WYvAg zC=CvV&Ga7UQK`S8(2_yWN;c12use~}**_pJqe*P%5cU=Ar{fp78?_(cyq-N8#FHZO zDW~a3bljsVJbmbGe|B<}zvW4-Q)nZ5@|#^P=Y`n)5r&Jz^To(iqShRJg7`vMn$+$w zz5lbR@F)EH@~!Qthw;`nPwx*fO?Yr5TYK1D$O=JjXiRkkbT+l2{GU^3)!NepF1e2= z&Z#8iTUlQ!U=TF-Y11mtAm`^4hn|*{QrR$$qIi^C`Pd{uSARE=_uk{&U6rY)pTmid zLMh^x&gG-8hx5fgQy+^|AeeEu@+KVL*7#o6rOleq$-&7sYx(k%Ewj$nH9eVB zh+PAgl=66UkAGD)+JRQ)_FgW=kiUPBC3>KYmV8U zc6XF_jhtX^x8Shxn~pS0ly%8-8AlUM<=xjlXmGhJckhQsZkFHj*5=7-n69vl;7j&_oEIN`zN`rrrp zT^CRwb;k3FUw54K1ZGodoM@PmfU|vw;bLy-Ir2p(jUR6TFj9P;mb1M+Gn~UkKKvVh z9X}_Y+I7#McUrr`{ag#*EF1YTK={DK0z+~gZoH8tPZKK)^8%}f=0|;TmD#cpQ--ZK zb1BpTgdoZj=VN(UyaH?+%nJ{kgGxsk35+Tm`8hL~Uo31jy|3e8sHs3jALUvDGINBV zBbrm`J=1b(=tNq+TL$qv1hGg_h4Bxxc!QYf@>MsB;2}k2d_lHO=?e=i)oZGoD=7(2xqQP?s8cy=By>O~T)W5i zHjn-ergrJlW$^l7MLqNFU}}f3pGWV$)w8623{W&?6ehsPxcgoG}N!IB(7$@R=n4r2A`sT8-_jXSNM%uUSLp z#3)-tK0l;l*|1~w*yCB7kDkExPIe%e$S?wZwvBf7aZMy}jT_9hZCNqLGdV=;9|e?T z{Y-wi(IB;Fgp@Fj*l#G&^@} z>1p+qZV&R<70KV>PyXvEmNV!RI3AnXj7t7?2?4u)0|Ie=N_7;FF$*Xif5#*AbcTF< zB(Y}#1CD=u2y^xC!Le!W%JXEvFxHyf+Uz6B_wO7WUC*^MPQi zaqKhzQ)gc9JY{KNb4d3s(0YCnkyX+$g848Jf5mn03%X6m8C7`~z#)A`b)QDFpTM5g z*%0q~F7}@d1wx2~WLY~Sc=*F-<5nYNeA)!S+eKT&hzV830Mek1jo&Xw z1q24~HxRTQr<0v!1D5<8wEi)?(=)1ny89$cPjZ89LTl_0${CU00u+}ZsmKyWO+G%GA)6F?Nc zRv-C5g=QpPb7rT1bvw5wIArh;c0s>SE%E&UUxdlclrjE>_5rc&D-7!$791yo_I2>* zKy+j1l-5f8Ugdkk=n5`K@Z-w#Hhapd??isKd9(8+I1%yd)~Ta5Z`Op=&ph;RX_~t$ zB?{I`gh7I09S)5Yh1J*kfzP{ zQSwj6Iize1g?$g}GY*+D;N8}|r060KA_B|uvOY19w(h{~`L@=M2xZm?!&QkQV11o~ z-6fcQeKpUwb&P0Q7g%!`QPrHuX!ky}_!d`FwR0W7ucudn8&WFuR>lNgspcf4(}f+E zhClAuR?5q_q18%ZC=dttaX}L5FHPubWs;kV zxOxv6J}^de-JtDZ`Qor=I=*A?({V=6e#h&PH;B!gbQ6u_=$Cg=oDFjc?3;dNMXg=p z7T+AHO^JxEQ!N!p(a!=q{a0>J+gHW;1U7Wgo(;TRCNl5s+{|H+KBt|AE#Oh|B)lw* z6kp8C3+DT=84~Ph%4^J}bvyVvbj4>-&L{Sz-TXCvuV0|0E8J!aql4tZrcIqsWQbX> z#knO3Za%3wpIDq`@tFx@6|2{BLA`8a+HP9i0My_N4*1&CcD-V!Oe>L#wlAhW<8u?G zrwTZ}Pl3VgG*djm6SOl#r-{5e52Bas(a^sT6u4G^*VJ@+d+~B);e~REXi$5}WwBIpUIVAU_si~my#Xa(lvdds1HwN}>nfDxY97^<1tt0cF zuq6GcM^04P#!`Uut7#0$ib88tjkpT*Vnw+_b)ex(UCk)aAcGvy+5lp@a><(MfMMe9 zgmj1RV_DG_WKQS;oPJNy)lOwQa_Uu4sD;!Ks1GwkM{p3~y>OS|h%WIyUeo_JI$<|4 z^rU|7-E19YFwN*AQ>-{s@Y6Q8j>cS*Y8C+jh^j+4JkS5kX5Jim)eo#A`3&b6%#v1H z8+l}ehgTI`*sKTuduaFXYS#>Ke0#Vr@L}^sAXw{e07`ZlW|=T;a>I?wdLo`m2p3mwcLj7!9+we zL7Xi};xhmD*DtB%ZyHD8L-gvo3=uRYHaQOwI^?-Gkw+!qJ>5$Aw~2(n`>CfbknX)= z_t;$zq!lt@H;{!btd=(s@>ywwK!%Joy=xF=;gUW10SwgoHW`?BwgMA~T2H0H;Wd4?>zn%# zk<5t$a|xDUy9DBmxn}|A9^mf}u_knQBwT`J@5-D5(^lkTK4fY2AKON!;iZNMb41@r zVvS1JF0iLRzwwvW<(xRDOb(7Wh>{Nqs&1NMcm_PI-HC4~z1)rFh4{TVFDE;|Qozij zf9?l3KEvy>weUW+HcHlb6R+uf`@-UB_w7B(l!DRWbi4v>+yhY=|xxJt>2 z$KSu>!@Qe@q7!BU)0VW&(Y$0y%%>)`kBiV|rn8u^LYTdcuZ=~bP$!BLDu4%~ezRAO z*Swipv| zJuc?#UAv%)}@Ga z3Il(dkS)Y1 z(Q|^8eoWOWYGao=3T!(lE|+_G9Y8)YWh_o?6*V_^-z{pm_B>&8w;ybB_*5Brc4BJf z?z?xjjG?&A9KVGV<>Ge%>O&}*{Me8mCe==m5Pe#+pOt}nal|rFDhQaA?2+lq+br&Y zi&(!c8P{5tmjtrIz;q(_1BDB^Og7q!tsZ~bb8cFubGWW~+L`0PkW0x^ZaN4!lr!## z)g%Jw<=ct#kvOw6=D66|xDBRhTO2W!b6Tff*r)?L(lvDxdBwa4zy1V6I=2DPGU;5F z^&uH}zT2+|XfCI$PbR<-OT1)#G;val;kJOwIOn$j0q_y7<}h2#S}7oZ(MiBS65`Be z8g=zHkV}pm$}ev}n8@_ArgLMAZFz4%BvUKf3BLqLb%v|Ey2Z#EQ_@Sg(3~ z!u{>I%HaDs-$3g66<@bYnF*sXrmw#=4`nUzD{pvf2_quvy-dh@>=7Y+w6rB!wq~q_;5suCM zvOg=IOaYF2J@Tz;yQsaIQv@(ENOv3ap}kSRC#Yp8R;~Ky8E9u8E%!)s;8C*9clylT zJHl^6_|HF32_wNdJHy_S((&lo z*p4}=Xf_P`2EdHmBX$|o#Cdwvw0F9r(O#JefVYF}ofdm0P11shmaeW;#MHE#O`Ge|Dndt(Y zXm}y;7b=ljc!As4Zt>DInj$V;i&@yr&0%Nn6{zP%h~H zr$|7O?3-51?jo{vp!)VZ=5()>I=>0KIRZc!KXt!T8|7ZV*H*BUBda(M=vKnXWWhll zkDa?VLWY-x2;DmLZ50A4FcWv~rZJdX`PMMWSS1DqbA_G`|?-5=g8 zrC?g!ugUDhP2Ya6d;8sG%H(gcSF2%#*rfdFMXA`Pn}~8xWe%H!n+z8aO99;1oT38r z)vnHVURCi}p9$4yQJitumwZ+;IJhAoge_f*#6Ho|PH~I5p(dNI`RAGuw3jU{__Ea>7m!P#DcWt(bqw|%5>NcFD_MwT<NYkNIHLd2ETziT~?Uvu55>6Mjdc8FF%!97uKyD`OnUXw+SNHq^2MAB-H zuUDkgjU;Z?3+z~dN#!H2CrPgxoNh2L12G=I8LiwClef`?wkE0qV^uvIxS`O+T%$kd zB(pG~Sb@#$5c)j7!4&dD#D3H<0EkHk-}+h!z)7K9I#YRe$mT*Guz*ZH(i3)#E-vw> zn%#TLvdC`Vk~{sK8W@x@>{kI>6sUT$XXFEr<;gdlvWMCW*PO|AOxMme@4sw1-~R5f z7evqVnK{w=N!0?Go5<5%apUoWAZoJ>{fy!5r28WkG24K%m{i)$-!*TKF4(Plq?00S z^M(RM^)uKfW;0Zb^IW{)v50{wqFibN#;t?oza?GYY)M^*xc79#4C$_#n_o^t9(NVl zutGPhj# zQ=JEn*Fox%ZY|%ljAU(i%O&zrx zqvo5zQJPoo*xt6uN%f7SRpAV=0`d|5r+qIs2Q7rrt*QY}QSy%b*R9+szXbk(Ov;IO z9tYELZAp+IL2YCvDv1D6psk*}dj-OLBUP-!=bjKS%WsO5j;LbQ!X`?~OB2E09l=Ct zMVR8dRK!rY1d_kHlw4V>G(NqFa>B6htVlwfHjIWve2H9a?cEhHZOSo09IjQNi>mi* z7KVd~7x==S@T8cYwyp7tKXSj%`r(U?0E{d#BQR}J3Bs%t9y+b`LDAPC1;}48~n5rh*B^&R4e7re%u4dWSvOZ&oH%8 z3cEGt8MzH(5;|@>Ag`&u^f{-gsfR`KU`H{o{VaHO6t4w3!OB0Ddx&PvLi`5N)4pGH zn2C!`lpWh`7R{6g<&4u&nhOk|@%liqS(Di2m{;|tDk4X9SAn~)K4)iqCAt^y9c!W> zccW;JE__Lohp5Vvqgn!~PnZq9L-wsWU1eP%Gag2iM+4R>Jn0ehs+U0@Kr$vV>ioMwv<@q0?hRdVv`wg=C#161G6tU3^%jLdes~%+cH`VKmC38`Rm}Zj@6hbZ zU@8T(wUWJpoql`4VQ(moomrOED;ba1Jb^PvUMXRglSWY? z`ei9-TYmmG*@}IP-6Bs*aZvnt|Aofl_!mjb+=6*fmKW6#exKsV^(iPsTlgUmW@-wU z)68`g=K+r^cLl7nuXLau*}+AxcVmx3(8kUMCI$w_JAUQqm8n&~8Bjq_Kx*poV=)m# zc)fc^)IL>~#`~&%JQ9g)$d|W9&ae?=N;!IG9?7SW-GSzRM_Y=mN#}qgfeqX}2z@2a zh#Bq^t>4X6Pf{uMB$!cFNBMmkYeDr11ByCfe`x0shaR4YT6&o1H4Ku34&p9QWK#K? z#AqUs{JUGA6V2YxNOqMwIpAv_htOYX_VhbW7cpNdJs$aWkXku(iXz6{sE65q08YCrWMd4;Fy%%<_!A>VTGp z_P?N^)N-Ic3T1%+^@&G#{8Y|WRJvK5-K*AbbdXaP6f)?C-%zyg^uWN{cd&K{Tu%R7 zvyadtw}*18>5~h61Cq%|td`PqEt>%th}MV(H4=QjcOZfY zo$z>mPOjhm3dyokZ^E1oX7|c%qX)SK!$TDbZ|KwtJ`|FeRSo@A$`|L zV~h-=hmYc5@KB-ZIcO?X;KK-2U^O-0ZPj+H;|!xA&n=Q(6SO9(0&KypS5dK#2e@*wy$Qu+V^q#sZzX_MBByfm)ETG1 z4>nK(#=!5h{s2$@jM`Y@S?afy7-4R~S@OfsNkb8mVAY1vMDDKb?4tl!I~UuYVJ)Dg zsfXmKE>{;}`HE%ezSu_|MnT=*r0xoW5#=2}-Hky$zGhh@!cuuC{Jw}Y0`-9+QwIo_ zfsgMw!h|Y351MjdwxDWCQdNi;l?=xH(ftH30*ZXb4;)W=vql@`9RFdU-pJGMBk+vP z5)yo?DaY>kk|8lC6mG5#Y(a>h3xi;*<}Hy4?&noyKL9Gt%!OF?5)Pl&TGb4Rs`WR6 zk-y1SFHhV9^7`z1?->h7R40hjz5-*31qc)Z)O~n12539ACX4F&(NdS_PXlZUJf1Tg zTA_X#phyNSA4jVL3feFaKy}4;P)@X-JOsvu_^q_6_-%#v3@(g<%(yh=AQz$j_2<=- zqua_e{t8&5+cJu*WPoINUQ_uCXYLUnC!6C~FA`c|ADq6`5etNIz6<@=fO_85qE?~g zu_mC_#=LU)C!n>y_>m^xkB~U*qbKsvuzi2Ow`}tyliRLeAVE#6Wr}Bg1|`q!%U|wF zTD-W<=3J)gUO(Q##@C7lU{54u=shM~FEcoMSIq#HIZ~rM>%BUj`+?CXr2g61o?3@q z2J#4Bp}SZbSoQ1UIc`A+Gu>I0v#z`?9(6Rar)9X}mv+}<^~8H)|-+G3TyH$0FrEd?4g5k_E4XdtU!O$1v!pX zJQ)fJdK|PJKoPSK;7{mr>Yd)P5Vh|J^RbN^!-uV#qiF(W$DOcZyYB;=h1c8-z=AXt z7Z=vABl)jDzE1Uhc{dkub9R4Owtc+U^C1W*O?JsgR$3}K6ZpqfIF^IkB(lMgN1FU2HFY*LBi_!_OT7WUMp=>^4Hai*M1;I?lLCqG zSDUG(ESUbBxb=pXvs&`fz`Y$B#$#JC61{Qvaf8=>YRl0;fJ;`%xDAcB$7W(;@9<#E zlXMHq=^3{3Hx!ZzFQ)mcHa%Djo3GErx2}}1Jkpc{>NQWCYbquD+n!u0Kcofj{j`;L z0HLQ#&nHsF!m!ii^INZ~La`R?E2$a1JS=dVg*y7ui@=t+%l7F>ZX(oxfGK4lF(a{sNL$m#vveP*sbFl$>AeY_hO2L6WZlR)`9jF$zA}S_W$B zSosX~)zzU-4=cSslqw!>@c=m+&DGw61Fl;KN~6bN`A-GnjhutS-am<>xsjsz`K*;Y zxb+lo4Qv}SnSH{x^Xlb+lJMY3GEif3jOgtEWVqX0Y`uRQs7}4McAMdr0U{vc-CD0? zIlX0ny0iVe*Adnq^SAN$O_Wh$U%zQdbltuL`Py+9;0<;AGB;DHzyqlV5GL0GA=KK)uDG{n)7H;QXz8CF?gUwyK@!5N3Ba(08D+ z1Zf$&dsseyrL7_cwW8BxHQ-1uW{`)#XH59z(Y*w1-Mh>P(9QMPGfm z@Z+#rU>(RnO=b%Ctba*@17(;fAX!)P`lDuI)EzQKCyk2<`43qcJ8eyWK=`f4MZmO8&t?=Hctt= z)0VzsA_|Qwt_Jw^nvzSUm#HE7BU!#22|xy}{Bd)iyw8W3{<2?V`4px3&QlmwOFC3E zdFev+O2e7rkJjwIi;Y|aVvEH-x;-viCwb=hz;(?|N1p63;6|a_$h&z`-fZOJ{sNFS zaf;xD{BQ$#rQuB^-H%-TkA4na37(5{G_UFRma7%v`PS%t3X<@B=N!2gNiL1Ugv&IG!CNPDdoP0$Cl;gg${=GkW9mv zG$e4%tz(vSv+goq*4HerJ2Sb2&a}$m&{yppfG?=tj2ARy0S}tD<|aw@xpP78u{!}< z4es&Q=!U{ani^`>5eA|pVE!-9x+D2hWAZ{dMu0F7zMz@VXg&RwK3$u;|yHfQ{6;WMbmF%hGq{HdQ^4yoCa0rW%nPUpQZ&Zxo3~`W7(x zvV1-^eTuyL8aN11b(3tRjh{b93)EpPYO)|q;K9;l2C*O(UmhSQbRHa;UwRPJ(#0Iw zy&LQdOY753yQTN*^x+VL8nSRCrGB%ku;H|mIs~Finr}p~REkXA$S}j3>s72)`%CrC zSx3RlfDinEK|&J3GadIrls`6E0R>DI;O0xm)7y6P(ZvAA4?1qhrWl*B<2;U)BkDc4 z!FeAK@OppfN_csx=T#%Gq)_(duRkyNR}Om*4Zi`>y`N`+`Wa0SZO5Z>WyZbCH$cVj z;Xmt??cSFsbWhHe!2pr23+KVov@nt1oML6Oe2M&vCGlKjXyW5ur zOO)B3$@eAdF)LefDO#QZvOogg#lFWTpfD%u>$0W==v1MUlV~33LlWo+`1Rtrwliee z_a>hMP$0V`$mVv1W`Kf2Qhc)EM3E*?WF!YH5ZrV=$j(6F=gP^&H?L^kn$m#|mJbr|*ju10#B)cr27rvR<$+|jXvp5@@>T`T9*-M`U85fTK{311!|F{XjRY?KVb6(* zPz;zhrqiM9XV}bsu9G$Qr zvCkciI}FO+(t@E9@h$EQpBriUP+#K6FYh83&pntHz`tt&|M0$p@?8{n#yXV z>_9Xfhl)#_(I$=BejUZIo*OZJmLg>HodRiG@en@ZXXc0zU|f0?4NH%--(gqq5V>dl z6q9)s>s|>XP#?x?u2eE6s+A{bN6@M$&K&%B#JbBu(%}a0%#vbg?dX4ly6@Ra=Wt-V}Nj|~hSpitIW+?)1%2N(1$AdH; zQGZ7>+p$RYNWcyUh31G`|MvwsP|+ibb!nlDe4r5Ik|J9 zIG^@x)Xx_Vp_%6ep0f#FUp#%(?<@zr4PU*Mrk=3XP~5z~0(Cv@%JqezoK4RDPp-s` zbx%5rUWuVs@IooO0g$Ib4xc*H$nV-pF|G3SPp-#BK1=`kwG^jzv7M|C zWTcH}`PWCDg=P{43s04UeY>qy01+=5M%bxEL7nXNQJm>d3TqnqhsVR33De9~lk~4pmY@L=g_|zBG7_L3#)W z2mgJW&I$Z@WFw(r4+n>W4f_WVmyq-fJn)+;t2?O6NOME1E$Q_Qtqq{`E|xZ+H5?qT zfQyYj#2o5CY5+Ahwc;b+t7#x7H8tcTS7Vc5l(7+pnwUzs*+G@uWR)Rq<`6DJashr) zUKegaz!K`9PwHZ6VP((l!bkp_E;o3Fy=EXM{oTaDoR9o9Y(P?V8F^A+Yda_@8$CN6 zgo%}zl!J?&iJg&)ne`PZGb0lR10x3m6AK+96E`C}Hwzc(Uw`CaG&@5hZbcEXzs3T; z_{dEh9BjB57@VD*>77~Vt?i5%n7FvO7#Nuun3?H73p#sOD+hfSIxBmMe^3yC+C%J2 zZ5&Lktw>=M^$n~Y9r(xrr+=nkY4bN(EBn911O&$5qHn{%M9&DD((i^gCe{wt_9oW< zMf1Nu|A$V7kiUuBINDkK=GYLz0JVTxLaiL^L0hK32LPg#k@>s%zvac!^6%F64x&zA z8h;7o-?p|_cC~>rC_?S69qk}cQ714W#Xn|a@1O|%r#$}$-9hueJ3E*f{TF>X3puGFgxkp4&Qc$&jH#u*F_gi^%J?@IGBVtf zR`w41RuHJ92p>6^0==oJAvY5zD=QZ#GbbH0D-$anivcSe9T%$+lunLLe z3jIfa5o?GeOlx5M|Li(LYY3q6PhOZgjkq`%nT+TlMohzpvb|-V#ID_$O(j`&qBw=#>zsc&&~;<<78%raOiWg z0loko*jjS~GJqw0*zV#ZXZq`3f42MGMpoYv3@#%lA}J;*s!0ByKf`GK%V&oFjdU1b#_JDj z4F6>6KQRB>f^bWi+JlYc`q$7(P}_ep@!M!{>qGvm3+tVVPk`m6?Y zV4DFIW(Au9s?THy0b2peV)*yO{}bb!%FHalDsVHg|HCl+zi0d}kwQ%Lt&E}IRAnIl z|2`F{p&=KCAq&`ktn5%aBQ{oG9t=1*=~y955N0MQgqf8M@{cwA*Qxwl8~1;7DiCWc zC#c=OsFaPq9oR1pU~BP_8`)V~lIq*oSeQb7n+pafE5pBz+rQPB)WMqcpLX-V6qzB^ z&h%f_|6fP>n+4MUjpO~d+V(#)<9}rTe{G3=8;n2OpW#1ShCjbW{>V`bwlcpR0`7lj z1OBJ_2RsCBa3cLTXB3o^3!H6iTy#)oWhzEF8>6P)=qJm^Q`7^m=E(l2uax~zBiaB0-#-9#3Uh~;0W zqY{%1HU{UZ1YzW1h=f0z&mtBafV2LPCyKG0gJHIE1A#_*#@C%q8=ubhogKZ7;$tyS z>7I2r>PaX|iDueHKl{`;Awo-;9^JT8`egN_Tk6Nn`^Hyk_3xQ3OoAZE9w8DWxq$)SoDKI>dkiw#^v;T=`!3?g3ggF8NcK_?ZtTTEOC z%VrIJ;LVAT-zERznS%h;p1FVt$!EEnKnfe7;+~CLvVo)z)#z_>!hP?DdI&nKs~Dkb zDXTYSG)3m6mdz~{VpkQNUQr;BplDH3vv6#esjrCCkAAUy%HutGq{{JXoj3AbFGZ%; zsMpx7_x8T+%n5chcJa3QRyRQdsf7+o?uwl}PD3&(*N??m5@JjSh&{VPGu2|N?ctpCsA@sBcfPfJdFI5eGj zmEKT^)u}2UB<*;PAy}1aNh}kr4p&S_aCv#FC&#QKjNY_a*~S_}okO_avsz5|J88$z zey{uHhA?2AbJ~W=fRBG_pT!X7(Yv3Kt`OZzJL!l-OMO_@e{#Z4iG3-}d{eP*Vg#iq zJmj3O_fqI07l3n%McgS-3?D@h~sWXRRh~JT~+PD{;de{k<>5 zNJ0Wxp)`poh%PF|=oiE#o~$IG3}AJo0lP32?Y6@w=IEi%s!2 zQ{~=}zSyOz z5@S}M(!KSno!{3!<0L-3s%msjrxo#%P&^TAv5z??`Ru?$b(eS1VD*4~22Je6#^tlZ zQ|mE)N(E;kzev4`CfO4%aZ@nuw)*76&s)wgu6GNb5c;DPJA^g?LcLVpjH}Ba%dYM1 zlm$^?SHpQod1wCtH4nj-Cq(Oqm6b`Ih~1TLqD`{M3`t?hHCZ6r>ch?6d++TJC*0qn zFU5uh<|mnLwQQE>1&*9BIW$b(T^Xb2(T%lnCi4_pA(h-k(F8fu72K@$ddtr|#o5#R zb*NF?w$t?N;%DGC=;Wx{Ptzzi$|hXRCf4<9E1tTY!tYoaB^L9*o9sq+sk(Cy?%urC zr=pN_^1EA|JVKIeIQIPshBO9)iD^2DTis=%oES6C)T}ixN%-7hHTk z>;}8Z!pRUl5!&@d~OI@i&gZmdr=;l)KvybWIic z{E|9y*$Hi7&$tO+t(HZuT6xT`IxkKpyC9-Z^0I$+E72zp4b6=j`@$xRBa<5UA}NcZ z(B5OZ^yeWwW`cU^ha%gUz+=0ZPwnc=X>u*t7x9$@0jZkGS&8;vE|N?txKffO#8yJH z#oMP##)N8KZ=D39>&(_FprqVfc)+Qu6=Zmy!qsygaw+M?$CZSLet7QTd5E+WJKFPV z7?`b@=^;(xj$hDpt{3nrdOWdFxpI^A5MY$@D$5$=_BdT$I0W3-6+7jRVY2*aHqPix zn>_6A%?=!-4)>~NEI=^JaH0QY(X%~B?HG$1@A9IAdUQlOgH`WDyCH=+&_ ztDiS1XQtZn>>Nhl)GY&a^L}B6I+5e)vi>MXxfLy>H&W1lG=$g_G)eWXAVx;(!^!sT zc^7)-!#$I!ExMr?|J~+5W`kCui?b_M!-GB-ZF{=evQJ4~6Z*xbECM3PMBZ53ezw0_ zYRtNVw4YqMEqjF)@zfl5#C2Vw?@1jLebDdfj)|B$(-emK)z@3fe4xG9MRh46-j5-1 zAARUy`sA^@Z`af{T%`A5zVSS{U3wJ@x08kAE%1Zp-I#R9ew2Ge6f87 zY%|7LFxHkKc1L$?Pw!KEuwyN}jr|K1q9?O(tsZYVYVwh`hZFT(S4`+PaG3RvpS~6N zUes6pbI{3tH{RHNPOJ-wFVM?&**--*KIkRJ37^B(avsCLgZM&7kzVNnLM#Pyd*C!2 zv@63uZc9=*_)v)NZ6yhh)o_}vI!Cf4^`@6y~!)`(7brKIKzAmArUnK+OVw zl0ErtYI4~tp?@l&-;sdBq@cpB2`V-gTqbRfU^-nAxO+&2+8bPz+|C@3@@WElC0olp zm&o00=JAYUJ)dp<=~_R-$mI$_=4kTOu7whHGU>FgIu{o>h&uf0(Q7bdEGEa3gyzvx zb~Pxm;|T#c4B#ONNO4w+{a z@m6OiQzJ>|M>x17g~Ht$j^e(KeBBdx-@yCrplJ%XLVNesY^l*q-R=j9dvDI{BVSxd zu0K>PlaX;^z)v@wSz(E+#`2QwcF67Pzu@T6)NVp7&b%Y$e)(mH3R22JJ!44TebQ&2S=^ZM)W5&)F>)ro zw-K9nW?vz-f=^&e{jLD%MAysA0fAy7H(P7WaYblP!UbNU@P=;UlMbp4KN8KU#&E-WE`3q< z^mRa^JI!%ye^iHNI0EL+CtFSAPYKg6WY!tdsiU;`&_wR*y$_fZKgarj^ldUY*oir! z*F;Fpa1Q&<{#j7tpe)tc1^x$#hlk5zEq3=pPJA4dGw`m+W7`u-XdP5*)wfK9jN7Ds z&^KZEl+$VwO#&Xh{_yHpzp{!rn8{X@kzs|B60}W~-Dms?2 z9=eXMXMRG{Hlk0p#sRr;bub5uu4*`%^vj||runxcWW?2MZf$LgIw+2@qP?|e=UYmq z!&wnK%=C5NJf}5~D8k?SC%ns#w>YyaHp&SINV+9I4#w3S&1k}+=W6hr_Vg2%EZ_&=-ph%x!R<+PF%6pu5rRABly7;8ndEDDYFXyvgDyJInm1g&eaDyO}mVG2e z0-QpW6?IOhb?5 z37k8&yLy`EYu0q?ck**77dfy^G-&KE5UhE2Py^}9#p>AZ_I68(I~$Y0;~x?8h>f0M z+CEch&_igvmCIkWs&Ltitn69~)x-FG_L_T_^W24Cm-)GXp)%AE4jWnf*6=^BGX%tA zzvg|w@yvVtQ&^P7giYuiyvglt1p-qn-o+sgQ&$Qe@GO4 zooLoFI2R;HW$EfzQXeoGUZ!bGk6NY`PIds#_q)zVf3K}}*humjlwCJf#ZU^7wUXB zYH9`Fbi@wYo}w1!_Ow2(FF*2FZkKJCbmrVtZ8xu2p0hBm=@;)(#iOJ6kRwC%#kKj&L=jf~1#V0p26P6Q`7JAaNEELLADJMHCC zn06#l&vh!ZhU!cS2Y1Su?DRJ@u?>9;mN zUQk_|bo0sWS(<#B2b==ne@;|c^N@I7=#MjlDeCU{4d%UGDmn3gii%o;J9riOv4}wP z{eYI*)wecU>H+hE&S$_|J*ghBBlEh7L>YCjV)5w=nkl<^jm#bXxMpPFD$=ih)Z1ll zGD`6ET0|MOf9-Y3qnc%eGMzo)F+O$27x~^n<({?B^zInUuSvhgp2+Dm1sUrF=STCE z$===D$;h0f)Q-#)YKc@}c{JwMsA--hfrzJ>C|OmkA7I!&wFf8ib_Oo;onXt@FYv55 z{&+#o{&rD`l)REWih_%8pi08a*+f8MQVdh709!meS0NzHUHFRZTWX-T>wUpmSxz;# zCm)ciOO8J1=9YzV7Y82OBB>|5C8}BvK%vm<=ZW8jzpNq&MoP0DxcJmUO8xnG1l@7q z5%yOe&zCm7Ul#(>Cj2f2e%c913TU*%@pI}5Z8Ybh2RoQZd4>jf*+D*ghz*KQ2m43( zdf_!D_qLGVGeY0IDRUzqFoYY}I1#)BEy=z@9T#XT{8s~{8a z%%h&OKlWtU-7N3y`vlJYy)m2=_$2ggj;gx-c8#}ij(alM-!6Nova{6+y4ME;9i>UDp)3`~EJ4ARfgBiPt>7;z%25o9q?! z{h9J?Tm9aB6wz2@wNA7)KKpx%x@o?tuj5(c){i$j~rg^-B&eD?CLQZ}8SWldJC z%ak-}N{v;g&6q;xZe zrbltudFq7!C7aX8c3&*u8>6W5W3^iodXJSwj)5JvV_&o%#+MzT;j@`Sjr(QdlF8aM zdPta$-4*6e_{BIF6`8mya{5C@4X}hLOR4hq8kFq0cZ*&!#BmTPK&v0=sYIV=UA)kw4+~>sZZs!gj_dNQ!}xeVtOXgCn>!U zd<3qZgas#XnEm`NAeThuJuQ{V<#nk(yrn5h9uvyb^}=iK!3-3{R~xB(q}yeSp$y+j z6_YDS@Xnv9{Xikf+F$QNKbjcG&-(^!LRCZGcx7opk$Ni#;T#~NF&pvy##lNmHSKg- z4D1wB008LBt1UfV&l9LxJ~ChXW~o<2ZM$Aa;$}O}H=3Zv&al=)M7tCdCB$q-bzmNp z&`!0YoSL7*c;)N2g{#6V-rR5a>@f8OZSG$QKGC;2~RF#W>#LkNHov$s8jE5%dD^}2>Pu1yhDOlwLH}wR0=1aHw{_%z^Ty z#m_0YK*9Ph(Wmm8sP6Qsl9a+uW~=O$0+Hw!U)>ygmLhz^s}#!>Kpd^#Wp#&*BS(O*SSlF>n!JvW zf^+F?vn?`naO4a?aODvS|F%0xA;hb?--*kO&N4k;PGxFV9P50}tr6Qxd?9)%H@x($ zF(s~x!OW3~E554y((`e(SHOxTMU@IyRfZ0t9(_#mq?0}f_5hmnJ>*#xYn6=+}&egHxlp@vD$jVM#xjrHoLjQmZhe;HyM+4gn!9#1}QF><@Gv? z3X5^=xG0qqF+F@HZeKhH?*avKdz^@W*XMa0X3BI$MhTN&O!-msw_M#*2k&Uy8gs2k zS#SHvAy4r(rqgz8Lb{{zg(arg><$Q_;0j&U@E&PxMp;0JyQxDHT4^bFP@Db6gIJA_ zZuf&r2q&Gw9eQ!gmY=zb;aAlJN0(5CXxN}IDct1;WdyBZIR%7{D6ppVoqAZYvGzsN zO?@tjT>UI^BT$P~j9sJ>QK)G;yukK`?`^}}YnP2%eh4=I;LF+bjO=d>+_t~W)Kh}b z&UkhLqZ?2}x_nR1e@TM%u)FO3GC7B+Bj5*+g0j2CvYaf^3L|o~Eb+a#nEi;}&yj&K zomMyRM^&2-wQC#ZOq+9N2?Ameb`Bz%_a zuKeb~iNt`RgqR5b;KgFV%~~~WIUQt`z=&EebX7Im5IAFz`OtP5l#g|9t1`c9gg^EO z0Vp5eM6BFHIPVi4qz2HjV~NU-Y7MJ`=DA#9VuUgsk5xkdnSK{ha*rmj ze~k4C+avn;~->Uv`VX4Z6`4e_Z)3rUZL&(x4`-ks{*E@N?w-GJhw?hxW7 z%u8X@B3J@l#5ukcomO9jQlR#55=b(j@v+Rs{cP9sGI8UnYq8U9k9cvkHH+YGMq-V} zHHuG%QaJETF)rrf#FdENH7$ z4tg@~iCdn_goH3luh?L)aG%nak&XTpdrrlW)T=c|!a(MR)s?dX;L|OuoBw$ALkuFJ zkEhvse^{Gq?fjW^CqYtF--!kXqu0i>hil72SwCI3uQsh?u6_i}2Nn#sBqEc3xQ64D zS7P#I?V#MrJsd2oEweyS3Zhoft&X;qOIlo{^?F++7mSqh>y1q97dXXV2#rVSxY(bt zgD{$sp8D$D^HY{ifZt&86GU3@iyAh}2$v@DEIKPiB8wdMGNXBpDGS$|E%-zz>;2@0 zEjcaK99c9rnTSD+Z#QR`-otBxZ)AQFRCwtP>oS!mI?HdsS-vRQD6#nQgP>bZ5suKa zbgj7n4s4T$`@UKOfTp7Gdj_Dql@-{(oceTE~EZV*3kdTQAUH=Ks?~sf#{*8e5kTC ztMwSp`u1^wPyp#A@`Fe>}=}F2o?exJGp3AdvDLzbh6#)!S&k z{eaQCAv$w*L86LWqQx|jBy>_V^3Js}-41-1^4}aT^31%<5JJjg7E z4<+Q3>j_Km>lJ=Z6r7Q3dcS>f;!UOljSMX{!X<}RLk@Y=>;46p6bCdFyjGn_ZHL8A z;xEwF7pz|Z-|O1CydMeuW*Da zw)6L)4YLh%L&QCAZKiYuPLxFDK|JowMmaAdPElahHLlq zWIgZ=EvcV`PO{IE5eKsp)5XK+MGd3~;?XqjEbc;dH0k5#eiFz%@}?q>Su~lr0)U$< zAx>b+jw(nmzxmcxC}7^)C-9;sL|J+i!Sa%|ta;3PB6ea5QKqiu*-Huq z(okJA_LPIrfwG1L?ejqy0u<~$HN?juqk(Enraq4!JrNo%Wx>7V2onYS*Jw%N(;B62 z>++B9uzf#0k~hF=)FX76_lRuM1IJpwAgJRpY4e4;ABJS_wn>6mqp;O|az6<(rlGO+ z{J87UY(YPa4(q}|N0~K7456$KuhPEG-m41=q=?!_B2yeK%u_xLyv8vWI|9Fk(CVI2 z&{Cnwmpvo%3os7%byTe;{(wO~5gOt__RZk1RNNP^phb0{B_rmJ3l{YYu4p}m22<5^ zCTx_w8P2YhvscJuBHwCw0NfVT;q6KYT2-wic<3OJ9lt`qdH%!T5CvdxLX-_c$z!vJ zys*aRIX7u4(vufB5|h6=y0hm$V!}WbI1n%}a#GK&<@uFZ*7usr@P(6yZr^1EeZx&u z2PX~OgJf|<-Rcq8_Z`O_#KNOVsoR!?dT_Kq8UvmHIRWjMcpX2D^(#JZDywK>T~^lB zZ@-vNiSr1$`vu(LZoVVJ?O#t;Sxl)FX^G{Q>%_s*l(vrnJVA#&AKlaCYA?S16H_cq z&g8bUc?8cJBe-6C8; zb?fnTPgBBmV|0=ko(d;4`zmzCzzVW_?iXWiR5Kv=G;-=}vU1A|`tUg#OS_xfPidM8 z5p)MBhi)b5omvmg;0`$t325ZEul0{J2#_WfLI0s9LVYw?eY3h z7;WIx+A{nKZ{Q!1=W5QGF*oJOe23+q3@MZZyvr*|@YdK2Ce}F_O+P{P5ktk-qH%W_ zkmtWW6rO>)JtXWE z6U(bkY~s`r+^?|EaA?XDmWg&5=+A2yE9TUlsO8;t6AM294$0y!Pbdxbkg%84x)u&S z0q<^aB^^GT-VTqμ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 N#lS+pOxOATe*uavU3~xm literal 0 HcmV?d00001 diff --git a/Code/public/js/level2.min.js b/Code/public/js/level2.min.js index c07935f..bc9239a 100644 --- a/Code/public/js/level2.min.js +++ b/Code/public/js/level2.min.js @@ -1 +1 @@ -class AddAttack extends AddNode{constructor(e,t,s){super(e,t,s)}create(){console.log("ATTACK"),super.create(this),super.addTitle(WIDTH_WINDOW/2,HEIGHT_WINDOW/16,selectWord("ADD NODE : ATTACK","AJOUTER ACTION : ATTAQUE")),super.addTitle(WIDTH_WINDOW/2,HEIGHT_WINDOW/(16/3),selectWord("WHO ?","QUI ?")),super.addTitle(WIDTH_WINDOW/2,HEIGHT_WINDOW/(16/7),selectWord("TARGET FILTERS (OPTIONAL)","FILTRES CIBLES (FACULTATIF)")),super.addButton(WIDTH_WINDOW/2,HEIGHT_WINDOW/3.2,"enemyBot",super.newCategory("target",!0,!0),!1);let e=super.newCategory("range",!0,!0);super.addButton(WIDTH_WINDOW/3,HEIGHT_WINDOW/(16/9),"shortRange",e,1/3),super.addButton(WIDTH_WINDOW/1.5,HEIGHT_WINDOW/(16/9),"mediumRange",e,2/3),super.addButton(WIDTH_WINDOW/2,HEIGHT_WINDOW/(16/12),"longRange",e,1)}addNode(){super.verifyCategory()&&(this.selected.addRect(new RectangleNode(this.selected.getX(),this.selected.getY()+200,this.gameR,"attack",this.lCategory[1].getValue())),super.cancel())}}class AddCondition extends AddNode{constructor(e,t,s){super(e,t,s)}create(){super.create(this),console.log("CONDITION"),super.addTitle(WIDTH_WINDOW/2,HEIGHT_WINDOW/16,selectWord("ADD NODE : CONDITION","AJOUTER ACTION : CONDITION")),super.addTitle(WIDTH_WINDOW/2,HEIGHT_WINDOW/(16/3),selectWord("WHO ?","QUI ?")),super.addTitle(WIDTH_WINDOW/2,HEIGHT_WINDOW/(16/7),selectWord("TARGET FILTERS (OPTIONAL)","FILTRES CIBLES (FACULTATIF)"));let e=super.newCategory("target",!0,!0);super.addButton(WIDTH_WINDOW/3,HEIGHT_WINDOW/3.2,"enemyBot",e,!1),super.addButton(WIDTH_WINDOW/1.5,HEIGHT_WINDOW/3.2,"myself",e,!0);let t=super.newCategory("shield",!0,!0);super.addButton(WIDTH_WINDOW/3,HEIGHT_WINDOW/(16/9),"shield0",t,0),super.addButton(WIDTH_WINDOW/1.5,HEIGHT_WINDOW/(16/9),"shield33",t,1/3),super.addButton(WIDTH_WINDOW/3,HEIGHT_WINDOW/(16/12),"shield66",t,2/3),super.addButton(WIDTH_WINDOW/1.5,HEIGHT_WINDOW/(16/12),"shield100",t,1)}addNode(){super.verifyCategory()&&(this.selected.addRect(new RectangleNode(this.selected.getX(),this.selected.getY()+200,this.gameR,"condition",this.lCategory[0].getValue(),!0,!1,this.lCategory[1].getValue(),0)),super.cancel())}}class AddMove extends AddNode{constructor(e,t,s){super(e,t,s)}create(){console.log("MOVE"),super.create(this),super.addTitle(WIDTH_WINDOW/2,HEIGHT_WINDOW/16,selectWord("ADD NODE : MOVE","AJOUTER ACTION : DEPLACEMENT")),super.addTitle(WIDTH_WINDOW/4,HEIGHT_WINDOW/(16/3),selectWord("FLEE OR MOVE ?","RECULER OU AVANCER ?"));let e=super.newCategory("direction",!0,!0);super.addButton(WIDTH_WINDOW/6,HEIGHT_WINDOW/3.2,"fleeFrom",e,!1),super.addButton(WIDTH_WINDOW/3,HEIGHT_WINDOW/3.2,"moveToward",e,!0),super.addTitle(WIDTH_WINDOW/4*3,HEIGHT_WINDOW/(16/3),selectWord("WHO ?","QUI ?"));let t=super.newCategory("target",!0,!0);super.addButton(WIDTH_WINDOW/6*4,HEIGHT_WINDOW/3.2,"enemyBot",t,!0),super.addButton(WIDTH_WINDOW/6*5,HEIGHT_WINDOW/3.2,"bonus",t,!1)}addNode(){super.verifyCategory()&&(this.selected.addRect(new RectangleNode(this.selected.getX(),this.selected.getY()+200,this.gameR,"move",this.lCategory[0].getValue(),this.lCategory[1].getValue())),super.cancel())}}class Attack{constructor(e=1){e>1/3?e>2/3?(e=1,this.percentBonus=1):(e=2/3,this.percentBonus=1.5):(e=1/3,this.percentBonus=2),this.percentRange=e}do(e){return!(!e.haveTarget()||!e.isTargetInRange(this.percentRange))&&e.attackTarget(this.percentBonus)}getFrame(){return 3*this.percentRange-1}}class Bar extends HealthBar{constructor(e,t="",s,i,h,a,n,r=new CategoryBar,o=1,d){super(e,s,i,h,a,void 0!==d?d:r.valueMax,n,n,!1),this.name=t,this.scene=e,this.scene.input.on("pointerdown",this.doDrag,this);let l={font:i.toString()+"px stencil",fill:"#e2e2e2"};this.text=this.scene.add.text(this.bar.x+this.width+10,this.bar.y,this.value.toString(),l).setOrigin(0,0),l={font:i.toString()+"px stencil",fill:"#000000"},this.scene.add.text(h+5,a,this.name,l).setOrigin(0,0).alpha=.5,this.categoryBar=r,this.setValue(0),this.categoryBar.setValueOf(this,o)}doDrag(){let e=this.scene.input;e.x>=this.bar.x-10&&e.x<=this.bar.x+this.width+10&&e.y>=this.bar.y&&e.y<=this.bar.y+this.height&&(this.scene.pauseScene(),this.clickOn())}clickOn(){this.onMove(),this.scene.input.on("pointermove",()=>this.onMove()),this.scene.input.on("pointerup",()=>this.stopClick())}stopClick(){this.scene.input.off("pointermove"),this.scene.input.off("pointerup")}onMove(){this.setValWithX(this.scene.input.x)}setValWithX(e){this.categoryBar.setValueOf(this,Math.round((e-this.bar.x)/this.width*this.valueMax))}draw(){super.draw();let e=this.value/this.valueMax*this.width-5;this.bar.fillStyle(9868950),this.bar.fillRect(e,0,10,this.height),void 0!==this.text&&this.text.setText(this.value)}}class BonusAttack extends Bonus{constructor(e,t,s,i,h){super(e,t,s,i,"bonusAttack",h)}useOn(e){let t=e.speed;e.setSpeed(t+this.value),this.scene.time.addEvent({delay:this.time,callback:e.setSpeed(t)}),this.destroy()}}class BonusShield extends Bonus{constructor(e,t,s,i,h){super(e,t,s,i,"bonusShield",h)}useOn(e){e.shield.valueMax=e.shield.valueMax+this.value,e.shield.value=e.shield.value+this.val,this.destroy()}}class BonusSpeed extends Bonus{constructor(e,t,s,i,h,a){let n;switch(h){case 1:n="bonusSpeed0";break;case 2:n="bonusSpeed1";break;case 3:default:n="bonusSpeed2"}super(e,t,s,i,n,h),this.time=a}useOn(e){e.increaseSpeedBonus(this.value),this.scene.time.addEvent({delay:this.time,callback:()=>e.decreaseSpeedBonus(this.value)}),this.destroy()}}class Boot extends ManageLang{constructor(e){super("Boot",e)}create(){super.create();this.add.text(WIDTH_WINDOW/2,HEIGHT_WINDOW/3,"WARIA",{font:"200px stencil",fill:"#e2e2e2"}).setOrigin(.5,.5);let e=this.add.sprite(WIDTH_WINDOW/2,HEIGHT_WINDOW/3*2,"playLetter").setInteractive();e.on("pointerout",()=>e.setFrame(0)),e.on("pointerover",()=>e.setFrame(1)),e.on("pointerdown",()=>this.clickPlay(e))}clickPlay(e){console.log("Play"),this.father.scene.add("Type",new Type(this.father)),this.scene.start("Type")}}class Category{constructor(e="undefined",t=!0,s=!0){this.name=e,this.single=t,this.lBtn=[],this.lValue=[],this.obligatory=s}add(e,t){0!==this.lBtn.length&&this.single&&(this.lBtn[0].clearTint(),this.lValue=[],this.lBtn=[]),this.lValue.push(t),this.lBtn.push(e),e.tint=15718407}getValue(){return this.single?this.lValue[0]:this.lValue}validate(){return!(0===this.lBtn.length&&this.obligatory)}remove(e){let t=this.lBtn.indexOf(e);-1!==t&&(this.lBtn.splice(t,1),this.lValue.splice(t,1)),e.clearTint()}}class CategoryBar{constructor(e,t,s,i,h,a=VALUE_MAX_BAR,n=1){this.startValue=n,this.valueMax=a,this.point=this.valueMax,this.text=t;let r={font:h.toString()+"px stencil",fill:"#e2e2e2"};this.textScene=e.add.text(s,i,this.text,r).setOrigin(0,0),this.draw()}addPoint(e){if(this.point+=e,this.point<0){let e=this.point;return this.point=0,e}return this.point>this.valueMax&&(this.point=this.valueMax),0}setValueOf(e,t){let s=t-e.value,i=e.value;this.point>=s?e.setValue(t):e.setValue(e.value+this.point),this.addPoint(i-e.value),this.draw()}draw(){this.textScene.setText(this.text+this.point)}}class Condition{constructor(e,t=!1,s=!1,i,h){this.shieldFilter=t,this.rangeFilter=s,this.shield=i,this.range=h,this.myself=e,this.lNode=[]}addNode(e){this.lNode.push(e)}do(e){if(this.doCondition(e))for(let t=0;t=h&&(s>h&&(s=h,i=[]),i.push(t))}}),i.length>1?i[Math.floor(Math.random()*(i.length+1))]:i[0]}var tree=void 0;class Game extends ManageLang{constructor(e,t){super("Game",e),super.addOtherScenes("GamingBoard"),SPEED_GAME=1,void 0!==t&&(this.tree=JSON.parse(t),this.loadSave(this.tree))}create(){super.create(),this.doLine=!1,this.gm=new GamingBoard(this),-1!==this.father.scene.getIndex("GamingBoard")&&this.father.scene.remove("GamingBoard"),this.father.scene.add("GamingBoard",this.gm),this.scene.launch("GamingBoard"),this.scene.pause("GamingBoard"),this.selected=null;let e=new CategoryBar(this,selectWord("TOKEN : ","JETON : "),OFFX_MAP+WIDTH_MAP+5,OFFY_MAP+180,30,10);this.damageRobot=new Bar(this,selectWord("DAMAGE","DEGAT"),200,30,OFFX_MAP+WIDTH_MAP+5,OFFY_MAP,COLOR_ATTACK,e,DAMAGE_BEGIN,5),this.speedReloadRobot=new Bar(this,selectWord("R.S","V.R."),200,30,OFFX_MAP+WIDTH_MAP+5,OFFY_MAP+45,COLOR_SPEED_RELOAD,e,SPEED_RELOAD_BEGIN,5),this.speedRobot=new Bar(this,selectWord("SPEED","VITESSE"),200,30,OFFX_MAP+WIDTH_MAP+5,OFFY_MAP+90,COLOR_MOVE,e,SPEED_BEGIN,5),this.rangeRobot=new Bar(this,selectWord("RANGE","PORTEE"),200,30,OFFX_MAP+WIDTH_MAP+5,OFFY_MAP+135,COLOR_RANGE,e,RANGE_BEGIN,5),this.createButton();let t=WIDTH_WINDOW/4*3,s=WIDTH_WINDOW/10;if(void 0===this.tree){this.tree=new RectangleNode(t,HEIGHT_WINDOW/10,this,"waria"),this.tree.addRect(new RectangleNode(t-2*s,HEIGHT_WINDOW/3,this,"move",!0,!1)),this.tree.addRect(new RectangleNode(t+s,HEIGHT_WINDOW/3,this,"move",!0)),this.tree.addRect(new RectangleNode(t,HEIGHT_WINDOW/3,this,"attack",1/3));let e=new RectangleNode(t-s,HEIGHT_WINDOW/3,this,"condition",!0,!0,!1,1/3,0);this.tree.addRect(e),e.addRect(new RectangleNode(t,HEIGHT_WINDOW/1.5,this,"move",!1)),e.addRect(new RectangleNode(t-s,HEIGHT_WINDOW/1.5,this,"attack"))}else{let e=this.tree.save();e=JSON.parse(e),this.loadSave(e)}this.gm.addRobot(new Robot(.1*WIDTH_MAP,.1*WIDTH_MAP,.9*WIDTH_MAP,.9*WIDTH_MAP,this.gm,MYSELF)),this.gm.addRobot(new Robot(.1*WIDTH_MAP,.1*WIDTH_MAP,.2*WIDTH_MAP,.1*WIDTH_MAP,this.gm)),this.gm.addRobot(new Robot(.1*WIDTH_MAP,.1*WIDTH_MAP,.1*WIDTH_MAP,.9*WIDTH_MAP,this.gm)),this.input.keyboard.on("keydown-DELETE",()=>{this.clickBin()})}update(e,t){super.update(e,t),this.doLine&&this.tree.updateLine()}loadSave(e){this.tree=this.loadTree(e)}loadTree(e){let t=new RectangleNode(e.x,e.y,this,e.type,e.option);return void 0!==e.lRect&&e.lRect.length>0&&e.lRect.forEach(e=>t.addRect(this.loadTree(e))),t}finish(){let e;console.log("FINISH"),e=this.gm.winner()?new Winner(this.father):new Looser(this.father),this.father.scene.add("Finish",e),this.scene.pause("Game"),this.scene.launch("Finish")}clickNode(){console.log("NODE"),this.tryClick(),this.selected=this.tree.getSelected(),null!==this.selected&&(this.selected!==this.tree&&(this.pencil.setVisible(!0),this.bin.setVisible(!0)),this.selected.canAddNode&&this.plus.setVisible(!0))}doDrag(e,t,s,i){t.setX(s),t.setY(i)}dragStart(){console.log("START DRAG"),this.doLine=!0,this.pauseScene()}dragEnd(){console.log("END DRAG"),this.doLine=!1}pauseScene(){this.linePlay=0,this.changeFrame(this.play,0),this.gm.pause()}resume(){this.linePlay=1;this.tree.sort((e,t)=>e.getX()-t.getX()),this.gm.modifyNodes(this.tree.getNode()),this.gm.modifyValue(this.speedRobot.value,this.rangeRobot.value,this.speedReloadRobot.value,this.damageRobot.value),this.gm.resume()}changeFrame(e,t=0,s=0){e.setFrame(t+2*s)}createButton(){let e=WIDTH_MAP+OFFX_MAP,t=WIDTH_MAP+OFFY_MAP+5,s=OFFY_MAP/1.5,i=1.1*s,h=this.add.sprite(10,10,"back").setOrigin(0,0).setInteractive();this.play=this.add.sprite(e,t,"play").setOrigin(1,0).setInteractive();let a=this.add.sprite(e-i,t,"speed").setOrigin(1,0).setInteractive();this.pencil=this.add.sprite(e-2*i,t,"pencil").setOrigin(1,0).setInteractive().setVisible(!1),this.bin=this.add.sprite(e-3*i,t,"bin").setOrigin(1,0).setInteractive().setVisible(!1),this.plus=this.add.sprite(e-4*i,t,"plus").setOrigin(1,0).setInteractive().setVisible(!1);let n=this.add.sprite(e-5*i,t,"mute").setOrigin(1,0).setInteractive();this.linePlay=0,this.lineSpeed=1===SPEED_GAME?0:1,this.changeFrame(a,0,this.lineSpeed),this.father.sound.mute?this.lineMute=1:this.lineMute=0,this.changeFrame(n,0,this.lineMute),h.displayHeight=h.displayWidth=s,this.play.displayHeight=this.play.displayWidth=s,a.displayHeight=a.displayWidth=s,n.displayHeight=n.displayWidth=s,this.pencil.displayHeight=this.pencil.displayWidth=s,this.bin.displayHeight=this.bin.displayWidth=s,this.plus.displayHeight=this.plus.displayWidth=s,this.play.on("pointerout",()=>this.changeFrame(this.play,0,this.linePlay)),this.play.on("pointerover",()=>this.changeFrame(this.play,1,this.linePlay)),a.on("pointerout",()=>this.changeFrame(a,0,this.lineSpeed)),a.on("pointerover",()=>this.changeFrame(a,1,this.lineSpeed)),n.on("pointerout",()=>this.changeFrame(n,0,this.lineMute)),n.on("pointerover",()=>this.changeFrame(n,1,this.lineMute)),this.creatBtnOutAndOver(h),this.creatBtnOutAndOver(this.pencil),this.creatBtnOutAndOver(this.bin),this.creatBtnOutAndOver(this.plus),this.play.on("pointerdown",()=>this.clickPlay()),a.on("pointerdown",()=>this.clickSpeed(a)),h.on("pointerdown",()=>this.clickBack()),n.on("pointerdown",()=>this.clickMute(n)),this.pencil.on("pointerdown",()=>this.clickPencil()),this.bin.on("pointerdown",()=>this.clickBin()),this.plus.on("pointerdown",()=>this.clickPlus()),this.input.on("pointerdown",()=>this.clickNode()),this.input.on("drag",this.doDrag),this.input.on("dragstart",()=>this.dragStart()),this.input.on("dragend",()=>this.dragEnd())}creatBtnOutAndOver(e){e.on("pointerout",()=>this.changeFrame(e,0)),e.on("pointerover",()=>this.changeFrame(e,1))}clickPlay(){this.scene.isPaused("GamingBoard")?this.resume():this.pauseScene(),this.changeFrame(this.play,1,this.linePlay)}clickSpeed(e){1===SPEED_GAME?(SPEED_GAME=2,this.lineSpeed=1):(SPEED_GAME=1,this.lineSpeed=0),this.changeFrame(e,1,this.lineSpeed)}clickPencil(){console.log("PENCIL"),this.changeFrame(this.pencil,0)}clickBin(){null!==this.selected&&(console.log("BIN"),this.tree.delete(this.selected),this.changeFrame(this.bin,0),this.tryClick())}clickPlus(){console.log("PLUS"),this.father.scene.add("PlusNode",new PlusNode(this.father,this,this.selected)),this.scene.launch("PlusNode"),this.changeFrame(this.plus,0),this.scene.pause("Game")}clickBack(){console.log("BACK"),this.father.scene.stop("GamingBoard"),this.father.scene.remove("GamingBoard"),this.father.scene.stop("Game"),this.father.scene.start("Type")}clickMute(e){console.log("MUTE"),this.father.sound.mute?(this.father.sound.mute=!1,this.lineMute=0):(this.father.sound.mute=!0,this.lineMute=1),this.changeFrame(e,1,this.lineMute)}tryClick(){this.pencil.setVisible(!1),this.bin.setVisible(!1),this.plus.setVisible(!1),null!=this.selected&&(this.selected.deselect(),this.selected=null)}}class GamingBoard extends Phaser.Scene{constructor(e){super("GamingBoard"),this.listRobot=[],listBonus=[],this.father=e,this.end=!1}preload(){this.cameras.main.setViewport(OFFX_MAP,OFFY_MAP,WIDTH_MAP,WIDTH_MAP),this.sound.add("shot"),this.sound.add("hit")}create(){listBonus.push(new BonusSpeed("Fusée",this,WIDTH_MAP/2,WIDTH_MAP/2,5,2e3)),this.add.image(0,0,"background").alpha=.1;for(let e=0;et.addNode(e)),!0)}modifyValue(e,t,s,i){let h=this.getMyRobot();return void 0!==h&&(h.setSpeed(e),h.setRange(t),h.setSpeedReload(s),h.setDamage(i),!0)}getMyRobot(){for(let e=0;ee.addShield(SHIELD_PER_SECOND)),this.time.addEvent({delay:1e3/SPEED_GAME,callback:this.upShield,callbackScope:this})}}class LoadFile extends Phaser.Scene{constructor(e,t,s){super("LoadFile"),this.father=e,this.son=s,this.nameSon=t,this.father.scene.pause(this.nameSon),this.father.scene.stop(this.nameSon),this.father.scene.remove("LoadFile")}preload(){let e=this.add.graphics(),t=this.add.graphics(),s=WIDTH_WINDOW/2-160,i=HEIGHT_WINDOW/2-25;t.fillStyle(2236962,.8),t.fillRect(s,i,320,50),this.load.on("progress",function(t){e.clear(),e.fillStyle(16777215,1),e.fillRect(s+10,i+10,300*t,30)}),this.load.on("complete",()=>{e.destroy(),t.destroy(),-1===this.father.scene.getIndex(this.nameSon)&&this.father.scene.add(this.nameSon,this.son),this.father.scene.start(this.nameSon)}),this.load.audio("shot","assets/sounds/shot.ogg"),this.load.audio("hit","assets/sounds/hit.ogg"),this.loadImage("en","flags/",!0),this.loadImage("fr","flags/",!0),this.loadImage("bonusSpeed0","bonus/",!0),this.loadImage("bonusSpeed1","bonus/",!0),this.loadImage("bonusSpeed2","bonus/",!0),this.loadImage("enemy","robots/"),this.loadSprite("playLetter",550,150,"buttons/"),this.loadSprite("cancel",550,150,"buttons/"),this.loadSprite("add",550,150,"buttons/"),this.loadSprite("home",550,150,"buttons/"),this.loadSprite("next",550,150,"buttons/"),this.loadSprite("retry",550,150,"buttons/"),this.loadSprite("duel",269,262,"buttons/"),this.loadSprite("last",269,262,"buttons/"),this.loadSprite("team",269,262,"buttons/"),this.loadSprite("flag",269,262,"buttons/"),this.loadSprite("map",269,262,"buttons/"),this.loadSprite("play",100,100,"buttons/"),this.loadSprite("bin",100,100,"buttons/"),this.loadSprite("plus",100,100,"buttons/"),this.loadSprite("pencil",100,100,"buttons/"),this.loadSprite("speed",100,100,"buttons/"),this.loadSprite("mute",100,100,"buttons/"),this.loadSprite("back",200,200,"buttons/"),this.loadSprite("shortRange",300,150,"buttons/"),this.loadSprite("mediumRange",300,150,"buttons/"),this.loadSprite("longRange",300,150,"buttons/"),this.loadSprite("shield0",300,150,"buttons/"),this.loadSprite("shield33",300,150,"buttons/"),this.loadSprite("shield66",300,150,"buttons/"),this.loadSprite("shield100",300,150,"buttons/"),this.loadSprite("myself",300,150,"buttons/"),this.loadSprite("enemyBot",300,150,"buttons/"),this.loadSprite("bonus",300,150,"buttons/"),this.loadSprite("moveToward",300,150,"buttons/"),this.loadSprite("fleeFrom",300,150,"buttons/"),this.loadSprite("attackNode",180,190,"nodes/",!0),this.loadSprite("moveNode",180,190,"nodes/",!0),this.loadSprite("conditionNode",180,190,"nodes/",!0),this.loadImage("background"),this.loadImage("bullet"),this.loadImage("logoWaria"),this.loadImage("attack","nodes/",!0),this.loadImage("move","nodes/",!0),this.loadImage("condition","nodes/",!0)}loadSprite(e,t,s,i="",h=!1){this.deleteLoad(e),h?this.load.spritesheet(e,"assets/"+i+e+".png",{frameWidth:t,frameHeight:s}):this.load.spritesheet(e,"assets/"+LANG+"/"+i+e+".png",{frameWidth:t,frameHeight:s})}loadImage(e,t="",s=!1){this.deleteLoad(e),s?this.load.image(e,"assets/"+t+e+".png"):this.load.image(e,"assets/"+LANG+"/"+t+e+".png")}deleteLoad(e){this.textures.exists(e)&&this.textures.remove(e)}}class Looser extends Finish{constructor(e){super(e)}create(){super.create(),super.addTitle(selectWord("GAME OVER","PARTIE PERDUE")),super.btnRetry(super.createButton(WIDTH_WINDOW/3,"retry")),super.btnHome(super.createButton(WIDTH_WINDOW/1.5,"home"))}}class Missile extends Phaser.GameObjects.Image{constructor(e,t,s,i){super(e,0,0,t),this.visible=!1,this.setOrigin(.5,.5),this.setScale(.02)}}class Move{constructor(e,t=!0){this.toward=e,this.enemyBot=t}do(e){if(this.enemyBot){if(e.verifyTarget())return!0===this.toward?this.moveToward(e):this.fleeFrom(e)}else{let t=chooseTarget(e,listBonus);if(void 0!==t){let s;return(s=!0===this.toward?this.moveToward(e,t):this.fleeFrom(e,t))||(t.useOn(e),listBonus.splice(listBonus.indexOf(t),1)),!0}}return!1}moveToward(e,t=e.target){return e.advanceTo(t)}fleeFrom(e,t=e.target){return e.fleeFrom(t)}getFrame(){let e;return e=this.toward?0:2,this.enemyBot||(e+=1),e}}class PlusNode extends Phaser.Scene{constructor(e,t,s){super("PlusNode"),this.father=e,this.gameR=t,this.selected=s}create(){this.add.rectangle(0,0,WIDTH_WINDOW,HEIGHT_WINDOW,0).setOrigin(0,0).setAlpha(.5),this.add.rectangle(0,HEIGHT_WINDOW/2,WIDTH_WINDOW,HEIGHT_WINDOW/2,3487290).setOrigin(0,.5),this.createNode(),this.createButton()}createNode(){let e=WIDTH_WINDOW/2,t=HEIGHT_WINDOW/2,s=WIDTH_WINDOW/3,i=HEIGHT_WINDOW/10,h={font:(i/1.5).toString()+"px stencil",fill:"#e2e2e2"};this.add.text(e-s,t-i,selectWord("ATTACK","ATTAQUE"),h).setOrigin(.5,.5),this.add.text(e,t-i,selectWord("MOVE","DEPLACEMENT"),h).setOrigin(.5,.5),this.add.text(e+s,t-i,selectWord("CONDITION","CONDITION"),h).setOrigin(.5,.5);let a=this.add.sprite(e-s,t+i,"attack").setOrigin(.5,.5).setInteractive().on("pointerdown",()=>this.click("attack"));a.displayHeight=2*i,a.scaleX=a.scaleY,(a=this.add.sprite(e,t+i,"move").setOrigin(.5,.5).setInteractive().on("pointerdown",()=>this.click("move"))).displayHeight=2*i,a.scaleX=a.scaleY,(a=this.add.sprite(e+s,t+i,"condition").setOrigin(.5,.5).setInteractive().on("pointerdown",()=>this.click("condition"))).displayHeight=2*i,a.scaleX=a.scaleY}click(e){switch(e.toString()){case"attack":this.father.scene.add("AddNode",new AddAttack(this.father,this.gameR,this.selected));break;case"move":this.father.scene.add("AddNode",new AddMove(this.father,this.gameR,this.selected));break;case"condition":this.father.scene.add("AddNode",new AddCondition(this.father,this.gameR,this.selected))}this.scene.launch("AddNode"),this.scene.stop("PlusNode"),this.father.scene.remove("PlusNode")}createButton(){let e=WIDTH_WINDOW/2,t=HEIGHT_WINDOW-100,s=this.add.image(e,t,"cancel").setOrigin(.5,.5).setInteractive();s.on("pointerover",()=>s.setFrame(1)),s.on("pointerout",()=>s.setFrame(0)),s.on("pointerdown",()=>this.cancel()),s.displayHeight=HEIGHT_WINDOW/10,s.scaleX=s.scaleY}cancel(){this.scene.resume("Game"),this.scene.stop("PlusNode"),this.father.scene.remove("PlusNode")}}class RectangleNode{constructor(e,t,s,i,...h){switch(i.toString().toLowerCase()){case"attack":this.rect=new Phaser.GameObjects.Image(s,e,t,"attackNode"),this.node=new Attack(h[0]),this.canAddNode=!1,this.line=s.add.graphics();break;case"move":this.rect=new Phaser.GameObjects.Image(s,e,t,"moveNode"),this.node=new Move(h[0],h[1]),this.canAddNode=!1,this.line=s.add.graphics();break;case"condition":this.rect=new Phaser.GameObjects.Image(s,e,t,"conditionNode"),this.node=new Condition(h[0],h[1],h[2],h[3],h[4]),this.canAddNode=!0,this.lRect=[],this.scene=s,this.line=s.add.graphics();break;case"waria":this.rect=new Phaser.GameObjects.Image(s,e,t,"logoWaria").setInteractive(),this.canAddNode=!0,this.lRect=[],this.scene=s,this.scene.add.existing(this.rect),this.scene.input.setDraggable(this.rect);break;default:return void console.log("Création d'un node echoué")}"waria"!==i.toString().toLowerCase()&&this.rect.setFrame(this.node.getFrame()),this.option=h,this.type=i,this.rect.on("pointerdown",()=>this.click()),this.rect.setOrigin(.5,0),this.rect.displayHeight=HEIGHT_WINDOW/6,this.rect.scaleX=this.rect.scaleY}getSelected(){if(this.rect.isTinted)return this;if(this.canAddNode)for(let e=0;e0&&","===e[e.length-1]&&(e=e.substr(0,e.length-1)),e}save(){let e="{";return e+=this.toJson("x",this.rect.x)+this.toJson("y",this.rect.y)+this.toJson("type",this.type),e+='"option":[',this.option.forEach(t=>e+=t+","),e=this.endLineJson(e)+"],",this.canAddNode&&(e+='"lRect":[',this.lRect.forEach(t=>e+=t.save()+","),e=this.endLineJson(e)+"]"),e=this.endLineJson(e),e+="}",console.log(e),e}setLine(e,t){this.xOrigin=e,this.yOrigin=t,this.updateLine(!0)}updateLine(e=!1){!0!==e&&this.xLine===this.rect.x&&this.yLine===this.rect.y||void 0===this.line||(this.xLine=this.rect.x,this.yLine=this.rect.y,this.line.clear(),this.line.lineStyle(10,16777215,1),this.line.lineBetween(this.xOrigin,this.yOrigin,this.rect.x,this.rect.y+this.rect.displayHeight/10)),!0===this.canAddNode&&this.lRect.forEach(e=>this.addLine(e))}addLine(e){e.setLine(this.rect.x,this.rect.y+.9*this.rect.displayHeight)}getNode(){if(void 0===this.node){let e=[];return this.lRect.forEach(function(t){e.push(t.getNode())}),e}return this.canAddNode&&(this.node.clearNodes(),this.lRect.forEach(e=>this.node.addNode(e.getNode()))),this.node}sort(e){this.canAddNode&&(this.lRect.sort(e),this.lRect.forEach(function(t){t.canAddNode&&t.sort(e)}))}destroy(){this.line.destroy(),this.rect.destroy(),void 0!==this.lRect&&this.lRect.forEach(e=>e.destroy())}delete(e){let t=this.lRect.indexOf(e);if(-1!==t)return this.lRect.splice(t,1),e.destroy(),!0;for(let t=0;tthis.click())}click(){null===this.circleRange?this.drawRange():this.eraseRange()}addShield(e){this.shield.increase(e)}setX(e){this.x=e,this.circle.setX(this.x),this.life.setX(this.x),this.shield.setX(this.x),this.drawCircleRange()}setY(e){this.y=e,this.life.setY(this.y-this.width),this.shield.setY(this.y-1.5*this.width),this.circle.setY(this.y),this.drawCircleRange()}setTarget(e){this.target=e}updateTarget(){this.verifyTarget()&&this.setTargetPos(this.target.x,this.target.y)}setTargetPos(e,t){}setDamage(e=this.damage){this.damage=e+DAMAGE_BASE}setRange(e=this.range){this.range=e+RANGE_BASE,this.drawCircleRange()}setSpeed(e=this.speed){this.speed=e+SPEED_BASE}setSpeedReload(e=this.speedReload){this.speedReload=e+SPEED_RELOAD_BASE}increaseSpeedBonus(e){this.speedBonus+=e}decreaseSpeedBonus(e){this.speedBonus-=e,console.log(this.speed)}advanceToTarget(){return this.verifyTarget()&&this.advanceTo(this.target),!1}advanceTo(e){if(e.x!==this.x||e.y!==this.y){let t=!1,s=!1,i=this.getVelocity(e),h=i[0]+this.x,a=i[1]+this.y;return i[0]>=0&&h>=e.x||i[0]<=0&&h<=e.x?(this.setX(e.x),t=!0):this.setX(this.x+i[0]),i[1]>=0&&a>=e.y||i[1]<=0&&a<=e.y?(this.setY(e.y),s=!0):this.setY(this.y+i[1]),!(t&&s)}return!1}fleeFromTarget(){return!!this.verifyTarget()&&this.fleeFrom(this.target)}fleeFrom(e){if(this.target.x!==this.x||this.target.y!==this.y){let t=this.getVelocity(e,!0);return t[0]>=0&&this.x-this.width/2<=0?this.setX(this.width/2):t[0]<=0&&this.x+this.width/2>=WIDTH_MAP?this.setX(WIDTH_MAP-this.width/2):this.setX(this.x-t[0]),t[1]>=0&&this.y-this.width/2<=0?this.setY(this.height/2):t[1]<=0&&this.y+this.width/2>=WIDTH_MAP?this.setY(WIDTH_MAP-this.height/2):this.setY(this.y-t[1]),!0}return!1}getVelocity(e,t=!1){let s=[],i=e.x-this.x,h=e.y-this.y,a=Math.hypot(i,h);return s[0]=i/a*SPEED*this.speed*this.speedBonus*SPEED_GAME,s[1]=h/a*SPEED*this.speed*this.speedBonus*SPEED_GAME,t&&(this.x+this.width/2+s[0]>WIDTH_MAP||this.x-this.width/2-s[0]<0?(s[1]+=s[0]*Math.sign(s[1]),s[0]=0):(this.y+this.width/2-s[1]>WIDTH_MAP||this.y-this.width/2+s[1]<0)&&(s[0]+=s[1]*Math.sign(-s[0]),s[1]=0)),s}attackTarget(e=0){return!!this.verifyTarget()&&(this.canAttack&&this.attack(this.target,e),!0)}verifyTarget(){return!!this.haveTarget()&&(!!this.target.isAlive()||(this.setTarget(null),!1))}attack(e,t){this.canAttack=!1,this.missile.setPosition(this.x,this.y).setVisible(!0),this.missile.setRotation(Math.atan2(this.y-this.target.y,this.x-this.target.x)-1.57),this.scene.sound.play("shot");let s=this.calcDistance(this.target)*WIDTH_MAP/1e3/SPEED_GAME;this.scene.tweens.add({targets:this.missile,x:e.x,y:e.y,ease:"Linear",duration:s,onComplete:()=>this.finishAttack(e,t)}),this.scene.time.addEvent({delay:SPEED_RELOAD/this.speedReload/SPEED_GAME,callback:this.reload,callbackScope:this})}finishAttack(e,t){e.beAttack(this.damage*DAMAGE*t)&&this.setTarget(null),this.missile.setVisible(!1)}reload(){this.canAttack=!0}beAttack(e){let t=this.shield.decrease(e),s={font:HEIGHT_DAMAGE.toString()+"px stencil",fill:"#ffff00"},i=this.scene.add.text(this.x,this.y,e.toString(),s).setOrigin(0,1);return this.scene.tweens.add({targets:i,x:this.x+30,y:this.y-50,alpha:0,duration:DURATION_DAMAGE,ease:"Sine.easeOut",onComplete:()=>i.destroy()}),this.scene.sound.play("hit"),console.log("HIT"),t>0&&(console.log("Shield Broken"),this.life.decrease(t)),this.die()}isTargetInRange(e=1){return!!this.haveTarget()&&this.calcDistance(this.target)<=this.range*RANGE*e}calcDistance(e){return Math.hypot(e.x-this.x,e.y-this.y)}isAlive(){return this.life.value>0}die(){return 0===this.life.value&&(null!==this.circleRange&&this.circleRange.destroy(),this.circle.destroy(),this.shield.destroy(),this.life.destroy(),!0)}haveTarget(){return null!=this.target}read(){for(let e=0;ee.setFrame(0)),e.on("pointerover",()=>e.setFrame(1)),e.on("pointerdown",()=>this.clickPlay(e))}clickPlay(e){newGame(this.father),this.scene.start("Game")}}var listBonus=[],LANG=navigator.language.substr(0,2).toLowerCase(),SPEED_GAME=1;const MYSELF="myself",SHIELD_PER_SECOND=5,COLOR_ATTACK=16711680,COLOR_MOVE=255,COLOR_CONDITION=921102,COLOR_RED=16711680,COLOR_ORANGE=16744192,COLOR_GREEN=32768,COLOR_RANGE=32768,COLOR_SPEED_RELOAD=8323327,COLOR_MYSELF=6711039,WIDTH_WINDOW=$(document).width()-20,HEIGHT_WINDOW=$(document).height()-20,WIDTH_MAP=WIDTH_WINDOW1/3?e>2/3?(e=1,this.percentBonus=1):(e=2/3,this.percentBonus=1.5):(e=1/3,this.percentBonus=2),this.percentRange=e}do(e){return!(!e.haveTarget()||!e.isTargetInRange(this.percentRange))&&e.attackTarget(this.percentBonus)}getFrame(){return 3*this.percentRange-1}}class Bar extends HealthBar{constructor(e,t="",s,i,h,a,n,r=new CategoryBar,o=1,d){super(e,t,s,i,h,a,void 0!==d?d:r.valueMax,n,n,!1),this.name=t,this.scene=e,this.scene.input.on("pointerdown",this.doDrag,this);let l={font:i.toString()+"px stencil",fill:"#e2e2e2"};this.text=this.scene.add.text(this.bar.x+this.width+10,this.bar.y,this.value.toString(),l).setOrigin(0,0),this.categoryBar=r,this.setValue(0),this.categoryBar.setValueOf(this,o)}doDrag(){let e=this.scene.input;e.x>=this.bar.x-10&&e.x<=this.bar.x+this.width+10&&e.y>=this.bar.y&&e.y<=this.bar.y+this.height&&(this.scene.pauseScene(),this.clickOn())}clickOn(){this.onMove(),this.scene.input.on("pointermove",()=>this.onMove()),this.scene.input.on("pointerup",()=>this.stopClick())}stopClick(){this.scene.input.off("pointermove"),this.scene.input.off("pointerup")}onMove(){this.setValWithX(this.scene.input.x)}setValWithX(e){this.categoryBar.setValueOf(this,Math.round((e-this.bar.x)/this.width*this.valueMax))}draw(){super.draw();let e=this.value/this.valueMax*this.width-5;this.bar.fillStyle(9868950),this.bar.fillRect(e,0,10,this.height),void 0!==this.text&&this.text.setText(this.value+1)}}class BonusAttack extends Bonus{constructor(e,t,s,i,h){super(e,t,s,i,"bonusAttack",h)}useOn(e){let t=e.speed;e.setSpeed(t+this.value),this.scene.time.addEvent({delay:this.time,callback:e.setSpeed(t)}),this.destroy()}}class BonusShield extends Bonus{constructor(e,t,s,i,h){super(e,t,s,i,"bonusShield",h)}useOn(e){e.shield.valueMax=e.shield.valueMax+this.value,e.shield.value=e.shield.value+this.val,this.destroy()}}class BonusSpeed extends Bonus{constructor(e,t,s,i,h,a){let n;switch(h){case 1:n="bonusSpeed0";break;case 2:n="bonusSpeed1";break;case 3:default:n="bonusSpeed2"}super(e,t,s,i,n,h),this.time=a}useOn(e){e.increaseSpeedBonus(this.value),this.scene.time.addEvent({delay:this.time,callback:()=>e.decreaseSpeedBonus(this.value)}),this.destroy()}}class Boot extends ManageLang{constructor(e){super("Boot",e)}create(){super.create();this.add.text(WIDTH_WINDOW/2,HEIGHT_WINDOW/3,"WARIA",{font:"200px stencil",fill:"#e2e2e2"}).setOrigin(.5,.5);let e=this.add.sprite(WIDTH_WINDOW/2,HEIGHT_WINDOW/3*2,"playLetter").setInteractive();e.on("pointerout",()=>e.setFrame(0)),e.on("pointerover",()=>e.setFrame(1)),e.on("pointerdown",()=>this.clickPlay(e))}clickPlay(e){console.log("Play"),this.father.scene.add("Type",new Type(this.father)),this.scene.start("Type")}}class Category{constructor(e="undefined",t=!0,s=!0){this.name=e,this.single=t,this.lBtn=[],this.lValue=[],this.obligatory=s}add(e,t){0!==this.lBtn.length&&this.single&&(this.lBtn[0].clearTint(),this.lValue=[],this.lBtn=[]),this.lValue.push(t),this.lBtn.push(e),e.tint=15718407}getValue(){return this.single?this.lValue[0]:this.lValue}validate(){return!(0===this.lBtn.length&&this.obligatory)}remove(e){let t=this.lBtn.indexOf(e);-1!==t&&(this.lBtn.splice(t,1),this.lValue.splice(t,1)),e.clearTint()}}class CategoryBar{constructor(e=VALUE_MAX_BAR,t=1){this.startValue=t,this.valueMax=e,this.point=this.valueMax}addPoint(e){if(this.point+=e,this.point<0){let e=this.point;return this.point=0,e}return this.point>this.valueMax&&(this.point=this.valueMax),0}setValueOf(e,t){let s=t-e.value,i=e.value;this.point>=s?e.setValue(t):e.setValue(e.value+this.point),this.addPoint(i-e.value),this.draw()}addText(e,t,s,i,h){this.text=t;let a={font:h.toString()+"px stencil",fill:"#e2e2e2"};this.textScene=e.add.text(s,i,this.text,a).setOrigin(0,0),this.draw()}setTextPos(e,t){this.textScene.setX(e),this.textScene.setY(t)}setText(e){this.text=e,this.draw()}draw(){this.textScene.setText(this.text+this.point)}}class Condition{constructor(e,t=!1,s=!1,i,h){this.shieldFilter=t,this.rangeFilter=s,this.shield=i,this.range=h,this.myself=e,this.lNode=[]}addNode(e){this.lNode.push(e)}do(e){if(this.doCondition(e))for(let t=0;t=h&&(s>h&&(s=h,i=[]),i.push(t))}}),i.length>1?i[Math.floor(Math.random()*(i.length+1))]:i[0]}function toJson(e,t,s=!1){let i;switch(typeof t){case"string":i='"'+e.toString()+'":"'+t+'"';break;default:i='"'+e.toString()+'":'+t}return s||(i+=","),i}function endLineJson(e){return e.length>0&&","===e[e.length-1]&&(e=e.substr(0,e.length-1)),e}var tree=void 0;class Game extends ManageLang{constructor(e,t){super("Game",e),super.addOtherScenes("GamingBoard"),SPEED_GAME=1,void 0!==t&&(this.tree=JSON.parse(t),this.loadSave(this.tree))}create(){super.create(),this.doLine=!1,this.gm=new GamingBoard(this),-1!==this.father.scene.getIndex("GamingBoard")&&this.father.scene.remove("GamingBoard"),this.father.scene.add("GamingBoard",this.gm),this.scene.launch("GamingBoard"),this.scene.pause("GamingBoard"),this.selected=null;this.createButton();let e=WIDTH_WINDOW/4*3,t=WIDTH_WINDOW/10;if(void 0===this.tree){this.initStat=new InitStat(this,OFFX_MAP+WIDTH_MAP+5,OFFY_MAP,200,30,10),this.initStat.addBar(DAMAGE_BEGIN,5,COLOR_ATTACK,["DAMAGE","DEGATS"]),this.initStat.addBar(SPEED_RELOAD_BEGIN,5,COLOR_SPEED_RELOAD,["R.S","RECHARGEMENT"]),this.initStat.addBar(SPEED_BEGIN,5,COLOR_MOVE,["SPEED","VITESSE"]),this.initStat.addBar(RANGE_BEGIN,5,COLOR_RANGE,["RANGE","PORTEE"]),this.tree=new RectangleNode(e,HEIGHT_WINDOW/10,this,"waria"),this.tree.addRect(new RectangleNode(e-2*t,HEIGHT_WINDOW/3,this,"move",[!0,!1])),this.tree.addRect(new RectangleNode(e+t,HEIGHT_WINDOW/3,this,"move",[!0])),this.tree.addRect(new RectangleNode(e,HEIGHT_WINDOW/3,this,"attack",[1/3]));let s=new RectangleNode(e-t,HEIGHT_WINDOW/3,this,"condition",[!0,!0,!1,1/3,0]);this.tree.addRect(s),s.addRect(new RectangleNode(e,HEIGHT_WINDOW/1.5,this,"move",[!1])),s.addRect(new RectangleNode(e-t,HEIGHT_WINDOW/1.5,this,"attack",[1]))}else{let e=this.tree.getJson();e=JSON.parse(e);let t=this.initStat.getJson();t=JSON.parse(t),this.loadSave(e,t)}this.gm.addRobot(new Robot(.1*WIDTH_MAP,.1*WIDTH_MAP,.9*WIDTH_MAP,.9*WIDTH_MAP,this.gm,MYSELF)),this.gm.addRobot(new Robot(.1*WIDTH_MAP,.1*WIDTH_MAP,.2*WIDTH_MAP,.1*WIDTH_MAP,this.gm)),this.gm.addRobot(new Robot(.1*WIDTH_MAP,.1*WIDTH_MAP,.1*WIDTH_MAP,.9*WIDTH_MAP,this.gm)),this.input.keyboard.on("keydown-DELETE",()=>{this.clickBin()})}update(e,t){super.update(e,t),this.doLine&&this.tree.updateLine()}loadSave(e,t){this.initStat=this.loadInitSave(t),this.tree=this.loadTree(e)}loadTree(e){let t=new RectangleNode(e.x,e.y,this,e.type,e.option);return void 0!==e.lRect&&e.lRect.length>0&&e.lRect.forEach(e=>t.addRect(this.loadTree(e))),t}loadInitSave(e){let t=new InitStat(this,OFFX_MAP+WIDTH_MAP+5,OFFY_MAP,200,30,10);for(let s=0;se.getX()-t.getX()),this.gm.modifyNodes(this.tree.getNode()),this.gm.modifyValue(this.initStat.lBar[0].value,this.initStat.lBar[1].value,this.initStat.lBar[2].value,this.initStat.lBar[3].value),this.gm.resume()}changeFrame(e,t=0,s=0){e.setFrame(t+2*s)}createButton(){let e=WIDTH_MAP+OFFX_MAP,t=WIDTH_MAP+OFFY_MAP+5,s=OFFY_MAP/1.5,i=1.1*s,h=this.add.sprite(10,10,"back").setOrigin(0,0).setInteractive();this.play=this.add.sprite(e,t,"play").setOrigin(1,0).setInteractive();let a=this.add.sprite(e-i,t,"speed").setOrigin(1,0).setInteractive();this.pencil=this.add.sprite(e-2*i,t,"pencil").setOrigin(1,0).setInteractive().setVisible(!1),this.bin=this.add.sprite(e-3*i,t,"bin").setOrigin(1,0).setInteractive().setVisible(!1),this.plus=this.add.sprite(e-4*i,t,"plus").setOrigin(1,0).setInteractive().setVisible(!1);let n=this.add.sprite(e-5*i,t,"mute").setOrigin(1,0).setInteractive();this.linePlay=0,this.lineSpeed=1===SPEED_GAME?0:1,this.changeFrame(a,0,this.lineSpeed),this.father.sound.mute?this.lineMute=1:this.lineMute=0,this.changeFrame(n,0,this.lineMute),h.displayHeight=h.displayWidth=s,this.play.displayHeight=this.play.displayWidth=s,a.displayHeight=a.displayWidth=s,n.displayHeight=n.displayWidth=s,this.pencil.displayHeight=this.pencil.displayWidth=s,this.bin.displayHeight=this.bin.displayWidth=s,this.plus.displayHeight=this.plus.displayWidth=s,this.play.on("pointerout",()=>this.changeFrame(this.play,0,this.linePlay)),this.play.on("pointerover",()=>this.changeFrame(this.play,1,this.linePlay)),a.on("pointerout",()=>this.changeFrame(a,0,this.lineSpeed)),a.on("pointerover",()=>this.changeFrame(a,1,this.lineSpeed)),n.on("pointerout",()=>this.changeFrame(n,0,this.lineMute)),n.on("pointerover",()=>this.changeFrame(n,1,this.lineMute)),this.creatBtnOutAndOver(h),this.creatBtnOutAndOver(this.pencil),this.creatBtnOutAndOver(this.bin),this.creatBtnOutAndOver(this.plus),this.play.on("pointerdown",()=>this.clickPlay()),a.on("pointerdown",()=>this.clickSpeed(a)),h.on("pointerdown",()=>this.clickBack()),n.on("pointerdown",()=>this.clickMute(n)),this.pencil.on("pointerdown",()=>this.clickPencil()),this.bin.on("pointerdown",()=>this.clickBin()),this.plus.on("pointerdown",()=>this.clickPlus()),this.input.on("pointerdown",()=>this.clickNode()),this.input.on("drag",this.doDrag),this.input.on("dragstart",()=>this.dragStart()),this.input.on("dragend",()=>this.dragEnd())}creatBtnOutAndOver(e){e.on("pointerout",()=>this.changeFrame(e,0)),e.on("pointerover",()=>this.changeFrame(e,1))}clickPlay(){this.scene.isPaused("GamingBoard")?this.resume():this.pauseScene(),this.changeFrame(this.play,1,this.linePlay)}clickSpeed(e){1===SPEED_GAME?(SPEED_GAME=2,this.lineSpeed=1):(SPEED_GAME=1,this.lineSpeed=0),this.changeFrame(e,1,this.lineSpeed)}clickPencil(){switch(console.log("PENCIL"),this.changeFrame(this.pencil,0),this.selected.type){case"attack":this.father.scene.add("AddNode",new AddAttack(this.father,this,this.selected,!1,this.selected.node.percentRange));break;case"move":this.father.scene.add("AddNode",new AddMove(this.father,this,this.selected,this.selected.node.toward,this.selected.node.enemyBot));break;case"condition":this.father.scene.add("AddNode",new AddCondition(this.father,this,this.selected,this.selected.node.myself,this.selected.node.shield));break;default:return}this.scene.pause("Game"),this.scene.launch("AddNode")}clickBin(){null!==this.selected&&(console.log("BIN"),this.tree.delete(this.selected),this.changeFrame(this.bin,0),this.tryClick())}clickPlus(){console.log("PLUS"),this.father.scene.add("PlusNode",new PlusNode(this.father,this,this.selected)),this.scene.launch("PlusNode"),this.changeFrame(this.plus,0),this.scene.pause("Game")}clickBack(){console.log("BACK"),this.father.scene.stop("GamingBoard"),this.father.scene.remove("GamingBoard"),this.father.scene.stop("Game"),this.father.scene.start("Type")}clickMute(e){console.log("MUTE"),this.father.sound.mute?(this.father.sound.mute=!1,this.lineMute=0):(this.father.sound.mute=!0,this.lineMute=1),this.changeFrame(e,1,this.lineMute)}tryClick(){this.pencil.setVisible(!1),this.bin.setVisible(!1),this.plus.setVisible(!1),null!=this.selected&&(this.selected.deselect(),this.selected=null)}}class GamingBoard extends Phaser.Scene{constructor(e){super("GamingBoard"),this.listRobot=[],listBonus=[],this.father=e,this.end=!1}preload(){this.cameras.main.setViewport(OFFX_MAP,OFFY_MAP,WIDTH_MAP,WIDTH_MAP),this.sound.add("shot"),this.sound.add("hit")}create(){listBonus.push(new BonusSpeed("Fusée",this,WIDTH_MAP/2,WIDTH_MAP/2,5,2e3)),this.add.image(0,0,"background").alpha=.1;for(let e=0;et.addNode(e)),!0)}modifyValue(e,t,s,i){let h=this.getMyRobot();return void 0!==h&&(h.setSpeed(s),h.setRange(i),h.setSpeedReload(t),h.setDamage(e),!0)}getMyRobot(){for(let e=0;ee.addShield(SHIELD_PER_SECOND)),this.time.addEvent({delay:1e3/SPEED_GAME,callback:this.upShield,callbackScope:this})}}class InitStat{constructor(e,t,s,i,h,a){this.scene=e,this.posX=t,this.posY=s,this.width=i,this.height=h,this.category=new CategoryBar(a),this.lBar=[],this.lText=[],this.category.addText(this.scene,selectWord("TOKENS : ","JETONS : "),this.posX,this.posY,this.height)}addBar(e,t,s,i){this.lText.push(i),this.lBar.push(new Bar(this.scene,selectWord(i[0],i[1]),this.width,this.height,this.posX,this.posY,s,this.category,e,t)),this.posY+=1.5*this.height,this.category.setTextPos(this.posX,this.posY)}getJson(){let e="{";return e+='"lBar":[',this.lBar.forEach(t=>e+=t.getJson()+","),e=endLineJson(e)+"],",e+='"lText":[',this.lText.forEach(t=>{e+="[",t.forEach(t=>{e+='"'+t+'",'}),e=endLineJson(e),e+="],"}),e=endLineJson(e),e+="]",e+="}"}}class LoadFile extends Phaser.Scene{constructor(e,t,s){super("LoadFile"),this.father=e,this.son=s,this.nameSon=t,this.father.scene.pause(this.nameSon),this.father.scene.stop(this.nameSon),this.father.scene.remove("LoadFile")}preload(){let e=this.add.graphics(),t=this.add.graphics(),s=WIDTH_WINDOW/2-160,i=HEIGHT_WINDOW/2-25;t.fillStyle(2236962,.8),t.fillRect(s,i,320,50),this.load.on("progress",function(t){e.clear(),e.fillStyle(16777215,1),e.fillRect(s+10,i+10,300*t,30)}),this.load.on("complete",()=>{e.destroy(),t.destroy(),-1===this.father.scene.getIndex(this.nameSon)&&this.father.scene.add(this.nameSon,this.son),this.father.scene.start(this.nameSon)}),this.load.audio("shot","assets/sounds/shot.ogg"),this.load.audio("hit","assets/sounds/hit.ogg"),this.loadImage("en","flags/",!0),this.loadImage("fr","flags/",!0),this.loadImage("bonusSpeed0","bonus/",!0),this.loadImage("bonusSpeed1","bonus/",!0),this.loadImage("bonusSpeed2","bonus/",!0),this.loadImage("enemy","robots/"),this.loadSprite("playLetter",550,150,"buttons/"),this.loadSprite("cancel",550,150,"buttons/"),this.loadSprite("add",550,150,"buttons/"),this.loadSprite("modify",550,150,"buttons/"),this.loadSprite("home",550,150,"buttons/"),this.loadSprite("next",550,150,"buttons/"),this.loadSprite("retry",550,150,"buttons/"),this.loadSprite("duel",269,262,"buttons/"),this.loadSprite("last",269,262,"buttons/"),this.loadSprite("team",269,262,"buttons/"),this.loadSprite("flag",269,262,"buttons/"),this.loadSprite("map",269,262,"buttons/"),this.loadSprite("play",100,100,"buttons/"),this.loadSprite("bin",100,100,"buttons/"),this.loadSprite("plus",100,100,"buttons/"),this.loadSprite("pencil",100,100,"buttons/"),this.loadSprite("speed",100,100,"buttons/"),this.loadSprite("mute",100,100,"buttons/"),this.loadSprite("back",200,200,"buttons/"),this.loadSprite("shortRange",300,150,"buttons/"),this.loadSprite("mediumRange",300,150,"buttons/"),this.loadSprite("longRange",300,150,"buttons/"),this.loadSprite("shield0",300,150,"buttons/"),this.loadSprite("shield33",300,150,"buttons/"),this.loadSprite("shield66",300,150,"buttons/"),this.loadSprite("shield100",300,150,"buttons/"),this.loadSprite("myself",300,150,"buttons/"),this.loadSprite("enemyBot",300,150,"buttons/"),this.loadSprite("bonus",300,150,"buttons/"),this.loadSprite("moveToward",300,150,"buttons/"),this.loadSprite("fleeFrom",300,150,"buttons/"),this.loadSprite("attackNode",180,190,"nodes/",!0),this.loadSprite("moveNode",180,190,"nodes/",!0),this.loadSprite("conditionNode",180,190,"nodes/",!0),this.loadImage("background"),this.loadImage("bullet"),this.loadImage("logoWaria"),this.loadImage("attack","nodes/",!0),this.loadImage("move","nodes/",!0),this.loadImage("condition","nodes/",!0)}loadSprite(e,t,s,i="",h=!1){this.deleteLoad(e),h?this.load.spritesheet(e,"assets/"+i+e+".png",{frameWidth:t,frameHeight:s}):this.load.spritesheet(e,"assets/"+LANG+"/"+i+e+".png",{frameWidth:t,frameHeight:s})}loadImage(e,t="",s=!1){this.deleteLoad(e),s?this.load.image(e,"assets/"+t+e+".png"):this.load.image(e,"assets/"+LANG+"/"+t+e+".png")}deleteLoad(e){this.textures.exists(e)&&this.textures.remove(e)}}class Looser extends Finish{constructor(e,t){super(e,t)}create(){super.create(),super.addTitle(selectWord("GAME OVER","PARTIE PERDUE")),super.btnRetry(super.createButton(WIDTH_WINDOW/3,"retry")),super.btnHome(super.createButton(WIDTH_WINDOW/1.5,"home"))}}class Missile extends Phaser.GameObjects.Image{constructor(e,t,s,i){super(e,0,0,t),this.visible=!1,this.setOrigin(.5,.5),this.setScale(.02)}}class Move{constructor(e,t=!0){this.toward=e,this.enemyBot=t}do(e){if(this.enemyBot){if(e.verifyTarget())return!0===this.toward?this.moveToward(e):this.fleeFrom(e)}else{let t=chooseTarget(e,listBonus);if(void 0!==t){let s;return(s=!0===this.toward?this.moveToward(e,t):this.fleeFrom(e,t))||(t.useOn(e),listBonus.splice(listBonus.indexOf(t),1)),!0}}return!1}moveToward(e,t=e.target){return e.advanceTo(t)}fleeFrom(e,t=e.target){return e.fleeFrom(t)}getFrame(){let e;return e=this.toward?0:2,this.enemyBot||(e+=1),e}}class PlusNode extends Phaser.Scene{constructor(e,t,s){super("PlusNode"),this.father=e,this.gameR=t,this.selected=s}create(){this.add.rectangle(0,0,WIDTH_WINDOW,HEIGHT_WINDOW,0).setOrigin(0,0).setAlpha(.5),this.add.rectangle(0,HEIGHT_WINDOW/2,WIDTH_WINDOW,HEIGHT_WINDOW/2,3487290).setOrigin(0,.5),this.createNode(),this.createButton()}createNode(){let e=WIDTH_WINDOW/2,t=HEIGHT_WINDOW/2,s=WIDTH_WINDOW/3,i=HEIGHT_WINDOW/10,h={font:(i/1.5).toString()+"px stencil",fill:"#e2e2e2"};this.add.text(e-s,t-i,selectWord("ATTACK","ATTAQUE"),h).setOrigin(.5,.5),this.add.text(e,t-i,selectWord("MOVE","DEPLACEMENT"),h).setOrigin(.5,.5),this.add.text(e+s,t-i,selectWord("CONDITION","CONDITION"),h).setOrigin(.5,.5);let a=this.add.sprite(e-s,t+i,"attack").setOrigin(.5,.5).setInteractive().on("pointerdown",()=>this.click("attack"));a.displayHeight=2*i,a.scaleX=a.scaleY,(a=this.add.sprite(e,t+i,"move").setOrigin(.5,.5).setInteractive().on("pointerdown",()=>this.click("move"))).displayHeight=2*i,a.scaleX=a.scaleY,(a=this.add.sprite(e+s,t+i,"condition").setOrigin(.5,.5).setInteractive().on("pointerdown",()=>this.click("condition"))).displayHeight=2*i,a.scaleX=a.scaleY}click(e){switch(e.toString()){case"attack":this.father.scene.add("AddNode",new AddAttack(this.father,this.gameR,this.selected));break;case"move":this.father.scene.add("AddNode",new AddMove(this.father,this.gameR,this.selected));break;case"condition":this.father.scene.add("AddNode",new AddCondition(this.father,this.gameR,this.selected))}this.scene.launch("AddNode"),this.scene.stop("PlusNode"),this.father.scene.remove("PlusNode")}createButton(){let e=WIDTH_WINDOW/2,t=HEIGHT_WINDOW-100,s=this.add.image(e,t,"cancel").setOrigin(.5,.5).setInteractive();s.on("pointerover",()=>s.setFrame(1)),s.on("pointerout",()=>s.setFrame(0)),s.on("pointerdown",()=>this.cancel()),s.displayHeight=HEIGHT_WINDOW/10,s.scaleX=s.scaleY}cancel(){this.scene.resume("Game"),this.scene.stop("PlusNode"),this.father.scene.remove("PlusNode")}}class RectangleNode{constructor(e,t,s,i,h=[]){switch(i.toString().toLowerCase()){case"attack":this.rect=new Phaser.GameObjects.Image(s,e,t,"attackNode"),this.node=new Attack(h[0]),this.canAddNode=!1,this.line=s.add.graphics();break;case"move":this.rect=new Phaser.GameObjects.Image(s,e,t,"moveNode"),this.node=new Move(h[0],h[1]),this.canAddNode=!1,this.line=s.add.graphics();break;case"condition":this.rect=new Phaser.GameObjects.Image(s,e,t,"conditionNode"),this.node=new Condition(h[0],h[1],h[2],h[3],h[4]),this.canAddNode=!0,this.lRect=[],this.scene=s,this.line=s.add.graphics();break;case"waria":this.rect=new Phaser.GameObjects.Image(s,e,t,"logoWaria").setInteractive(),this.canAddNode=!0,this.lRect=[],this.scene=s,this.scene.add.existing(this.rect),this.scene.input.setDraggable(this.rect);break;default:return void console.log("Création d'un node echoué")}"waria"!==i.toString().toLowerCase()&&this.rect.setFrame(this.node.getFrame()),this.option=h,this.type=i,this.rect.on("pointerdown",()=>this.click()),this.rect.setOrigin(.5,0),this.rect.displayHeight=HEIGHT_WINDOW/6,this.rect.scaleX=this.rect.scaleY}getSelected(){if(this.rect.isTinted)return this;if(this.canAddNode)for(let e=0;ee+=t+","),e=endLineJson(e)+"],",this.canAddNode&&(e+='"lRect":[',this.lRect.forEach(t=>e+=t.getJson()+","),e=endLineJson(e)+"]"),e=endLineJson(e),e+="}"}setLine(e,t){this.xOrigin=e,this.yOrigin=t,this.updateLine(!0)}updateLine(e=!1){!0!==e&&this.xLine===this.rect.x&&this.yLine===this.rect.y||void 0===this.line||(this.xLine=this.rect.x,this.yLine=this.rect.y,this.line.clear(),this.line.lineStyle(10,16777215,1),this.line.lineBetween(this.xOrigin,this.yOrigin,this.rect.x,this.rect.y+this.rect.displayHeight/10)),!0===this.canAddNode&&this.lRect.forEach(e=>this.addLine(e))}addLine(e){e.setLine(this.rect.x,this.rect.y+.9*this.rect.displayHeight)}getNode(){if(void 0===this.node){let e=[];return this.lRect.forEach(function(t){e.push(t.getNode())}),e}return this.canAddNode&&(this.node.clearNodes(),this.lRect.forEach(e=>this.node.addNode(e.getNode()))),this.node}sort(e){this.canAddNode&&(this.lRect.sort(e),this.lRect.forEach(function(t){t.canAddNode&&t.sort(e)}))}destroy(){this.line.destroy(),this.rect.destroy(),void 0!==this.lRect&&this.lRect.forEach(e=>e.destroy())}delete(e){let t=this.lRect.indexOf(e);if(-1!==t)return this.lRect.splice(t,1),e.destroy(),!0;for(let t=0;tthis.click())}click(){null===this.circleRange?this.drawRange():this.eraseRange()}addShield(e){this.shield.increase(e)}setX(e){this.x=e,this.circle.setX(this.x),this.life.setX(this.x),this.shield.setX(this.x),this.drawCircleRange()}setY(e){this.y=e,this.life.setY(this.y-this.width),this.shield.setY(this.y-1.5*this.width),this.circle.setY(this.y),this.drawCircleRange()}setTarget(e){this.target=e}updateTarget(){this.verifyTarget()&&this.setTargetPos(this.target.x,this.target.y)}setTargetPos(e,t){}setDamage(e=this.damage){this.damage=e+DAMAGE_BASE}setRange(e=this.range){this.range=e+RANGE_BASE,this.drawCircleRange()}setSpeed(e=this.speed){this.speed=e+SPEED_BASE}setSpeedReload(e=this.speedReload){this.speedReload=e+SPEED_RELOAD_BASE}increaseSpeedBonus(e){this.speedBonus+=e}decreaseSpeedBonus(e){this.speedBonus-=e,console.log(this.speed)}advanceToTarget(){return this.verifyTarget()&&this.advanceTo(this.target),!1}advanceTo(e){if(e.x!==this.x||e.y!==this.y){let t=!1,s=!1,i=this.getVelocity(e),h=i[0]+this.x,a=i[1]+this.y;return i[0]>=0&&h>=e.x||i[0]<=0&&h<=e.x?(this.setX(e.x),t=!0):this.setX(this.x+i[0]),i[1]>=0&&a>=e.y||i[1]<=0&&a<=e.y?(this.setY(e.y),s=!0):this.setY(this.y+i[1]),!(t&&s)}return!1}fleeFromTarget(){return!!this.verifyTarget()&&this.fleeFrom(this.target)}fleeFrom(e){if(this.target.x!==this.x||this.target.y!==this.y){let t=this.getVelocity(e,!0);return t[0]>=0&&this.x-this.width/2<=0?this.setX(this.width/2):t[0]<=0&&this.x+this.width/2>=WIDTH_MAP?this.setX(WIDTH_MAP-this.width/2):this.setX(this.x-t[0]),t[1]>=0&&this.y-this.width/2<=0?this.setY(this.height/2):t[1]<=0&&this.y+this.width/2>=WIDTH_MAP?this.setY(WIDTH_MAP-this.height/2):this.setY(this.y-t[1]),!0}return!1}getVelocity(e,t=!1){let s=[],i=e.x-this.x,h=e.y-this.y,a=Math.hypot(i,h);return s[0]=i/a*SPEED*this.speed*this.speedBonus*SPEED_GAME,s[1]=h/a*SPEED*this.speed*this.speedBonus*SPEED_GAME,t&&(this.x+this.width/2+s[0]>WIDTH_MAP||this.x-this.width/2-s[0]<0?(s[1]+=s[0]*Math.sign(s[1]),s[0]=0):(this.y+this.width/2-s[1]>WIDTH_MAP||this.y-this.width/2+s[1]<0)&&(s[0]+=s[1]*Math.sign(-s[0]),s[1]=0)),s}attackTarget(e=0){return!!this.verifyTarget()&&(this.canAttack&&this.attack(this.target,e),!0)}verifyTarget(){return!!this.haveTarget()&&(!!this.target.isAlive()||(this.setTarget(null),!1))}attack(e,t){this.canAttack=!1,this.missile.setPosition(this.x,this.y).setVisible(!0),this.missile.setRotation(Math.atan2(this.y-this.target.y,this.x-this.target.x)-1.57),this.scene.sound.play("shot");let s=this.calcDistance(this.target)*WIDTH_MAP/1e3/SPEED_GAME;this.scene.tweens.add({targets:this.missile,x:e.x,y:e.y,ease:"Linear",duration:s,onComplete:()=>this.finishAttack(e,t)}),this.scene.time.addEvent({delay:SPEED_RELOAD/this.speedReload/SPEED_GAME,callback:this.reload,callbackScope:this})}finishAttack(e,t){e.beAttack(this.damage*DAMAGE*t)&&this.setTarget(null),this.missile.setVisible(!1)}reload(){this.canAttack=!0}beAttack(e){let t=this.shield.decrease(e),s={font:HEIGHT_DAMAGE.toString()+"px stencil",fill:"#ffff00"},i=this.scene.add.text(this.x,this.y,e.toString(),s).setOrigin(0,1);return this.scene.tweens.add({targets:i,x:this.x+30,y:this.y-50,alpha:0,duration:DURATION_DAMAGE,ease:"Sine.easeOut",onComplete:()=>i.destroy()}),this.scene.sound.play("hit"),console.log("HIT"),t>0&&(console.log("Shield Broken"),this.life.decrease(t)),this.die()}isTargetInRange(e=1){return!!this.haveTarget()&&this.calcDistance(this.target)<=this.range*RANGE*e}calcDistance(e){return Math.hypot(e.x-this.x,e.y-this.y)}isAlive(){return this.life.value>0}die(){return 0===this.life.value&&(null!==this.circleRange&&this.circleRange.destroy(),this.circle.destroy(),this.shield.destroy(),this.life.destroy(),!0)}haveTarget(){return null!=this.target}read(){for(let e=0;ee.setFrame(0)),e.on("pointerover",()=>e.setFrame(1)),e.on("pointerdown",()=>this.clickPlay(e))}clickPlay(e){newGame(this.father),this.scene.start("Game")}}var listBonus=[],LANG=navigator.language.substr(0,2).toLowerCase(),SPEED_GAME=1;const MYSELF="myself",SHIELD_PER_SECOND=5,COLOR_ATTACK=16711680,COLOR_MOVE=255,COLOR_CONDITION=921102,COLOR_RED=16711680,COLOR_ORANGE=16744192,COLOR_GREEN=32768,COLOR_RANGE=32768,COLOR_SPEED_RELOAD=8323327,COLOR_MYSELF=6711039,WIDTH_WINDOW=$(document).width()-20,HEIGHT_WINDOW=$(document).height()-20,WIDTH_MAP=WIDTH_WINDOWthis.click(h,i,a)),h}createButton(t,e,s,i=this.heightButton,a=null){let h=this.add.image(t,e,s).setOrigin(.5,.5).setInteractive();return h.on("pointerover",()=>h.setFrame(1)),h.on("pointerout",()=>h.setFrame(0)),h.displayHeight=i,null===a?h.scaleX=h.scaleY:h.displayWidth=a,h}click(t,e,s){t.isTinted?e.remove(t):e.add(t,s)}newCategory(t,e,s){let i=new Category(t,e,s);return this.lCategory.push(i),i}addTitle(t,e,s){this.add.text(t,e,s,this.style).setOrigin(.5,.5)}createButtonCancel(){this.createButton(WIDTH_WINDOW/3,HEIGHT_WINDOW/(16/15),"cancel",HEIGHT_WINDOW/9).on("pointerdown",()=>this.cancel())}createButtonAdd(t){this.createButton(WIDTH_WINDOW/1.5,HEIGHT_WINDOW/(16/15),"add",HEIGHT_WINDOW/9).on("pointerdown",()=>t.addNode())}verifyCategory(){for(let t=0;ts.setFrame(1)),s.on("pointerout",()=>s.setFrame(0)),s.displayHeight=HEIGHT_WINDOW/9,s.scaleX=s.scaleY,s}btnRetry(t){t.on("pointerdown",()=>this.retry())}retry(){console.log("RETRY"),this.close(),newGame(this.father),this.father.scene.start("Game")}btnHome(t){t.on("pointerdown",()=>this.home())}home(){console.log("HOME"),this.close(),this.father.scene.start("Type")}btnNext(t){t.on("pointerdown",()=>this.next())}next(){console.log("NEXT")}close(){this.sound.stopAll(),this.father.scene.remove("GamingBoard"),this.father.scene.remove("Game"),this.father.scene.remove("Finish")}}class HealthBar{constructor(t,e,s,i,a,h,r,n=COLOR_RED,l=!0){this.bar=new Phaser.GameObjects.Graphics(t),this.width=Math.floor(e),this.height=Math.floor(s),this.valueMax=h,this.value=h,this.color=r,this.colorMin=n,this.draw(),this.setX(i,l),this.setY(a),t.add.existing(this.bar)}setValue(t){t<0&&(t=0),t>this.valueMax&&(t=this.valueMax),t!==this.value&&(this.value=t,this.draw())}decrease(t){this.value-=t;let e=0;return this.value<0&&(e=-this.value,this.value=0),this.draw(),e}getBar(){return this.bar}increase(t){this.value+=t,this.value>this.valueMax&&(this.value=this.valueMax),this.draw()}setX(t,e=!0){e?this.bar.setX(t-this.width/2):this.bar.setX(t)}setY(t){this.bar.setY(t)}draw(){this.bar.clear(),this.bar.fillStyle(0),this.bar.fillRect(0,0,this.width,this.height),this.bar.fillStyle(16777215),this.bar.fillRect(2,2,this.width-4,this.height-4);let t=this.value/this.valueMax;t<1/3?this.bar.fillStyle(this.colorMin):this.bar.fillStyle(this.color);let e=Math.floor(t*(this.width-4));this.bar.fillRect(2,2,e,this.height-4)}destroy(){this.bar.destroy()}}class ManageLang extends Phaser.Scene{constructor(t,e){super(t),this.name=t,this.father=e,this.otherScenes=[]}addOtherScenes(t){this.otherScenes.push(t)}create(){this.createFlags()}createFlags(){this.diffXFlag=0,this.createFlag("fr"),this.createFlag("en")}createFlag(t){let e=this.add.image(WIDTH_WINDOW-10-this.diffXFlag,10,t).setOrigin(1,0).setInteractive();e.displayHeight=40,e.scaleX=e.scaleY,this.diffXFlag=this.diffXFlag+e.displayWidth+10,e.on("pointerdown",()=>this.setLang(t))}setLang(t){t!==LANG&&(LANG=t,this.father.scene.add("LoadFile",new LoadFile(this.father,this.name)),this.father.scene.start("LoadFile"),this.otherScenes.forEach(t=>this.father.scene.stop(t)))}} \ No newline at end of file +class AddNode extends Phaser.Scene{constructor(t,e,s,i=[]){super("AddNode"),this.father=t,this.gameR=e,this.selected=s,this.lCategory=[];let a=HEIGHT_WINDOW/14;this.style={font:a.toString()+"px stencil",fill:"#e2e2e2"},this.heightButton=HEIGHT_WINDOW/8,this.lastCategory=null,this.option=i}create(){let t=HEIGHT_WINDOW/(4/3);this.add.rectangle(0,0,WIDTH_WINDOW,HEIGHT_WINDOW,0).setOrigin(0,0).setAlpha(.5),this.add.rectangle(0,HEIGHT_WINDOW/2,WIDTH_WINDOW,t,3487290).setOrigin(0,.5),this.createButtonCancel(),this.option.length>0?this.createButtonModify():this.createButtonAdd()}addButton(t,e,s,i=new Category,a){let h=this.createButton(t,e,s);return h.on("pointerdown",()=>this.click(h,i,a)),i!==this.lastCategory&&this.option.length>0&&this.option[0]===a&&(this.option.splice(0,1),this.lastCategory=i,this.click(h,i,a)),h}createButton(t,e,s,i=this.heightButton,a=null){let h=this.add.image(t,e,s).setOrigin(.5,.5).setInteractive();return h.on("pointerover",()=>h.setFrame(1)),h.on("pointerout",()=>h.setFrame(0)),h.displayHeight=i,null===a?h.scaleX=h.scaleY:h.displayWidth=a,h}click(t,e,s){t.isTinted?e.remove(t):e.add(t,s)}newCategory(t,e,s){let i=new Category(t,e,s);return this.lCategory.push(i),i}addTitle(t,e,s){this.add.text(t,e,s,this.style).setOrigin(.5,.5)}createButtonCancel(){this.createButton(WIDTH_WINDOW/3,HEIGHT_WINDOW/(16/15),"cancel",HEIGHT_WINDOW/9).on("pointerdown",()=>this.cancel())}createButtonAdd(){this.createButton(WIDTH_WINDOW/1.5,HEIGHT_WINDOW/(16/15),"add",HEIGHT_WINDOW/9).on("pointerdown",()=>this.addNode())}createButtonModify(){this.createButton(WIDTH_WINDOW/1.5,HEIGHT_WINDOW/(16/15),"modify",HEIGHT_WINDOW/9).on("pointerdown",()=>this.modifyNode())}verifyCategory(){for(let t=0;ts.setFrame(1)),s.on("pointerout",()=>s.setFrame(0)),s.displayHeight=HEIGHT_WINDOW/9,s.scaleX=s.scaleY,s}btnRetry(t){t.on("pointerdown",()=>this.retry())}retry(){this.close(),console.log("RETRY"),-1===this.father.scene.getIndex("Game")&&newGame(this.father),this.father.scene.start("Game")}btnHome(t){t.on("pointerdown",()=>this.home())}home(){console.log("HOME"),this.close(),this.father.scene.remove("Game"),this.father.scene.start("Type")}btnNext(t){t.on("pointerdown",()=>this.next())}next(){console.log("NEXT")}close(){this.sound.stopAll(),this.father.scene.remove("GamingBoard"),this.father.scene.remove("Finish")}}class HealthBar{constructor(t,e="",s,i,a,h,r,n,o=COLOR_RED,l=!0){this.bar=new Phaser.GameObjects.Graphics(t),this.width=Math.floor(s),this.height=Math.floor(i),this.valueMax=r,this.value=r,this.color=n,this.colorMin=o,this.draw(),t.add.existing(this.bar);let c={font:(i-=4).toString()+"px stencil",fill:"#000000"};this.nameText=t.add.text(a,h,e,c).setOrigin(0,0),this.nameText.alpha=.5,this.setX(a,l),this.setY(h)}setValue(t){t<0&&(t=0),t>this.valueMax&&(t=this.valueMax),t!==this.value&&(this.value=t,this.draw())}decrease(t){this.value-=t;let e=0;return this.value<0&&(e=-this.value,this.value=0),this.draw(),e}getBar(){return this.bar}increase(t){this.value+=t,this.value>this.valueMax&&(this.value=this.valueMax),this.draw()}setX(t,e=!0){e&&(t-=this.width/2),this.bar.setX(t),this.nameText.setX(t+5)}setY(t){this.bar.setY(t),this.nameText.setY(t)}draw(){this.bar.clear(),this.bar.fillStyle(0),this.bar.fillRect(0,0,this.width,this.height),this.bar.fillStyle(16777215),this.bar.fillRect(2,2,this.width-4,this.height-4);let t=this.value/this.valueMax;t<1/3?this.bar.fillStyle(this.colorMin):this.bar.fillStyle(this.color);let e=Math.floor(t*(this.width-4));this.bar.fillRect(2,2,e,this.height-4)}destroy(){this.bar.destroy(),this.nameText.destroy()}getJson(){let t="{";return t+=toJson("value",this.value)+toJson("valueMax",this.valueMax)+toJson("color",this.color)+toJson("colorMin",this.colorMin),t=endLineJson(t),t+="}"}}class ManageLang extends Phaser.Scene{constructor(t,e){super(t),this.name=t,this.father=e,this.otherScenes=[]}addOtherScenes(t){this.otherScenes.push(t)}create(){this.createFlags()}createFlags(){this.diffXFlag=0,this.createFlag("fr"),this.createFlag("en")}createFlag(t){let e=this.add.image(WIDTH_WINDOW-10-this.diffXFlag,10,t).setOrigin(1,0).setInteractive();e.displayHeight=40,e.scaleX=e.scaleY,this.diffXFlag=this.diffXFlag+e.displayWidth+10,e.on("pointerdown",()=>this.setLang(t))}setLang(t){t!==LANG&&(LANG=t,this.father.scene.add("LoadFile",new LoadFile(this.father,this.name)),this.father.scene.start("LoadFile"),this.otherScenes.forEach(t=>this.father.scene.stop(t)))}} \ No newline at end of file diff --git a/Code/src/js/level2/AddAttack.js b/Code/src/js/level2/AddAttack.js index 45e960d..04703df 100644 --- a/Code/src/js/level2/AddAttack.js +++ b/Code/src/js/level2/AddAttack.js @@ -1,11 +1,11 @@ class AddAttack extends AddNode { - constructor(father, game, selected) { - super(father, game, selected); + constructor(father, game, selected, ...option) { + super(father, game, selected, option); } create() { console.log("ATTACK"); - super.create(this); + super.create(); super.addTitle(WIDTH_WINDOW / 2, HEIGHT_WINDOW / 16, selectWord("ADD NODE : ATTACK", "AJOUTER ACTION : ATTAQUE")); super.addTitle(WIDTH_WINDOW / 2, HEIGHT_WINDOW / (16 / 3), selectWord("WHO ?", "QUI ?")); super.addTitle(WIDTH_WINDOW / 2, HEIGHT_WINDOW / (16 / 7), selectWord("TARGET FILTERS (OPTIONAL)", "FILTRES CIBLES (FACULTATIF)")); @@ -19,9 +19,16 @@ class AddAttack extends AddNode { addNode() { if (super.verifyCategory()) { - this.selected.addRect(new RectangleNode(this.selected.getX(), this.selected.getY() + 200, this.gameR, 'attack', this.lCategory[1].getValue())); + this.selected.addRect(new RectangleNode(this.selected.getX(), this.selected.getY() + 200, this.gameR, 'attack', [this.lCategory[1].getValue()])); super.cancel(); } } + modifyNode() { + if (super.verifyCategory()) { + this.selected.node.percentRange = this.lCategory[1].getValue(); + this.selected.rect.setFrame(this.selected.node.getFrame()); + super.cancel(); + } + } } \ No newline at end of file diff --git a/Code/src/js/level2/AddCondition.js b/Code/src/js/level2/AddCondition.js index edbea5d..9af1d5f 100644 --- a/Code/src/js/level2/AddCondition.js +++ b/Code/src/js/level2/AddCondition.js @@ -1,10 +1,10 @@ class AddCondition extends AddNode { - constructor(father, game, selected) { - super(father, game, selected); + constructor(father, game, selected, ...option) { + super(father, game, selected, option); } create() { - super.create(this); + super.create(); console.log("CONDITION"); super.addTitle(WIDTH_WINDOW / 2, HEIGHT_WINDOW / 16, selectWord("ADD NODE : CONDITION", "AJOUTER ACTION : CONDITION")); super.addTitle(WIDTH_WINDOW / 2, HEIGHT_WINDOW / (16 / 3), selectWord("WHO ?", "QUI ?")); @@ -21,9 +21,17 @@ class AddCondition extends AddNode { addNode() { if (super.verifyCategory()) { - this.selected.addRect(new RectangleNode(this.selected.getX(), this.selected.getY() + 200, this.gameR, 'condition', this.lCategory[0].getValue(), true, false, this.lCategory[1].getValue(), 0)); + this.selected.addRect(new RectangleNode(this.selected.getX(), this.selected.getY() + 200, this.gameR, 'condition', [this.lCategory[0].getValue(), true, false, this.lCategory[1].getValue(), 0])); super.cancel(); } } + modifyNode() { + if (super.verifyCategory()) { + this.selected.node.myself = this.lCategory[0].getValue(); + this.selected.node.shield = this.lCategory[1].getValue(); + this.selected.rect.setFrame(this.selected.node.getFrame()); + super.cancel(); + } + } } \ No newline at end of file diff --git a/Code/src/js/level2/AddMove.js b/Code/src/js/level2/AddMove.js index f851471..fba7c55 100644 --- a/Code/src/js/level2/AddMove.js +++ b/Code/src/js/level2/AddMove.js @@ -1,11 +1,11 @@ class AddMove extends AddNode { - constructor(father, game, selected) { - super(father, game, selected); + constructor(father, game, selected, ...option) { + super(father, game, selected, option); } create() { console.log("MOVE"); - super.create(this); + super.create(); super.addTitle(WIDTH_WINDOW / 2, HEIGHT_WINDOW / 16, selectWord("ADD NODE : MOVE", "AJOUTER ACTION : DEPLACEMENT")); super.addTitle(WIDTH_WINDOW / 4, HEIGHT_WINDOW / (16 / 3), selectWord("FLEE OR MOVE ?", "RECULER OU AVANCER ?")); let c1 = super.newCategory('direction', true, true); @@ -19,7 +19,16 @@ class AddMove extends AddNode { addNode() { if (super.verifyCategory()) { - this.selected.addRect(new RectangleNode(this.selected.getX(), this.selected.getY() + 200, this.gameR, 'move', this.lCategory[0].getValue(), this.lCategory[1].getValue())); + this.selected.addRect(new RectangleNode(this.selected.getX(), this.selected.getY() + 200, this.gameR, 'move', [this.lCategory[0].getValue(), this.lCategory[1].getValue()])); + super.cancel(); + } + } + + modifyNode() { + if (super.verifyCategory()) { + this.selected.node.toward = this.lCategory[0].getValue(); + this.selected.node.enemyBot = this.lCategory[1].getValue(); + this.selected.rect.setFrame(this.selected.node.getFrame()); super.cancel(); } } diff --git a/Code/src/js/level2/Bar.js b/Code/src/js/level2/Bar.js index c3e2356..d230e55 100644 --- a/Code/src/js/level2/Bar.js +++ b/Code/src/js/level2/Bar.js @@ -1,9 +1,9 @@ class Bar extends HealthBar { constructor(scene, name = "", width, height, x, y, color, categoryBar = new CategoryBar(), value = 1, valueMax) { if (valueMax !== undefined) { - super(scene, width, height, x, y, valueMax, color, color, false); + super(scene, name, width, height, x, y, valueMax, color, color, false); } else { - super(scene, width, height, x, y, categoryBar.valueMax, color, color, false); + super(scene, name, width, height, x, y, categoryBar.valueMax, color, color, false); } this.name = name; this.scene = scene; @@ -11,9 +11,6 @@ class Bar extends HealthBar { let style = {font: height.toString() + 'px stencil', fill: "#e2e2e2"}; this.text = this.scene.add.text(this.bar.x + this.width + 10, this.bar.y, this.value.toString(), style).setOrigin(0, 0); - style = {font: height.toString() + 'px stencil', fill: "#000000"}; - let nameText = this.scene.add.text(x + 5, y, this.name, style).setOrigin(0, 0); - nameText.alpha = 0.5; this.categoryBar = categoryBar; this.setValue(0); this.categoryBar.setValueOf(this, value); @@ -52,7 +49,7 @@ class Bar extends HealthBar { this.bar.fillStyle(0x969696); this.bar.fillRect(posX, 0, 10, this.height); if (this.text !== undefined) { - this.text.setText(this.value); + this.text.setText(this.value + 1); } } } \ No newline at end of file diff --git a/Code/src/js/level2/CategoryBar.js b/Code/src/js/level2/CategoryBar.js index 666aab1..aa22c61 100644 --- a/Code/src/js/level2/CategoryBar.js +++ b/Code/src/js/level2/CategoryBar.js @@ -1,12 +1,8 @@ class CategoryBar { - constructor(scene, text, posX, posY, height, valueMax = VALUE_MAX_BAR, startValue = 1) { + constructor(valueMax = VALUE_MAX_BAR, startValue = 1) { this.startValue = startValue; this.valueMax = valueMax; this.point = this.valueMax; - this.text = text; - let style = {font: height.toString() + 'px stencil', fill: "#e2e2e2"}; - this.textScene = scene.add.text(posX, posY, this.text, style).setOrigin(0, 0); - this.draw(); } addPoint(point) { @@ -34,7 +30,24 @@ class CategoryBar { this.draw(); } - draw(){ + addText(scene, text, posX, posY, height) { + this.text = text; + let style = {font: height.toString() + 'px stencil', fill: "#e2e2e2"}; + this.textScene = scene.add.text(posX, posY, this.text, style).setOrigin(0, 0); + this.draw(); + } + + setTextPos(posX, posY) { + this.textScene.setX(posX); + this.textScene.setY(posY); + } + + setText(text) { + this.text = text; + this.draw(); + } + + draw() { this.textScene.setText(this.text + this.point); } } \ No newline at end of file diff --git a/Code/src/js/level2/Function.js b/Code/src/js/level2/Function.js index 71e59b7..694344a 100644 --- a/Code/src/js/level2/Function.js +++ b/Code/src/js/level2/Function.js @@ -7,11 +7,11 @@ function selectWord(en, fr) { } } -function newGame(father) { +function newGame(father, game = new Game(father)) { if (father.scene.getIndex('Game') !== -1) { father.scene.remove('Game'); } - father.scene.add('Game', new Game(father)); + father.scene.add('Game', game); } function chooseTarget(robot, list) { @@ -34,4 +34,29 @@ function chooseTarget(robot, list) { } else { return l[0]; } +} + +function toJson(name, value, end = false) { + let val; + switch (typeof value) { + case "string": + val = '"' + name.toString() + '":"' + value + '"'; + break; + default: + //console.log(typeof value); + val = '"' + name.toString() + '":' + value; + break; + } + if (!end) + val += ',' + return val; +} + +function endLineJson(json) { + if (json.length > 0) { + if (json[json.length - 1] === ",") { + json = json.substr(0, json.length - 1); + } + } + return json; } \ No newline at end of file diff --git a/Code/src/js/level2/Game.js b/Code/src/js/level2/Game.js index fd6be70..1c1f023 100644 --- a/Code/src/js/level2/Game.js +++ b/Code/src/js/level2/Game.js @@ -26,11 +26,6 @@ class Game extends ManageLang { let width = 200; let height = 30; - let c1 = new CategoryBar(this, selectWord("TOKEN : ", "JETON : "), OFFX_MAP + WIDTH_MAP + 5, OFFY_MAP + height * 6, height, 10); - this.damageRobot = new Bar(this, selectWord("DAMAGE", "DEGAT"), width, height, OFFX_MAP + WIDTH_MAP + 5, OFFY_MAP, COLOR_ATTACK, c1, DAMAGE_BEGIN, 5); - this.speedReloadRobot = new Bar(this, selectWord("R.S", "V.R."), width, height, OFFX_MAP + WIDTH_MAP + 5, OFFY_MAP + height * 1.5, COLOR_SPEED_RELOAD, c1, SPEED_RELOAD_BEGIN, 5); - this.speedRobot = new Bar(this, selectWord("SPEED", "VITESSE"), width, height, OFFX_MAP + WIDTH_MAP + 5, OFFY_MAP + height * 3, COLOR_MOVE, c1, SPEED_BEGIN, 5); - this.rangeRobot = new Bar(this, selectWord("RANGE", "PORTEE"), width, height, OFFX_MAP + WIDTH_MAP + 5, OFFY_MAP + height * 4.5, COLOR_RANGE, c1, RANGE_BEGIN, 5); this.createButton(); @@ -38,21 +33,31 @@ class Game extends ManageLang { let diffX = WIDTH_WINDOW / 10; if (this.tree === undefined) { + this.initStat = new InitStat(this, OFFX_MAP + WIDTH_MAP + 5, OFFY_MAP, width, height, 10); + this.initStat.addBar(DAMAGE_BEGIN, 5, COLOR_ATTACK, ["DAMAGE", "DEGATS"]); + this.initStat.addBar(SPEED_RELOAD_BEGIN, 5, COLOR_SPEED_RELOAD, ["R.S", "RECHARGEMENT"]); + this.initStat.addBar(SPEED_BEGIN, 5, COLOR_MOVE, ["SPEED", "VITESSE"]); + this.initStat.addBar(RANGE_BEGIN, 5, COLOR_RANGE, ["RANGE", "PORTEE"]); + this.tree = new RectangleNode(centerX, HEIGHT_WINDOW / 10, this, 'waria'); - this.tree.addRect(new RectangleNode(centerX - 2 * diffX, HEIGHT_WINDOW / 3, this, 'move', true, false)); - this.tree.addRect(new RectangleNode(centerX + diffX, HEIGHT_WINDOW / 3, this, 'move', true)); - this.tree.addRect(new RectangleNode(centerX, HEIGHT_WINDOW / 3, this, 'attack', 1 / 3)); + this.tree.addRect(new RectangleNode(centerX - 2 * diffX, HEIGHT_WINDOW / 3, this, 'move', [true, false])); + this.tree.addRect(new RectangleNode(centerX + diffX, HEIGHT_WINDOW / 3, this, 'move', [true])); + this.tree.addRect(new RectangleNode(centerX, HEIGHT_WINDOW / 3, this, 'attack', [1 / 3])); - let condition = new RectangleNode(centerX - diffX, HEIGHT_WINDOW / 3, this, 'condition', true, true, false, 1 / 3, 0); + let condition = new RectangleNode(centerX - diffX, HEIGHT_WINDOW / 3, this, 'condition', [true, true, false, 1 / 3, 0]); this.tree.addRect(condition); - condition.addRect(new RectangleNode(centerX, HEIGHT_WINDOW / 1.5, this, 'move', false)); - condition.addRect(new RectangleNode(centerX - diffX, HEIGHT_WINDOW / 1.5, this, 'attack')) + condition.addRect(new RectangleNode(centerX, HEIGHT_WINDOW / 1.5, this, 'move', [false])); + condition.addRect(new RectangleNode(centerX - diffX, HEIGHT_WINDOW / 1.5, this, 'attack', [1])) } else { - let save = this.tree.save(); - save = JSON.parse(save); - this.loadSave(save); + let tree = this.tree.getJson(); + tree = JSON.parse(tree); + + let initStat = this.initStat.getJson(); + initStat = JSON.parse(initStat); + + this.loadSave(tree, initStat); } @@ -73,8 +78,9 @@ class Game extends ManageLang { } - loadSave(save) { - this.tree = this.loadTree(save); + loadSave(tree, initStat) { + this.initStat = this.loadInitSave(initStat); + this.tree = this.loadTree(tree); } loadTree(element) { @@ -85,13 +91,24 @@ class Game extends ManageLang { return tree; } + loadInitSave(element) { + let width = 200; + let height = 30; + let initStat = new InitStat(this, OFFX_MAP + WIDTH_MAP + 5, OFFY_MAP, width, height, 10); + + for (let i = 0; i < element.lBar.length; i++) { + initStat.addBar(element.lBar[i].value, element.lBar[i].valueMax, element.lBar[i].color, element.lText[i]); + } + return initStat; + } + finish() { console.log("FINISH"); let winner; if (this.gm.winner()) { - winner = new Winner(this.father); + winner = new Winner(this.father, this); } else { - winner = new Looser(this.father); + winner = new Looser(this.father, this); } this.father.scene.add('Finish', winner); @@ -150,7 +167,7 @@ class Game extends ManageLang { let sortDesc = (a, b) => a.getX() - b.getX(); this.tree.sort(sortDesc); this.gm.modifyNodes(this.tree.getNode()); - this.gm.modifyValue(this.speedRobot.value, this.rangeRobot.value, this.speedReloadRobot.value, this.damageRobot.value); + this.gm.modifyValue(this.initStat.lBar[0].value, this.initStat.lBar[1].value, this.initStat.lBar[2].value, this.initStat.lBar[3].value); this.gm.resume(); } @@ -253,9 +270,23 @@ class Game extends ManageLang { clickPencil() { console.log("PENCIL"); - - this.changeFrame(this.pencil, 0); + switch (this.selected.type) { + case 'attack': + this.father.scene.add('AddNode', new AddAttack(this.father, this, this.selected, false, this.selected.node.percentRange)) + break; + case 'move': + this.father.scene.add('AddNode', new AddMove(this.father, this, this.selected, this.selected.node.toward, this.selected.node.enemyBot)) + break; + case 'condition': + this.father.scene.add('AddNode', new AddCondition(this.father, this, this.selected, this.selected.node.myself, this.selected.node.shield)) + break; + default: + return; + } + this.scene.pause('Game'); + this.scene.launch('AddNode'); + } clickBin() { diff --git a/Code/src/js/level2/GamingBoard.js b/Code/src/js/level2/GamingBoard.js index 30b0dee..b1723e1 100644 --- a/Code/src/js/level2/GamingBoard.js +++ b/Code/src/js/level2/GamingBoard.js @@ -30,7 +30,6 @@ class GamingBoard extends Phaser.Scene { update(time, delta) { super.update(time, delta); - console.log(delta); this.listRobot.forEach(function (robot) { robot.read(); }) @@ -85,7 +84,7 @@ class GamingBoard extends Phaser.Scene { return false; } - modifyValue(speed, range, speedReload, damage) { + modifyValue(damage, speedReload, speed, range) { let myRobot = this.getMyRobot(); if (myRobot !== undefined) { myRobot.setSpeed(speed); diff --git a/Code/src/js/level2/InitStat.js b/Code/src/js/level2/InitStat.js new file mode 100644 index 0000000..1d571ca --- /dev/null +++ b/Code/src/js/level2/InitStat.js @@ -0,0 +1,40 @@ +class InitStat { + constructor(scene, posX, posY, width, height, valueMax) { + this.scene = scene; + this.posX = posX; + this.posY = posY; + this.width = width; + this.height = height; + this.category = new CategoryBar(valueMax); + this.lBar = []; + this.lText = []; + this.category.addText(this.scene, selectWord("TOKENS : ", "JETONS : "), this.posX, this.posY, this.height); + } + + addBar(value, valueMax, color, text) { + this.lText.push(text); + this.lBar.push(new Bar(this.scene, selectWord(text[0], text[1]), this.width, this.height, this.posX, this.posY, color, this.category, value, valueMax)); + this.posY += this.height * 1.5; + this.category.setTextPos(this.posX, this.posY); + } + + getJson() { + let json = '{'; + json += '"lBar":['; + this.lBar.forEach(bar => json += bar.getJson() + ','); + json = endLineJson(json) + '],'; + json += '"lText":['; + this.lText.forEach(text => { + json += '['; + text.forEach(word => { + json += '"' + word + '",'; + }); + json = endLineJson(json); + json += '],'; + }); + json = endLineJson(json); + json += ']'; + json += '}'; + return json; + } +} \ No newline at end of file diff --git a/Code/src/js/level2/LoadFile.js b/Code/src/js/level2/LoadFile.js index c748f87..1933e17 100644 --- a/Code/src/js/level2/LoadFile.js +++ b/Code/src/js/level2/LoadFile.js @@ -50,6 +50,7 @@ class LoadFile extends Phaser.Scene { this.loadSprite('playLetter', 550, 150, 'buttons/'); this.loadSprite('cancel', 550, 150, 'buttons/'); this.loadSprite('add', 550, 150, 'buttons/'); + this.loadSprite('modify', 550, 150, 'buttons/'); this.loadSprite('home', 550, 150, 'buttons/'); this.loadSprite('next', 550, 150, 'buttons/'); this.loadSprite('retry', 550, 150, 'buttons/'); diff --git a/Code/src/js/level2/Looser.js b/Code/src/js/level2/Looser.js index b467af9..474aead 100644 --- a/Code/src/js/level2/Looser.js +++ b/Code/src/js/level2/Looser.js @@ -1,6 +1,6 @@ class Looser extends Finish { - constructor(father) { - super(father); + constructor(father, game) { + super(father, game); } create() { diff --git a/Code/src/js/level2/RectangleNode.js b/Code/src/js/level2/RectangleNode.js index bc825ef..e58b933 100644 --- a/Code/src/js/level2/RectangleNode.js +++ b/Code/src/js/level2/RectangleNode.js @@ -1,5 +1,5 @@ class RectangleNode { - constructor(x, y, scene, type, ...option) { + constructor(x, y, scene, type, option = []) { switch (type.toString().toLowerCase()) { case 'attack': this.rect = new Phaser.GameObjects.Image(scene, x, y, 'attackNode'); @@ -96,43 +96,19 @@ class RectangleNode { } } - toJson(name, value, end = false) { - let val; - if (typeof value === "string") { - val = '"' + name.toString() + '":"' + value + '"'; - } else { - val = '"' + name.toString() + '":' + value; - } - if (!end) - val += ',' - return val; - } - - endLineJson(json) { - if (json.length > 0) { - if (json[json.length - 1] === ",") { - json = json.substr(0, json.length - 1); - } - } - return json; - } - - - save() { + getJson() { let json = '{'; - json += this.toJson("x", this.rect.x) + this.toJson("y", this.rect.y) + this.toJson("type", this.type); + json += toJson("x", this.rect.x) + toJson("y", this.rect.y) + toJson("type", this.type); json += '"option":['; this.option.forEach(option => json += option + ','); - json = this.endLineJson(json) + '],'; + json = endLineJson(json) + '],'; if (this.canAddNode) { json += '"lRect":['; - this.lRect.forEach(rect => json += rect.save() + ','); - json = this.endLineJson(json) + ']'; + this.lRect.forEach(rect => json += rect.getJson() + ','); + json = endLineJson(json) + ']'; } - json = this.endLineJson(json); + json = endLineJson(json); json += '}'; - - console.log(json) return json; } diff --git a/Code/src/js/level2/Robot.js b/Code/src/js/level2/Robot.js index db84d3e..bbd70d2 100644 --- a/Code/src/js/level2/Robot.js +++ b/Code/src/js/level2/Robot.js @@ -10,8 +10,8 @@ class Robot { this.width = width; this.x = posX; this.y = posY; - this.life = new HealthBar(scene, this.width * 2, this.width / 3, this.x, this.y - this.width, LIFE, 0x008000); - this.shield = new HealthBar(scene, this.width * 2, this.width / 3, this.x, this.y - this.width * 1.5, SHIELD, 0x0000FF); + this.life = new HealthBar(scene, selectWord("LIFE", "VIE"), this.width * 2, this.width / 3, this.x, this.y - this.width, LIFE, 0x008000); + this.shield = new HealthBar(scene, selectWord("SHIELD", "BOUCLIER"), this.width * 2, this.width / 3, this.x, this.y - this.width * 1.5, SHIELD, 0x0000FF); this.circleRange = null; this.canAttack = true; diff --git a/Code/src/js/level2/Winner.js b/Code/src/js/level2/Winner.js index c7d885c..f22f39d 100644 --- a/Code/src/js/level2/Winner.js +++ b/Code/src/js/level2/Winner.js @@ -1,6 +1,6 @@ class Winner extends Finish { - constructor(father) { - super(father); + constructor(father, game) { + super(father, game); } create() { diff --git a/Code/src/js/level3/AddNode.js b/Code/src/js/level3/AddNode.js index acb14bf..d460a99 100644 --- a/Code/src/js/level3/AddNode.js +++ b/Code/src/js/level3/AddNode.js @@ -1,5 +1,5 @@ class AddNode extends Phaser.Scene { - constructor(father, game, selected) { + constructor(father, game, selected, option = []) { super('AddNode'); this.father = father; this.gameR = game; @@ -8,20 +8,31 @@ class AddNode extends Phaser.Scene { let sizeText = HEIGHT_WINDOW / 14; this.style = {font: sizeText.toString() + 'px stencil', fill: "#e2e2e2"}; this.heightButton = HEIGHT_WINDOW / 8; + this.lastCategory = null; + this.option = option; } - create(son) { + create() { let height = HEIGHT_WINDOW / (4 / 3); this.add.rectangle(0, 0, WIDTH_WINDOW, HEIGHT_WINDOW, 0x000000).setOrigin(0, 0).setAlpha(0.5); this.add.rectangle(0, HEIGHT_WINDOW / 2, WIDTH_WINDOW, height, 0x35363A).setOrigin(0, 0.5); this.createButtonCancel(); - this.createButtonAdd(son); + if (this.option.length > 0) { + this.createButtonModify(); + } else { + this.createButtonAdd(); + } } addButton(x, y, texture, category = new Category(), value) { let btn = this.createButton(x, y, texture); btn.on('pointerdown', () => this.click(btn, category, value)); + if (category !== this.lastCategory && this.option.length > 0 && this.option[0] === value) { + this.option.splice(0, 1); + this.lastCategory = category; + this.click(btn, category, value); + } return btn; } @@ -62,9 +73,14 @@ class AddNode extends Phaser.Scene { .on('pointerdown', () => this.cancel()); } - createButtonAdd(son) { + createButtonAdd() { this.createButton(WIDTH_WINDOW / 1.5, HEIGHT_WINDOW / (16 / 15), 'add', HEIGHT_WINDOW / 9) - .on('pointerdown', () => son.addNode()); + .on('pointerdown', () => this.addNode()); + } + + createButtonModify() { + this.createButton(WIDTH_WINDOW / 1.5, HEIGHT_WINDOW / (16 / 15), 'modify', HEIGHT_WINDOW / 9) + .on('pointerdown', () => this.modifyNode()); } verifyCategory() { diff --git a/Code/src/js/level3/Finish.js b/Code/src/js/level3/Finish.js index 2d3be98..27f6806 100644 --- a/Code/src/js/level3/Finish.js +++ b/Code/src/js/level3/Finish.js @@ -1,7 +1,8 @@ class Finish extends Phaser.Scene { - constructor(father) { + constructor(father, game) { super('Finish'); this.father = father; + this.game = game; } create() { @@ -31,9 +32,11 @@ class Finish extends Phaser.Scene { } retry() { - console.log("RETRY"); this.close(); - newGame(this.father); + console.log("RETRY"); + if (this.father.scene.getIndex('Game') === -1) { + newGame(this.father); + } this.father.scene.start('Game'); } @@ -44,6 +47,7 @@ class Finish extends Phaser.Scene { home() { console.log("HOME"); this.close(); + this.father.scene.remove('Game'); this.father.scene.start('Type'); } @@ -58,7 +62,6 @@ class Finish extends Phaser.Scene { close() { this.sound.stopAll(); this.father.scene.remove('GamingBoard'); - this.father.scene.remove('Game'); this.father.scene.remove('Finish'); } } \ No newline at end of file diff --git a/Code/src/js/level3/HealthBar.js b/Code/src/js/level3/HealthBar.js index a5d1ebb..bef4420 100644 --- a/Code/src/js/level3/HealthBar.js +++ b/Code/src/js/level3/HealthBar.js @@ -1,5 +1,5 @@ class HealthBar { - constructor(scene, width, height, x, y, valueMax, color, colorMin = COLOR_RED, middle = true) { + constructor(scene, name = "", width, height, x, y, valueMax, color, colorMin = COLOR_RED, middle = true) { this.bar = new Phaser.GameObjects.Graphics(scene); this.width = Math.floor(width); @@ -11,9 +11,15 @@ class HealthBar { this.draw(); + scene.add.existing(this.bar); + + height = height - 4; + let style = {font: height.toString() + 'px stencil', fill: "#000000"}; + this.nameText = scene.add.text(x, y, name, style).setOrigin(0, 0); + this.nameText.alpha = 0.5; + this.setX(x, middle); this.setY(y); - scene.add.existing(this.bar); } setValue(value) { @@ -55,15 +61,16 @@ class HealthBar { this.draw(); } - setX(x, middle= true) { - if(middle) - this.bar.setX(x - this.width / 2); - else - this.bar.setX(x); + setX(x, middle = true) { + if (middle) + x = x - this.width / 2; + this.bar.setX(x); + this.nameText.setX(x + 5); } setY(y) { this.bar.setY(y); + this.nameText.setY(y); } draw() { @@ -93,5 +100,14 @@ class HealthBar { destroy() { this.bar.destroy(); + this.nameText.destroy(); + } + + getJson() { + let json = '{'; + json += toJson("value", this.value) + toJson("valueMax", this.valueMax) + toJson("color", this.color) + toJson("colorMin", this.colorMin); + json = endLineJson(json); + json += '}'; + return json; } } \ No newline at end of file