package actions.algos; /** * * accel-sensor: has normal values from -11 to +11 and shake values from -19 to * 19 * * magnet-sensor: has normal values from -60 to +60 and metal/magnet values from * -120 to 120 * * This values were measured on a G1, so they might differ on other devices * * @author Spobo * */ public class SensorAlgo1 extends Algo { private float[] oldV = new float[3]; private float myBarrier; public SensorAlgo1(float barrier) { myBarrier = barrier; } @Override public float[] execute(float[] v) { oldV[0] = checkAndCalc(oldV[0], v[0]); oldV[1] = checkAndCalc(oldV[1], v[1]); oldV[2] = checkAndCalc(oldV[2], v[2]); return oldV; } private float checkAndCalc(float oldV, float newV) { float delta = oldV - newV; /* * if the new value is very different from the old one, morph to the new * one */ if (delta < -myBarrier || myBarrier < delta) { return (oldV + newV) / 2; } /* * else reuse the old one */ return oldV; } }