public class AmbientMode extends Mode { // TODO split into DynamicAmbient and StaticAmbient?
private Thread thread; // TODO move to a dynamic sub class
- private Configuration config;
+ protected Configuration config;
private int type = 0;
+ private boolean isPaused = false;
+
+ AmbientMode() {}
public AmbientMode(String[] args) {
if (args.length > 0) {
}
@Override
+ public void pause() {
+ isPaused = true;
+ }
+
+ @Override
+ public void resume() {
+ isPaused = false;
+ synchronized (thread) {
+ thread.notify();
+ }
+ }
+
+ @Override
public void exit() {
stopThread();
}
- public void startThread() {
+ private void startThread() {
thread = new Thread() {
public void run() {
try {
long start = System.currentTimeMillis();
int index = 0;
while (!isInterrupted()) {
+ if (isPaused) {
+ synchronized (thread) {
+ wait();
+ }
+ }
LedFrame frame = LedFrame.from(config);
updateFrame(frame, System.currentTimeMillis() - start, index);
updateWithFrame(frame);
Thread.sleep(20);
}
} catch (InterruptedException e) {
+ // e.printStackTrace();
}
}
};
thread.start();
}
- public void stopThread() {
+ private void stopThread() {
thread.interrupt();
}
* @param time Time in milliseconds since start
* @param count Goes from 0 to number of LEDs - 1
*/
- private void updateFrame(LedFrame frame, long time, int count) {
+ protected void updateFrame(LedFrame frame, long time, int count) {
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;