private void assignArrowDepth(FlowArrow arrow, AddressSet overlappingAddresses,
			List<FlowArrow> allArrows) {

		//Keep track of which depths are used over current arrow range
		boolean[] usedDepths = new boolean[MAX_DEPTH];

		// Find all intersecting used depths
		for (FlowArrow otherArrow : allArrows) {
			if (otherArrow.depth == -1 || otherArrow.depth >= MAX_DEPTH) {
				continue;
			}

			if (sharesEndpoint(arrow, otherArrow)) {
				continue;
			}

			if (overlappingAddresses.intersects(otherArrow.addressSet)) {
				usedDepths[otherArrow.depth] = true;
			}
		}

		arrow.depth = 0;
		while (arrow.depth < usedDepths.length && usedDepths[arrow.depth]) {
			arrow.depth++;
		}
	}
Calculates depth based on all other arrows that DO NOT share an endpoint
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/flowarrow/FlowArrowPlugin.java