diff --git a/core/src/controller/Controller.java b/core/src/controller/Controller.java index 3861b55..30dbb11 100644 --- a/core/src/controller/Controller.java +++ b/core/src/controller/Controller.java @@ -120,6 +120,21 @@ public class Controller extends ApplicationAdapter implements InputProcessor{ } } } + for(Rectangle rect : gs.getObjectRects()){ + if(Intersector.overlaps(gs.getProjectileCirc(), rect)) { + + collision = true; + if (!isColliding) { + if (rect.getHeight() == 1) { + level[currentLevel].horizontalCollision(); + } else if (rect.getWidth() == 1) { + level[currentLevel].verticalCollision(); + } + isColliding = true; + break; + } + } + } if(!collision){ isColliding = false; diff --git a/core/src/model/Level.java b/core/src/model/Level.java index 1a621cc..664ed68 100644 --- a/core/src/model/Level.java +++ b/core/src/model/Level.java @@ -6,6 +6,7 @@ package model; import com.badlogic.gdx.math.Polygon; +import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.math.Vector2; import com.throwgame.main.ThrowMath; @@ -31,7 +32,7 @@ public class Level { private int traceIndex; public boolean[] isTraceInitialised; public Vector2[] traces; - Polygon[] polygons; + Rectangle[] objects; public Level(Goal goal, Projectile projectile, int xPosPivot, int yPosPivot){ this.goal = goal; @@ -46,8 +47,9 @@ public class Level { this.angle = 0; this.angleSpeed = 0; - polygons = new Polygon[1]; - polygons[0] = new Polygon(new float[]{500,500,502,500,602,600,600,600}); + objects = new Rectangle[2]; + objects[0] = new Rectangle(500,500,200,50); + objects[1] = new Rectangle(800,500,50,200); traceIndex = 0; isTraceInitialised = new boolean[50]; @@ -149,7 +151,7 @@ public class Level { public boolean released(){ return isReleased; } - public Polygon[] getPolygons(){ - return polygons; + public Rectangle[] getObjects(){ + return objects; } } diff --git a/core/src/view/Gamescreen.java b/core/src/view/Gamescreen.java index e64fa66..060ef03 100644 --- a/core/src/view/Gamescreen.java +++ b/core/src/view/Gamescreen.java @@ -17,6 +17,7 @@ import com.badlogic.gdx.math.Rectangle; import com.badlogic.gdx.math.Polygon; import com.badlogic.gdx.math.Vector2; import java.awt.Point; +import java.util.ArrayList; import model.Goal; import model.Level; @@ -50,7 +51,8 @@ public class Gamescreen{ // 0: Left, 1: LeftTop, 2: CenterLeft, 3: CenterBottom, 4: CenterRight, 5: RightTop, 6: Right, 7: Bottom float GAME_WORLD_WIDTH; float GAME_WORLD_HEIGHT; - Polygon[] objects; + Rectangle[] objects; + ArrayList objectRects; boolean win; @@ -60,7 +62,7 @@ public class Gamescreen{ pivotX = level.getPivotX(); pivotY = level.getPivotY(); g = level.getGoal(); - objects = level.getPolygons(); + objects = level.getObjects(); x = g.getxPos(); y = g.getyPos(); w = g.getSizeX(); @@ -70,6 +72,8 @@ public class Gamescreen{ win = false; + objectRects = new ArrayList(); + goalRects = new Rectangle[8]; @@ -82,6 +86,13 @@ public class Gamescreen{ goalRects[6] = new Rectangle(x + w-1 ,y ,1 ,h ); goalRects[7] = new Rectangle(x ,y ,w ,1 ); + for(Rectangle object : objects){ + objectRects.add(new Rectangle(object.getX(), object.getY(), 1, object.getHeight())); + objectRects.add(new Rectangle(object.getX(), object.getY() + object.getHeight() - 1, object.getWidth(), 1)); + objectRects.add(new Rectangle(object.getX() + object.getWidth()-1, object.getY(), 1, object.getHeight())); + objectRects.add(new Rectangle(object.getX(), object.getY(),object.getWidth(), 1)); + } + goalRect = new Rectangle(x + w*th, y + h*th, w * th * 3, h * 0.1f); projectileCirc = new Circle((float)level.getProjectile().getxPos(), (float)level.getProjectile().getyPos(), level.getProjectile().getRadius()); @@ -120,21 +131,33 @@ public class Gamescreen{ shapeRenderer.rect(x + th * w,y, th*3 * w,th * h); shapeRenderer.rect(x + th *w + th*3 * w, y, th * w,h); shapeRenderer.circle((float) p.getxPos(), (float) p.getyPos(), p.getRadius()); + + for(Rectangle object : objects){ + shapeRenderer.rect(object.getX(), object.getY(), object.getWidth(), object.getHeight()); + } + shapeRenderer.setColor(Color.RED); - /* //goal hitboxes for(int i = 0; i < goalRects.length; i++){ shapeRenderer.rect(goalRects[i].getX(), goalRects[i].getY(), goalRects[i].getWidth(), goalRects[i].getHeight()); } + // projectile hitbox shapeRenderer.circle(projectileCirc.x, projectileCirc.y, projectileCirc.radius); + // goal hitbox shapeRenderer.setColor(Color.GREEN); - shapeRenderer.rect(goalRect.getX(), goalRect.getY(), goalRect.getWidth(), goalRect.getHeight());/* + shapeRenderer.rect(goalRect.getX(), goalRect.getY(), goalRect.getWidth(), goalRect.getHeight()); + // full goal size hitbox; shapeRenderer.rect(g.getxPos(), g.getyPos(), g.getSizeX(), g.getSizeY()); */ + // object hitboxes + for(Rectangle object: objectRects){ + shapeRenderer.rect(object.getX(), object.getY(), object.getWidth(), object.getHeight()); + } + shapeRenderer.setColor(Color.GRAY); shapeRenderer.circle(pivotX, pivotY, 5); @@ -143,12 +166,7 @@ public class Gamescreen{ shapeRenderer.end(); - shapeRenderer.begin(ShapeRenderer.ShapeType.Line); - shapeRenderer.setColor(Color.BLACK); - for(Polygon object : objects){ - shapeRenderer.polygon(objects[0].getVertices()); - } - shapeRenderer.end(); + } @@ -173,6 +191,9 @@ public class Gamescreen{ public Circle getProjectileCirc(){ return projectileCirc; } + public ArrayList getObjectRects(){ + return objectRects; + } }