package speiger.src.coreengine.math.collision2d; import java.util.Iterator; import speiger.src.coreengine.math.vector.ints.Vec2i; public class Plane implements I2DCollision { Vec2i min; Vec2i max; public Plane() { this(0, 0, 0, 0); } public Plane(int minX, int minY, int maxX, int maxY) { this(Vec2i.newMutable(minX, minY), Vec2i.newMutable(maxX, maxY)); } public Plane(Vec2i center, int radius) { this(center.sub(radius), center.add(radius)); } public Plane(Vec2i min, Vec2i max) { this.min = min; this.max = max; } public Plane set(Plane other) { min.set(other.getMin()); max.set(other.getMax()); return this; } public Plane set(int minX, int minY, int maxX, int maxY) { min.set(minX, minY); max.set(maxX, maxY); return this; } @Override public boolean isColliding(int x, int y) { return x >= min.getX() && y >= min.getY() && x < max.getX() && y < max.getY(); } public boolean isIntersecting(Plane plane) { return isIntersecting(plane.getMinX(), plane.getMinY(), plane.getMaxX(), plane.getMaxY()); } public boolean isIntersecting(int minX, int minY, int maxX, int maxY) { return min.getX() <= maxX && max.getX() >= minX && min.getY() <= maxY && max.getY() >= minY; } public Vec2i getMin(){return min;} public Vec2i getMax(){return max;} public int getWidth(){return max.getX() - min.getX();} public int getHeight(){return max.getY() - min.getY();} public int getMinX(){return min.getX();} public int getMinY(){return min.getY();} public int getMaxX(){return max.getX();} public int getMaxY(){return max.getY();} @Override public Iterator iterator() { return new Iterator(){ Vec2i iter = Vec2i.newMutable(min); Vec2i result = Vec2i.newMutable(); @Override public boolean hasNext() { return iter != null; } @Override public Vec2i next() { result.set(iter); iter.add(1, 0); if(iter.getX() == max.getX()) { iter.set(min.getX(), iter.getY() + 1); if(iter.getY() == max.getY()) { iter = null; } } return result; } }; } }