import java.util.ArrayList; import processing.core.*; public class Typer extends KeystrokeCollector { /** * */ private static final long serialVersionUID = -850009623521828363L; ArrayList keys; int wrap, scaling, originalwrap; String raw, obj,tru; PApplet p; public Typer(PApplet parent, int wrap) { keys = new ArrayList(); this.wrap = wrap; originalwrap = wrap; raw = ""; tru = ""; p = parent; } public void addKey(char keyin, int keycode, float time) { //println("add " + keyin); Key tmp = new Key(keyin, keycode, time, "down"); keys.add(tmp); if(keyin == PConstants.ENTER) { if (tru.equals(obj)) { update = true; return; } else { update = false; keypressed = false; clear(); return; } } if(keycode != CODED) { if(raw.length()+1 >= wrap) { raw+= "\n"; wrap+=originalwrap; } raw += keyin; tru += keyin; } if(tru.length() > obj.length()) { update = false; keypressed = false; clear(); return; } for(int i = 0; i < tru.length();i++) { if (tru.charAt(i) != obj.charAt(i)) { update = false; keypressed = false; clear(); return; } } update = true; } public void addKeyUp(char keyin, int keycode, float time) { if(!update) return; Key tmp = new Key(keyin, keycode, time, "up"); keys.add(tmp); } public void display() { //p.fill(255,255,255); p.noFill(); p.stroke(0); char cur = (p.frameCount%50 <25) ? '|':' '; p.textAlign(PConstants.LEFT,PConstants.CENTER); p.text(raw+cur,p.width/2-100, p.height/2); // float xpos, ypos; // for(int i = 0; i < keys.size(); i++) // { // float tmp = ((Key)(keys.get(i))).getTime()/scaling; // xpos = tmp % (width-2*wrap)+ wrap; // ypos = int(tmp / (width-2*wrap))*32+wrap; // fill(255.0/keys.size()*i,200,255); // textFont(myFont, 30); // textAlign(CENTER,BOTTOM); // text(((Key)keys.get(i)).getInKey(), xpos, ypos); // //println(ypos); // } } public void clear() { keys.clear(); raw = ""; tru = ""; } public void setObj(String obj) { this.obj = obj; } public ArrayList getKeys() { return keys; } }