Processing Libraries

Processing libraries I have made. Note to self: make this page not an embarrassment sometime soon.

Google Code Repository

Download the latest version of the Timed Events Library

Timed Events Library

If you have ever needed to periodically perform some action, or would like something to happen at a random time within some range, the Timed Events Library is for you!

The library provides 2 simple classes: TimedEventGenerator and RandomTimedEventGenerator. Both provide period execution of a method in your sketch at an interval you determine. Both classes can be turned on and off during the lifecycle of your sketch and the intervals can be changed. Multiple instances of the classes may be present in your sketch at the same time.

TimedEventGenerator Example

TimedEventGenerator allows you to call a method every N milliseconds in your sketch. The library keeps the boilerplate of running the timer out of your way. The default method called is onTimerEvent, but you may provide a custom method name if you wish. The generator may be enabled or disabled and you can change the the interval at run time.
import org.multiply.processing.TimedEventGenerator;

private TimedEventGenerator ellipseTimedEventGenerator;
private TimedEventGenerator rectangleTimedEventGenerator;

private int lastMillis = 0;

void setup() {
  size(400, 400);
  
  ellipseTimedEventGenerator = new TimedEventGenerator(this);
  ellipseTimedEventGenerator.setIntervalMs(500);
  
  rectangleTimedEventGenerator = new TimedEventGenerator(
      this, "onRectangleTimerEvent", false);
  rectangleTimedEventGenerator.setIntervalMs(175);
  
  ellipseMode(CENTER);
  rectMode(CENTER);
  smooth();
}

void draw() {
  // everything in this sketch is driven by timer events from the
  // TimerEvenGenerator objects.
}

void keyReleased() {
  if (key == 'e') {
    // Turn the ellipseTimedEventGenerator on and off.
    ellipseTimedEventGenerator.setEnabled(
        !ellipseTimedEventGenerator.isEnabled());
  } else if (key == 'E') {
    // Set a new interval randomly selected between 400 and 2000 milliseconds.
    ellipseTimedEventGenerator.setIntervalMs((int) random(400, 2000));
  } else if (key == 'r') {
  // Turn the rectangleTimedEventGenerator on and off.
    rectangleTimedEventGenerator.setEnabled(
        !rectangleTimedEventGenerator.isEnabled());
  } else if (key == 'R') {
    // Set a new interval randomly selected between 400 and 2000 milliseconds.
    rectangleTimedEventGenerator.setIntervalMs((int) random(400, 2000)); 
  }
}

void setRandomFillAndStroke() {
  stroke(color(random(255), random(255), random(255)));
  fill(color(random(255), random(255), random(255)));
  strokeWeight(random(13));
}

void onTimerEvent() {
  int millisDiff = millis() - lastMillis;
  lastMillis = millisDiff + lastMillis;  
  System.out.println("Got a timer event at " + millis() + "ms (" + millisDiff + ")!");
  setRandomFillAndStroke();
  ellipse(random(width), random(height), random(100), random(100));
}

void onRectangleTimerEvent() {
  System.out.println("Got a rectangle timer event!");
  setRandomFillAndStroke();
  rect(random(width), random(height), random(100), random(100));
}


RandomTimedEventGenerator Example

RandomTimedEventGenerator is virtually idential to TimedEventGenerator, but the event fires at a random time between the range you specify. The default method name is onRandomEvent.
import org.multiply.processing.RandomTimedEventGenerator;

private RandomTimedEventGenerator randomEvent;
private RandomTimedEventGenerator awesomeRandomEvent;
private int lastMillis = 0;
private int lastAwesomeMillis = 0;

void setup() {
  size(400, 400);
  randomEvent = new RandomTimedEventGenerator(this);
  randomEvent.setMinIntervalMs(11);
  randomEvent.setMaxIntervalMs(999);
  awesomeRandomEvent = new RandomTimedEventGenerator(this, "myAwesomeRandomEvent");
  awesomeRandomEvent.setMinIntervalMs(1500);
  awesomeRandomEvent.setMaxIntervalMs(9999);
  
  ellipseMode(CENTER);
  smooth();
}

void draw() {
  // everything in this sketch is driven by timer events from the
  // RandomTimerEvenGenerator objects.
}

void setRandomFillAndStroke() {
  stroke(color(random(255), random(255), random(255)));
  fill(color(random(255), random(255), random(255)));
  strokeWeight(random(13));
}

void onRandomTimerEvent() {
  int millisDiff = millis() - lastMillis;
  lastMillis = millisDiff + lastMillis;  
  System.out.println("Got a random event at " + millis() + "ms (" + millisDiff + ")!");
  setRandomFillAndStroke();
  ellipse(random(width), random(height), random(100), random(100));
}

void myAwesomeRandomEvent() {
  int millisDiff = millis() - lastAwesomeMillis;
  lastAwesomeMillis = millisDiff + lastAwesomeMillis;  
  System.out.println("Got a specifically awesome random event at " + millis() +
      "ms (" + millisDiff + ")!");
  background(color(random(255), random(255), random(255)));
}