From 356691612526871be7199d484cb2c0b61f154296 Mon Sep 17 00:00:00 2001 From: Nilstrieb Date: Sat, 12 Dec 2020 14:57:30 +0100 Subject: [PATCH] "fixed" sub --- src/main/java/core/Master.java | 10 ++++++-- src/main/java/core/physics/Hitbox.java | 5 ++++ src/main/java/objects/GameObject.java | 26 ++++++++++++++++++++- src/main/java/objects/ships/Submarine.java | 7 ++++-- target/classes/core/Master.class | Bin 5515 -> 5933 bytes target/classes/objects/GameObject.class | Bin 3173 -> 3677 bytes 6 files changed, 43 insertions(+), 5 deletions(-) diff --git a/src/main/java/core/Master.java b/src/main/java/core/Master.java index de6056d..596e1fb 100644 --- a/src/main/java/core/Master.java +++ b/src/main/java/core/Master.java @@ -76,7 +76,7 @@ public class Master extends JPanel { create(bs); create(battleShip); - create(new Submarine(new Vector2D(), new Vector2D(20, 20))); + create(new Submarine(new Vector2D(), new Vector2D(5, 5))); create(new Wall(20, 80, 50, 2)); } @@ -173,8 +173,14 @@ public class Master extends JPanel { for (Collidable c : collidables) { double distance = Vector2D.distance(c.getCenterPos(), col.getCenterPos()); - if (!(distance > c.getSize().magnitude() && distance > col.getSize().magnitude())) { + + if (c != col /*&& !(distance > c.getSize().magnitude() && distance > col.getSize().magnitude())*/) { + + System.out.println("\n\nCOLL POSSIBLE"); + System.out.println("This: " + c.getHitbox() + "\n\nother: " + col.getHitbox()); + if (c.collidesWith(col)) { + System.err.println("COLL"); collides = true; } } diff --git a/src/main/java/core/physics/Hitbox.java b/src/main/java/core/physics/Hitbox.java index 5d0717d..415bfa8 100644 --- a/src/main/java/core/physics/Hitbox.java +++ b/src/main/java/core/physics/Hitbox.java @@ -1,8 +1,13 @@ package core.physics; import core.Drawable; +import core.math.Vector2D; import objects.GameObject; public abstract class Hitbox implements Drawable { + @Override + public String toString() { + return super.toString(); + } } diff --git a/src/main/java/objects/GameObject.java b/src/main/java/objects/GameObject.java index 218b1cb..1d5a402 100644 --- a/src/main/java/objects/GameObject.java +++ b/src/main/java/objects/GameObject.java @@ -79,6 +79,24 @@ public abstract class GameObject implements Drawable { g2d.fillRect(xAbs, yAbs, sizeXAbs, sizeYAbs); } + /** + * This method draws a rectangle at the current position and size + * + * @param g2d The Graphics2D object provided by the master + * @param w The width of the screen + */ + public void drawOval(Graphics2D g2d, int w) { + this.w = w; + h = (int) (this.w / Master.SCREEN_RATIO); + int xAbs = (int) getWorldCoords(position.x, true); + int yAbs = (int) getWorldCoords(position.y, false); + int sizeXAbs = (int) getWorldCoordsSize(size.x, true); + int sizeYAbs = (int) getWorldCoordsSize(size.y, false); + + g2d.setPaint(mainColor); + g2d.fillOval(xAbs, yAbs, sizeXAbs, sizeYAbs); + } + /** * This method draws a rounded rectangle at the current position and size * @@ -107,6 +125,12 @@ public abstract class GameObject implements Drawable { } } + public Vector2D getMapCoordsFromWorld(Vector2D value){ + double x = (value.x / w) * Master.SCREEN_Y_COORDINATES * Master.SCREEN_RATIO; + double y = (value.y / h) * Master.SCREEN_Y_COORDINATES; + return new Vector2D(x, y); + } + public double getWorldCoordsSize(double value, boolean isX) { if (isX) { return (value / Master.SCREEN_Y_COORDINATES * w); @@ -141,6 +165,6 @@ public abstract class GameObject implements Drawable { } public Vector2D getCenterPosition(){ - return new Vector2D(position.x + size.x, position.y + size.y); + return new Vector2D(position.x - size.x/2, position.y - size.y/2); } } diff --git a/src/main/java/objects/ships/Submarine.java b/src/main/java/objects/ships/Submarine.java index 819ef3a..9db5194 100644 --- a/src/main/java/objects/ships/Submarine.java +++ b/src/main/java/objects/ships/Submarine.java @@ -16,18 +16,21 @@ public class Submarine extends GameObject implements Collidable { public Submarine(Vector2D position, Vector2D size) { super(position, size); this.hitbox = new RectHitBox(position, size); + this.mainColor = Color.BLUE; } @Override public void draw(Graphics2D g2d, int w, Master master) { g2d.setPaint(Color.BLUE); - g2d.fillOval((int) (position.x - size.x / 2), (int) (position.y - size.y / 2), (int) size.x, (int) size.y); + drawOval(g2d, w); } @Override public void update(Master master) { Point mouse = master.getMouseLocation(); - moveTo(new Vector2D(mouse.x, mouse.y), master); + Vector2D relPos = getMapCoordsFromWorld(new Vector2D(mouse.x, mouse.y)); + Vector2D centerRelPos = new Vector2D(relPos.x - size.x/2, relPos.y - size.y/2); + moveTo(centerRelPos, master); } @Override diff --git a/target/classes/core/Master.class b/target/classes/core/Master.class index 4b736b9f72420bb83ce44d0623ab52950595ce0d..8cfb839d823563e17b3c35a135511feee286b3d8 100644 GIT binary patch delta 2644 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 TXvk;`E^ZhZO&HA>Ef^#LWUw2Y delta 2326 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 MHvYwZu2Ez&Ss^D5aQ- zfrBBEhaqaRBC{wnJ44K7C*};s$y-_cCVQ~XVvL^rnAMn@mw}Oil_8daks)rfBAb?c zJOcv*7XuRm1A{b!1cMAi0s{ks2?Hww1A`<(B16*TEH-J$WVlEQg9!sW*aU8{3G>*D z7~>~jWRvFy=~G}}W?*1Y1nc|HCdr@5kjB8kz{rr!kO5Y$&Th;YKRKFR-W{Y`i-CoK zfk6qRngIlq7%~||7#P7~Sq#|>Obo0HvJ5#4A`Hw7xeN>p91M(q7!*OaGcx2cgAYRzLkL4MLo!1OI2dEVYE$6ONr5{j1?n6Ih7^Vh zuya7HO0aX}8C=0mWM$A}FatZWo{hnlK^^Qyb_O2?39uVE7#JCB8SFrAWME*(XJ7+| zrh@ED24Qs(hTu&MhS~XATNrfPv)6<8Ahv0H_Id^e24=8F_`q?M&cMQu!63qr1$Hnb z{uJO2R$!=NFkxV~EDQw< z0t`h+Hp{?mmVwyJz`!8GP%VyZvj77lDCL9vJ=vN^sy-OxGtn&!7TL+`wYD$_Zeg&8 zxj=LagMD@~x|b^$SQsi9q!_A^EH;2!Yyh{|0M*A*42%p>a36zQ4@$iX^|CV=1d%MX zKm<3~dUV?x7+4q@8H5;`k!;5ZaBz6nBKum1fsvt(p&sOG1_lOi23Bx*^J;0;tIKX< z2$kK&VBNO{o=8FImw}-J$qHV$2YKNhznzf1sI$pg;IYEZv0 OGBh(VurM$&v;Y8Njky{C