1
0
mirror of https://github.com/fazo96/AIrium.git synced 2025-04-01 22:48:39 +02:00
AIrium/core/src/logic/Element.java
2015-07-21 11:04:46 +02:00

124 lines
3.2 KiB
Java

package logic;
import com.badlogic.gdx.graphics.glutils.ShapeRenderer;
/**
* Represents a dynamic simulation element with a circular shape
*
* @author fazo
*/
public abstract class Element {
private float x, y, size;
/**
* Create an element at given position with given radius. Elements have a
* circular shape.
*
* @param x the x position
* @param y the y position
* @param size the element body radius
*/
public Element(float x, float y, float size) {
this.x = x;
this.y = y;
this.size = size;
}
/**
* Calculate the distance between the circumference of this element and
* another one's, taking into account the size. This means that two elements
* whose circumference is touching will have a distance of 0, and two
* overlapping elements will have a negative distance
*
* @param e the element whose distance from this one will be checked
* @return the distance from the element. It's 0 if they are just touching,
* negative if they are colliding and positive if they are not
*/
public float distanceFrom(Element e) {
return (float) Math.sqrt(Math.pow(e.x - x, 2) + Math.pow(e.y - y, 2)) - getSize() - e.getSize();
}
/**
* Checks if this element overlaps another one, causing a collision
*
* @param e the element which position will be checked to see if it overlaps
* this one
* @return true if the elements are overlapping, causing a collision
*/
public boolean overlaps(Element e) {
return distanceFrom(e) < 0;
}
/**
* Checks if this element overlaps a circular object, causing a collision
*
* @param x the position of the center of the circular object
* @param y the position of the center of the circular object
* @param radius the radius of the circular object
* @return true if the object overlaps this one
*/
public boolean overlaps(float x, float y, float radius) {
return (float) Math.sqrt(Math.pow(x - this.x, 2) + Math.pow(y - this.y, 2)) < getSize() + radius;
}
/**
* Check if a point in space occupies the same space as this object
*
* @param x the x position of the point to check
* @param y the y position of the point to check
* @return true if the point is part of this object's area
*/
public boolean overlaps(float x, float y) {
return overlaps(x, y, 1);
}
/**
* Translate this object is space
*
* @param deltaX x translation
* @param deltaY y translation
*/
public void move(float deltaX, float deltaY) {
x += deltaX;
y += deltaY;
}
/**
* Run one iteration of this object's logic
*/
public abstract void update();
/**
* Draw this object
*
* @param s the ShapeRenderer used to draw this object
*/
public abstract void render(ShapeRenderer s);
public float getX() {
return x;
}
public float getY() {
return y;
}
public float getSize() {
return size;
}
public void setX(float x) {
this.x = x;
}
public void setY(float y) {
this.y = y;
}
public void setSize(float size) {
this.size = size;
}
}