int[] touchX=new int[256];
int[] touchY=new int[256];
int touchCount;
float x;
float y;
float forceX;
float forceY;
int[] coinTimer=new int[256];
float[] coinX=new float[256];
float[] coinY=new float[256];
float[] coinH=new float[256];
float[] coinG=new float[256];
int summonTimer;
void setup() {
size(1024, 768);
x=512;
y=384;
for(int i=0;i<coinTimer.length;i++){
coinTimer[i]=-1;
}
}
void draw() {
background(255);
if(summonTimer%2==0){
int id=-1;
for(int i=0;i<coinTimer.length;i++){
if(coinTimer[i]==-1){
id=i;
break;
}
}
if(id!=-1){
coinX[id]=random(1024-32)+16;
coinY[id]=random(768-32)+16;
coinH[id]=-256;
coinG[id]=4;
coinTimer[id]=0;
}
}
if(mousePressed){
if(touchCount<64){
touchX[touchCount]=mouseX;
touchY[touchCount]=mouseY;
if(touchCount>0){
float power=len(touchX[touchCount-1],touchY[touchCount-1],touchX[touchCount],touchY[touchCount])/8;
forceX+=sin(atan2(touchX[touchCount]-touchX[touchCount-1],touchY[touchCount]-touchY[touchCount-1]))*power;
forceY+=cos(atan2(touchX[touchCount]-touchX[touchCount-1],touchY[touchCount]-touchY[touchCount-1]))*power;
}
touchCount++;
}
}else{
touchCount=0;
}
//coinShaderDraw
for(int i=0;i<coinTimer.length;i++){
if(coinTimer[i]>=0){
noStroke();
fill(127);
float shaderSize=map(coinH[i],0,-256,32,0);
ellipse(coinX[i],coinY[i]+16,shaderSize,shaderSize/2);
}
}
stroke(0);
strokeWeight(8);
fill(255);
ellipse(x,y,64,64);
//coinDraw
for(int i=0;i<coinTimer.length;i++){
if(coinTimer[i]>=0){
noStroke();
fill(0,map(coinH[i],0,-256,255,0));
ellipse(coinX[i],coinY[i]+coinH[i],32,32);
coinH[i]+=coinG[i];
coinG[i]++;
if(coinH[i]>0){
coinH[i]=0;
coinG[i]/=2;
coinG[i]*=-1;
if(coinG[i]>-2)coinG[i]=0;
}
coinTimer[i]++;
for(int j=0;j<int(len(x,y,x+forceX,y+forceY));j++){
if(len3d(x+sin(atan2(-forceX,-forceY))*j,y+cos(atan2(-forceX,-forceY))*j,0,coinX[i],coinY[i],coinH[i])<48){
coinTimer[i]=-1;
}
}
}
}
for(int i=0;i<touchCount;i++){
stroke(127);
strokeWeight(16);
noFill();
if(i>0){
line(touchX[i-1],touchY[i-1],touchX[i],touchY[i]);
}
}
for(int i=0;i<touchCount;i++){
stroke(255);
strokeWeight(8);
noFill();
if(i>0){
line(touchX[i-1],touchY[i-1],touchX[i],touchY[i]);
}
}
x+=forceX;
y+=forceY;
forceX=forceX/16*15;
forceY=forceY/16*15;
if(x<32){forceX*=-1;x=32;}
if(y<32){forceY*=-1;y=32;}
if(x>1024-32){forceX*=-1;x=1024-32;}
if(y>768-32){forceY*=-1;y=768-32;}
summonTimer++;
}
float len(float x0,float y0,float x1,float y1){
return sqrt(pow(abs(x0-x1),2)+pow(abs(y0-y1),2));
}
float len3d(float x0,float y0,float z0,float x1,float y1,float z1){
return sqrt(pow(abs(x0-x1),2)+pow(abs(y0-y1),2)+pow(abs(z0-z1),2));
}