X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Fkaka%2Fcakelight%2FAmbientMode.java;h=2b10e313502287c5f424dcf88a09420fbf81bd04;hb=4c299de64faa964003d9bb14b7bee84f10c4f9e0;hp=528a1c3a251fa00f5104279b35bf41c60c7db67c;hpb=6b5696708b4d9aaf03c8c04bea6e734c045a3e25;p=kaka%2Fcakelight.git diff --git a/src/kaka/cakelight/AmbientMode.java b/src/kaka/cakelight/AmbientMode.java index 528a1c3..2b10e31 100644 --- a/src/kaka/cakelight/AmbientMode.java +++ b/src/kaka/cakelight/AmbientMode.java @@ -1,23 +1,21 @@ package kaka.cakelight; +import kaka.cakelight.util.SimplexNoise3D; + public class AmbientMode extends Mode { // TODO split into DynamicAmbient and StaticAmbient? private Thread thread; // TODO move to a dynamic sub class private Configuration config; + private int type = 0; + + public AmbientMode(String[] args) { + if (args.length > 0) { + type = Integer.parseInt(args[0]); + } + } @Override public void enter(Configuration config) { this.config = config; -// LedFrame frame = LedFrame.from(config); -// frame.fillColor(255, 0, 128); -// frame.setLedColor(0, Color.rgb(255, 0, 0)); -// frame.setLedColor(1, Color.rgb(0, 255, 0)); -// frame.setLedColor(2, Color.rgb(0, 0, 255)); -// for (int i = 0; i < config.leds.getCount(); i++) { -//// int v = 255 * i / config.leds.getCount(); -// int v = 60 * (i % 3); -// frame.setLedColor(i, Color.rgb(v, v, v)); -// } -// frameListener.accept(frame); startThread(); } @@ -37,7 +35,7 @@ public class AmbientMode extends Mode { // TODO split into DynamicAmbient and St updateFrame(frame, System.currentTimeMillis() - start, index); updateWithFrame(frame); index = (index + 1) % config.leds.getCount(); - Thread.sleep(0); + Thread.sleep(20); } } catch (InterruptedException e) { } @@ -56,11 +54,31 @@ public class AmbientMode extends Mode { // TODO split into DynamicAmbient and St * @param count Goes from 0 to number of LEDs - 1 */ private void updateFrame(LedFrame frame, long time, int count) { - frame.setLedColor(count, Color.rgb(255, 0, 0)); - frame.setLedColor((count + 1) % config.leds.getCount(), Color.rgb(0, 255, 0)); - frame.setLedColor((count + 2) % config.leds.getCount(), Color.rgb(0, 0, 255)); -// for (int i = 0; i < config.leds.getCount(); i++) { -// -// } + if (type == 0) { + for (int i = 0; i < config.leds.getCount(); i++) { + double r = Math.sin(2 * i * Math.PI / config.leds.getCount() + time * 0.001) * 0.5 + 0.5; + double g = Math.cos(2 * i * Math.PI / config.leds.getCount() + time * 0.002) * 0.5 + 0.5; + frame.setLedColor(i, Color.rgb(r, g, 0)); + } + } else if (type == 1) { + for (int i = 0; i < config.leds.getCount(); i++) { + double x = frame.xOf(i); + double y = frame.yOf(i); + double b = Math.pow(Math.min(1, Math.max(0, noise.getr(0.0, 1.0, 1, x, y, time / 7000.0))), 1.5); + double g = Math.min(1, Math.max(0, noise.getr(-b, b, 0.5, x*3, y*3, time / 5000.0))); + frame.setLedColor(i, Color.rgb(0, g, b)); + } + } else if (type == 2) { + int ledCount = config.leds.getCount(); + double hueOffset = time * 0.00001; + double hueLength = 1.0 / 6; + for (int i = 0; i < config.leds.getCount(); i++) { + double ledOffset = (i + (hueOffset * ledCount)) % ledCount; + double value = Math.abs((ledOffset * 2 - ledCount) / ledCount); // 1 to 0 to 1 + frame.setLedColor(i, Color.hsv(value * hueLength + hueOffset, 1, 1)); + } + } } + + private SimplexNoise3D noise = new SimplexNoise3D(0); }