Sha256: 4d51b9d1d67e2cf3ef9ba978f3d6126b7e2e82bd427452a096dc7747c19d15c8

Contents?: true

Size: 1.9 KB

Versions: 9

Compression:

Stored size: 1.9 KB

Contents

package wordcram;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import processing.core.PApplet;

// This is a healthy rip-off of
// https://github.com/processing/processing/wiki/Library-Basics#adding-your-own-library-events

class SketchCallbackObserver implements Observer {
	PApplet parent;

	HashMap<String, Method> sketchMethods = new HashMap<>();

	SketchCallbackObserver(PApplet parent) {

		this.parent = parent;

		registerSketchMethod("wordsCounted", Word[].class);
		registerSketchMethod("beginDraw");
		registerSketchMethod("wordDrawn", Word.class);
		registerSketchMethod("wordSkipped", Word.class);
		registerSketchMethod("endDraw");
	}

        @Override
	public void wordsCounted(Word[] words) {
		invoke("wordsCounted", new Object[] { words });
	}
        @Override
	public void beginDraw() {
		invoke("beginDraw", new Object[0]);
	}
        @Override
	public void wordDrawn(Word word) {
		invoke("wordDrawn", new Object[] { word });
	}
        @Override
	public void wordSkipped(Word word) {
		invoke("wordSkipped", new Object[] { word });
	}
        @Override
	public void endDraw() {
		invoke("endDraw", new Object[0]);
	}

	private void registerSketchMethod(String name, Class... parameterTypes) {
		try {
			Method method = parent.getClass().getMethod(name, parameterTypes);
			sketchMethods.put(name, method);
	    }
	    catch (NoSuchMethodException | SecurityException e) {
			// The sketch doesn't have this method name. No worries.
	    }
	}

	private void invoke(String name, Object[] arguments) {
		if (sketchMethods.containsKey(name)) {
			Method method = sketchMethods.get(name);
			try {
				method.invoke(parent, arguments);
			}
			catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
				System.err.println("Disabling method " + name + " because of an error.");
				sketchMethods.remove(name);
			}
		}
	}
}

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
ruby_wordcram-2.1.1 src/wordcram/SketchCallbackObserver.java
ruby_wordcram-2.1.0 src/wordcram/SketchCallbackObserver.java
ruby_wordcram-2.0.6 src/wordcram/SketchCallbackObserver.java
ruby_wordcram-2.0.5 src/wordcram/SketchCallbackObserver.java
ruby_wordcram-2.0.4 src/wordcram/SketchCallbackObserver.java
ruby_wordcram-2.0.3 src/wordcram/SketchCallbackObserver.java
ruby_wordcram-2.0.2 src/wordcram/SketchCallbackObserver.java
ruby_wordcram-2.0.1 src/wordcram/SketchCallbackObserver.java
ruby_wordcram-2.0.0 src/wordcram/SketchCallbackObserver.java