Processing libraries I have made. Note to self: make this page not an embarrassment sometime soon.
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.
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)); }
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))); }