From 7e90017e8f1953c99edecf983ea87fb44f77f407 Mon Sep 17 00:00:00 2001 From: Nilstrieb Date: Wed, 30 Dec 2020 15:48:07 +0100 Subject: [PATCH] rotational testing --- src/main/java/core/general/Master.java | 21 ++++++++--- src/main/java/core/objects/base/DebugPos.java | 4 --- .../java/core/objects/core/GameObject.java | 33 +++++++++--------- src/main/java/objects/ships/Turret.java | 7 +++- src/main/java/objects/world/Wall.java | 6 ++-- target/classes/objects/ships/BattleShip.class | Bin 3216 -> 2052 bytes target/classes/objects/ships/Turret.class | Bin 3316 -> 3194 bytes target/classes/objects/world/Grid.class | Bin 1176 -> 1280 bytes 8 files changed, 41 insertions(+), 30 deletions(-) diff --git a/src/main/java/core/general/Master.java b/src/main/java/core/general/Master.java index 86865e8..4467245 100644 --- a/src/main/java/core/general/Master.java +++ b/src/main/java/core/general/Master.java @@ -118,8 +118,17 @@ public class Master extends JPanel { * * @param pos The position */ - public void debugPos(Vector2D pos) { - create(new DebugPos(pos, new Vector2D(2, 2)), 3); + public static void debugPos(Vector2D pos) { + debugPos(pos, Long.MAX_VALUE); + } + + /** + * Debug a position, creates a green dot at the position + * + * @param pos The position + */ + private void debugPosObj(Vector2D pos, long lifeTime) { + create(new DebugPos(pos, new Vector2D(2, 2), lifeTime), 3); } /** @@ -128,8 +137,8 @@ public class Master extends JPanel { * @param pos The position * @param lifeTime The lifetime of the {@code DebugPos} in ms */ - public void debugPos(Vector2D pos, long lifeTime) { - create(new DebugPos(pos, new Vector2D(2, 2), lifeTime), 3); + public static void debugPos(Vector2D pos, long lifeTime) { + master.debugPosObj(pos, lifeTime); } @@ -251,9 +260,13 @@ public class Master extends JPanel { public void destroy(GameObject gameObject) { objectBuffer.remove(gameObject); + gameObject.getParent().removeChild(gameObject); + drawables.get(gameObject.getLayer()).remove(gameObject); + if (gameObject instanceof Collidable) { collidablesBuffer.remove(gameObject); + if (Init.DEBUG_MODE) { drawables.get(Hitbox.HITBOX_RENDER_LAYER).remove(((CollGameObject) gameObject).getHitbox()); } diff --git a/src/main/java/core/objects/base/DebugPos.java b/src/main/java/core/objects/base/DebugPos.java index f6b39c3..37fcfd2 100644 --- a/src/main/java/core/objects/base/DebugPos.java +++ b/src/main/java/core/objects/base/DebugPos.java @@ -15,10 +15,6 @@ public class DebugPos extends GameObject { private final long lifeTime; private long spawnTime; - public DebugPos(Vector2D position, Vector2D size) { - this(position, size, Long.MAX_VALUE); - } - public DebugPos(Vector2D position, Vector2D size, long lifeTime) { super(position.copy(), size); this.velocity = new Vector2D(); diff --git a/src/main/java/core/objects/core/GameObject.java b/src/main/java/core/objects/core/GameObject.java index 42138a4..c0d5167 100644 --- a/src/main/java/core/objects/core/GameObject.java +++ b/src/main/java/core/objects/core/GameObject.java @@ -7,6 +7,7 @@ import core.math.Vector2D; import core.renderer.Renderer; import java.awt.*; +import java.util.ArrayList; /** * The GameObject class is the superclass of every {@code GameObject} that can be displayed on screen. It has the 2 @@ -22,14 +23,12 @@ public abstract class GameObject implements Drawable { protected Vector2D velocity; protected Color mainColor; - protected Master master; - protected int layer; + private Renderer renderer; protected GameObject parent; - - private Renderer renderer; + protected ArrayList children = new ArrayList<>(); public GameObject(Vector2D position, Vector2D size) { this.position = position; @@ -78,19 +77,7 @@ public abstract class GameObject implements Drawable { * * @param g2d The Graphics2D object provided by the master */ - public void drawRect(Graphics2D g2d) { - Vector2D abs = Coordinates.getWorldCoordinates(position); - Vector2D sizeAbs = Coordinates.getWorldCoordinates(size); - - g2d.setPaint(mainColor); - g2d.fillRect((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 - */ + @Deprecated public void fillOval(Graphics2D g2d) { Vector2D abs = Coordinates.getWorldCoordinates(position); Vector2D sizeAbs = Coordinates.getWorldCoordinates(size); @@ -198,4 +185,16 @@ public abstract class GameObject implements Drawable { protected void setRenderer(Renderer renderer) { this.renderer = renderer; } + + public void addChild(GameObject obj){ + children.add(obj); + } + + public void removeChild(GameObject obj){ + children.remove(obj); + } + + public GameObject getParent() { + return parent; + } } diff --git a/src/main/java/objects/ships/Turret.java b/src/main/java/objects/ships/Turret.java index 923f806..252804b 100644 --- a/src/main/java/objects/ships/Turret.java +++ b/src/main/java/objects/ships/Turret.java @@ -1,6 +1,7 @@ package objects.ships; import core.general.Input; +import core.general.Master; import core.math.Coordinates; import core.math.ExMath; import core.math.Vector2D; @@ -40,11 +41,13 @@ public class Turret extends GameObject { int xCenterAbs = (int) (abs.x + sizeAbs / 2); int yCenterAbs = (int) (abs.y + sizeAbs / 2); + Master.debugPos(getMapCoords(position), 1); + g2d.rotate(rotation, xCenterAbs, yCenterAbs); g2d.fillOval((int) abs.x, (int) abs.y, sizeAbs, sizeAbs); - master.debugPos(abs, 1000); + Master.debugPos(abs, 1000); //BARRELS--------------------------------------- g2d.setStroke(new BasicStroke((int) Coordinates.getWorldCoordinates(new Vector2D(object.getSize().x / barrelAmount / BARREL_THICKNESS, 0)).x, BasicStroke.CAP_BUTT, @@ -74,6 +77,8 @@ public class Turret extends GameObject { @Override public void update() { + //TODO fix with everything haha + Point msLoc = master.getMouseLocation(); Vector2D mouseRel = Coordinates.getMapCoordinatesFromWorld(Vector2D.fromPoint(msLoc)); //100 correct Vector2D centerMap = getMapCoords(getCenterPosition()); diff --git a/src/main/java/objects/world/Wall.java b/src/main/java/objects/world/Wall.java index d9581ce..e77db36 100644 --- a/src/main/java/objects/world/Wall.java +++ b/src/main/java/objects/world/Wall.java @@ -4,6 +4,7 @@ import core.math.Vector2D; import core.physics.hitboxes.Hitbox; import core.physics.hitboxes.RectHitBox; import core.objects.core.CollGameObject; +import core.renderer.RectRenderer; import java.awt.*; @@ -11,11 +12,8 @@ public class Wall extends CollGameObject { public Wall(Vector2D position, Vector2D size) { super(position, size, new RectHitBox(position, size)); - } - @Override - public void draw(Graphics2D g2d) { - drawRect(g2d); + setRenderer(new RectRenderer(Color.BLACK, this, this.size)); } @Override diff --git a/target/classes/objects/ships/BattleShip.class b/target/classes/objects/ships/BattleShip.class index f25ab333815863736ff49dafc1d8737aa6484a47..0b3e7d77a47283516f0104b55b93021e1e9b8f9a 100644 GIT binary patch delta 1215 zcmbOr*&ff$?3=9m`3}x&LOpFXd$@xX8`nicE8Tw(V$tC$kMlNg)CJbP}#lXnG z#>2qQz`@ACW|NthSz^b?z^dWmq8Y~KpaNFHz~keK*Df|-%Q zdU7a>rVP4T%`i>|5e7*f1}O&V$uW$Q+_DUE>7dlQi}@`%k$V73>g`uz=2qlnwOGVlv<=8l$u-;1m$os z7%&)v>@s0waGe~&_#pI<-I-($>t#}x$8EhCCI12KMGfOh_^ClZG zNpgrV*zqvfGdN71%dErg#Nf=%;KIY;%HTHn3bQ^3BZCJIgC~R6WMvk0K1K!~9tK|q zKSl=T#FUiDK`hQ3A`AgM41o+mljpLidWbND@GyijgfTL36y=vBf^1-9V07VPaAJty zVTfdKV`LCaPc8AtFUqXS&nrpHajeKJX0u;869i^~0xT9}e%xex4sph)$%d@ilQ*#j zv9c6rR;5n1U~8EClTEgsL6Jd(L6(7mfrUYmA)XX1U7`V4Hux?`D-OeDa#j=&5UScEIv~&gr20jL61_lNh21N#01~mpbh71M<1|Eo6 z44DjB3=Cj<#G&@|Gq5qRFfcIaYia9jXOPii-pU}MwVOdPayx_aRt7aK-K`8-AVFQN z-3$hix>`Eh8H~0um?Er`V_;`s0QsMdL6U)+L5V?(L773CL4`qqL5)F=K^<(r7Q_yy z{R|BHpeP5sNuME`!G?he_tnEInan=g&M=i JPy$v}3IItY$I$=) literal 3216 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 delta 943 zcmew*@kNsB)W2Q(7#J9=8FozMGUnoBU}E6lVc=xon(WS`$jr{bGtog@jhlgwhk>6# zfRTaCCNnRy#Ey}HRl~(aGmMKth(Va0K?Ec#IlbHa78L7;lol1GmZ%tVF=#XBfo#{Gyn->A z&5(z|h{1TWAd}AI3?^Sj?#bJj{_=A(`0z0JGO#f+FjjCfaBn`uY{baOJ^3q(u{JkD zB@aUtgF7PwM_y`rVo7FMDi;GcLk$l@EkijY14nLYPDy4#P9+xu_vB#K3P%3TXIQr} zS?X%|U~`VOrcZKyQL27=YF=tlVvfFVVsS}oku@U&S7LHBvPq!{`cBqzV%(3O^8kYr$B5CR1OSWbpPmVtqRm4T6gf3g9mSUPv4 zrsj4A-t7#6T5MYx#I!iKGDvA@Z)K3v5@iMPH!&z}Wzf*t&7d8rrL~1YLrX`LbvuLZ zHU@)@VDqLkFfb@Fa4;}1$TILTh%pE=NHIt-$T7$=$TKK2C@^R-C^6VEcuZc)X(|tL z3&`fV4D%Qm8KyBXFg|DCV&G+9V0f*yg@JuCBbU3N7)wHXexDf|vl+W6yVe#4vB{BK z`m)@Sq8#m_obB5gc(*ZlSaI!O$e79CrnQ41Z!3e;$*fnpS{D51{9E%(SGs70J b30oPqF)%Q&FfcM`Gi+yIVBi9?7(f63$8ogE diff --git a/target/classes/objects/world/Grid.class b/target/classes/objects/world/Grid.class index 0bae6b259ae21c476203f2e541ad5d9c21e70f19..1c7718f7b0f9759c84333ad100ee19ba276ae5ef 100644 GIT binary patch delta 704 zcmbQi*}xTf>ff$?3=9m`46a-ZObpEI3@khhtPE_73_{8IMXCC^i6t5OVX4U_`9(%9 zj0`MQsYUsW3}PCZKA6(hTnroxoa_u-JPh0nJQKyWEVVVTDZ?hF8OF)L$H33dAi%>Q z$RIQ^%$Qq*L6n_AjE6y-L1N+*OKvF!X?6w~9tK$kxrsL{xD^-_*%_307?c@QCQCD_ zs*5nF@i3?}XfQHxq!cBV2c;&LFfy=fczSwzYKCz!h%jjJFlaMqY))r1V62y7;9y{2 zU}TVD&|%PJU}Vr^U|?Wk&}U#~U}WHCFkoP0Fl1n0umtlN7`U}|Ffi_5VBF5Yz7ed@ zh=G9t6j}@n0t{RXf(*tC3=BLBj0_A6+zciRreLGZ7|bEYFa|NOf~_mk-o(JWjX_vz zix`9CHU@cH83BPD0nQ9NZDwW}*=-D}leL&N7&RvcGb`0=wy-fS|Nj_d9Ww*SIy(k_ z1_lOE26hH<27U$!25|-{26+Y<22}=G25km;22%zF20I2t1`h^#20sQBh6n~#hC~K6 zhHM5EhC&8SuoKf5xESmhxEL%LbQ#zg^cWNvEE#ke*ccKSxEQR!Vu4VxdNu|Ih9an6 zKrCwp8wN%OeuiWQTLxVQCI)eaXa+k5T?S?bRR&)Mdj?$w76xqwcLoOrT?SSLM+OE4 zIR=*h40;Ug>gF}pgff3|iCI%x0RR#t& WaCqv09S#XwMyPuj8Jxkf-~s@Ym|;2q delta 583 zcmZqRn!zc4>ff$?3=9m`4E9_MObpEI3@khhtPE@uBeg`?HC$X=Tr|Tt88{d?*%`Qa z7`PdDChjrj=40SzXAt0F5M&UV_{)-8gh7;@L5zn%oIzr;9is)e6oWK7gA5OYEQ8$S zMn+W*J_ZFI21N#?$?F)!IrtbpUz8Q2&S8Mqisz+!<=v3fR;d!c?|U?^fRWiVr4WZ-8=W-w<^ zXJBFwXNYF7U{GgZW>97DWw2yWXJBE_W^iY)Vo+ybWw2&oV31>A`Ol!oz|PJf!p^|Q z2m%ZYzZm5IFfcLxVvuKGWUzq;GbpG*!3+;xRR#t&aCqv19S#XwMyPuj8EnC^U