package actions.algos; public class BufferAlgo3 extends Algo { private float myBuffer; private float a; private float b; /** * @param buffer * has to be between 0 and 1 (try 0.2) */ public BufferAlgo3(float buffer, float a, float b) { myBuffer = buffer; this.a = a; this.b = b; } @Override public boolean execute(float[] target, float[] values, float bufferSize) { target[0] = morph(target[0], values[0]); target[1] = morph(target[1], values[1]); target[2] = morph(target[2], values[2]); return true; } private float morph(float t, float v) { float dist = v - t; if (-a < dist && dist < a) { return t; } if (dist < -b || b < dist) { return v; } return t + (dist) * myBuffer; } }