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