You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

83 lines
2.1 KiB

package collider;
import gameobjects.*;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
/** Collider for round objects */
public class CircleCollider extends Collider {
double x;
double y;
double vx;
double vy;
double r;
private static Logger logger = LogManager.getLogger(Collider.class);
/**
* Constructor which sets the radius to be respected for collisions.
*
* @param id String unique name for the collider instance
* @param o GameObject it belongs to
* @param radius radius in pixels to use as a size
*/
public CircleCollider(String id, GameObject o, double radius) {
super(id, o);
this.r = radius;
}
/** simple concatenation of all attributes (x,y,r) */
public String toString() {
return "circ:" + x + " " + y + "/" + r + " ";
}
/**
* calculates the collission of this with other collider
*
* @param _c2 the other collider
* @return true if a collision was detected
* @throws Exception in case the math operations are invalid (due to illegal values of x y or
* radius)
*/
public boolean checkCollisionCircCirc(Collider _c2) throws Exception {
CircleCollider c2 = (CircleCollider) _c2;
CircleCollider c1 = this;
logger.trace(c1.x + " " + c1.y + " " + c1.r + " " + c2.x + " " + c2.y + " " + c2.r);
int kathete1 = (int) (Math.abs(c2.gameobject.getX() - c1.gameobject.getX()));
int kathete2 = (int) (Math.abs(c2.gameobject.getX() - c1.gameobject.getY()));
int hypothenuse = (int) (c1.r + c2.r);
logger.trace(kathete1 + " " + kathete2 + " " + hypothenuse + " ");
if (((kathete1 ^ 2) + (kathete2 ^ 2)) <= (hypothenuse ^ 2)) {
logger.trace("Collision");
return true;
}
return false;
}
@Override
public boolean collidesWith(Collider other) {
// circ circ
try {
return checkCollisionCircCirc(other);
} catch (Exception e) {
}
try {
return other.collidesWith(this);
} catch (Exception e) {
}
throw new RuntimeException("Collider type not implemented!");
}
}