getFacadesAtEvent(e, filterFn) {
    const canvasRect = e.target.getBoundingClientRect() //e.target is the canvas
    let x = e.clientX - canvasRect.left
    let y = e.clientY - canvasRect.top
    let hits = null
    let distance = 0

    traverseInZOrder(this.getChildByKey('bg'), facade => {
      if ((!filterFn || filterFn(facade)) && facade.hitTest(x, y)) {
        if (!hits) hits = Object.create(null)
        hits[facade.$facadeId] = {
          facade: facade,
          distance: distance-- //since iteration is in z order, we can just decrement for a logical distance
        }
      }
    })

    if (hits) {
      hits = Object.keys(hits).map(id => hits[id])
    }
    return hits
  }
@override Implementation of abstract
@return {Array<{facade, distance, ?distanceBias, ...}>|null}