@Override
	protected void updateOpacity(double percentComplete) {

		double oldComponentsAlpha = 1.0 - percentComplete;

		Collection<FGVertex> vertices = getVerticesToBeRemoved();
		for (FGVertex vertex : vertices) {

			vertex.setAlpha(oldComponentsAlpha);

			Collection<FGEdge> edges = getEdges(vertex);
			for (FGEdge edge : edges) {

				// don't go past the alpha when removing
				double defaultAlpha = edge.getDefaultAlpha();
				double alpha = Math.min(oldComponentsAlpha, defaultAlpha);
				edge.setAlpha(alpha);
			}
		}

		double newComponentsAlpha = percentComplete;
		vertices = getNewVertices();
		for (FGVertex vertex : vertices) {
			vertex.setAlpha(newComponentsAlpha);

			Collection<FGEdge> edges = getEdges(vertex);
			for (FGEdge edge : edges) {

				// don't go past the alpha when adding
				double defaultAlpha = edge.getDefaultAlpha();
				double alpha = Math.min(newComponentsAlpha, defaultAlpha);
				edge.setAlpha(alpha);
			}
		}
	}
Constructor

@param controller the controller of the graph to be ungrouped
@param groupVertex The group vertex to be ungrouped
@param newVertices the vertices that will remain after the grouping/ungrouping process has
                   completed
@param verticesToRemove the vertices that will be removed from the graph after the 
                        grouping/ungrouping process has completed
@param relayoutOverride a boolean that when true signals to perform a layout <b>
		  	  			   regardless of the user's relayout options</b>.  This is required to
                        perform a manual relayout.
@param useAnimation whether to use animation
Ghidra/Features/FunctionGraph/src/main/java/ghidra/app/plugin/core/functiongraph/util/job/AbstractGroupingFunctionGraphJob.java