Пример #1
0
  @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;
  }
Пример #2
0
 /**
  * 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;
 }