X-Git-Url: http://git.dolda2000.com/gitweb/?a=blobdiff_plain;f=src%2Fkaka%2Fcakelight%2FCommands.java;h=e665cf17c669d77b01a70cdcf5e14a144171ad8b;hb=6a3d0edaa676312429f2f2bd6ed44e59ed07cc70;hp=a5b612cf99a071c598d6bdb0bc7dfb938edb653b;hpb=e4738966c601bac22b7f7cbad375bd172913bde9;p=kaka%2Fcakelight.git diff --git a/src/kaka/cakelight/Commands.java b/src/kaka/cakelight/Commands.java index a5b612c..e665cf1 100644 --- a/src/kaka/cakelight/Commands.java +++ b/src/kaka/cakelight/Commands.java @@ -1,12 +1,9 @@ package kaka.cakelight; -import kaka.cakelight.mode.AmbientMode; -import kaka.cakelight.mode.SingleColorMode; -import kaka.cakelight.mode.SunriseMode; -import kaka.cakelight.mode.TwoColorNoiseMode; -import kaka.cakelight.mode.VideoMode; +import kaka.cakelight.mode.*; import java.util.function.BiFunction; +import java.util.stream.Stream; class Commands { private static Console.Command command(String[] names, BiFunction activate) { @@ -17,10 +14,29 @@ class Commands { } @Override - public void activate(Console console, String[] args) { + public Object activate(Console console, String[] args) { if (!activate.apply(console, args)) { console.out("did NOT run command"); } + return null; + } + }; + } + + private static Console.Command modeCommand(String[] names, BiFunction activate) { + return new Console.Command() { + @Override + public String[] getNames() { + return names; + } + + @Override + public Object activate(Console console, String[] args) { + Mode mode = activate.apply(console, args); + if (mode == null) { + console.out("did NOT run command"); + } + return mode; } }; } @@ -42,15 +58,30 @@ class Commands { }); } - static Console.Command video() { - return command(new String[] {"v", "video"}, (console, args) -> { - console.getCakelight().setMode(new VideoMode()); - return true; + static Console.Command push() { + return command(new String[] {"push"}, (console, args) -> { + Object obj = console.internalHandleInput(String.join(" ", args)); + if (obj instanceof Mode) { // obj could be anything, which should be fixed + console.out("pushing mode " + obj.getClass().getSimpleName()); + console.getCakelight().pushMode((Mode) obj); + } + return true; }); } + static Console.Command pop() { + return command(new String[] {"pop"}, (console, args) -> { + console.out("popping mode " + console.getCakelight().popMode().getClass().getSimpleName()); + return true; + }); + } + + static Console.Command video() { + return modeCommand(new String[] {"v", "video"}, (console, args) -> new VideoMode()); + } + static Console.Command color() { - return command(new String[] {"c", "col", "color"}, (console, args) -> { + return modeCommand(new String[] {"c", "col", "color"}, (console, args) -> { Color c = null; if (args.length == 1) { c = console.parseColor(args[0]); @@ -62,12 +93,10 @@ class Commands { ); } if (c != null) { - console.getCakelight().setMode(new SingleColorMode(c)); console.out("setting color to " + c); - return true; - } else { - return false; + return new SingleColorMode(c); } + return null; }); } @@ -117,42 +146,36 @@ class Commands { } static Console.Command ambientMode() { - return command(new String[] {"m", "mode"}, (console, args) -> { + return modeCommand(new String[] {"m", "mode"}, (console, args) -> { if (args.length == 1) { - console.getCakelight().setMode(new AmbientMode(new String[] {args[0]})); console.out("setting ambient mode to " + args[0]); - return true; - } else { - return false; + return new AmbientMode(new String[]{args[0]}); } + return null; }); } - static Console.Command twoColorNoiseMode() { - return command(new String[] {"n", "noise"}, (console, args) -> { - if (args.length == 2) { - console.getCakelight().setMode(new TwoColorNoiseMode( - console.parseColor(args[0]), - console.parseColor(args[1]) - )); - console.out("setting two-color noise mode"); - return true; - } else { - return false; + static Console.Command noiseMode() { + return modeCommand(new String[] {"n", "noise"}, (console, args) -> { + if (args.length > 1) { + console.out("setting multi-color noise mode"); + return new NoiseMode(Stream.of(args) + .map(console::parseColor) + .toArray(Color[]::new) + ); } + return null; }); } static Console.Command sunriseMode() { - return command(new String[] {"sunrise"}, (console, args) -> { + return modeCommand(new String[] {"sunrise"}, (console, args) -> { if (args.length == 1) { int durationSeconds = Integer.parseInt(args[0]); - console.getCakelight().setMode(new SunriseMode(durationSeconds)); console.out("setting sunrise mode with duration " + durationSeconds); - return true; - } else { - return false; + return new SunriseMode(durationSeconds); } + return null; }); } }