New smooth video mode that mixes the new frame with the previous one
authorTomas Wenström <tomas.wenstrom@gmail.com>
Tue, 24 Sep 2019 20:01:11 +0000 (22:01 +0200)
committerTomas Wenström <tomas.wenstrom@gmail.com>
Tue, 24 Sep 2019 20:01:11 +0000 (22:01 +0200)
src/kaka/cakelight/Main.java
src/kaka/cakelight/SmoothVideoMode.java [new file with mode: 0644]

index 56761f2..dd3c1f7 100644 (file)
@@ -17,7 +17,7 @@ public class Main {
        if (args.length > 0) {
            cakelight.setMode(new AmbientMode(args));
        } else {
-           cakelight.setMode(new VideoMode());
+           cakelight.setMode(new SmoothVideoMode());
        }
        cakelight.startLoop();
        Runtime.getRuntime().addShutdownHook(new Thread(Main::printTimeStats));
diff --git a/src/kaka/cakelight/SmoothVideoMode.java b/src/kaka/cakelight/SmoothVideoMode.java
new file mode 100644 (file)
index 0000000..e9ef442
--- /dev/null
@@ -0,0 +1,26 @@
+package kaka.cakelight;
+
+public class SmoothVideoMode extends VideoMode {
+    private LedFrame frame;
+    private int ledCount;
+
+    @Override
+    public void enter(Configuration config) {
+        super.enter(config);
+        frame = LedFrame.from(config);
+        ledCount = config.leds.getCount();
+    }
+
+    @Override
+    public void updateWithFrame(LedFrame frame) {
+        super.updateWithFrame(smooth(frame));
+    }
+
+    private LedFrame smooth(LedFrame f) {
+        for (int i = 0; i < ledCount; i++) {
+            Color c = frame.getLedColor(i).interpolate(f.getLedColor(i), 0.5);
+            frame.setLedColor(i, c);
+        }
+        return frame;
+    }
+}