package collision; import java.awt.Graphics2D; import java.awt.Graphics; import java.awt.geom.Point2D; import java.awt.Point; import java.awt.geom.Rectangle2D; import java.awt.geom.AffineTransform; import main.MapObject; import java.awt.Rectangle; import java.awt.Shape; import java.awt.geom.Area; public class Bound extends Area { public Bound(final Shape s) { super(s); } public boolean intersects(final Rectangle o, final MapObject parent) { if (o == null) { return false; } Area a; if (parent == null) { a = this; } else { a = this.createTransformedArea(new AffineTransform(1.0f, 0.0f, 0.0f, 1.0f, parent.getBoundX(), parent.getBoundY())); } return a.intersects(o); } public boolean contains(final Rectangle o, final MapObject parent) { if (o == null) { return false; } Area a; if (parent == null) { a = this; } else { a = this.createTransformedArea(new AffineTransform(1.0f, 0.0f, 0.0f, 1.0f, parent.getBoundX(), parent.getBoundY())); } return a.contains(o); } public boolean intersects(final Bound o, final MapObject parent, final MapObject oParent) { if (o == null) { return false; } Area a1; if (parent == null) { a1 = this; } else { a1 = this.createTransformedArea(new AffineTransform(1.0f, 0.0f, 0.0f, 1.0f, parent.getBoundX(), parent.getBoundY())); } Area a2; if (oParent == null) { a2 = o; } else { a2 = o.createTransformedArea(new AffineTransform(1.0f, 0.0f, 0.0f, 1.0f, oParent.getBoundX(), oParent.getBoundY())); } final Area intersection = new Area(a1); intersection.intersect(a2); return !intersection.isEmpty(); } public boolean contains(final Bound o, final MapObject parent, final MapObject oParent) { if (o == null) { return false; } Area a1; if (parent == null) { a1 = this; } else { a1 = this.createTransformedArea(new AffineTransform(1.0f, 0.0f, 0.0f, 1.0f, parent.getBoundX(), parent.getBoundY())); } Area a2; if (oParent == null) { a2 = o; } else { a2 = o.createTransformedArea(new AffineTransform(1.0f, 0.0f, 0.0f, 1.0f, oParent.getBoundX(), oParent.getBoundY())); } final Area combined = new Area(a1); combined.add(a2); return combined.equals(a1); } public boolean contains(final Point p, final MapObject parent) { Area a; if (parent == null) { a = this; } else { a = this.createTransformedArea(new AffineTransform(1.0f, 0.0f, 0.0f, 1.0f, parent.getBoundX(), parent.getBoundY())); } return a.contains(p); } public void draw(final Graphics g, final int x, final int y, final MapObject parent) { final Area a1 = this.createTransformedArea(new AffineTransform(1.0f, 0.0f, 0.0f, 1.0f, x + parent.getBoundX(), y + parent.getBoundY())); ((Graphics2D)g).draw(a1); } }