private static Flame morphFlames_fade( Prefs pPrefs, Flame pFlame1, Flame pFlame2, int pFrame, int pFrames) { if (pFrame < 1 || pFrames < 2) return pFlame1; double fScl = (double) (pFrame - 1) / (pFrames - 1); if (fScl <= MathLib.EPSILON) { return pFlame1; } else if (fScl >= 1.0 - MathLib.EPSILON) { return pFlame2; } // fade out layerz of the source flame Flame res = pFlame1.makeCopy(); morphFlameValues(pFlame1, pFlame2, fScl, res); for (Layer layer : res.getLayers()) { layer.setWeight(layer.getWeight() * (1.0 - fScl)); } // add and fade in layerz of the dest flame for (Layer layer : pFlame2.getLayers()) { Layer copy = layer.makeCopy(); copy.setWeight(copy.getWeight() * fScl); res.getLayers().add(copy); } return res; }