105 lines
2.1 KiB
Java
105 lines
2.1 KiB
Java
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.mutable(minX, minY), Vec2i.mutable(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<Vec2i> iterator()
|
|
{
|
|
return new Iterator<Vec2i>(){
|
|
Vec2i iter = Vec2i.mutable(min);
|
|
Vec2i result = Vec2i.mutable();
|
|
|
|
@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;
|
|
}
|
|
|
|
};
|
|
}
|
|
|
|
}
|