class chaser extends rotater{ float mysize=20; float turnspeed; chaser(float pos, int diff){ x = pos; y = height - groundheight - (mysize/2.0); if(diff == DIFFNORMAL){ speed = 8; turnspeed = .09; } else { speed = 9; turnspeed = .1; } angle = -PI/2; calcangles(); ima="chaser"; } void draw(){ stroke(0); // noFill(); // ellipse(x,y,20,20); pushMatrix(); translate(x,y); rotate(angle); fill(128,0,0); triangle(10,0,-8,-2,-8,2); popMatrix(); } boolean killed = false; boolean active = false; void move(){ if(active && (!killed)){ float mentalchaserx = x; float mentalplanex = p.x; /* if(mentalchaserx < 0) mentalchaserx += virtualscreenwidth; if(mentalplanex < 0) mentalplanex += virtualscreenwidth; if(mentalchaserx > width) mentalchaserx -= virtualscreenwidth; if(mentalplanex > width) mentalplanex -= virtualscreenwidth; */ float dx = (mentalplanex -mentalchaserx); if(abs(dx) > width/2){ dx *= -1.0; } float dy = ( p.y - y); float wantangle = atan2(dy, dx); float anglediff = (angle - wantangle); anglediff /= PI; //this next bit catches the "runaround" if(anglediff > 1){ anglediff -= 2; } if(anglediff < -1){ anglediff += 2; } //print("wantangle:"+(wantangle/PI)+" angle "+(angle/PI)+" diff: "+ (anglediff)+" "); if(anglediff > 0){ // println(" <-\\"); angle -= turnspeed; } else { // println(" /->"); angle += turnspeed; } //stroke(255,0,0); //line(250,250,250+(cos(wantangle) * 30), 250+(sin(wantangle)*30)); // line(250,250,245,245); // line(250,250,255,255); //angle += turnspeed; calcangles(); super.move(); } } }