From fa911f501edba72269fa071f7a123d84c68ac731 Mon Sep 17 00:00:00 2001 From: Nilstrieb Date: Sun, 27 Dec 2020 16:07:03 +0100 Subject: [PATCH] mainly cleanup --- src/main/java/core/general/Master.java | 3 +- src/main/java/core/objects/base/Empty.java | 6 -- .../core/objects/core/CollGameObject.java | 5 -- .../java/core/objects/core/GameObject.java | 38 ++++++---- .../java/core/objects/core/MapAnchor.java | 6 -- src/main/java/core/renderer/RectRenderer.java | 20 ++++- .../java/core/renderer/RoundRectRenderer.java | 4 +- src/main/java/objects/Init.java | 19 +++-- src/main/java/objects/ships/BattleShip.java | 23 ++---- src/main/java/objects/ships/Turret.java | 70 +++++++++--------- src/main/java/objects/world/Grid.java | 3 +- src/main/java/objects/world/Wall.java | 4 +- target/classes/objects/ships/Turret.class | Bin 3872 -> 3316 bytes 13 files changed, 102 insertions(+), 99 deletions(-) diff --git a/src/main/java/core/general/Master.java b/src/main/java/core/general/Master.java index 5d198c1..86865e8 100644 --- a/src/main/java/core/general/Master.java +++ b/src/main/java/core/general/Master.java @@ -167,8 +167,9 @@ public class Master extends JPanel { * * @param obj The new object */ - public void create(GameObject obj) { + public T create(T obj) { create(obj, obj.getLayer()); + return obj; } /** diff --git a/src/main/java/core/objects/base/Empty.java b/src/main/java/core/objects/base/Empty.java index 467b182..5ade288 100644 --- a/src/main/java/core/objects/base/Empty.java +++ b/src/main/java/core/objects/base/Empty.java @@ -3,18 +3,12 @@ package core.objects.base; import core.math.Vector2D; import core.objects.core.GameObject; -import java.awt.*; - public class Empty extends GameObject { public Empty(Vector2D position) { super(position, new Vector2D(0, 0)); } - @Override - public void draw(Graphics2D g2d) { - } - @Override public void update() { } diff --git a/src/main/java/core/objects/core/CollGameObject.java b/src/main/java/core/objects/core/CollGameObject.java index 7ec6ae5..8f1d6a1 100644 --- a/src/main/java/core/objects/core/CollGameObject.java +++ b/src/main/java/core/objects/core/CollGameObject.java @@ -23,11 +23,6 @@ public abstract class CollGameObject extends GameObject implements Collidable { this.hitbox = hitbox; } - public CollGameObject(double x, double y, double xSize, double ySize, Hitbox hitbox) { - super(x, y, xSize, ySize); - this.hitbox = hitbox; - } - /** * A simple method to move the object to a Vector2D. This method should be called instead of doing it manually. * Does not move if it encounters a collision diff --git a/src/main/java/core/objects/core/GameObject.java b/src/main/java/core/objects/core/GameObject.java index 720dbe6..42138a4 100644 --- a/src/main/java/core/objects/core/GameObject.java +++ b/src/main/java/core/objects/core/GameObject.java @@ -31,11 +31,6 @@ public abstract class GameObject implements Drawable { private Renderer renderer; - @Deprecated - public GameObject(double x, double y, double xSize, double ySize) { - this(new Vector2D(x, y), new Vector2D(xSize, ySize)); - } - public GameObject(Vector2D position, Vector2D size) { this.position = position; this.size = size; @@ -49,8 +44,8 @@ public abstract class GameObject implements Drawable { /** * Gets called at the start of the update method */ - public void startUpdate(){ - if(doesDespawn && Coordinates.outOfBounds(position, size)){ + public void startUpdate() { + if (doesDespawn && Coordinates.outOfBounds(position, size)) { destroy(); } update(); @@ -62,7 +57,7 @@ public abstract class GameObject implements Drawable { *

No drawing should be made in this method. The {@code debug} method can be called on the master.

*

This function is NOT intended to be called manually.

*/ - public abstract void update(); + protected abstract void update(); @Override public void draw(Graphics2D g2d) { @@ -113,6 +108,7 @@ public abstract class GameObject implements Drawable { /** * Returns the value as map coords + * * @param value The value relative to the parent * @return The value in global map coordinates */ @@ -126,6 +122,7 @@ public abstract class GameObject implements Drawable { /** * Returns the value as world coordinates (only called on a parent) + * * @param value The value relative to the parent * @return The absolute world coordinates */ @@ -135,22 +132,25 @@ public abstract class GameObject implements Drawable { /** * Get the center position of the object + * * @return The center position */ - public Vector2D getCenterPosition(){ + public Vector2D getCenterPosition() { return new Vector2D(position.x + size.x / 2, position.y + size.y / 2); } /** * Get the local center position of the object + * * @return The center position */ - public Vector2D getCenterPositionLocal(){ + public Vector2D getCenterPositionLocal() { return new Vector2D(size.x / 2, size.y / 2); } /** * Get the render layer of the object + * * @return The render layer */ public int getLayer() { @@ -159,15 +159,27 @@ public abstract class GameObject implements Drawable { /** * Get the rotation of the object as a Vector2D + * * @return The rotation */ - protected Vector2D getV2DRotation(){ + protected Vector2D getV2DRotation() { return Vector2D.getUnitVector(rotation); } + + /** + * Create a new {@code GameObject} + * @param gameObject The {@code GameObject} + * @return The {@code GameObject} + */ + protected T create(T gameObject) { + master.create(gameObject); + return gameObject; + } + //----------- Getters and setters ----------------- - public Vector2D getMapPosition(){ + public Vector2D getMapPosition() { return getMapCoords(position); } @@ -183,7 +195,7 @@ public abstract class GameObject implements Drawable { return size; } - protected void setRenderer(Renderer renderer){ + protected void setRenderer(Renderer renderer) { this.renderer = renderer; } } diff --git a/src/main/java/core/objects/core/MapAnchor.java b/src/main/java/core/objects/core/MapAnchor.java index 7b78961..abba336 100644 --- a/src/main/java/core/objects/core/MapAnchor.java +++ b/src/main/java/core/objects/core/MapAnchor.java @@ -2,8 +2,6 @@ package core.objects.core; import core.math.Vector2D; -import java.awt.*; - /** * The {@code mapAnchor} objects is the default parent of every new {@code GameObject}. */ @@ -13,10 +11,6 @@ public class MapAnchor extends GameObject { super(new Vector2D(0, 0), new Vector2D(0, 0)); } - @Override - public void draw(Graphics2D g2d) { - } - @Override public void update() { } diff --git a/src/main/java/core/renderer/RectRenderer.java b/src/main/java/core/renderer/RectRenderer.java index 59c0e41..39a980c 100644 --- a/src/main/java/core/renderer/RectRenderer.java +++ b/src/main/java/core/renderer/RectRenderer.java @@ -1,5 +1,7 @@ package core.renderer; +import core.general.Master; +import core.math.Coordinates; import core.math.Vector2D; import core.objects.core.GameObject; @@ -7,15 +9,27 @@ import java.awt.*; public class RectRenderer extends Renderer{ - private int width; - private int height; + private Vector2D size; - public RectRenderer(Color color, GameObject object) { + public RectRenderer(Color color, GameObject object, Vector2D size) { super(color, object); + this.size = size; } @Override public void draw(Graphics2D g2d) { + Vector2D abs = Coordinates.getWorldCoordinates(object.getMapPosition()); + Vector2D sizeAbs = Coordinates.getWorldCoordinates(size); + int xCenterAbs = (int) (abs.x + sizeAbs.x / 2); + int yCenterAbs = (int) (abs.y + sizeAbs.y / 2); + + g2d.setPaint(color); + + g2d.rotate(object.getRotation(), xCenterAbs, yCenterAbs); + + g2d.fillRect((int) abs.x, (int) abs.y, (int) sizeAbs.x, (int) sizeAbs.y); + + g2d.rotate(-object.getRotation(), xCenterAbs, yCenterAbs); } } diff --git a/src/main/java/core/renderer/RoundRectRenderer.java b/src/main/java/core/renderer/RoundRectRenderer.java index 8586119..18159cd 100644 --- a/src/main/java/core/renderer/RoundRectRenderer.java +++ b/src/main/java/core/renderer/RoundRectRenderer.java @@ -26,11 +26,11 @@ public class RoundRectRenderer extends Renderer { Vector2D abs = Coordinates.getWorldCoordinates(object.getMapPosition()); Vector2D sizeAbs = Coordinates.getWorldCoordinates(size); - master.debugPos(object.getMapPosition()); - int xCenterAbs = (int) (abs.x + sizeAbs.x / 2); int yCenterAbs = (int) (abs.y + sizeAbs.y / 2); + master.debugPos(object.getCenterPosition(), 500); + g2d.setPaint(color); g2d.rotate(object.getRotation(), xCenterAbs, yCenterAbs); diff --git a/src/main/java/objects/Init.java b/src/main/java/objects/Init.java index 55548e8..a81eee8 100644 --- a/src/main/java/objects/Init.java +++ b/src/main/java/objects/Init.java @@ -22,8 +22,8 @@ public class Init { * Create a new GameObject * @param o The GameObject */ - public static void create(GameObject o){ - Master.getMaster().create(o); + public static T create(T o){ + return Master.getMaster().create(o); } /** @@ -34,17 +34,20 @@ public class Init { //INIT GOES HERE create(new Grid()); - BattleShip battleShip = new BattleShip(Color.DARK_GRAY); - BattleShip bs = new BattleShip(140, 10, 10, 80, Color.GREEN); + BattleShip battleShip = create(new BattleShip()); + + battleShip.addTurret(create(new Turret(battleShip, new Vector2D(2.5, 7), 5, 3))); + battleShip.addTurret(create(new Turret(battleShip, new Vector2D(2.5, 15), 5, 3))); + battleShip.addTurret(create(new Turret(battleShip, new Vector2D(2.5, 25), 5, 3))); + + BattleShip bs = create(new BattleShip(new Vector2D(140, 10), new Vector2D(10, 80), Color.GREEN)); for (int i = 0; i < 8; i++) { - bs.addTurret(new Turret(bs, 2.5, 10 * i + 1, 5, (i % 5 )+ 1)); + bs.addTurret(create(new Turret(bs, new Vector2D(2.5, 10 * i + 1), 5, (i % 5 )+ 1))); } - create(bs); - create(battleShip); create(new Submarine(new Vector2D(), new Vector2D(5, 5))); - create(new Wall(20, 80, 50, 2)); + create(new Wall(new Vector2D(20, 80), new Vector2D(50, 2))); } } diff --git a/src/main/java/objects/ships/BattleShip.java b/src/main/java/objects/ships/BattleShip.java index ed8bbe1..9564919 100644 --- a/src/main/java/objects/ships/BattleShip.java +++ b/src/main/java/objects/ships/BattleShip.java @@ -5,6 +5,7 @@ import core.math.Vector2D; import core.objects.core.CollGameObject; import core.objects.core.GameObject; import core.physics.hitboxes.RectHitBox; +import core.renderer.RectRenderer; import core.renderer.RoundRectRenderer; import java.awt.*; @@ -23,26 +24,18 @@ public class BattleShip extends GameObject { private boolean playerControlled = false; - public BattleShip(Color mainColor) { - this(20, 20, 10, 40, mainColor); - turrets.add(new Turret(this, 2.5, 7, 5, 3)); - turrets.add(new Turret(this, 2.5, 15, 5, 3)); - turrets.add(new Turret(this, 2.5, 25, 5, 3)); + public BattleShip() { + this(new Vector2D(20, 20), new Vector2D(10, 40), Color.DARK_GRAY); this.playerControlled = true; } - public BattleShip(double x, double y, double xSize, double ySize, Color mainColor) { - super(x, y, xSize, ySize); + public BattleShip(Vector2D position, Vector2D size, Color mainColor) { + super(position, size); turrets = new ArrayList<>(); this.mainColor = mainColor; this.doesDespawn = false; - setRenderer(new RoundRectRenderer(mainColor, this, size, 10, 10)); - } - - @Override - public void draw(Graphics2D g2d) { - super.draw(g2d); - turrets.forEach((turret -> turret.draw(g2d))); + //setRenderer(new RoundRectRenderer(mainColor, this, size, 10, 10)); + setRenderer(new RectRenderer(mainColor, this, size)); } @Override @@ -54,8 +47,6 @@ public class BattleShip extends GameObject { rotation += Input.getHorizontalAxis() * TURN_RATE; } - - turrets.forEach(Turret::update); } public void addTurret(Turret turret) { diff --git a/src/main/java/objects/ships/Turret.java b/src/main/java/objects/ships/Turret.java index f2873b9..923f806 100644 --- a/src/main/java/objects/ships/Turret.java +++ b/src/main/java/objects/ships/Turret.java @@ -5,6 +5,7 @@ import core.math.Coordinates; import core.math.ExMath; import core.math.Vector2D; import core.objects.core.GameObject; +import core.renderer.CustomRenderer; import java.awt.*; @@ -24,53 +25,50 @@ public class Turret extends GameObject { private long lastShot = 0; - public Turret(BattleShip battleShip, double x, double y, double size, int barrelAmount) { - super(x, y, size, size); + public Turret(BattleShip battleShip, Vector2D position, double size, int barrelAmount) { + super(position, new Vector2D(size, size)); this.parent = battleShip; this.barrelAmount = barrelAmount; mainColor = Color.GRAY; - } - public Turret(BattleShip battleShip) { - super(25, 50, 1.25, 0.5); - this.parent = battleShip; - mainColor = Color.GRAY; - } + setRenderer(new CustomRenderer(mainColor, this) { + @Override + public void draw(Graphics2D g2d) { + g2d.setPaint(mainColor); + Vector2D abs = getWorldCoordsFromLocal(position); + int sizeAbs = (int) Coordinates.getWorldCoordinates(object.getSize()).x; + int xCenterAbs = (int) (abs.x + sizeAbs / 2); + int yCenterAbs = (int) (abs.y + sizeAbs / 2); - @Override - public void draw(Graphics2D g2d) { - g2d.setPaint(mainColor); - Vector2D abs = getWorldCoordsFromLocal(position); - int sizeAbs = (int) Coordinates.getWorldCoordinates(size).x; - int xCenterAbs = (int) (abs.x + sizeAbs / 2); - int yCenterAbs = (int) (abs.y + sizeAbs / 2); + g2d.rotate(rotation, xCenterAbs, yCenterAbs); - g2d.fillOval((int) abs.x, (int) abs.y, sizeAbs, sizeAbs); + g2d.fillOval((int) abs.x, (int) abs.y, sizeAbs, sizeAbs); + 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, + BasicStroke.JOIN_BEVEL)); - //BARRELS--------------------------------------- - g2d.setStroke(new BasicStroke((int) Coordinates.getWorldCoordinates(new Vector2D(size.x / barrelAmount / BARREL_THICKNESS, 0)).x, BasicStroke.CAP_BUTT, - BasicStroke.JOIN_BEVEL)); - - g2d.setPaint(Color.BLACK); - int barrelSpacing = sizeAbs / (barrelAmount + 1); - g2d.rotate(rotation, xCenterAbs, yCenterAbs); - - for (int i = 0; i < barrelAmount; i++) { - int barrelX = (int) (abs.x + (i + 1) * barrelSpacing); - int frontPosY = (int) (abs.y - sizeAbs / 2); - g2d.drawLine(barrelX, yCenterAbs, barrelX, frontPosY); - - if (lastShot + SHOT_EFFECT_TIME > System.currentTimeMillis()) { - g2d.setPaint(Color.YELLOW); - g2d.fillOval(barrelX - 5, frontPosY - 5, 10, 10); g2d.setPaint(Color.BLACK); - } - } - g2d.rotate(-rotation, xCenterAbs, yCenterAbs); + int barrelSpacing = sizeAbs / (barrelAmount + 1); - g2d.setStroke(new BasicStroke()); + for (int i = 0; i < barrelAmount; i++) { + int barrelX = (int) (abs.x + (i + 1) * barrelSpacing); + int frontPosY = (int) (abs.y - sizeAbs / 2); + g2d.drawLine(barrelX, yCenterAbs, barrelX, frontPosY); + + if (lastShot + SHOT_EFFECT_TIME > System.currentTimeMillis()) { + g2d.setPaint(Color.YELLOW); + g2d.fillOval(barrelX - 5, frontPosY - 5, 10, 10); + g2d.setPaint(Color.BLACK); + } + } + g2d.rotate(-rotation, xCenterAbs, yCenterAbs); + + g2d.setStroke(new BasicStroke()); + } + }); } @Override diff --git a/src/main/java/objects/world/Grid.java b/src/main/java/objects/world/Grid.java index c74db58..576a66f 100644 --- a/src/main/java/objects/world/Grid.java +++ b/src/main/java/objects/world/Grid.java @@ -1,5 +1,6 @@ package objects.world; +import core.math.Vector2D; import core.objects.core.GameObject; import java.awt.*; @@ -12,7 +13,7 @@ public class Grid extends GameObject { private static final int GRID_SPACING = 50; public Grid() { - super(0, 0, 0, 0); + super(Vector2D.zero(), Vector2D.zero()); } @Override diff --git a/src/main/java/objects/world/Wall.java b/src/main/java/objects/world/Wall.java index 64aa588..d9581ce 100644 --- a/src/main/java/objects/world/Wall.java +++ b/src/main/java/objects/world/Wall.java @@ -9,8 +9,8 @@ import java.awt.*; public class Wall extends CollGameObject { - public Wall(double x, double y, double xSize, double ySize) { - super(x, y, xSize, ySize, new RectHitBox(new Vector2D(x, y), new Vector2D(xSize, ySize))); + public Wall(Vector2D position, Vector2D size) { + super(position, size, new RectHitBox(position, size)); } @Override diff --git a/target/classes/objects/ships/Turret.class b/target/classes/objects/ships/Turret.class index 2a9f760094af3b11546ee726fdde630b7700a421..9be3d55b561e0f79d292d9bd0c30570354a908da 100644 GIT binary patch delta 2084 zcmZ1=_eIkE)W2Q(7#J9=8Fp|oFflN*GqCV5urjbQGKl0SWu+#U6zdmfWEK?bhm;l- zrIs)9bs-K%!lA#}#np~1! zWaPrdz|FwN!@$oVz{tR6lbM%UV#mn9s^Q|I8OFsR#30PhAOeyVWn_?a=pg3`{4!1Ic3Oj=;4}%(m`ovqhDNGESJPcY4>WmDWxrv#1&iOg{MeGbZ zj0|Gf{HtQf#h}fg2XdW0BSVaa4>m>CK3R!niTa76#SqQT5W~X|%Mdr&ja5Sg6!-}| z42cX$j0`NrnN_Kb3?d*0XoDnDcoXyiG3#=H5>Y7+Lm5N)l`?oRON76PB98$iQ5XUp(2LLxP{HxFE4SFCf3zFNl$WF>~?{4(G`m zITW(l8P+l~@WB&KKz=4DRdXdKC#Mz{s~8vKTMU84+x#41+8K0|P4qBLhFfR0c+dX$%YuYZ*8g*cccX?6q`uGjK<0YHnxX z-OeDW#kQ3}Op9|XgOrx`Rt7mOQC1Lt6NA!L1`Vy<4BC-eT3Z-2v~)ySw=?K&V=&kV zwqQB~1A`I+2Ll6xECU~d7=ti_R6TYKfTY4QwtP^q8#m_obB5gc(*ZlSk-gwV91!s;HI^MArBOq zTNoI3FqCX#sNmnmP;JGnE6Jq=7OJ!20r_G#LsO(A56Bb|hBOg|wCxPMlHA)FTDCE? zhqtgZF8`ko3Tb8rP)NHm2r@7*_%d)X_%R4D_%lc{1TYvf1Ti==gfIj%gfYZ3gfkS? zGej_SFhnuTW{6=}$Pml0f+3z^2SXym5r%YzCk$Z>uNbnxu~Egq!?1%vhhaWL5(78G z5e5Z@1q?|Hpn{=@VIhMg0|!F~Lkz@x2uWp#;&E!}O)~v$7%&-M) b$5w`I3=9k`42%rg4BHtP7`VVJaMA|=60 z;o{=rq8Y}?z`?-D&cMaPz|FwJ$RLuRl$DxXQmkK`ky%izA5vOWlv*oSw+;j7&sUVc^Hfsj2Rik(^E^r^NVs)ob&UGQi|P*@^gLilM{0o z8MG!}WEGw4!z?NX@~9~fgBi#$mg3B+R4xV!21|AZD;@@G2II;9nWXB4QH;sVODst( z=47yCuw!Si=V5SQaAaf;~hIXV7iAos9qczSwzYKE~hcrh}Fz`g90Se%($A6!zDpPkBP|JxW0 zxEO31{6Nv~&&a^40g7ub22X}SkVp_C1Dl2$$RLnCAv_GB3}K86oW-dn5HlDVM34d$ zA_fjoF@^{phDcC+vO4)VI(vgcC7OpJ2IS}fj-vdML{J!m42|Pqh-XM(WMBgerh+U4 zr#FyX5)VT%*kdV0iRC_-d8w?BSZCDXVn}DmU}wnWVaQ_0o_v%=SC^APj3JkYArE9H zTcoRxkAFDG8wDV56f!a}Yk(t~p_qrEgrRhzyCN?aLpehQJ3}Q8Llr~y!G`pJ8l%sDI=8hIF+7>p;2Gs|*;5C4KX$chzA(B7-lofVP}}j z!!VCw{^TAOJq}xjg**(47#2_d!=htk%dnJ(VHrakBLhcXYINi%G63R?~{BZK1PJ8aTSE-sU~+3Of(L7aNcFh&LzP@pq1 zNFYTpB2!s|RIn!{78RxDL@+XNrWNJql?3D$M=~-nW->A`ryHd(GKeDb8j?;%2Ij=1 zVnzmbQ08z1vA8OnQ}aqviy)jz=TvqmZ?YhVf;uAuTWLWG*yS9>8L2rrVW~Nc49o@j z#f%JG#RZAwc>(#wenFGZu{(>fGu&rn;Daakfc(t7lF55Hr0W?J88{f27#J8h7^E1s zGdMCZGVEYrU|?dHz#zr2lYs}$-^C!sup5cLhe48IFOvEh3{njHkoevVOrQdhfq_8? zRDOZY<$9k~eH9&<10}EKtjKLAAg`0tg zfdlN;<6yTkFyu3Eg4L^Qi7?2CFer#HD2XtrU~wP}9=d!l1K_!N6B* z3xmlH2JpRDXQ23PIf44#p@>lth# zLAtjv*l2BGU~kVCVero9+s@z%HLi`Bbvr}AHilsBO$_1N7}R7zs#p?o%-BGVh!SOK z7iDeV#t_SF#xBYZl3TmqC+3kHM6|fWei)l%bfxf}x7R zlA(pcilKfIgAKzx23v-840a5=80;C2F*q_@WpHA+!{E&DhQWp5GlLDoPX>2J4hBy~ zVFoX7WTi21F|1>7WjF;+AiEeW8BR0sFmN(VWk_K-!@vVdm5d^=sALpjILmO3fssLw zk(uE+rnUj9LW$NC#XIVh8g*w=+@fJU>hmQ(Jso_zMa8$ z8$-Jl*A9kRGZ|d9b}*!Ya(Dd}hNvA33$`&V;oruv+=^RQl1mFLw91MHmnt2 zK&FT=%n)Iiv7NzJl6yPDhHVU+!3m-O5$$daf(#4{{tO%p0Sp2RfeexiK@5frAqwgdvmRF+&8yONJb96jw3u zFzjH^X1K