From 4fb5bcc5437813fc72a2d8d73550aa745394b43a Mon Sep 17 00:00:00 2001 From: Nilstrieb Date: Sun, 13 Dec 2020 16:55:19 +0100 Subject: [PATCH] destroyed things --- src/main/java/core/Master.java | 3 +- src/main/java/core/math/Vector2D.java | 11 +++++++ src/main/java/objects/DebugPos.java | 4 +-- src/main/java/objects/core/GameObject.java | 23 ++++++++++++-- src/main/java/objects/ships/BattleShip.java | 1 + src/main/java/objects/ships/Shell.java | 5 +-- src/main/java/objects/ships/Submarine.java | 2 +- src/main/java/objects/ships/Turret.java | 30 ++++++++++++------ target/classes/core/Master.class | Bin 6559 -> 6573 bytes target/classes/objects/DebugPos.class | Bin 984 -> 817 bytes target/classes/objects/ships/BattleShip.class | Bin 2299 -> 2304 bytes target/classes/objects/ships/Shell.class | Bin 1047 -> 1120 bytes target/classes/objects/ships/Turret.class | Bin 3568 -> 4135 bytes target/classes/objects/world/Grid.class | Bin 1150 -> 1155 bytes 14 files changed, 61 insertions(+), 18 deletions(-) diff --git a/src/main/java/core/Master.java b/src/main/java/core/Master.java index 0b765c8..799d44c 100644 --- a/src/main/java/core/Master.java +++ b/src/main/java/core/Master.java @@ -129,7 +129,7 @@ public class Master extends JPanel { * @param pos The position */ public void debugPos(Vector2D pos) { - create(new DebugPos(pos, new Vector2D(10, 10))); + create(new DebugPos(pos, new Vector2D(2, 2)), 3); } /** @@ -246,6 +246,7 @@ public class Master extends JPanel { public void destroy(GameObject gameObject) { objects.remove(gameObject); + objectBuffer.remove(gameObject); drawables.get(gameObject.getLayer()).remove(gameObject); if (gameObject instanceof Collidable) { collidables.remove(gameObject); diff --git a/src/main/java/core/math/Vector2D.java b/src/main/java/core/math/Vector2D.java index c5e4398..fa8050c 100644 --- a/src/main/java/core/math/Vector2D.java +++ b/src/main/java/core/math/Vector2D.java @@ -1,6 +1,8 @@ package core.math; +import java.awt.*; + /** * A 2-dimensional Vector that can be used to store position or velocity */ @@ -33,6 +35,15 @@ public class Vector2D { y = 0; } + /** + * Get a new Vector2D from a Point + * @param point The point + * @return The Vector2D + */ + public static Vector2D fromPoint(Point point) { + return new Vector2D(point.x, point.y); + } + /** * Add another Vector to this vector, modifies this object * diff --git a/src/main/java/objects/DebugPos.java b/src/main/java/objects/DebugPos.java index 9775791..a5e31c7 100644 --- a/src/main/java/objects/DebugPos.java +++ b/src/main/java/objects/DebugPos.java @@ -12,12 +12,12 @@ public class DebugPos extends GameObject { public DebugPos(Vector2D position, Vector2D size) { super(position.copy(), size); this.velocity = new Vector2D(); + this.mainColor = Color.GREEN; } @Override public void draw(Graphics2D g2d) { - g2d.setPaint(Color.green); - g2d.drawOval((int) (position.x - size.x / 2), (int) (position.y - size.y / 2), (int) size.x, (int) size.y); + drawOval(g2d); } @Override diff --git a/src/main/java/objects/core/GameObject.java b/src/main/java/objects/core/GameObject.java index 3327e03..1bb293f 100644 --- a/src/main/java/objects/core/GameObject.java +++ b/src/main/java/objects/core/GameObject.java @@ -4,7 +4,6 @@ import core.math.Coords; import core.Drawable; import core.Master; import core.math.Vector2D; -import core.physics.Collidable; import java.awt.*; @@ -74,7 +73,7 @@ public abstract class GameObject implements Drawable { * * @param g2d The Graphics2D object provided by the master */ - public void drawOval(Graphics2D g2d) { + public void fillOval(Graphics2D g2d) { Vector2D abs = Coords.getWorldCoords(position); Vector2D sizeAbs = Coords.getWorldCoordsSize(size); @@ -82,6 +81,19 @@ public abstract class GameObject implements Drawable { g2d.fillOval((int) abs.x, (int) abs.y, (int) sizeAbs.x, (int) sizeAbs.y); } + /** + * This method draws a rectangle at the current position and size + * + * @param g2d The Graphics2D object provided by the master + */ + public void drawOval(Graphics2D g2d) { + Vector2D abs = Coords.getWorldCoords(position); + Vector2D sizeAbs = Coords.getWorldCoordsSize(size); + + g2d.setPaint(mainColor); + g2d.drawOval((int) abs.x, (int) abs.y, (int) sizeAbs.x, (int) sizeAbs.y); + } + /** * This method draws a rounded rectangle at the current position and size * @@ -97,6 +109,7 @@ public abstract class GameObject implements Drawable { g2d.fillRoundRect((int) abs.x, (int) abs.y, (int) sizeAbs.x, (int) sizeAbs.y, arcW, arcH); } + @Deprecated public void destroy() { master.destroy(this); } @@ -124,8 +137,12 @@ public abstract class GameObject implements Drawable { return Coords.getWorldCoordsSize(getMapCoordsSize(value)); } + public Vector2D getCenterPosition(Vector2D position){ + return new Vector2D(position.x + size.x / 2, position.y + size.y / 2); + } + public Vector2D getCenterPosition() { - return new Vector2D(position.x - size.x / 2, position.y - size.y / 2); + return getCenterPosition(position); } public int getLayer() { diff --git a/src/main/java/objects/ships/BattleShip.java b/src/main/java/objects/ships/BattleShip.java index 4799aeb..6848fec 100644 --- a/src/main/java/objects/ships/BattleShip.java +++ b/src/main/java/objects/ships/BattleShip.java @@ -14,6 +14,7 @@ public class BattleShip extends GameObject { public BattleShip(Color mainColor) { this(20, 20, 10, 40, mainColor); + //TODO turret size should use w and h but correct just like with world coords turrets.add(new Turret(this, 25, 25, 50, 3)); //turrets.add(new Turret(this, 25, 10, 50, 2)); //turrets.add(new Turret(this, 25, 70, 50, 2)); diff --git a/src/main/java/objects/ships/Shell.java b/src/main/java/objects/ships/Shell.java index cf2ded7..5110a2b 100644 --- a/src/main/java/objects/ships/Shell.java +++ b/src/main/java/objects/ships/Shell.java @@ -3,6 +3,7 @@ package objects.ships; import core.math.Vector2D; import core.physics.hitboxes.RectHitBox; import objects.core.CollGameObject; +import objects.core.GameObject; import java.awt.*; @@ -10,11 +11,11 @@ import java.awt.*; * A shell fired by a cannon */ //TODO why tf do shells not use map coords... -public class Shell extends CollGameObject { +public class Shell extends GameObject { public Shell(Vector2D position, Vector2D size, Vector2D velocity) { - super(position, size, new RectHitBox(position, size)); + super(position, size/*, new RectHitBox(position, size)*/); this.velocity = velocity; } diff --git a/src/main/java/objects/ships/Submarine.java b/src/main/java/objects/ships/Submarine.java index 2204269..ba4b2ff 100644 --- a/src/main/java/objects/ships/Submarine.java +++ b/src/main/java/objects/ships/Submarine.java @@ -17,7 +17,7 @@ public class Submarine extends CollGameObject { @Override public void draw(Graphics2D g2d) { g2d.setPaint(Color.BLUE); - drawOval(g2d); + fillOval(g2d); } @Override diff --git a/src/main/java/objects/ships/Turret.java b/src/main/java/objects/ships/Turret.java index ed1cbd6..3cd9477 100644 --- a/src/main/java/objects/ships/Turret.java +++ b/src/main/java/objects/ships/Turret.java @@ -1,9 +1,13 @@ package objects.ships; +import core.Master; +import core.math.Coords; import core.math.ExMath; import core.math.Vector2D; +import jdk.swing.interop.SwingInterOpUtils; import objects.core.GameObject; +import javax.swing.*; import java.awt.*; /** @@ -25,8 +29,6 @@ public class Turret extends GameObject { private long lastShot = 0; - //private double rotation; - public Turret(BattleShip battleShip, double x, double y, double size, int barrelAmount) { super(x, y, size, size); this.battleShip = battleShip; @@ -78,28 +80,38 @@ public class Turret extends GameObject { @Override public void update() { + Point msLoc = master.getMouseLocation(); + Vector2D mouseRel = Coords.getMapCoordsFromWorld(Vector2D.fromPoint(msLoc)); //100 correct + + //TODO getCenter uses the wrong size + Vector2D center = battleShip.getMapCoords(getCenterPosition(position)); + System.out.println(getCenterPosition(position)); + master.debugPos(battleShip.getMapCoords(position)); + master.debugPos(center); + double targetRotation = -Math.atan2(center.x - mouseRel.x, center.y - mouseRel.y); + + //---------------OLD IMPLEMENTATION Vector2D abs = battleShip.getWorldCoordsFromLocal(position); int sizeAbs = (int) battleShip.getWorldCoordsFromLocalSize(size).x; int xCenterAbs = (int) (abs.x + sizeAbs / 2); int yCenterAbs = (int) (abs.y + sizeAbs / 2); - - Point msLoc = master.getMouseLocation(); - double targetRotation = -Math.atan2(xCenterAbs - msLoc.x, yCenterAbs - msLoc.y); + double targetRotationOld = -Math.atan2(xCenterAbs - msLoc.x, yCenterAbs - msLoc.y); + //---------------- rotation = ExMath.angleLerp(rotation, targetRotation, ROTATION_SPEED); - int barrelSpacing = sizeAbs / (barrelAmount + 1); + int barrelSpacing = (int) (size.x / (barrelAmount + 1)); for (int i = 0; i < barrelAmount; i++) { - int barrelX = (int) (abs.x + (i + 1) * barrelSpacing); - int frontPosY = (int) (abs.y - sizeAbs / 2); + int barrelX = (int) (position.x + (i + 1) * barrelSpacing); + int frontPosY = (int) (position.y - size.x / 2); if (master.isMousePressed()) { lastShot = System.currentTimeMillis(); Vector2D shellVel = Vector2D.getUnitVector(rotation).negative().multiply(SHELL_SPEED); - Vector2D pos = Vector2D.rotateAround(new Vector2D(xCenterAbs, yCenterAbs), new Vector2D(barrelX, frontPosY), rotation, Vector2D.COUNTERCLOCKWISE); + Vector2D pos = Vector2D.rotateAround(new Vector2D(center.x, center.y), new Vector2D(barrelX, frontPosY), rotation, Vector2D.COUNTERCLOCKWISE); master.create(new Shell(pos, new Vector2D(10, 10), shellVel)); } diff --git a/target/classes/core/Master.class b/target/classes/core/Master.class index 420b9fb365575b383749298a3892d74b33a5a5c4..e0c9a966bfc347574001c976f913239a25eec841 100644 GIT binary patch delta 451 zcmbPlyw-TbeijZ6hGrfHEryoKHEar8TnvH?Z9EL^3>}k?vuH|m@i25VurV^QCg-Fk z76~yhGW7B=6fyKo=3rHmoxsB|5hTf8lvy%|M1~Z)11{wgkqI)859gWU`fns)G~* z8v_Hw4+c(#pA13_zZg^*elzGW{9!O<_=n_VGq{t@7}XiY7#JD385kIt85m7B&z4|e F1OU%mX72z1 delta 460 zcmZ2$Jl}Z3eijZvhGrgy7KYZzA6YbI+j$r|7}yvYSd(*76N`ix7#X^F7>XFW85!g? zG$&iK$SQI%a4_`pF!X^`u@|KlBxdH7a4}3^n8?mBiHBh_!<5OTtj>JX7^br`%-~^| z$uNtNL1gkmR*}iKSXH^_FwA9Vn8(8~pJBmdF194TMGTAC8J6%cEM*s7Q+fg23d{Cems)Qo|<8s=diuzU|h7hgMS;dZx90)0}}%S zgOt{8hWbeD-3+dgA`F%y43^s&ytXqmZe!5c$iTqB#PFYi0jjcvL6V`Bk%57MK@6gk zk&!_F#AT40+#{SJ*A%X`g+XE)Lz~tX29aG1oeT`y7)rF5w=%G6ZDZ(}EF@whJBxvl z;U5D7gBJr6*a*HI4E@^}rut}W?O>QaIa{QUW#Kl4Wt0Dkm@%%{Y$E!WNvaB}QWs>X z_BMuRAWP)5w=pc7>>{CRBgVkWz`*c>fs^4UgABtj24#ld3_1*dkzA<@ccm_)I-?i^ TBO^Bh0|PSyqt51)5-f}WU2|lC diff --git a/target/classes/objects/DebugPos.class b/target/classes/objects/DebugPos.class index f2867d257caf92ea7491647778c333e6fb2fcb88..8613addb224a80470c4afbf86de5c91eadffc579 100644 GIT binary patch delta 412 zcmcb?zLAaV)W2Q(7#J9=7z`$I1@emLCuOB3mlW$K=NF|;Ox_yf9^~rk$H*Yyla*MO zsGnF~qVJralV4=b$soue%fleYAkE0YnVXoI2NvdH5M)r`VNhgHVr1Y*DM~E&FH6i} zWRTE6Xm>A4EXc@AE;e$pp8SB(Pn@G5zc{lbGe3`!fu%UJDwUCe1*CDZA5&z#G6Mrc z8Ur%}GXn#IjF$E`21cFj4D4FF8JHrsGw^O@5YXDhAhwl3W+MXw0~3P^0|SE)0}BHK z11|$710RD313!Z_g8+jn0|SEs#0&;C26YAykYUhZ5M^KlnaiNbAj-hRz{sG*pv1t) z0J77Lfr){MfuWj#4P>c2!gwx_FoOsKD}yN5STQi44Q?zOgEoT>10w??gDwL<)G%!Z d2Czkp2xHj50+L`Oc))B%s1b||dSJik0{~n2KW6{{ delta 558 zcmdnUc7vVk)W2Q(7#J9=7#t^Z1#$@GCuOB3mlRLT*jk@nl$x5y$ROa8l~|UjpIBa^ z@0_2LUu4b2Aj=@f&LGdjpunKW$RG@tb}vdS$jD4CHgaKP;3!Tl2}sP$D`8|1)8@P-oC!WMHiDWMp7;0jbmCVbBJt zV=2z8N@a6kfB=wUeI5n_u;NOPn~ZoEj2TQA88}jk63hL|5_1?C*fl&oJv}E^GWxNy zfJ7%JFv?DTz!+X{%D})7&A`mS%)r1Ps-?Y+fl+5W1H0C42BygE47^(z1U51-FfcKg zF)%RjffeyEa5C^Rh%oRmm@_aiD1gO887vqq!LAVn`GkQHWEjY;3``7+3|0)*42%pQ ziy9a>7?>Cs7+kbBF^FwrkkQtv-@>4@g+Wzo3xnns22~LTo&5AZEwGp#L`)AZ22uc$ z)7-+K*SC$q5Zz%y4D1ZT49*N9V26o8EP^}Cg~5iwmVuFhk-?6EAL<-!1_ooWTNx2% Xv4I67z-I7(*^E##7#ZxrLE!)Z$!c9Q diff --git a/target/classes/objects/ships/BattleShip.class b/target/classes/objects/ships/BattleShip.class index 77992511612f03e18ee6a0ad19092b81b5de2a67..56bb9a370cd82208833b1e1497558f0388d70a99 100644 GIT binary patch delta 26 hcmew@*dVmQjgeP8KPf9UxujS>Ilm}%vmfJHb^v{82{Hfx delta 21 ccmZn=`YpJ@jgdnrKPf9Uxuke=FymTw08xntRR910 diff --git a/target/classes/objects/ships/Shell.class b/target/classes/objects/ships/Shell.class index 91994d2b2d657269e880ca4ce9085e813841238f..c86ceb869a62f5dc2a95bbd64c01d02d5d5b7b8b 100644 GIT binary patch delta 286 zcmbQv@qk0^)W2Q(7#J9=7@W8mm>8JZ8CZB2SQ*$D8N~CGvQm>viuIH8i&8f#PGMxU zn`ogm`3$3oI2Qv4gCP%t5rZ)!16yu>S!zf=BZIicWF97o&5sz_8Cgvj7#U0_zhjbB zHe+C5;A3EBU|OTaVBq z!NATS$)L?31=b_Rz{J47paasw00KG;HVn25j0}tnb`16)-3$y2b_~o6j0_A60$N&I x7$mi}FtG1n(Amadu#tg*fr$ZRGRT_@3~~(o4Dw)8c_8YcrZO@(uz{620su>uB?$lk delta 288 zcmaFBF`Yy4)W2Q(7#J9=80@$hm>8JZ8CZB2SQ*$D8HDnavQm>viZ`lFVPw+Mn0$dz zlZBDN9>frte1Q>!MJJ~-op3c^U}P|4U|@)0U}j)pU|`_U($?9|z^J9Wm4SUD0|NsS zgAoG*10Mr3NREMxftP`sfsetMfq_8_qMpHo!E|y7vogCGgE`2o$@7?P>k)c{7}yzv z8MGNhz3usbU=C-KtPAVg29r3k%5uHioqJBn}LDBnt_Rdk%57MS8EG{q}CP& m_H7J0;RvUIJj%cz!N9{H2{w`kq8MrTD`8|%)9}ekEKAf+EHBXq3t3P8&mvx5%TUM8P|w5A zz+lM8AOJE&KR2-?L*F?+zbK`ckwG*)wZu2E0K#=E%FhkYFUm>bV&GtC;$dh8X%b9N zEpblGD@iR1$S=+;$;{8=V$fx1Lovf79)`&bQy3XIQc{yj(*yF085zVid=TE8%+1Ql4^ldfVLCg*3?7D= z46`ODuqfJbGR$F^%g!*5hrxz{hmnB~>;ib$fn*o(FgP&qu-UJi2?DdY7?vD`Z=3&^wuy=AIYl!N8Mh0P6WEW>-78L6TXQbxja53y- zI0#A%hZq^`H72o&On%3zr*MRa;V8o~Mh3RzqSVBaR7M6F4Ih|hkmom>vmIwN=g7@3 zElv$e%>gL{#~>pEUrAz7dTL2fen}!IDj69BQ3d>SQYQ0qXy_hiuw`ImIKjZcz{IeS zL5krd0}q^kib0CuG!p;J4)FkmoduwgJ|@L@1#C}6N*C}*%`Xk@Ts=x1 zVewXmFs&^NMq3yxw6-v?vm~_V_nGl9oAHYBg7}LVW`TSHvVoT+L6oOH17r&yM9dDV zQG{V-etMr7Kgc877*@|@NYvWFkhGNnWJ1^uhV|PRHj6O0Z)4bQC9s>pG7{uZkQcWz zc!Id1eC?wA?b{hVwYD&XvFu>jWhDqQXg9;YNJ&AE0ucsx5eE0|44#q#+v^z)Y-2dw z!ppe)fAU5K1_ovZP#Q~OkYHe72xj152w@Ol2xCxS2xrh^h+uGFh-C0!h+;@!h-JuS zh-0W@h-c_wNMM-7kjSusA(i0(LpsAHhD?Tg3|R~x8L}DK8FCo~8S)q<7z!A*7z!B! z7>XJ588R758Op$EZ4pDg0HYRzE5joOZ3Y3x00w!6#|+vGf(#!S>c9z*kCB}r1DpW) z8Ll!c0H;4*P#S@zKMuw`h9?Y985kJ^7}FS@fzzJ?V;IA825kmrh6F}2h8GOB3@i+} zjGW-q$;ME}@B^GW*%^8mUNPJa2dDB`40piElapZs!!d@J47Lnh43`*|fD;{|r|dc-R>@*cs-qGgz`SSTeISSTZs)GBYwVF#Kki`HO*-fsx@AxRiMf0NTd6 A8vp}-Wu+#U6mL}HV&ULqsAQ;O zXQ-aMfmK4ZlA)G|!GVE?i=m#Oft{g|hoOm~d2&0eq8OX~%9$WAi;JP1p@W^FlZT;; zp?mT(Rt+vLhGK?Z9)>=K{>h4L(rgoX7$z}Hp6tY?$2OIRVH(5q$z^OB(ldD&W-&}= zWZ=jx%_+$&$f@LFuwnBTdSsHI(U|^7AU}s=pkZ0g#5MdBt zkYW&JP+*W^P-IYGP-0MLP-fW3z`$U~z{bG9puw<-Ve{m6E=$%eU=xmVS-65skOIr9 zF$ge-Fo-fpF-S3}GsrV&FsLzTf^~~AFflMNsDpGffPgxKFoOsKBLgGDR)%dLlQuhX zD>2rCjEZ6qV_;y=W#C}YV-R7`XHa1@W@u!vVd!VD zW0=ig&#;=ofnhs?Bg0_^XNF4*E(|vrTp3<6xG{WSuw(ef;K|6!;LRw&-~)C_8Uq)@ zY6e$^?F>8&91PnTEE#q%@Gx*POkzm!W7x^S0}2a9L6}P!1sQfR>}FtO5MlVsu!ljL zfr&wd;Vr{n1|9}x1_OqN4Eq>(7+4r=7_KtxX8=WGBf|uS0}MP2Yzzk{8}h2uA7aP_ z`Hz8tiJO6ofscWKkx^?4gP_(H290eDIzCXg(KZItEesZYw%S`5EM!=7+LQb2w6`$W zL6~MNT3Z4Zl_5+< zYYPKAOG1uWJqNQHrzj_gyNIC+WV$FPOM)mzMtgFf85hio^gc6gh!s6E8RE2dFeGhd z-~}1EgJHrphAAQp?%NnXF)%O$GVm}2F~~3k zGpI9!Fc>q0G1xGKGXyh4F(fm@Fyu1CF;p_dGjuW}Fid4gVwlg6%&?3hm0<@%8pCad z42E9}af}QM+2Gi1Vc=!h!QjMjm_eI?hv7Cuy*$Ga25kmjhE9e;aFlZ~Oa*J@Vc=#c zV3+`oaZXUIKx3ST;VU?v85v|4o`U0#S*fA(DcreH@_%SFmL@=l@Br>QnWHTr;6f$T`Ud_BsR+mAS bfq{XCfsuiMfssLvK_5)pGB7YOG1vhBDmW8a delta 121 zcmZqX{Kqjtl0zszDJwO(q*3>T8c8TGl(_RGpH~WGH6cTz`RXXk3pA#fq{pC Wk%57MkwK3^A57aaFfcGN*Z}}a?h%*(