abstract class Shape {
    public bounds: Rectangle = new Rectangle();
    public position: Vector2 = Vector2.zero;
    public abstract center: Vector2;

    public abstract recalculateBounds(collider: Collider);
    public abstract pointCollidesWithShape(point: Vector2): CollisionResult;
    public abstract overlaps(other: Shape);
    public abstract collidesWithShape(other: Shape): CollisionResult;
}