///Cat Babushka (Babushcat)
///by Colton David
///for Nicolas Hesler
///~Ask Babushcat for advice on life, love, and cat stuff~
///all advice excerpts provided by Maria Stavreva, a real slavic grandma.
//Love Button Var
float loveButtonX1 = 270;
float loveButtonY1 = 30;
float loveButtonX2 = 390;
float loveButtonY2 = 90;
//Cat Button Var
float catButtonX1 = 270;
float catButtonY1 = 120;
float catButtonX2 = 390;
float catButtonY2 = 180;
//Job Button Var
float jobButtonX1 = 270;
float jobButtonY1 = 210;
float jobButtonX2 = 390;
float jobButtonY2 = 270;
//Colours
int furColour = 180;
//Drawing Vars
int hoodXPos = 130;
int hoodYPos = 160;
int hoodWidth = 200;
int hoodHeight = 200;
int patternSpaceX = 0;
int patternSpaceY = 0;
int leftpupilXPos = 105;
int leftpupilYPos = 145;
int rightpupilXPos = 175;
int rightpupilYPos = 145;
float leftMouthX = 120;
float leftMouthY = 190;
float rightMouthX = 140;
float rightMouthY = 190;
//Logic Vars
int textX = 200;
int textY = 355;
boolean loveButtonpress = false;
boolean catButtonpress = false;
boolean jobButtonpress = false;
int loveTest = 0;
int catTest = 0;
int jobTest = 0;
void setup() {
size(400, 400);
background(145, 51, 42);
rectMode(CORNERS);
noStroke();
textAlign(CENTER);
textSize(24);
}
void draw() {
frameRate(60);
stroke(0);
strokeWeight(2);
drawBackground();
drawLoveButton();
drawJobButton();
drawCatButton();
drawCatGrandma();
drawTable();
noStroke(); //Cancel stroke for text hide
}
void mouseClicked() {
//Check if clicking Love Box
if (mouseX > loveButtonX1 && mouseX < loveButtonX1+loveButtonX2 && mouseY > loveButtonY1 && mouseY < loveButtonY1+loveButtonY2-30) {
loveButtonpress = true;
//Print love response in 1 - 10 order, repeat when finished
if (loveButtonpress == true) {
loveTest = loveTest+1;
if (loveTest > 10) {
loveTest = 1;
}
if (loveTest == 1) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(20);
text ("A person who is totally free,", textX, textY);
text ("is a person who needs no one.", textX, textY+25);
rectMode(CORNERS);
}
if (loveTest == 2) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(20);
text ("You don't really know someone until", textX, textY);
text("you've eaten a bag of salt together.", textX, textY+25);
rectMode(CORNERS);
}
if (loveTest == 3) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(19);
text ("Honesty and truth are expensive gifts", textX, textY);
text("that you can't expect from cheap people.", textX, textY+25);
rectMode(CORNERS);
}
if (loveTest == 4) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(22);
text ("In friendship and in love", textX, textY);
text("no one is in debt.", textX, textY+25);
rectMode(CORNERS);
}
if (loveTest == 5) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(19);
text ("When you are in love, make sure you", textX, textY);
text("are both looking in the same direction.", textX, textY+25);
rectMode(CORNERS);
}
if (loveTest == 6) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(22);
text ("Love each other", textX, textY);
text(" like the first day you met.", textX, textY+25);
rectMode(CORNERS);
}
if (loveTest == 7) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(20);
text ("Love must be shared, not hoarded.", textX, textY);
rectMode(CORNERS);
}
if (loveTest == 8) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(20);
text ("Salt your water before you boil it.", textX, textY);
rectMode(CORNERS);
}
if (loveTest == 9) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(20);
text ("Your time has value", textX, textY);
text("and so does your partner's.", textX, textY+25);
rectMode(CORNERS);
}
if (loveTest == 10) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(19);
text ("Eating together makes food taste better.", textX, textY);
rectMode(CORNERS);
}
}
}
//Check if clicking Cat Box
if (mouseX > catButtonX1 && mouseX < catButtonX1+catButtonX2 && mouseY > catButtonY1 && mouseY < catButtonY1+catButtonY2-120) {
catButtonpress = true;
if (catButtonpress == true) {
catTest = catTest+1;
if (catTest > 10) {
catTest = 1;
}
if (catTest == 1) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(19);
text ("May God save you from your friends.", textX, textY);
text ("You can save yourself from enemies.", textX, textY+25);
rectMode(CORNERS);
}
if (catTest == 2) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(20);
text ("Be independent but stay close", textX, textY);
text(" to the ones you love.", textX, textY+25);
rectMode(CORNERS);
}
if (catTest == 3) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(19);
text ("Honesty and truth are expensive gifts", textX, textY);
text("that you can't expect from cheap people.", textX, textY+25);
rectMode(CORNERS);
}
if (catTest == 4) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(22);
text ("Check your beans for stones", textX, textY);
text(" before you boil them.", textX, textY+25);
rectMode(CORNERS);
}
if (catTest == 5) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(22);
text ("Without your health", textX, textY);
text(" you have nothing.", textX, textY+25);
rectMode(CORNERS);
}
if (catTest == 6) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(20);
text ("You are the best cat in this world.", textX, textY);
rectMode(CORNERS);
}
if (catTest == 7) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(20);
text ("Be grateful for your parents.", textX, textY);
rectMode(CORNERS);
}
if (catTest == 8) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(19);
text ("Don't go where you are not meant to be.", textX, textY);
rectMode(CORNERS);
}
if (catTest == 9) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(20);
text ("You are the best cat in this world.", textX, textY);
rectMode(CORNERS);
}
if (catTest == 10) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(19);
text ("Don't climb the table, people eat there.", textX, textY);
rectMode(CORNERS);
}
}
}
//Check if clicking Job Box
if (mouseX > jobButtonX1 && mouseX < jobButtonX1+jobButtonX2 && mouseY > jobButtonY1 && mouseY < jobButtonY1+jobButtonY2-210) {
jobButtonpress = true;
if (jobButtonpress == true) {
jobTest = jobTest+1;
if (jobTest > 10) {
jobTest = 1;
}
if (jobTest == 1) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(20);
text ("Everything good is only good", textX, textY);
text ("in its time and place.", textX, textY+25);
rectMode(CORNERS);
}
if (jobTest == 2) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(19);
text ("Even in the meowst difficult times,", textX, textY);
text ("believe you will survive.", textX, textY+25);
rectMode(CORNERS);
}
if (jobTest == 3) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(22);
text ("Always forgive others.", textX, textY);
rectMode(CORNERS);
}
if (jobTest == 4) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(22);
text ("Only do what brings you joy.", textX, textY);
rectMode(CORNERS);
}
if (jobTest == 5) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(19);
text ("Meowney is important", textX, textY);
text ("but do not bank on happiness.", textX, textY+25);
rectMode(CORNERS);
}
if (jobTest == 6) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(22);
text ("Some values never die.", textX, textY);
rectMode(CORNERS);
}
if (jobTest == 7) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(19);
text ("It's ok that you are a failure,", textX, textY);
text ("that's why your parents had more kids.", textX, textY+25);
rectMode(CORNERS);
}
if (jobTest == 8 ) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(22);
text ("Go for the job that chose you.", textX, textY);
rectMode(CORNERS);
}
if (jobTest == 9) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(22);
text ("Get out of bed right now.", textX, textY);
rectMode(CORNERS);
}
if (jobTest == 10) {
rectMode(CENTER);
fill(145, 51, 42);
rect (textX, textY, 400, 100);
fill(255);
textSize(19);
text ("Come out of your house with misery,", textX, textY);
text ("return with misery.", textX, textY+25);
rectMode(CORNERS);
}
}
}
//Random Meow
if (mouseX > 30 && mouseX < 280 && mouseY > 50 && mouseY < 300) {
textSize(22);
fill (255);
strokeWeight(2);
text("meow", random(30, 280), random(50, 300));
frameRate(3);
}
}
void drawLoveButton() {
stroke(0);
//Draw love button
fill(200);
//Mouse-over feedback
if (mouseX > loveButtonX1 && mouseX < loveButtonX1+loveButtonX2 && mouseY > loveButtonY1 && mouseY < loveButtonY1+loveButtonY2-30) {
fill(255);
}
rect(loveButtonX1, loveButtonY1, loveButtonX2, loveButtonY2, 10);
fill(0);
//L
line(290, 40, 290, 80);
line(290, 80, 310, 80);
//U
line(320, 50, 320, 80);
line(320, 80, 340, 80);
line(340, 80, 340, 50);
//V
line(350, 50, 360, 80);
line(360, 80, 370, 50);
}
//Draw cat button
void drawCatButton() {
fill(200);
//Mouse-over feedback
if (mouseX > catButtonX1 && mouseX < catButtonX1+catButtonX2 && mouseY > catButtonY1 && mouseY < catButtonY1+catButtonY2-120) {
fill(255);
}
rect(catButtonX1, catButtonY1, catButtonX2, catButtonY2, 10);
fill(0);
//C
line(310, 130, 290, 150);
line(290, 150, 310, 170);
//A
line(330, 140, 320, 170);
line(330, 140, 340, 170);
line(325, 160, 335, 160);
//T
line(350, 140, 370, 140);
line(360, 140, 360, 170);
}
//Draw job button
void drawJobButton() {
fill(200);
//Mouse-over feedback
if (mouseX > jobButtonX1 && mouseX < jobButtonX1+jobButtonX2 && mouseY > jobButtonY1 && mouseY < jobButtonY1+jobButtonY2-210) {
fill(255);
}
rect(jobButtonX1, jobButtonY1, jobButtonX2, jobButtonY2, 10);
fill(0);
//J
line(290, 220, 310, 220);
line(300, 220, 300, 260);
line(300, 260, 290, 250);
//O
line(320, 230, 340, 230);
line(340, 230, 340, 260);
line(340, 260, 320, 260);
line(320, 260, 320, 230);
//B
line(350, 230, 350, 260);
line(350, 230, 370, 240);
line(370, 240, 350, 250);
line(350, 250, 370, 260);
line(370, 260, 350, 260);
}
void drawCatGrandma() {
noStroke();
ellipseMode(CENTER);
//Ears
fill(furColour);
triangle(30, 60, 95, 80, 60, 120);
triangle(230, 60, 145, 80, 200, 120);
//Body
ellipse(hoodXPos, hoodYPos+80, hoodWidth-20, hoodHeight-10);
fill(252, 199, 194);
ellipse(hoodXPos, hoodYPos+80, hoodWidth-40, hoodHeight-30);
//Apron Pattern
for (patternSpaceX=100; patternSpaceX < 170; patternSpaceX = patternSpaceX + 10) {
for (patternSpaceY = 80; patternSpaceY < 320; patternSpaceY = patternSpaceY + 10) {
fill(255, 0, 0);
ellipse(patternSpaceX, patternSpaceY, 4, 4);
}
}
//Neckerchief
fill(200, 0, 0);
rotate(0.5); //rotating is hard ; _ ;
ellipse(225, 175, 30, 50);
rotate(-1);
ellipse(5, 300, 30, 50); //there is no logic here ; _ ;
rotate(0.5);
//Hood
fill(220, 40, 40);
ellipse(hoodXPos, hoodYPos, hoodWidth, hoodHeight);
//Fur Fluffs
fill(furColour + 30);
ellipse(65, 185, 40, 40);
ellipse(85, 205, 40, 40);
ellipse(195, 185, 40, 40);
ellipse(175, 205, 40, 40);
//Face
fill(furColour);
ellipse(130, 160, 150, 140);
//Eyes
fill(255);
ellipse(95, 145, 40, 30); //Left white
ellipse(165, 145, 40, 30); //Right white
fill(0);
//Look at Player
if (loveButtonpress == true || catButtonpress == true || jobButtonpress == true) {
ellipse (leftpupilXPos-10, leftpupilYPos, 10, 22); //Left pupil
ellipse (rightpupilXPos-10, rightpupilYPos, 10, 22); //Right pupil
} else {
//Look at Questions
ellipse (leftpupilXPos, leftpupilYPos, 20, 22); //Left pupil
ellipse (rightpupilXPos, rightpupilYPos, 20, 22); //Right pupil
}
//Eyebrows
fill(120);
rect(80, 110, 110, 125, 15);
rect(152, 110, 182, 125, 15);
//Nose
triangle(120, 160, 140, 160, 130, 178);
//Mouth
stroke(0);
strokeWeight(1.5);
if (loveButtonpress == true || catButtonpress == true || jobButtonpress == true) {
line(130, 176, leftMouthX -5, leftMouthY); //Left Mouth
line(130, 176, rightMouthX+5, rightMouthY); //Right Mouth
fill(252, 199, 194);
noStroke();
triangle(130, 178, leftMouthX-2, leftMouthY, rightMouthX+3, rightMouthY);
} else {
line(130, 176, leftMouthX, leftMouthY); //Left Mouth
line(130, 176, rightMouthX, rightMouthY); //Right Mouth
}
//Wrinkles
stroke(0);
line(70, 165, 90, 165);
line(70, 175, 90, 175);
line(170, 165, 190, 165);
line(170, 175, 190, 175);
//Hood Jewel
fill(255, 0, 0);
noStroke();
ellipse(hoodXPos, 245, 25, 30);
}
//Hide the bottom of Babushcat
void drawTable() {
fill(145, 51, 42);
rect(0, 300, 400, 335);
}
//Draw updating background
void drawBackground() {
fill(255, 80, 80);
rect(-20, -20, 450, 300);
for (float bgSpot = 30; bgSpot < 400; bgSpot = bgSpot + 25) {
fill (145, 51, 42);
noStroke();
ellipse(bgSpot, 0, 5, bgSpot);
}
}
//fin