default boolean operateOnSubtree(Point p, SubtreeOp op, boolean consumed) {
        consumed |= op.operate(this, p, consumed);
        Point relativePoint = p.subtract(getPosition());

        for (RedUINode child : getOurChildren()) {
            consumed |= child.operateOnSubtree(relativePoint, op, consumed);
        }

        return consumed;
    }
Runs all nodes in the subtree through a given operation in unspecific order.

@param p        The starting point, in this node's parent's coordinate space. This is converted to keep
                it relative to the node's parent that is being operated on
@param op       The function to operate on each node
@param consumed Initial consumed state. This is given to the operation function and will stay false
                until one of the operations returns true, at which point it will stay true for all subsequent nodes.
@return True if any operation has consumed this event (or if it was initially true to begin with)
@see RedUINode#operateOnZOrderedSubtree(Point, SubtreeOp, boolean)
<p>
TODO Perhaps more practical to call all functions on subtree with screen-space point, and each node can convert if they care about the event
core/src/main/java/mrtjp/projectred/redui/RedUINode.java