From 2803a4f0483d8015ce7d6e87caf4c0b3a9e1a8a2 Mon Sep 17 00:00:00 2001 From: agreiner Date: Sun, 30 May 2021 18:55:09 +0200 Subject: [PATCH] Praktikum 8 --- .../game/managers/GamePlayManager.java | 39 ++++++++------- .../superpangworld/graphics/base/Bubble.java | 22 ++++++-- .../graphics/base/CollidableGameObject.java | 42 ++++++++++++++++ .../graphics/base/CollidingGameObject.java | 47 ++++++++++++++++++ .../graphics/moveable/Harpoon.java | 46 ++++++++++++----- .../graphics/moveable/HexagonalBubble.java | 23 +++++++-- .../graphics/moveable/Player.java | 34 ++++++++----- .../graphics/moveable/RoundBubble.java | 18 ++++++- .../graphics/moveable/SpecialBubble.java | 18 ++++++- .../Programmieren_2_jar/Programmieren 2.jar | Bin 709881 -> 713999 bytes .../game/managers/GamePlayManager.class | Bin 3789 -> 4613 bytes .../superpangworld/graphics/base/Bubble.class | Bin 2004 -> 3047 bytes .../graphics/base/CollidableGameObject.class | Bin 0 -> 1059 bytes .../graphics/base/CollidingGameObject.class | Bin 0 -> 1993 bytes .../graphics/moveable/Harpoon.class | Bin 2463 -> 3852 bytes .../graphics/moveable/HexagonalBubble.class | Bin 1416 -> 2315 bytes .../graphics/moveable/Player.class | Bin 2475 -> 2995 bytes .../graphics/moveable/RoundBubble.class | Bin 1521 -> 2380 bytes .../graphics/moveable/SpecialBubble.class | Bin 1590 -> 2446 bytes 19 files changed, 233 insertions(+), 56 deletions(-) create mode 100644 SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/base/CollidableGameObject.java create mode 100644 SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/base/CollidingGameObject.java create mode 100644 out/production/SuperPangWorld/de/thdeg/greiner/superpangworld/graphics/base/CollidableGameObject.class create mode 100644 out/production/SuperPangWorld/de/thdeg/greiner/superpangworld/graphics/base/CollidingGameObject.class diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/managers/GamePlayManager.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/managers/GamePlayManager.java index 9cdcfda..9d5f8f2 100644 --- a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/managers/GamePlayManager.java +++ b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/managers/GamePlayManager.java @@ -1,12 +1,17 @@ package de.thdeg.greiner.superpangworld.game.managers; import de.thdeg.greiner.superpangworld.gameview.GameView; +import de.thdeg.greiner.superpangworld.graphics.base.Bubble; +import de.thdeg.greiner.superpangworld.graphics.base.CollidableGameObject; import de.thdeg.greiner.superpangworld.graphics.base.Position; import de.thdeg.greiner.superpangworld.graphics.moveable.Harpoon; import de.thdeg.greiner.superpangworld.graphics.moveable.HexagonalBubble; import de.thdeg.greiner.superpangworld.graphics.moveable.RoundBubble; import de.thdeg.greiner.superpangworld.graphics.moveable.SpecialBubble; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import java.util.Random; /** @@ -75,11 +80,17 @@ public class GamePlayManager { private void addRandomBubble(){ int randomNumber = random.nextInt(100); if(randomNumber<60){ - gameObjectManager.getBubbles().add(new RoundBubble(gameView)); + RoundBubble roundBubble = new RoundBubble(gameView, new ArrayList<>(Arrays.asList(gameObjectManager.getPlayer()))); + roundBubble.setGamePlayManager(this); + gameObjectManager.getBubbles().add(roundBubble); }else if(randomNumber<90){ - gameObjectManager.getBubbles().add(new HexagonalBubble(gameView)); + HexagonalBubble hexagonalBubble = new HexagonalBubble(gameView, new ArrayList<>(Arrays.asList(gameObjectManager.getPlayer()))); + hexagonalBubble.setGamePlayManager(this); + gameObjectManager.getBubbles().add(hexagonalBubble); }else{ - gameObjectManager.getBubbles().add(new SpecialBubble(gameView)); + SpecialBubble specialBubble = new SpecialBubble(gameView, new ArrayList<>(Arrays.asList(gameObjectManager.getPlayer()))); + specialBubble.setGamePlayManager(this); + gameObjectManager.getBubbles().add(specialBubble); } } @@ -89,7 +100,9 @@ public class GamePlayManager { */ public void shootHarpoon(Position startPosition){ if(gameView.timerExpired("ShootHarpoon","GamePlayManager")){ - Harpoon harpoon = new Harpoon(gameView); + ArrayList collidableGameObjects = new ArrayList<>(); + collidableGameObjects.addAll(gameObjectManager.getBubbles()); + Harpoon harpoon = new Harpoon(gameView,collidableGameObjects); harpoon.getPosition().setTo(startPosition.x, startPosition.y); harpoon.setGamePlayManager(this); gameObjectManager.getHarpoons().add(harpoon); @@ -104,22 +117,12 @@ public class GamePlayManager { public void destroy(Harpoon harpoon){ gameObjectManager.getHarpoons().remove(harpoon); } - /** - * Moves the World to the left. - * - * @param speedInPixel Speed to move the World + * Remove a bubble from the game. + * @param bubble the bubble to remove */ - public void playerMovingRight(double speedInPixel) { - gameObjectManager.moveWorld(-speedInPixel, 0); + public void destroy(Bubble bubble){ + gameObjectManager.getBubbles().remove(bubble); } - /** - * Moves the World to the right. - * - * @param speedInPixel Speed to move the World - */ - public void playerMovingLeft(double speedInPixel) { - gameObjectManager.moveWorld(speedInPixel, 0); - } } diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/base/Bubble.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/base/Bubble.java index c3d64ff..c33064c 100644 --- a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/base/Bubble.java +++ b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/base/Bubble.java @@ -1,25 +1,30 @@ package de.thdeg.greiner.superpangworld.graphics.base; import de.thdeg.greiner.superpangworld.gameview.GameView; +import de.thdeg.greiner.superpangworld.graphics.moveable.Player; + +import java.util.ArrayList; /** * A Bubble, which moves around on the screen and can be shot by the player. */ -public abstract class Bubble extends GameObject implements MovingGameObject{ +public abstract class Bubble extends CollidingGameObject implements MovingGameObject{ /** Flag, if the bubble flies from left to right */ private boolean flyFromLeftToRight; /** * Create a bubble with default values. + * * @param gameView the {@link GameView} to display the bubble + * @param objectsToCollideWith the list of {@link CollidableGameObject} the bubble can collide with */ - public Bubble(GameView gameView){ - super(gameView); + public Bubble(GameView gameView, ArrayList objectsToCollideWith){ + super(gameView,objectsToCollideWith); rotation = 90; size = 5; - width = 12; - height = 12; + width = (int) (12 * size); + height = (int) (12 * size); speedInPixel = 5; flyFromLeftToRight = true; } @@ -55,4 +60,11 @@ public abstract class Bubble extends GameObject implements MovingGameObject{ * Freezes the time. */ private void freezeTime(){} + + @Override + public void reactToCollision(CollidableGameObject otherObject) { + if(otherObject instanceof Player){ + System.out.println("You died!"); + } + } } diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/base/CollidableGameObject.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/base/CollidableGameObject.java new file mode 100644 index 0000000..c459829 --- /dev/null +++ b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/base/CollidableGameObject.java @@ -0,0 +1,42 @@ +package de.thdeg.greiner.superpangworld.graphics.base; + +import de.thdeg.greiner.superpangworld.gameview.GameView; + +import java.awt.*; + +/** + * Represents all game objects that are able to collide with something. + */ +public abstract class CollidableGameObject extends GameObject { + + protected Rectangle hitBox; + + protected CollidableGameObject(GameView gameView) { + super(gameView); + this.hitBox = new Rectangle(-100_000, -100_000, 0, 0); + } + + @Override + public void update() { + super.update(); + updateHitBoxPosition(); + } + + /** + * Used to update the hitBox position of the game object. + */ + protected abstract void updateHitBoxPosition(); + + @Override + public void adaptPosition(double adaptX, double adaptY) { + super.adaptPosition(adaptX, adaptY); + updateHitBoxPosition(); + } + + /** + * If a GameObject has collided with something, it is able to react to the collision + * + * @param otherObject The other GameObject that is involved in the collision. + */ + public abstract void reactToCollision(CollidableGameObject otherObject); +} diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/base/CollidingGameObject.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/base/CollidingGameObject.java new file mode 100644 index 0000000..1a89f11 --- /dev/null +++ b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/base/CollidingGameObject.java @@ -0,0 +1,47 @@ +package de.thdeg.greiner.superpangworld.graphics.base; + +import de.thdeg.greiner.superpangworld.gameview.GameView; + +import java.util.ArrayList; + +/** + * An object that can actively collide with other objects, e.g. a shot. + */ +public abstract class CollidingGameObject extends CollidableGameObject { + + protected final ArrayList objectsToCollideWith; + + protected CollidingGameObject(GameView gameView, ArrayList objectsToCollideWith) { + super(gameView); + this.objectsToCollideWith = objectsToCollideWith; + } + + @Override + public void update() { + super.update(); + checkCollisions(); + } + + /** + * Used to check possible collisions that are actively caused by this game object. Both parties are notified + * about the collision. + */ + private void checkCollisions() { + for (CollidableGameObject collidableGameObject : objectsToCollideWith) { + if (collidesWith(collidableGameObject)) { + reactToCollision(collidableGameObject); + collidableGameObject.reactToCollision(this); + } + } + } + + /** + * Determines if this game object is collided with the other game object. + * + * @param other The other game object. + * @return true if the there was a collision. + */ + protected final boolean collidesWith(CollidableGameObject other) { + return this.hitBox.intersects(other.hitBox); + } +} diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/Harpoon.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/Harpoon.java index 49a7c97..c7180cc 100644 --- a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/Harpoon.java +++ b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/Harpoon.java @@ -1,34 +1,53 @@ package de.thdeg.greiner.superpangworld.graphics.moveable; import de.thdeg.greiner.superpangworld.gameview.GameView; -import de.thdeg.greiner.superpangworld.graphics.base.Bubble; -import de.thdeg.greiner.superpangworld.graphics.base.GameObject; -import de.thdeg.greiner.superpangworld.graphics.base.MovingGameObject; +import de.thdeg.greiner.superpangworld.graphics.base.*; + +import java.awt.*; +import java.util.ArrayList; /** * A harpoon which can be fired upwards by the player. */ -public class Harpoon extends GameObject implements MovingGameObject { +public class Harpoon extends CollidingGameObject implements MovingGameObject { private final static String HARPOON = - " B \n"+ - " BBB \n"+ - " kkkkk \n"+ - " k kkk k\n"+ - " k kkk k\n"; + " B \n"+ + " BBB \n"+ + " kkkkk \n"+ + "k kkk k\n"+ + "k kkk k\n"; /** * Create a harpoon with default values + * * @param gameView the {@link GameView} to display the bubble + * @param objectsToCollideWith the list of {@link CollidableGameObject} the harpoon can collide with */ - public Harpoon(GameView gameView){ - super(gameView); + public Harpoon(GameView gameView, ArrayList objectsToCollideWith){ + super(gameView, objectsToCollideWith); speedInPixel = 1; size = 3; - width = 11; - height = 11; + width = (int) (7 * size); + height = (int) (5 * size); rotation = 0; getPosition().setTo(300,300); + this.hitBox.width = (int) (width); + this.hitBox.height = (int) (height); + } + + @Override + protected void updateHitBoxPosition() { + hitBox.x = (int) (position.x); + hitBox.y = (int) (position.y); + } + + @Override + public void reactToCollision(CollidableGameObject otherObject) { + gamePlayManager.destroy(this); + if(Bubble.class.isAssignableFrom(otherObject.getClass())){ + gamePlayManager.destroy((Bubble)otherObject); + } } /** @@ -37,6 +56,7 @@ public class Harpoon extends GameObject implements MovingGameObject { @Override public void addToCanvas(){ gameView.addBlockImageToCanvas(HARPOON, getPosition().x, getPosition().y,size, rotation); + gameView.addRectangleToCanvas(hitBox.x, hitBox.y, hitBox.width, hitBox.height,1,false, Color.red); } @Override diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/HexagonalBubble.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/HexagonalBubble.java index 9a9f584..5a54720 100644 --- a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/HexagonalBubble.java +++ b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/HexagonalBubble.java @@ -2,7 +2,10 @@ package de.thdeg.greiner.superpangworld.graphics.moveable; import de.thdeg.greiner.superpangworld.gameview.GameView; import de.thdeg.greiner.superpangworld.graphics.base.Bubble; +import de.thdeg.greiner.superpangworld.graphics.base.CollidableGameObject; +import java.awt.*; +import java.util.ArrayList; import java.util.Random; /** @@ -14,20 +17,34 @@ public class HexagonalBubble extends Bubble { * Create a hexagonal bubble with default values. * * @param gameView the {@link GameView} to display the bubble + * @param objectsToCollideWith the list of {@link CollidableGameObject} the bubble can collide with */ - public HexagonalBubble(GameView gameView) { - super(gameView); + public HexagonalBubble(GameView gameView, ArrayList objectsToCollideWith) { + super(gameView,objectsToCollideWith); Random rand = new Random(); - position.setTo(rand.nextInt(GameView.WIDTH),rand.nextInt(GameView.HEIGHT)); + position.setTo(rand.nextInt(GameView.WIDTH/2),rand.nextInt(GameView.HEIGHT/2)); size=0.6; speedInPixel = 2; + + width = (int) (128 * size); + height = (int) (128 * size); + + this.hitBox.width = (int)(width-20); + this.hitBox.height = (int)(height-20); + } + + @Override + protected void updateHitBoxPosition() { + hitBox.x = (int) (position.x+10); + hitBox.y = (int) (position.y+10); } @Override public void addToCanvas() { gameView.addImageToCanvas("hexagon.png",position.x,position.y,size,rotation); + gameView.addRectangleToCanvas(hitBox.x, hitBox.y, hitBox.width, hitBox.height,1,false, Color.red); } @Override diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/Player.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/Player.java index 1d5802b..91fccb5 100644 --- a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/Player.java +++ b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/Player.java @@ -1,6 +1,7 @@ package de.thdeg.greiner.superpangworld.graphics.moveable; import de.thdeg.greiner.superpangworld.gameview.GameView; +import de.thdeg.greiner.superpangworld.graphics.base.CollidableGameObject; import de.thdeg.greiner.superpangworld.graphics.base.GameObject; import de.thdeg.greiner.superpangworld.graphics.base.MovingGameObject; @@ -9,7 +10,7 @@ import java.awt.*; /** * The game character controlled by the player. */ -public class Player extends GameObject { +public class Player extends CollidableGameObject { /** Flag, if the player is shooting */ private boolean shooting; @@ -44,9 +45,23 @@ public class Player extends GameObject { position.setTo(GameView.WIDTH/2, GameView.HEIGHT/1.5); shooting = false; size = 3; - width = (int) size * 12; - height = (int) size * 12; + width = (int) size * 11; + height = (int) size * 17; speedInPixel = 5; + + this.hitBox.width = (int) (width - (2*size)); + this.hitBox.height = (int) (height - (1*size)); + } + + @Override + protected void updateHitBoxPosition() { + hitBox.x = (int) (position.x + (1*size)); + hitBox.y = (int) (position.y + (1*size)); + } + + @Override + public void reactToCollision(CollidableGameObject otherObject) { + } @Override @@ -57,6 +72,7 @@ public class Player extends GameObject { gameView.addBlockImageToCanvas(SPIELFIGUR, position.x, position.y, size, rotation); } shooting = false; + gameView.addRectangleToCanvas(hitBox.x, hitBox.y, hitBox.width, hitBox.height,1,false, Color.red); } @Override @@ -66,19 +82,11 @@ public class Player extends GameObject { /** Moves the character to the left */ public void left(){ - if (position.x > 300) { - position.left(speedInPixel); - } else { - gamePlayManager.playerMovingLeft(speedInPixel); - } + position.left(speedInPixel); } /** Moves the character to the right */ public void right(){ - if (position.x < GameView.WIDTH - width - 300) { - position.right(speedInPixel); - } else { - gamePlayManager.playerMovingRight(speedInPixel); - } + position.right(speedInPixel); } /** Moves the character upwards */ public void up(){ diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/RoundBubble.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/RoundBubble.java index dff880b..7f200ce 100644 --- a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/RoundBubble.java +++ b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/RoundBubble.java @@ -2,7 +2,10 @@ package de.thdeg.greiner.superpangworld.graphics.moveable; import de.thdeg.greiner.superpangworld.gameview.GameView; import de.thdeg.greiner.superpangworld.graphics.base.Bubble; +import de.thdeg.greiner.superpangworld.graphics.base.CollidableGameObject; +import java.awt.*; +import java.util.ArrayList; import java.util.Random; @@ -30,12 +33,22 @@ public class RoundBubble extends Bubble { * Create a round bubble with default values. * * @param gameView the {@link GameView} to display the bubble + * @param objectsToCollideWith the list of {@link CollidableGameObject} the bubble can collide with */ - public RoundBubble(GameView gameView) { - super(gameView); + public RoundBubble(GameView gameView, ArrayList objectsToCollideWith) { + super(gameView,objectsToCollideWith); Random rand = new Random(); position.setTo(rand.nextInt(GameView.WIDTH),rand.nextInt(GameView.HEIGHT)); + + this.hitBox.width = width-20; + this.hitBox.height = height-20; + } + + @Override + protected void updateHitBoxPosition() { + hitBox.x = (int) (position.x+10); + hitBox.y = (int) (position.y+10); } /** @@ -44,6 +57,7 @@ public class RoundBubble extends Bubble { @Override public void addToCanvas(){ gameView.addBlockImageToCanvas(RED_BUBBLE, getPosition().x, getPosition().y,size, rotation); + gameView.addRectangleToCanvas(hitBox.x, hitBox.y, hitBox.width, hitBox.height,1,false, Color.yellow); } @Override diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/SpecialBubble.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/SpecialBubble.java index ad2aa4e..6bad40c 100644 --- a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/SpecialBubble.java +++ b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/SpecialBubble.java @@ -2,7 +2,10 @@ package de.thdeg.greiner.superpangworld.graphics.moveable; import de.thdeg.greiner.superpangworld.gameview.GameView; import de.thdeg.greiner.superpangworld.graphics.base.Bubble; +import de.thdeg.greiner.superpangworld.graphics.base.CollidableGameObject; +import java.awt.*; +import java.util.ArrayList; import java.util.Random; /** @@ -29,17 +32,28 @@ public class SpecialBubble extends Bubble { * Create a special bubble with default values. * * @param gameView the {@link GameView} to display the bubble + * @param objectsToCollideWith the list of {@link CollidableGameObject} the bubble can collide with */ - public SpecialBubble(GameView gameView) { - super(gameView); + public SpecialBubble(GameView gameView, ArrayList objectsToCollideWith) { + super(gameView,objectsToCollideWith); Random rand = new Random(); position.setTo(rand.nextInt(GameView.WIDTH),rand.nextInt(GameView.HEIGHT)); + + this.hitBox.width = width-20; + this.hitBox.height = height-20; + } + + @Override + protected void updateHitBoxPosition() { + hitBox.x = (int) (position.x+10); + hitBox.y = (int) (position.y+10); } @Override public void addToCanvas() { gameView.addBlockImageToCanvas(GREEN_BUBBLE,position.x,position.y,size, rotation); + gameView.addRectangleToCanvas(hitBox.x, hitBox.y, hitBox.width, hitBox.height,1,false, Color.red); } @Override diff --git a/out/artifacts/Programmieren_2_jar/Programmieren 2.jar b/out/artifacts/Programmieren_2_jar/Programmieren 2.jar index 19b42e704bca763df01940c16b11b9034d90a667..ce63d0b146969e06ec82fd6bcb57eb5ecc609bf3 100644 GIT binary patch delta 12935 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 MWFQcB(_P2^2Y)jNPXGV_ diff --git a/out/production/SuperPangWorld/de/thdeg/greiner/superpangworld/game/managers/GamePlayManager.class b/out/production/SuperPangWorld/de/thdeg/greiner/superpangworld/game/managers/GamePlayManager.class index afc9d05e709c3c31a7d7aece4f1239b1c8a90abe..b2a35aad93386cadbf5133fba63ac8401c871219 100644 GIT binary patch delta 1804 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 OvPEcK#TWPrNB;q*v@$RN delta 887 zcmah`Nl#Nz6#nk(@JhY37K>$&f)!|a6^e!#mC7JiK?^Dl$U@{P#D*A(kr)k2-IBX- ziV3dRXoQ49!orm+*Zv3hu3QAu7q0m#8k=?TH9P1D}x`E5{D5H@H}3aTb>sX8C|WGsL@sLyuEOL zep#1}NYo)9AoCAxdoHt>U0AVm`l4Q<0Y}v{QRh7-(TFCsF2)0KBuunOSV#(VX@1pW zw0T=4+K^H+#z-)Z6A~viq*yW0p|*^HWE?$``unJ7NfQgW6T>Z2e#CJ~;GMGZ)90X7&^=-T=p~2rArPGA)0OCTSM&VXra8`0Nj)L7fA zXlELJ&JcQVH;m4gZ*jnK(aHvDb>kb_)QxBlym|+2k5>*rK-Ysi=-%LjbL`jtUHkku zp@D7_e8+yqG%bzN)FfJQ3n|CHBY3(bI70w0Uq2EuY3{;b@k!RTG4XH1j_Zznu0;vN pz{UR$_7(>_9r{0$E{u`Hz&I}P?<3`9e%ElFnV+W{)O{P(zX3rTeHs7& diff --git a/out/production/SuperPangWorld/de/thdeg/greiner/superpangworld/graphics/base/CollidableGameObject.class b/out/production/SuperPangWorld/de/thdeg/greiner/superpangworld/graphics/base/CollidableGameObject.class new file mode 100644 index 0000000000000000000000000000000000000000..3c5f096314ae62dcfecea9b2a39eb3e8df26d3cf GIT binary patch literal 1059 zcma)4+iuf95Iq|^b>g^92x&^WCgsxDMfd>;fr5BwBMMT)t(8UJx`|iGR&E^GP6MCC z14IIe58$H;vrdXsTFLCgYG-EW%$YOu>-76i0MGEyL=Kt(-9jEq3{QRGCPQBg+(9Jd zNJMTt8H;GlM}uh?1wOg?cqsd^+vBltcloh++dC5dgkkBq9LeMb!;@Aw6NU0lq?o1v z9zEK&XQ04PJ>nn@+nGhr zQQrxJK>EBFh;vO0WwIT9VyJa5GHENZY8F;er*ZnBY>z?T34OvVcS-j*ljEL<_7y!6r5pBn;PFT* zd*RfRp^O1FPPlc+CVN~O{IW%GQbW~eu5I62yOQdn&Yz4G*;btlhlvi4}VRD8|Znt?e# zU>sD7)uN`&V1C8&7YgNYhwc?1cJM`N5D*N$)Z3zwSl5D z!&T=S*8YWDB|dc&D7irp7JaABb4XoRTSYcg%d-G{PZaXxD><9?4A(D%Y*2emn8d0< g9~&w2(qEP(+{c5oObMIx(sYIv?6izScMe;B0H-ngJpcdz literal 0 HcmV?d00001 diff --git a/out/production/SuperPangWorld/de/thdeg/greiner/superpangworld/graphics/base/CollidingGameObject.class b/out/production/SuperPangWorld/de/thdeg/greiner/superpangworld/graphics/base/CollidingGameObject.class new file mode 100644 index 0000000000000000000000000000000000000000..ed78d6aa1904b621d3f5ed7cacfbfebbb452123e GIT binary patch literal 1993 zcmb_dU2hXd6g^`*S=(7i2u?x?1pROB$PmFsMMfTN}nd{kv(9%*6y0X zZ|D<`{DQvp1&Id11L|}CLjOrsm7dvMLo6&Ap~%wCojZ5#x%ZyA*MI%@`VD}q_&$#m z(iSo{hA=F!R#Q&csHwVB_myrb-w8Tx<+o+4zU%qT8r8Dh&~D)D$Ur&kUbCrda;K>_ zjI?rNb40OU3Fyf4uidt6j%9*rHG=ZRL1LwE}eEwhDsn^EN$f( z*tm_O=3vxqDEC3+Ezn*o$YTPN7N%?*!)F3V`#2WJ>QMPI^n8KIVrd`v?L=Q0!8A@- z_}s=xoDvv+@1|=aU^QfLS3PE>8PvA9F=OKl&I)8&k-E_J-6U^LObfHh;+&21_(H&T zBjQvLmto^0c|bA`JmA1_D#Xe!fcE0=Z3H zZ^^LZ^Huz^kHdElXnF9fA6(6qiog#a!OI8z(=Q@66(7gCS7XSdRrdAW&chw$-!lxd z7*)@e%`NF`vrm+nu%TIo^-s#Br~8;lww`piz{SB1KS+t)(i`HFb~ntY2UVg2BFz-K z5O-H^dkEYZocZ8qA#i9jl?xdOhDFR^fzk!cM&Of#n8rA6;5$mdQWC~Z$~MyfB5PrK_8*=V v%-~G|yUx9_wi(#M+zTx2;mhB-kCPmZvR`=T-+1cQ)W!ypOnq)e_P75BICd3v literal 0 HcmV?d00001 diff --git a/out/production/SuperPangWorld/de/thdeg/greiner/superpangworld/graphics/moveable/Harpoon.class b/out/production/SuperPangWorld/de/thdeg/greiner/superpangworld/graphics/moveable/Harpoon.class index 7b6571182ee095d038bfee379c5d754150c81459..fde0416e29b5104727d5151648087f835099fcbc 100644 GIT binary patch literal 3852 zcmb_fX?Gh%7QJN$wJo=;VB};7Nh}}%F99VJ28fjyZzML66DKxi2*V6*sYdFktrp!a zJ7(X*EbLptzHgskPOLeH4|DhmKZ-NAx?77KgA50qw5#e>)vNpNTdMNoPv89yz#)7c zMGIOrY|(KAA_AjXne_5mnM>vzX%?lEbju~_l#F6-*>{M~aJSQyyF%cPQBN_au zL$>O;Qk}5HH6N0Zk)8FK9v$1TUEqpkGwbEKaVjzruTNj2W2c&q%u&G;-1rxT84?Zb>c%>s>!)8x*9XIEG0LQ#$U#ae*UE`Tr$t z0$NtOo@1{F3~wTlsX;){)~Ic`MPNq4>10e|5eEmIJhatudP#USP6-N% zR^!wJe=2j&qM*Uju?Uu!u3A#EY}<_YR!3&(fqE+Ya{4Tbl8y(#C2<~FOYp`s)d>@4 z)^F{fS2f7fQN|J(_Ur(U@@ZpigebdNwa)2S!9xPu7mb1(w~HCWyT|nM?76He9__nf z1N$~mrVf5Y$D?>mpru@50q-LP8lGVKG-Z2D=ug{A>uxk{a`g1f$&)8o*cw7Jv_hb> zigwpY8JDx3kts|Yr7+Sun9TJY?h1^po2dr^Zt}_u$mpzHb~5s)sUlYo zUr#ry8bU6{Y}<1^+BPk{yq$Gp5xf`0`}jb^hbp5#64+C(^=5I&F34n%FhPmq2velTiM<{Fu3o(5CgGQXajL{t|G>!d*Bjcg%?*5=im?3 z!H$8hRqPt5AQ8tN{;S{yPVM6tU&a2gyJHmxzop_?70ze98{vdQ4#t=CBvfab+R^h4XlxBf?YHErF}vKk!e2{}=muP4aI_UZA7}FJcQ` z!podd=AEJ*wW~Kob;~8(PIFTA;Sml;6wnqQXqSI*KVpQu8-qTW;F#VJ466=a4b_|6 z)xy0A>Kh{=N4wL56`ZJG?jpLBZ18)eD>zdpqMPu5B>l4=ahl$XgZ>%Y0zEZ@6L<}; z^OQHZnkMwJ`)19m$I!_!kmeEhcN@wRv@2+iP!{92tAdQ0=C|(>Qs;wqBy9JG?ZNZ0 z*8jk)z+O+m5TT`T9ETeyNY^Of)l3A6;oI0MES>833f%9o417aDz-Ppt9BEL}SyS>> z&7h&sO}bJ-q*?_J*8!>jUILR0oT&yqdQH!Tnw}Z5tHAV72VH%n>%x2JVBhym-3ft{ tXBa=H=!Dq@r9Gk2koGunUG!~v8}G1fqxN_CeT+{zin8|^zQ9+w`u|r5C#wJe delta 1030 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 By*~f| delta 1159 zcmZuw%Tg0T6g`~>kkG^gQ=(Q%6a>N$MZ!bEOOS`C3@VQx2$cM3;u!S?HQZ|%Eff|?Y{S%)2HuzuKIM^`{U1-ZvbM@cf9h> zDapO0tgFqtufH?nmt%mn85f;DV?lIqTt^K9d+9+CF^(=X+VX&*hoe_SWxAGAaw#q2 zMFnnf^kcxNaJ4m+^y`O20eGo&m}3OD7+h&}B}Y?us4*@;ZgbqhUBly!`(%ul;vUC+ zk=MK9zhv~gLwN>&Hmz)_x~y%cGOJ@$F7PHeCPkiGPpu|tN5(WqTKn9KL5t-zS;JfPrcrRu&;v1=>xi(qvQ^s4!?TBWifHN-D(LGz zK%eB?$GL(AADmPbLp8c_89gQ+w~&tb7@pZIO_VEGSOK8K+!!b-WM*MrWRBRCNx00! zu%)Oyh?{ReARr?8A_o}y2p_FRt!PXTI3ZlBq)K2IK0*s&6b;mC!WBzp_()}jc3g0T zgbR~`HE-IYAJIky5&02t9@45d5nz$Tt9S2<1w1$=VCtj*8D}w$dTQ(zOcV)-9v4tA z1k92E>Ur@lU33fK7#9MpyUi5L^O`R^jdJSx!kxJ7{Jiboe{kkb;>;4x+&>)Ew8&~1 t2F(TdbAW{cn$;5v)R&9!(;rn(7O<6N3BrNre*tsJw@&~7 diff --git a/out/production/SuperPangWorld/de/thdeg/greiner/superpangworld/graphics/moveable/RoundBubble.class b/out/production/SuperPangWorld/de/thdeg/greiner/superpangworld/graphics/moveable/RoundBubble.class index d928baae7142914d7e62c1bcfc9bce7a0584f025..2e7454f755323c7e8ba3b940367e00854803014a 100644 GIT binary patch literal 2380 zcmb_dTT|Os5dMyFY%s!H0%=3jT$%v3xu_{5B@rRPm?SPPNewY2X`9N{sVyQTk1Rvz zLtlC8OyBz>+72Nz?M$c7{ZXCnO1=8Y5n&A?D zfz?E=V+4Ii?wWE>eLzBi1TD9%@9JvZGc9$=b@lz6S@X1HA&PE+fwnKN+lE7cqlhuu zUV*Meve1J*#G~j}Fn~dUI~~(E3)pdXrB3M8yi>Q0W+mNKr)GMlV++i8E~OdEZ^q-s zNiB-A0@phNIoSuUY(&91yeAN~{EdWoT*7~ z!=W{i$po#tq~J2H&<$2hFYUY(7!Gbj-}BVGEO~VCmejb(R~1~t7@gfS4X+{~vOSo< z)hH4IL;fwjafXki6io7wNJX0EipTp?Jygn!0u>)q2+Aiik$cyOi}bL6j$LEC>865D z{Z0F9zr`Ba`=BXUz#W0^a)Untvz>41WV5wy+!grwGCg^Ec#W~V+0aM{WcI~cGHJ1< zop=79vPquivq_4dgbXBe9^b`skTkFdN*hj$id|BW#vF-VP9I7vqv9yn`^#HC)(HRph&aVMw9Qy$N)`+64RTv|tNw58a<>0X%L2PwPiMYHg9y_N<#_TleZN z_3Ed0HT2&RI;O&Ky=v&5eCSWL_LtL3q-t|X2{x@0>Fac_v2~~JmgIet2{3T%Z()WR zj4Sk|glJ3&jN(gd(fX9M5Ec<8nf^XWenysGNDkAQPEAg|hWG=~t=H&TOC3U)9_;$- z2*U@{gP{w&9^rj5U!?b=fnnnn#v5AF*QS1@C|&r9en%-fXbeV>L>wuMVG6UD#u8@m zHF;7&Mtp`Osjgwe3T%vZYQbXEUaxE;| bEi99SgRzKqfQWBMA3G>o2Vcr$C~z!|kUKwuSms!flXla(zm!0Uqbz~hYo~qDZaG&5 zOjJ15u^}w2EWWiT(ep*cuYTI8ViOEow2y)~RO)@uDQ^?vP_I%=S@sa@1vBSE_#4&$ zJRefuT+BV>LrPRu7vcU$Vu!K`jdFs>DOx6tBr@0~B<6`>5BoHcEFqmm@(Lo18V+a! zhC>9#?oAlf0WmV1H{+Iz6pG&>*c^Z?c!<(q%WZ*@WVQ zue>?qyMKf_l+Ngkv?(#aDs(v+IHrdOcSWMaj)ZEnOA6DqU$?3=8dxX+-mm<4NF| zh~PZKY+ER&PeRo;qTvGGV~AMdm7B3#hHxws&qQ$%qY-?d;SxS%xZO7PnZOv%RfW50 z6OE-({^4EGa2406hh^y|?NmA#Rv?k!^U4-&@+3tY zdiCXh30q`oJX<7qNk~Dw%Hx?7?=+=*ey#c ze5L(hG;Ye-3n4-E*@a!Y2vsW0Hce@WEvd$T#0Pz9ZxK$17FDw*&+M-*3U%Qm)PqU` z?(?&PE&YG+-v067sY6h^^|6OKu}o>ZbFyS{x8~4k{rIj{^gBYQ#$mWtF}N!pdK;** zMHzZ%uv+t^`5)zI>TA?lt-3GWVmZCDL%pHF}^}L{2REn`+2$ zjV@D&mJY)xHu02bo}>_#(Mdf09TLAqnxBae6HQJ|O}_#A9g*!f=w6>Zf;KbQ@#isy z4`&8LmlQq5`=q{1??(f}#%qiRQrwfKf1xNH_>z7{DLODtzcKV7jxk!3bC|{oX0T0` zNk1c=;WGtbS$@b%%0)MAPGeXyZ->8$6;;& delta 550 zcmah_J5K^Z7@WQ15YD9lEg&I^2&f#s5yS_IVky=Z78Vv*NK^{7p|mqG_X~`Lr6D0l zqKUDx@DKQFG|qBF5+$+tUb8zh-|o$jBhB}(rxySP?A)4rB4>XZ+2;MJu-~+j7`J`; zT_u8~L<$oE;(}53BZ4W3bO*WgBY=#=w3OOzAtg>A7YGV#Xd}dZJuZ-e*?o#Kw