Lab3 - Battery
void setup() {
background(#191970);
size(580, 580);
smooth();
strokeWeight(3);
frameRate(60);
}
float V_BX=0, H_BY=0, BL=0, BW=0;
boolean end_X=false, end_Y=false;
void draw() {
background(0);
motion(0.03, 0.05);
charge();
Draw_Battery(V_BX, H_BY, BL, BW);
Status();
}
void Draw_Battery(float V_BX, float H_BY, float BL, float BW) {
//ratio//
float BR=height/8;
//X vertical V_BX;
//Y horizontal H_BY;
//Length//BL;
//Width//BW;
noFill();
stroke(255);
//Big rectangle//
rect(BR*2.5 + BR * V_BX,
BR*3.5 + BR * H_BY,
BR*3 + BR * BW,
BR*1 + BR * BL);
//small rectangle//
rect(BR*5.5 + BR*V_BX + BR*BW,
BR*3.75 + BR*H_BY + BR*1/4*BL,
BR*0.15 + 0.15 * BR*BW,
BR*0.5 + 0.5 * BR*BL);
//color small rect//
fill(#CCCCCC);
rect(BR*5.5 + BR*V_BX + BR*BW,
BR*3.75 + BR*H_BY + BR*1/4*BL,
BR*0.15 + 0.15 * BR*BW,
BR*0.5 + 0.5 * BR*BL);
//capacity
if (Cap_Battery>=1) {
strokeWeight(1);
stroke(255);
fill(#FFFF33);
rect((BR*2.5 + BR * V_BX),
BR*3.5 + BR * H_BY,
BR*1 + BR * BW/3,
BR*1 + BR * BL);
}
if (Cap_Battery>=2) {
fill(#99FF33);
rect((BR*2.5 + BR * V_BX)+(BR*2.5 )*2/5 + BR*BW *1/3,
BR*3.5 + BR * H_BY,
BR*1 + BR * BW/3,
BR*1 + BR * BL);
}
if (Cap_Battery>=3) {
fill(#33FF33);
rect((BR*2.5 + BR * V_BX)+(BR*2.5 )*4/5 + BR*BW *2/3,
BR*3.5 + BR * H_BY,
BR*1 + BR * BW/3,
BR*1 + BR * BL);
}
Positive(V_BX*8, H_BY*8, BL*8, BW*8);
Negative(V_BX*8, H_BY*8, BL*8, BW*8);
}
void Positive(float V_SX, float H_SY, float SL, float SW) {
//ratio
float PR=height/64;
//X vertical//
V_SX=V_SX+38+SW;
//Y horizontal//
H_SY=H_SY+28+SL/2;
//Length//
SL=SL/8;
//Width//
SW=SW/8;
fill(#FF3333);
noStroke();
beginShape();
vertex(PR*3.5 + PR*V_SX -0.25*PR*SL, PR*2.5 + PR*H_SY -0.5*PR*SW); //L 1
vertex(PR*4.5 + PR*V_SX +0.25*PR*SL, PR*2.5 + PR*H_SY -0.5*PR*SW); //R 1
vertex(PR*4.5 + PR*V_SX +0.25*PR*SL, PR*3.5 + PR*H_SY -0.25*PR*SW); //R 2
vertex(PR*5.5 + PR*V_SX +0.5*PR*SL, PR*3.5 + PR*H_SY -0.25*PR*SW); //R 3
vertex(PR*5.5 + PR*V_SX +0.5*PR*SL, PR*4.5 + PR*H_SY +0.25*PR*SW); //R 4
vertex(PR*4.5 + PR*V_SX +0.25*PR*SL, PR*4.5 + PR*H_SY +0.25*PR*SW); //R 5
vertex(PR*4.5 + PR*V_SX +0.25*PR*SL, PR*5.5 + PR*H_SY +0.5*PR*SW); //R 6
vertex(PR*3.5 + PR*V_SX -0.25*PR*SL, PR*5.5 + PR*H_SY +0.5*PR*SW); //L 6
vertex(PR*3.5 + PR*V_SX -0.25*PR*SL, PR*4.5 + PR*H_SY +0.25*PR*SW); //L 5
vertex(PR*2.5 + PR*V_SX -0.5*PR*SL, PR*4.5 + PR*H_SY +0.25*PR*SW); //L 4
vertex(PR*2.5 + PR*V_SX -0.5*PR*SL, PR*3.5 + PR*H_SY -0.25*PR*SW); //L 3
vertex(PR*3.5 + PR*V_SX -0.25*PR*SL, PR*3.5 + PR*H_SY -0.25*PR*SW); //L 2
endShape();
}
void Negative(float V_SX, float H_SY, float SL, float SW) {
//ratio
float PR=height/64;
//X vertical//
V_SX=V_SX+18;
//Y horizontal//
H_SY=H_SY+28+SL/2;
//Length//
SL=SL/8;
//Width//
SW=SW/8;
fill(#FF3333);
noStroke();
beginShape();
vertex(PR*3.5 + PR*V_SX -0.25*PR*SL, PR*2.5 + PR*H_SY -0.5*PR*SW); //L 1
vertex(PR*4.5 + PR*V_SX +0.25*PR*SL, PR*2.5 + PR*H_SY -0.5*PR*SW); //R 1
vertex(PR*4.5 + PR*V_SX +0.25*PR*SL, PR*5.5 + PR*H_SY +0.5*PR*SW); //R 6
vertex(PR*3.5 + PR*V_SX -0.25*PR*SL, PR*5.5 + PR*H_SY +0.5*PR*SW); //L 6
vertex(PR*3.5 + PR*V_SX -0.25*PR*SL, PR*2.5 + PR*H_SY -0.5*PR*SW); //L 1
endShape();
}
float Cap_Battery=0;
void charge() {
if (Cap_Battery<=0)Cap_Battery=0;
if (Cap_Battery<=2) {
fill(random(255), random(255), random(188));
textSize(88);
text("Charge", width/4, height/4);
}
if (Cap_Battery>0)Cap_Battery-=0.008;
}
void mouseClicked() {
Cap_Battery++;
if (Cap_Battery>=3.9)Cap_Battery=3.9;
}
float limit;
float limit_Above(float on, float off) {
if (Cap_Battery<=2)limit=on;
else if (Cap_Battery>2)limit=off;
return limit;
}
void motion(float Motion_X, float Motion_Y) {
if (V_BX>=2.5)end_X=true;
else if (V_BX<-2.5)end_X=false;
if (H_BY>=3.5)end_Y=true;
else if (H_BY<-limit_Above(1.3, 3.5))end_Y=false;
if (!end_X)
V_BX=(V_BX+Motion_X);
else if (end_X)
V_BX=V_BX-Motion_X;
if (!end_Y)
H_BY=(H_BY+Motion_Y);
else if (end_Y)
H_BY=H_BY-Motion_Y;
}
void Status() {
fill(255);
textSize(13);
if (Cap_Battery<=2)text("Status : warning", width/38, height/38);
else if (Cap_Battery>2)text("Status : Discharge", width/38, height/38);
else text("Status : Error", width/38, height/38);
}