import java.applet.*; 
import java.awt.*; 
import java.awt.image.*; 
import java.awt.event.*; 
import java.io.*; 
import java.net.*; 
import java.text.*; 
import java.util.*; 
import java.util.zip.*; 

public class udk_final_schmitz extends BApplet {
//Michael Schmitz
//Juli 2003
int b;
int bereich;
int g;
int m;
int i;
int a;
float lenghtorthovec;
float neulenght;
float orthovecx;
float orthovecy;
float leaderx;
float leadery;
int zielzahl;
float zposx;
float zposy;
float driftx;
float drifty;
float vecx;
float vecy;

float radiusvecx;
float radiusvecy;
float rvecx;
float rvecy;

 float[] posx;
 float[] posy;
 
 int c1;
 
void setup() {
  size(400,400);
  //lights();
  g = 255;
  background(55);
  
  posx = new float[40];
  posy = new float[40];
  
  for (int i=0; i<39;i++){
    posx[i] = 0;
    posy[i] = 0;
  }
  
  neu();
  
  leaderx = 0;
  leadery = 0;
 
}




void loop() {

//obstacle
bereich = 100;

//ziel
zielzahl = zielzahl+1;

//neuepos
if (zielzahl>200){
 neu();
}
if (zposx>width-20 || zposx<20){
 neu();
}
if (zposy>height-20 || zposy<20){
 neu();
}
if (zposy==leadery || zposx == leaderx){
 neu();
}


zposx = zposx + driftx;
zposy = zposy + drifty;
//ellipse(zposx-5,zposy-5, 10,10);

//vector
vecx = zposx-leaderx;
vecy = zposy-leadery;




//leader
leaderx = (leaderx + (vecx*0.02f));
leadery = (leadery + (vecy*0.02f));
//if(((vecx+leaderx) > mouseX-(bereich*0.5) && (vecx+leaderx) < mouseX+(bereich*0.5)) && ((vecy+leadery) > mouseY-(bereich*0.5) && (vecy+leadery) < mouseY+(bereich*0.5)) ){

if(((leaderx) > mouseX-(bereich*0.5f) && (leaderx) < mouseX+(bereich*0.5f)) && ((leadery) > mouseY-(bereich*0.5f) && (leadery) < mouseY+(bereich*0.5f)) ){

rvecx = (vecx+leaderx)-mouseX;
rvecy = (vecy+leadery)-mouseY;
orthovecx = (-1)/rvecx;
orthovecy = (-1)/rvecy;
driftx = (orthovecx*0.2f)+zposx;
drifty = (orthovecy*0.2f)+zposy;



leaderx = (leaderx + (radiusvecx*0.02f));
leadery = (leadery + (radiusvecy*0.02f));

//show trigger
fill(50);
ellipse(mouseX-(bereich*0.5f),mouseY-(bereich*0.5f), bereich,bereich);


}


//schwanz


for (int m=0; m<38; m++) { 
    posx[m]=posx[m+1];
    posy[m]=posy[m+1];
  }

  posx[38] = leaderx;
  posy[38] = leadery; 
  
//malen
  noStroke();
  
  for(int a=0;a<39;a++){
  int c1 = color(255,255-78+a*2,0);
  fill(c1);
  ellipse(posx[a]-5,posy[a]-5, 10,10);
  }
  
  
}

//funkionen
void neu() {
zielzahl = 1;
//pos
zposx = random(width);
zposy = random(height);
driftx = (int)(random(-4,4));
drifty = (int)(random(-4,4));
if (driftx == 0 || drifty ==0){
driftx = (int)(random(-4,4));
drifty = (int)(random(-4,4));
}
}




}
