class LivePoint{ Vector2D loc, vel, acc; Vector2D originalLoc, prevLoc; float max_vel = 1.5f; color myColor; LivePoint(int _x, int _y, color _c){ loc = new Vector2D(_x,_y); originalLoc = loc.copy(); prevLoc = loc.copy(); vel = new Vector2D(0.0,0.0); acc = new Vector2D(0.0,0.0); myColor = _c; } void runIn(){ updateIn(); if(prevLoc.x()!=loc.x() || prevLoc.y()!=loc.y()){ renderIn(); } prevLoc=loc.copy(); } void runOut(){ updateOut(); // if(loc.distance(loc,originalLoc)>1){ //if(((int)loc.x()!= (int)originalLoc.x() || (int)loc.x()!= (int)originalLoc.x()+1 //|| (int)loc.x()!= (int)originalLoc.x()-1) && ((int)loc.y()!=(int)originalLoc.y() //|| (int)loc.y()!=(int)originalLoc.y()+1 || (int)loc.y()!=(int)originalLoc.y()-1)){ //int o=(int)loc.x()+1; //println((int)loc.x()+"_____"+o); renderOut(); //} prevLoc=loc.copy(); } void updateIn(){ //float dis; //dis = loc.distance(loc, new Vector2D(mouseX,mouseY)); Vector2D dir; dir= calcDir(loc,new Vector2D(mouseX,mouseY)); //dir = dir.div(dir,10.0); acc.sub(dir); //println(dir.x()+"___"+dir.y()); vel.add(acc); vel.limit(max_vel); loc.add(vel); acc.setXY(0.0f,0.0f); vel.setXY(0.0f,0.0f); } void updateOut(){ Vector2D dir; dir= calcDir(loc,originalLoc); //dir = dir.div(dir,100.0); acc.sub(dir); //println("s"); vel.add(acc); vel.limit(max_vel); loc.add(vel); acc.setXY(0.0f,0.0f); vel.setXY(0.0f,0.0f); //println(loc.x()+"---"+originalLoc.x()); } void renderIn(){ fill(red(myColor),green(myColor),blue(myColor),25); noStroke(); //println(this+" "+red(myColor)); ellipse(loc.x(),loc.y(),2,2); } void renderOut(){ fill(red(myColor),green(myColor),blue(myColor),15); noStroke(); //println(this+" "+red(myColor)); ellipse(loc.x(),loc.y(),2,2); } Vector2D calcDir(Vector2D _l, Vector2D _mouse){ Vector2D dir = Vector2D.sub(_l,_mouse); //calculate direction of force float d = dir.magnitude(); //distance between objects dir.normalize(); //normalize vector (distance doesn't matter here, we just want this vector for direction) return dir; } void setColor(color _c){ myColor = _c; } }