From 58550ae93a894e24d56ae23216aedd4506bf871b Mon Sep 17 00:00:00 2001 From: Fp_Sviat Date: Wed, 1 Apr 2026 18:20:08 +0300 Subject: [PATCH] Refactoring ClearButton. Made by drawing CircleHitbox. Need to finish doing HitboxCircleRenderingFunction and saving hitboxCircle when you put the second point --- res/circle.png | Bin 1157 -> 539 bytes res/destroy.png | Bin 1353 -> 1547 bytes res/destroy1.png | Bin 0 -> 1353 bytes res/iloveimg-resized.zip | Bin 0 -> 6626 bytes res/objecttypes.xml | 2 +- res/square.png | Bin 755 -> 1736 bytes res/square1.png | Bin 0 -> 1859 bytes src/gui/DrawboxEditor.java | 8 -- src/gui/Editable.java | 11 ++- src/gui/EditableCanvas.java | 3 +- src/gui/HitboxEditor.java | 70 +++++++++++++----- .../DrawboxRectengleRenderingFunction.java | 8 +- .../render/HitboxCircleRenderingFunction.java | 48 ++++++++++-- .../HitboxRectengleRenderingFunction.java | 14 +++- src/gui/render/ShapeRenderingFunction.java | 1 + src/model/HitboxCircle.java | 16 +++- 16 files changed, 141 insertions(+), 40 deletions(-) create mode 100644 res/destroy1.png create mode 100644 res/iloveimg-resized.zip create mode 100644 res/square1.png diff --git a/res/circle.png b/res/circle.png index a95bb3cc0a0030ae936c9bede1c0cdd25b9c376c..80dadcb01d164c15e56b4d9874f2e7311d4ff39a 100644 GIT binary patch literal 539 zcmeAS@N?(olHy`uVBq!ia0vp^A|TAc3?z4jzqJQa3dtTpz6=aiY77hwEes65fIO>_%)r2R1cVu0yams12t&CZ79jiO)V}-%q_s8#}Z=6$9EhXfqED`UHx3vIVCg! E0Jol?I{*Lx literal 1157 zcmV;01bX|4P)KLZ*U+R`sCEkzKl)gj5&q@hY_5?)@_euSf22N!q0z{yc?Q2YY_Kym8e z5Fvwu2%hQO!{u_psMvL#(bD64NQRTZj^-}DnS22ry9f-;mW=gZvQj}U-ZdMsK&I8^7~DvX`q=i<;=8l|-JKbV|My)&on1|_#eO?G^X*Dz z^14O=I6XZjNeD* zS%^%MBqad>5mXdaJp;Zk01@$E7zTFEO;dM6}j4Vyeeo157DV$ifaJf=)0~B_c30-@-00FMWT1 zzeG5h0s^Lr<<9UO$nkEN2BA)vAtH4v?Q*&NuC-Ch)+&7xwKu2rhP&h5@o?OO2q)6< zOlGqgt+ubWu!H6Dmth#9_eSfT*88-%<2`V9B9inVGl;Z}D*{B}8C0pHH2I#bS<(s?u6p&*!txZidZ|H#awg z`wlj~J;jPK+z!v)`{4Zt^ZDKvndv}RRiA!`n>NIk$H&KS)!Kdo5Y@5OfV|G1_P+rD XF6Pu%0{|+ToMXA&s!fo zuhogZCPa`0EI;Izjf<2gF&~4 z!_zY|9pH{QEKXfr4dLWOr_-4r?X^r+Ra?v9a$&l=`0;V$(=!EPak7BFTU+C5+SPki zRX%tuoem-$&kzZCiR3pXgAoxCo+1w_#~60WqpcSR?1~YhKv`sMDRg`}d5~WheS5o+`^_8Jss0@*a z27-Qmz6o*B)fL4T@Sac#cXv!ElU`Jq8*X-#?nkI^Y&vRW%wmQ#JgkZ}I}&Vt(%01~ zjLn9;ae0XZ0{&J}t|%%9v@r*sis;B3LAo)@mh<(KinC6lDY3R2}Aqo~w8ibTmU4|*nZ-+aUn@cB? znbKgCEXYk3?AA}PD}}?xN4l2B`xiz#=KC6^9!aLI$BcleMkmu^vjb_c{VxZfFVD$V zW`-B#z4IgObAykk`Wi;cv#MQA7W}H0X?kF3Uh(1m^t&bb%Di-WW@KL8C+~0UZ@k@{ z&dISdoEm?*vY>eXZhB=&F|8PQ)%~ceLDEomZD`=x;;d|LdSr3-&Enjcbg1=3>)prI zH+s5SmKWp;v(mYl5$Rw{Yh6)EzOcKiWo2nx{<`yCab`_b3AE&|jj0IeiDuA zwAM%0Q&w`6ZcJyJ|6uxjO`c<`X+1QNWvi)%?42z-r>Wv1eOrRmR-+Umb+%~bX`Ob2 zj4F|x9qf0Csx^OsE*dOH?=S$+YWrSFA|tK6&~OVI;R@ffpsKWWpGMP8SZF^~kSZ#D|pm=UNYKC?y#2`F8g0 zMf^#fYhu!bwh{L3)hm~i)e(s9wziJ;Bjw%=%=P3p38g5#JYL_<3B<2Iu<%u2l>-O!Jozw(yVVeG#h_$v(Oi5qHUJamd?(K`(Z=UnqA+d0HFtH1 z>kx$H>_|*522|`q6{*>kzK^-zD&kt(5O}F&z0H<+*8#jb@W7==yC&L!4Q zQ{FYR(FLbNHO#0PJB)K7l;ty=f4%$GzK+{O=7VAg=6uTNKN;S9*6@V;BNL6=luD90^2{Z Ad;kCd literal 1353 zcmV-P1-AN$P)(_`g8%^e{{R4h=l}px2mk>USO5SzmjD14Z`WEM zkN^M#&q+iIt6p^%B@#FesyCT=iuh|Z(PKlvNk39+ZTJy@zG9Q z)o6%pwu(Lby&rx0$p`$yOT9E2?aYpjN!}AfAo)Owfff+6{Ldfx;S0|{ae#~8{p^iS zVLwwH9#KzEi1Rtoc~bDi#uMs_&@_k-Y;-%XUBC6KFFp}~{olNJ`{~W%>9|wDq__Tog>A-S!|jTS30db+duvFSJoWR_1uHKo%*kL$Yvu{p&pG{3=i?M zQ<4v8N+@Xwr;4f~#!!|yAHBLo=f^*nwP_R2J^R^f0Hj3^f1>qdxD#6)c=k)w*RJEn zW87$jf4Cs|xCA0CA=C2U%T~$O)&?O4?!LaeUTxy;>-WacsCzgg21oP_-ZiAyAfMbJ z7(<-B25tnJNE%U102D<=tKGtR$6I^*^bZC!^95gBBfws$r#rq`ki5gYis&6FdI$j% zBJ#0q`104_)!XoP4@9swqunY&l)>u>p#|)?d^?X7~f#7SR zZ_wnIUsO?D>Wh?6ASr0@WbF>^uYU{n{=xm1f64uOf2Z~VF$SAwh%pq#(0=OLV*}J? zJ|?C}Oo13ZqyPefL0RfbL{Je}JyH~u#TC55WOT&g?k;cs?M=K7*gQuvOJ*$Htt|k4 z(Hnm5=4AtFoNHY-kP;y@L=qx^7!U}c*doaA~87X>XhI;nJus;Ta}?f zOon7Rwrpd{F0~6B4*CrH_nDm>lf+2qK$7V#-j(EjEB^VQ&J3oA|hC8Q8`m5w4eXH zumpT$utx%P)j$`O!x)P$(I6REdB_+X^&(M}k;DET)5#$zc+j+j(?qAtsr-5My-Q;k z0rzMb6v0?QSD_^m%WkmrlVS|VgMTqP>aVo0EXP)Ea8b_SJ}|IH0?hOLZR^5LOiQPK z_NP*jl@<-bJEq6~fs_zYa%+f5aWTCo*cZP2o%Oks@!sD+<8E0L&opl3I7CP(p({~M zj`s1*{M=r}bh%&`G7q|Hpa6^7tzuv9^>8xgVDAlt_&+uFL4#eClM#SUtI(=(Xi7vM zc(8ZxjOej}UG%^!?XsZTZt>Rcoih-5C)j1ft=F~T|8KV6-}>(W*KXo-q_V<(00000 LNkvXXu0mjfNpF9k diff --git a/res/destroy1.png b/res/destroy1.png new file mode 100644 index 0000000000000000000000000000000000000000..547ac60e9fbe4b2e6245573acd808fe42dd3adcd GIT binary patch literal 1353 zcmV-P1-AN$P)(_`g8%^e{{R4h=l}px2mk>USO5SzmjD14Z`WEM zkN^M#&q+iIt6p^%B@#FesyCT=iuh|Z(PKlvNk39+ZTJy@zG9Q z)o6%pwu(Lby&rx0$p`$yOT9E2?aYpjN!}AfAo)Owfff+6{Ldfx;S0|{ae#~8{p^iS zVLwwH9#KzEi1Rtoc~bDi#uMs_&@_k-Y;-%XUBC6KFFp}~{olNJ`{~W%>9|wDq__Tog>A-S!|jTS30db+duvFSJoWR_1uHKo%*kL$Yvu{p&pG{3=i?M zQ<4v8N+@Xwr;4f~#!!|yAHBLo=f^*nwP_R2J^R^f0Hj3^f1>qdxD#6)c=k)w*RJEn zW87$jf4Cs|xCA0CA=C2U%T~$O)&?O4?!LaeUTxy;>-WacsCzgg21oP_-ZiAyAfMbJ z7(<-B25tnJNE%U102D<=tKGtR$6I^*^bZC!^95gBBfws$r#rq`ki5gYis&6FdI$j% zBJ#0q`104_)!XoP4@9swqunY&l)>u>p#|)?d^?X7~f#7SR zZ_wnIUsO?D>Wh?6ASr0@WbF>^uYU{n{=xm1f64uOf2Z~VF$SAwh%pq#(0=OLV*}J? zJ|?C}Oo13ZqyPefL0RfbL{Je}JyH~u#TC55WOT&g?k;cs?M=K7*gQuvOJ*$Htt|k4 z(Hnm5=4AtFoNHY-kP;y@L=qx^7!U}c*doaA~87X>XhI;nJus;Ta}?f zOon7Rwrpd{F0~6B4*CrH_nDm>lf+2qK$7V#-j(EjEB^VQ&J3oA|hC8Q8`m5w4eXH zumpT$utx%P)j$`O!x)P$(I6REdB_+X^&(M}k;DET)5#$zc+j+j(?qAtsr-5My-Q;k z0rzMb6v0?QSD_^m%WkmrlVS|VgMTqP>aVo0EXP)Ea8b_SJ}|IH0?hOLZR^5LOiQPK z_NP*jl@<-bJEq6~fs_zYa%+f5aWTCo*cZP2o%Oks@!sD+<8E0L&opl3I7CP(p({~M zj`s1*{M=r}bh%&`G7q|Hpa6^7tzuv9^>8xgVDAlt_&+uFL4#eClM#SUtI(=(Xi7vM zc(8ZxjOej}UG%^!?XsZTZt>Rcoih-5C)j1ft=F~T|8KV6-}>(W*KXo-q_V<(00000 LNkvXXu0mjfNpF9k literal 0 HcmV?d00001 diff --git a/res/iloveimg-resized.zip b/res/iloveimg-resized.zip new file mode 100644 index 0000000000000000000000000000000000000000..7b6078ff7f83051629105243413efdbf9baa8369 GIT binary patch literal 6626 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 Z@bCWSf8$|d{p%|jfA`7Xx%i)m{{RA^U9SKD literal 0 HcmV?d00001 diff --git a/res/objecttypes.xml b/res/objecttypes.xml index 2c13548..a7de25d 100644 --- a/res/objecttypes.xml +++ b/res/objecttypes.xml @@ -23,6 +23,6 @@ - + diff --git a/res/square.png b/res/square.png index 5ef41e862ed24a5af117c1271e762ad395ec38e2..12ffc42c6adb913060e3ff95b2246be08c571687 100644 GIT binary patch delta 1693 zcmZ{kc~H~W7RP@fkWvhg*iZ_E5*A~S5)zh*7&T;h0i&tL(9)`iB*8?p@k<60c@jtj z0}&~!PfGw1wZ?s6DGnMeA}WHF7J)!zQ3NEi$s$X6v7L6N^XAQ+d(Zvje7XR(!9AN}5XeS!VoXZR8YpZoF*^-O-P3M!BHcH~ zS-Q#@RR|1kA_)ufzAbJxs*HSqyYKjM6mZYw70~Gw*%>%vr z8uhVV_)xps`mObMOEwi7-J9e4f$yPvAEkDzI`4!|b}61(u|^lz7PJ`!_xJaAa@#SP z&vH`x=@=}T&WSjcH>I0Drz zK3wZb0tMS$3LZ3ZxBMpu&pBod)hx4Mu%b=2g!~v-hD{h8zPJM!w?6|8x0;8;7X|^q z*!bmAStf#(uYlkX04$C{rvl6GPg&i${9I3G74U&Pax3kF5o?H@M@U(uTb8A!aR=Ga za@O7?v=o%Y3xqthTq)(D|0r^3ww}H7mr2S+W-kJo=_WQYb8F3gCG#un9QX(&_$ zTyyEGfv7p?ey%7>idfMGViyp@l;w4AHTjHZPyJ#yW6rizJ=2{QCfCr9lzAAt9m_sR zH}`tr=TPPXKHrgj5EK2lb#d}V!0)f?t4SteBBjv#MyWzQe152T;8d{EPvjZ`wcTky z-1*@8kLl^Dxw2$z{HK?G*sdyRBufm@pw9p@OKdf>&A6#KOt$3w$?kOoFmN98X? z*=I{+<%?qBmGR-ZWsjj6*VXLyss>Ij(jV8OA8?ODhSc)!@Q)_fP6yP<6#G2LxHB)+ zrrQzv*;|;(Zr}J5MKk)enGJ?-Bn)rPsKB%bMr_~p)G>+jst>nCWy-MhGDHG0*^t)q zq>}((l@>`2XNNv2EZC}Zr=c=RXW2bJo+dazj+3bf>b-Q_4P>NG#4mS-AL=n^oYw=g z^kX%)HleSDHtzjVoLE0qJ2bLBzacZa=bYg}A91N92S>P1Un{L$?`NJv&ydqnp8>fBRDA{+5ZwIW^)8 zTMC^UTsVEV3=T;8Ct=3=#D)EXHJFKOPfU3+pF8)dPPT;9w+TmS15KWVn^};z7YiQm ze7Hy&>KUpfNv(7>rq~@Q4^<0 zjv%jmWL;-4?z+0P*zZ^2o@Zn|3)a$|11IEhMnL1cRhOgWldhPIf+Gtvy zaDmX9a?ydWXNqh#Gf)%U?JWzXqh9x|c4=ZJqG*SiX{Sh8%K+{>H_lz6(`94yL3S>3 zem7D@bh%!d(NfGji#R!k!SB48e5q13km@l(6t%k+pGz!l3mQ3{PMJ9O({qkk+%;$d zm6wvXl(lNQ7~W%vnjZ1}j_f<&(Ne?6quh6oSC1WE>lO3z z+tBWps-sG*B3Us+NbLT7{tL^7sJF{`n3V8r+0ve?;xPPbS|hlKw9g z67*-3Y^(aG7G~{x#dI1;H66zt>60m@%LG-2Jkb?9)eB#wvPp_IvaA{jbT%#nan z324cHOAs!LEE4G8zcjc!83zi+^I C=;A5> delta 728 zcmV;}0w?{*4f6$miBL{Q4GJ0x0000DNk~Le0000J0000J2nGNE0CG?^%m4rY32;bR za{vGf6951U69E94oEQKA0XAtvLr_p?Z**^SXm4;JNkc;*aB^>EX>4Tx0C?K1jfjI|gM$d3>D1zBb*EvJVGwK8ZaUKSd^!8X3{wEm3A5C0wGIH{B#!vO z=PLr>dDE^t4gSV_m?{lSfbDLSg&-*FZb~rC#nYKq<)m z4Jaws^Fe%n0A|nid@$w!Gst}fFm-gP0cuG)QfIwWEvuGgNxPc_kvtw{IvQkhKMoU> zCaR;OE|C8Rz+%4GZaQ+UYFT^h{4=iS%iP|N5P(>EELuT0ROjC+jGf=-;>LIx4sT(4 zQncMGxY>Y(>!Phzp}Yn6<1fI*PyOgxPhtQ703c(NP5~)@0XIoRK~#9!+|)5{VlfcL z@&7k|&xSn{N1&m|1){CE12;&!b)?m%j&iz$XM1J~Ac9rILWEMp)kv0q`erO!5y7pN zal`d>*lM-XHJCn{*>bteCjCjncvo^JmrTxuQbxvHD0yTYGo=(Zn~lyU+fLI%Z~e~Q z>Cy4-cy!!<19zu;Ac@-Q$+_WQXt7xQDkZO*4D*hA+Ckmvy_4J#VwxsoI*-*>*D_%; zA_h!}VHhbTGn@ZlUS_<$y<%oab{=cBAwWPNw6FFfh6uLXEoO$>>i8?C0X1c)F4EM1xGG$HR7gNY>T z^V$6VYV0tlT`m}uf|8$}U!H$|3Olqc1(AkFCjGqVZGON1?C$^wR*sCxf$CHM0000< KMNUMnLSTY1mPLyI diff --git a/res/square1.png b/res/square1.png new file mode 100644 index 0000000000000000000000000000000000000000..a700d096e4f8a4c2b76cd2ec6273f8d4cae73972 GIT binary patch literal 1859 zcmZ`(3sh4_8lGz;MhGQRSVgU*iY`cjkOUI~2_d;L2{#Gh=7JG<1o9xkgxoyjp~Yf2 zS|o~9e5_O|Rq0ke7T4XX)orD_)*_-bBvAwC?sx?OlMn_3|eH4G1D)mKSU+SWcmimv7%R2QBOk*uObu$6Rvh z+^{`hBu#AJy({-XS9`k^m`e8T3j?1-41rsVmA4FIRL1$}sE&vZ(G1h$R_V=E;)hYR zr?czwXFi$v#?c(UqE;OOJ*#H$)tG9JJie{+yE$Mvse&3ty-kZN$TU zv3?Bq_`_2l?|SSH9QB7{xUQ!3pJ^g4;Q&IXclt-FSuJ`fhd=p7Q1wUaoNx;KrM*jPZ_5+I<{CvA{n|93X1XMOrEF!@`YPCTYrIdlnbPEAP_i_%b32Is$k%jNL- zycB@|E`OinxK6Lv7Zenl&E~ah*OD%>yrLY&3xm>TX>)RN^78VEi;JyRYnjuzZe4k0 zRi#uSQ7V;Mt=3>DgdUZZIo)oL%jNQTJkWEINQk1S3R4jTk)NLjeJ4q>w6xT2cW^iy zm?-F^3d3N2OePadGIWN=il#Xovn!S;!nK@cHxH}C9?gCkd}FyAKi{*jfXwjZMB9F>zC=Tc2A7nP59}X zkI#tvQ_H1$mi+Z#rElcuaM$45+^Sf|{3Hr(P4LLA%cnlryt!tlXG64Q!HIXX-nt|q zD_tp0zbDYxka%YB?)8nqJYz`p$Q|S&)^YRwf9>7=&Rd>C6J_?c??%QaBZtq<|0B_R z`l4~?oVfTen+IPio|AOWdcnGF!@2(?eCVkxiIl{*-t+Z;q-g%{`DO2a5o6iEcdU8S znDE$YC$_}+(AHl_P3_I=38|0{-HBKAZ<#8Q)2$(p?n4z#aB)M4rW3S2cvYH;Ek$PI z(Cxbe_wU>@8*UHo+q-j5<0>tI=VWCY84RNDIz2dON8PsihR=E|jO(A>@Nf5LDpVO7 zKm>NoE(o|lft_2_NnuKK71zO@Yi1<|CnWqQ60QJ ze3yQY60l6;cCCBS%y2ntXsWUAo`h0HKdgTB_CgMCiUSY0!005a+_n;{7f64bF%y%M zlbPuzXR(>7tMYiw4i8gVW^}qqryB-fO0-Wppak{ - if(entity != null) { - entity.getDrawbox().getDrawboxlistPoints().clear(); - entity.getDrawbox().getbaseListPoints().clear(); - canvas.repaint(); - }}); - - logger.setLevel(Level.CONFIG); } diff --git a/src/gui/Editable.java b/src/gui/Editable.java index 639e2f6..9e313dd 100644 --- a/src/gui/Editable.java +++ b/src/gui/Editable.java @@ -40,12 +40,15 @@ public abstract class Editable extends JPanel implements ListSelectionListener { setLayout(new BorderLayout()); clearLinesJButton = createButton("Clear lines",null,"res/destroy.png"); - + clearLinesJButton.addActionListener((e)->{ + canvas.renderingFunction.functionClearJButton(); + canvas.repaint(); + }); toolbar.setBorder(BorderFactory.createLoweredBevelBorder()); toolbar.addSeparator(); toolbar.add(clearLinesJButton); this.add(toolbar,BorderLayout.EAST); - + toolbar.setPreferredSize(new Dimension(40,40)); // РАСКОММЕНТИТЬ ЕСЛИ НУЖНО ВЫВОДИТЬ ПОДРОБНЫЕ ЛОГИ logger.setLevel(Level.ALL); } @@ -92,12 +95,12 @@ public abstract class Editable extends JPanel implements ListSelectionListener { } } - private JButton createButton(String text,ActionListener listener,String pathImage) { + JButton createButton(String text,ActionListener listener,String pathImage) { JButton button = new JButton(new ImageIcon(pathImage)); button.addActionListener(listener); button.setContentAreaFilled(false); button.setFocusPainted(false); - button.setPreferredSize(new Dimension(38, 38)); + button.setPreferredSize(new Dimension(20, 20)); return button; } diff --git a/src/gui/EditableCanvas.java b/src/gui/EditableCanvas.java index c048703..9e3c325 100644 --- a/src/gui/EditableCanvas.java +++ b/src/gui/EditableCanvas.java @@ -88,7 +88,8 @@ public class EditableCanvas extends JPanel implements MouseListener, MouseMotion public void setEntity(Entity e) { entity = e; drawboxRectengleRenderFunct.setEntityInDrawboxRectengle(e); - hitboxRectengleRenderFunct.setEntityInHtiboxRectengle(e); + hitboxRectengleRenderFunct.setEntityInHitboxRectengle(e); + hitboxCircleRenderFunct.setEntityInHitboxCircle(e); } public void setImage(BufferedImage image) { diff --git a/src/gui/HitboxEditor.java b/src/gui/HitboxEditor.java index e6bfbb6..f1f1aeb 100644 --- a/src/gui/HitboxEditor.java +++ b/src/gui/HitboxEditor.java @@ -6,6 +6,8 @@ import java.awt.event.MouseEvent; import java.util.ArrayList; import java.util.List; +import javax.swing.JButton; +import javax.swing.JList; import javax.swing.JTabbedPane; import javax.swing.event.ListSelectionEvent; @@ -16,10 +18,15 @@ import events.EntityHitboxChangedListener; import model.Hitbox; import model.HitboxRectangle; import model.Point; +import repository.Project; public class HitboxEditor extends Editable { + JButton changeInRectangleHitboxJButton; + JButton changeInCircleHitboxJButton; + + HitboxEditor(ListGUI listGUI) { super(listGUI); @@ -28,29 +35,58 @@ public class HitboxEditor extends Editable { canvas.setHitboxRectengleRenderingFunction(); canvas.setVisible(true); - clearLinesJButton.addActionListener((e)->{ - if(entity != null) { - HitboxRectangle nowHitbox = (HitboxRectangle)entity.getHitbox(); - System.out.println("1. nowHitbox.getListPointsIso().size() = "+ nowHitbox.getListPointsIso().size()); - nowHitbox.getListPointsIso().clear(); - System.out.println("2. nowHitbox.getListPointsIso().size() = "+ nowHitbox.getListPointsIso().size()); - System.out.println("1. nowHitbox.getListPointsCartesian().size() = "+ nowHitbox.getListPointsCartesian().size() ); - nowHitbox.getListPointsCartesian().clear(); - System.out.println("2. nowHitbox.getListPointsCartesian().size() = "+ nowHitbox.getListPointsCartesian().size()); - canvas.getHitboxRectengleRenderFunct().getLocalListPointsCartesian().clear(); - canvas.getHitboxRectengleRenderFunct().getLocalListPointsIso().clear(); - canvas.getHitboxRectengleRenderFunct().setFirstIsoPointIsNull(); - canvas.repaint(); - } + changeInRectangleHitboxJButton = super.createButton("Hitbox Rectangle",null,"res/square.png"); + changeInCircleHitboxJButton = super.createButton("Hitbox circle",null,"res/circle.png"); + toolbar.add(changeInRectangleHitboxJButton); + toolbar.add(changeInCircleHitboxJButton); + + changeInRectangleHitboxJButton.addActionListener((e)->{ + functionClearHitboxJButton(); + //canvas.setHitboxRectengleRenderingFunction(); + //Сделать создание нового Hitbox формы Rectengle }); + changeInCircleHitboxJButton.addActionListener((e)->{ + functionClearHitboxJButton(); + //canvas.setHitboxCircleRenderingFunction(); + //Сделать создание нового Hitbox формы Circle + }); + + } + public void functionClearHitboxJButton() { + if(entity != null) { + canvas.renderingFunction.functionClearJButton(); + canvas.repaint(); + } } - //НАДО ДОБАВИТЬ ЧТО БЫ ПОД КОНЕЦ РИСОВАНИЯ ХИТБОКСА ОНО ВЫЗЫВАЛО ФУНКЦИЮ И ВСЕ СОХРАНЯЛО. //СОХРАНЕНИЕ УЖЕ РЕАЛИЗОВАНО. //НО НЕ ДОБАВЛЕН ВЫЗОВ ФУНКЦИИ И НЕ ОФОРМЛЕНА ПОДПИСКА //UPD: вроде подписку оформил в MainGUI; - - + @Override + public void valueChanged(ListSelectionEvent e) { + if(e.getSource() instanceof JList) { + //TODO: надо бы элегантнее пробросить сюда ListGUI - просто передача его в аргументах немножко громоздкая + // как-то обыграть это через события? + // ps. попытки обратиться к eventSource проваливаются - ListGUI это панель, уже внутри которой лежит JList + selectedEntityName = listGUI.getSelectedName(); + try { + entity = Project.getInstance().getEntityByName(selectedEntityName); + } catch (Exception e1) { + //logger.severe("Entity with name '"+selectedEntityName+"' was not found! Cannot display it on panel!"); + } + image = Project.getInstance().loadImageByName(selectedEntityName); + //TODO: if(image == null) вызов FileChooser'a и выбор изображения + canvas.setEntity(entity); + canvas.setImage(image); + if(entity.getHitbox().getShape().equals("Rectangle")) { + canvas.setHitboxRectengleRenderingFunction(); + } + if(entity.getHitbox().getShape().equals("Circle")) { + canvas.setHitboxCircleRenderingFunction(); + } + canvas.repaint(); + } + } } diff --git a/src/gui/render/DrawboxRectengleRenderingFunction.java b/src/gui/render/DrawboxRectengleRenderingFunction.java index cd06535..937d1d4 100644 --- a/src/gui/render/DrawboxRectengleRenderingFunction.java +++ b/src/gui/render/DrawboxRectengleRenderingFunction.java @@ -12,6 +12,7 @@ import events.EntityDrawboxChangedEvent; import events.EntityDrawboxChangedListener; import model.Drawbox; import model.Entity; +import model.HitboxRectangle; import model.Point; public class DrawboxRectengleRenderingFunction implements ShapeRenderingFunction { @@ -145,5 +146,10 @@ public class DrawboxRectengleRenderingFunction implements ShapeRenderingFunction public void setEntityInDrawboxRectengle(Entity e) { entity = e; } - + public void functionClearJButton() { + if(entity != null) { + entity.getDrawbox().getDrawboxlistPoints().clear(); + entity.getDrawbox().getbaseListPoints().clear(); + } + } } diff --git a/src/gui/render/HitboxCircleRenderingFunction.java b/src/gui/render/HitboxCircleRenderingFunction.java index 6a6ef84..31e3a4b 100644 --- a/src/gui/render/HitboxCircleRenderingFunction.java +++ b/src/gui/render/HitboxCircleRenderingFunction.java @@ -3,24 +3,62 @@ package gui.render; import java.awt.Graphics2D; import java.awt.event.MouseEvent; -public class HitboxCircleRenderingFunction implements ShapeRenderingFunction { +import model.Entity; +import model.HitboxCircle; +import model.Point; +public class HitboxCircleRenderingFunction implements ShapeRenderingFunction { + Point firstIsoPoint = null; + Point currentIsoPoint = new Point(0,0); + int currentRadius=0; + Entity entity; + + public void setEntityInHitboxCircle(Entity e) { + entity = e; + } + @Override public void drawing(Graphics2D g) { - // TODO Auto-generated method stub + HitboxCircle nowHitbox = (HitboxCircle)entity.getHitbox(); + if(nowHitbox.getRadius()!=0) { + g.drawOval((int)nowHitbox.getCurrentRefPoint().x, (int)nowHitbox.getCurrentRefPoint().y, (int)nowHitbox.getRadius()*2, (int)nowHitbox.getRadius()); + }else if(firstIsoPoint != null) { + currentRadius = Math.abs((int)firstIsoPoint.x-(int)currentIsoPoint.x); + g.drawOval((int)firstIsoPoint.x, (int)firstIsoPoint.y, currentRadius, currentRadius/2); + } } @Override public void mousePressed(MouseEvent e) { - // TODO Auto-generated method stub + HitboxCircle nowHitbox = (HitboxCircle)entity.getHitbox(); + if(nowHitbox.getRadius()==0 && firstIsoPoint == null) { + firstIsoPoint = new Point(e.getX(), e.getY()); + }else if(nowHitbox.getRadius()==0 && firstIsoPoint != null) { + // высчитываем в параметры хитбокссеркла нужный радиус и текущую реф поинт. + // Не забываем высчитать реф поинт хитбокса относительно текущей. + // после чего вызываем listPointsToString и нотифай, который отправляет данные на сохранение + } } @Override public void mouseMoved(MouseEvent e) { - // TODO Auto-generated method stub - + currentIsoPoint.x = e.getX(); + currentIsoPoint.y = e.getY(); } + public void functionClearHitboxJButton() { + HitboxCircle nowHitbox = (HitboxCircle)entity.getHitbox(); + + } + + @Override + public void functionClearJButton() { + firstIsoPoint = null; + currentIsoPoint = new Point(0,0); + currentRadius = 0; + HitboxCircle nowhitbox = (HitboxCircle)entity.getHitbox(); + nowhitbox.setRadius(0); + } } diff --git a/src/gui/render/HitboxRectengleRenderingFunction.java b/src/gui/render/HitboxRectengleRenderingFunction.java index bc2ee31..bedda44 100644 --- a/src/gui/render/HitboxRectengleRenderingFunction.java +++ b/src/gui/render/HitboxRectengleRenderingFunction.java @@ -32,7 +32,7 @@ public class HitboxRectengleRenderingFunction implements ShapeRenderingFunction return LocalListPointsCartesian; } - public void setFirstIsoPointIsNull(){ + private void setFirstIsoPointIsNull(){ firstIsoPoint = null; } @@ -112,7 +112,7 @@ public class HitboxRectengleRenderingFunction implements ShapeRenderingFunction } } - public void setEntityInHtiboxRectengle(Entity e) { + public void setEntityInHitboxRectengle(Entity e) { entity = e; } @@ -151,5 +151,15 @@ public class HitboxRectengleRenderingFunction implements ShapeRenderingFunction Hitbox.cartesianToIsometric(cartesianPoint.x,cartesianPoint.y,LocalListPointsIso.get(i)); } } + + @Override + public void functionClearJButton() { + HitboxRectangle nowHitbox = (HitboxRectangle)entity.getHitbox(); + nowHitbox.getListPointsIso().clear(); + nowHitbox.getListPointsCartesian().clear(); + LocalListPointsCartesian.clear(); + LocalListPointsIso.clear(); + setFirstIsoPointIsNull(); + } } diff --git a/src/gui/render/ShapeRenderingFunction.java b/src/gui/render/ShapeRenderingFunction.java index 0bd67d8..5604c87 100644 --- a/src/gui/render/ShapeRenderingFunction.java +++ b/src/gui/render/ShapeRenderingFunction.java @@ -7,5 +7,6 @@ public interface ShapeRenderingFunction { void drawing(Graphics2D g); public void mousePressed(MouseEvent e); public void mouseMoved(MouseEvent e); + public void functionClearJButton(); //private void notifySubscribers() ?? надо ли? подумать } diff --git a/src/model/HitboxCircle.java b/src/model/HitboxCircle.java index 896e6b4..2b2e1ce 100644 --- a/src/model/HitboxCircle.java +++ b/src/model/HitboxCircle.java @@ -2,7 +2,7 @@ package model; public class HitboxCircle extends Hitbox { private float radiusHitbox; - + private Point currentRefPoint= new Point(0,0); public HitboxCircle(String[] dataHitbox, Entity owner){ super(dataHitbox[0]); setOwnerEntity(owner); @@ -16,6 +16,8 @@ public class HitboxCircle extends Hitbox { private void parseStringToCircleHitbox(String[] informations) { referencePoint.x = Float.parseFloat(informations[1]); referencePoint.y = Float.parseFloat(informations[2]); + currentRefPoint.x = owner.getImage().getWidth()/2+referencePoint.x; + currentRefPoint.y = owner.getImage().getHeight()+referencePoint.y; radiusHitbox = Float.parseFloat(informations[3]); } @Override @@ -23,4 +25,16 @@ public class HitboxCircle extends Hitbox { return "Circle"+referencePoint.x+referencePoint.x+" "+referencePoint.y+" "+radiusHitbox; } + public float getRadius() { + return radiusHitbox; + } + public void setRadius(int radius) { + radiusHitbox = radius; + } + public Point getCurrentRefPoint() { + return currentRefPoint; + } + + + }