@Override public boolean collidesWith(ICollidable obj) { if (this == obj) { return false; } if (Game.debug) { if (obj == null) { System.out.println("Welll...something else went wrong"); } } // int r1 = (int)this.getX() + this.getCollisionBoxWidth(); // int l1 = (int)this.getX(); // int t1 = (int)this.getY(); // int b1 = (int) this.getY() + this.getCollisionBoxHeight(); // // int r2 = (int)obj.getX() + obj.getCollisionBoxWidth(); // int l2 = (int)obj.getX(); // int t2 = (int)obj.getY(); // int b2 = (int) obj.getY() + obj.getCollisionBoxHeight(); // // // if ((r1 < l2) || (l1 > r2) || (t2 < b1) ||(t1 < b2)){ // return false; // } // // return true; boolean result = false; Point thisCenter = getCenter(); Point otherCenter = obj.getCenter(); int thisCenterX = (int) (thisCenter.getX() + this.getCollisionRadius()); // find centers int thisCenterY = (int) (thisCenter.getY() + this.getCollisionRadius()); int otherCenterX = (int) (otherCenter.getX() + obj.getCollisionRadius()); int otherCenterY = (int) (otherCenter.getY() + obj.getCollisionRadius()); // find dist between centers (use square, to avoid taking roots) int dx = thisCenterX - otherCenterX; int dy = thisCenterY - otherCenterY; int distBetweenCentersSqr = (dx * dx + dy * dy); // find square of sum of radii int thisRadius = this.getCollisionRadius(); int otherRadius = obj.getCollisionRadius(); int radiiSqr = (thisRadius * thisRadius + 2 * thisRadius * otherRadius + otherRadius * otherRadius); if (distBetweenCentersSqr <= radiiSqr) { result = true; } return result; }
/** * returns how much the two objects circles overlap * * @param obj * @return */ public int getCollisonOvelap(ICollidable obj) { Point thisCenter = getCenter(); Point otherCenter = obj.getCenter(); int thisCenterX = (int) (thisCenter.getX()); // + this.getCollisionRadius()); // find centers int thisCenterY = (int) (thisCenter.getY()); // + this.getCollisionRadius()); int otherCenterX = (int) (otherCenter.getX()); // + obj.getCollisionRadius()); int otherCenterY = (int) (otherCenter.getY()); // + obj.getCollisionRadius()); // find dist between centers (use square, to avoid taking roots) int dx = thisCenterX - otherCenterX; int dy = thisCenterY - otherCenterY; int distBetweenCentersSqr = (dx * dx + dy * dy); // find square of sum of radii int thisRadius = this.getCollisionRadius(); int otherRadius = obj.getCollisionRadius(); int radiiSqr = (thisRadius * thisRadius + 2 * thisRadius * otherRadius + otherRadius * otherRadius); if (distBetweenCentersSqr <= radiiSqr) { // System.out.println(radiiSqr - distBetweenCentersSqr); return (int) Math.sqrt(radiiSqr - distBetweenCentersSqr); } return 0; }