SimpleJavaEngine/src/main/java/speiger/src/coreengine/math/collision2d/Plane.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;
}
};
}
}