/*
CINDY CHI
NOV. 19, 2008
DMA 28: INTERACTIVITY
EXCERCISE L
For processing monsters. http://rmx.cz/monsters/
Click somewhere to produce a piece of food and the monster will come
and eat it!
*/
Monster m1;
float monsterX = 200.0;
float monsterY = 200.0;
float distX;
float distY;
boolean drawn = false;
float circleX = 0.0;
float circleY = 0.0;
float easing = 0.07;
float startMillis;
boolean smile = false;
void setup()
{
size(400, 400);
smooth();
background(0);
m1 = new Monster();
}
void draw()
{
background(0);
m1.assign(monsterX, monsterY, 15, 33);
m1.display();
if(drawn == true)
{
stroke(255);
strokeWeight(5);
ellipse(circleX, circleY, 20, 20);
monsterX += (circleX - monsterX) * easing;
monsterY += ((circleY - 15) - monsterY) * easing;
if(circleX >= monsterX - 10 && circleX <= monsterX + 10
&& circleY >= monsterY + 5 && circleY <= monsterY + 35)
{
drawn = false;
startMillis = millis();
smile = true;
}
}
}
class Monster
{
float inc = 0.0; //for tal
float currentTime = millis();
float x;
float y;
int tents;
float eyes;
void assign(float xpos, float ypos, int tentacles, float eyeSpace)
{
x = xpos;
y = ypos;
tents = tentacles;
eyes = eyeSpace;
}
void display()
{
currentTime = millis();
stroke(255);
inc += 0.01; //increases speed of tail bending
float angle = sin(inc) / 10.0 + sin(inc * 1.2) / 20.0;
pushMatrix();
translate(x, y);
tail(0, 0, tents, angle * 1.01);
rotate(radians(5));
tail(0, 0, tents + 5, angle * .5);
rotate(radians(5));
tail(0, 0, tents + 3, angle * 1.01);
rotate(radians(5));
tail(0, 0, tents - 2, angle * 1.04);
rotate(radians(5));
tail(0, 0, tents, angle * .3);
rotate(radians(5));
tail(0, 0, tents, angle * 1.05);
rotate(radians(5));
tail(0, 0, tents + 2, angle * .5);
rotate(radians(5));
tail(0, 0, tents - 3, angle * 1.03);
rotate(radians(5));
tail(0, 0, tents + 1, angle * .7);
rotate(radians(5));
tail(0, 0, tents + 4, angle * .3);
rotate(radians(5));
tail(0, 0, tents, angle * .3);
rotate(radians(5));
tail(0, 0, tents + 2, angle * 1.03);
rotate(radians(5));
tail(0, 0, tents - 3, angle * .5);
rotate(radians(5));
tail(0, 0, tents + 3, angle * 1.02);
rotate(radians(5));
tail(0, 0, tents - 1, angle * 1.01);
rotate(radians(5));
tail(0, 0, tents, angle * .4);
rotate(radians(5));
tail(0, 0, tents + 5, angle * 1.05);
rotate(radians(5));
tail(0, 0, tents + 3, angle * .6);
rotate(radians(5));
tail(0, 0, tents - 2, angle * 1.03);
rotate(radians(5));
tail(0, 0, tents, angle * .9);
rotate(radians(5));
tail(0, 0, tents + 2, angle * .3);
rotate(radians(5));
tail(0, 0, tents + 1, angle * 1.03);
rotate(radians(5));
tail(0, 0, tents - 2, angle * 1.05);
rotate(radians(5));
tail(0, 0, tents + 4, angle * .5);
rotate(radians(5));
tail(0, 0, tents - 3, angle * 1.04);
rotate(radians(5));
tail(0, 0, tents + 5, angle * .9);
rotate(radians(5));
tail(0, 0, tents + 2, angle * .6);
rotate(radians(5));
tail(0, 0, tents - 2, angle * 1.02);
rotate(radians(5));
tail(0, 0, tents, angle * 1.03);
rotate(radians(5));
tail(0, 0, tents + 4, angle * .3);
rotate(radians(5));
tail(0, 0, tents, angle * .3);
rotate(radians(5));
tail(0, 0, tents + 2, angle * .5);
rotate(radians(5));
tail(0, 0, tents - 1, angle * 1.03);
rotate(radians(5));
tail(0, 0, tents + 3, angle * 1.02);
rotate(radians(5));
tail(0, 0, tents - 1, angle * 1.03);
rotate(radians(5));
tail(0, 0, tents + 1, angle * .5);
rotate(radians(5));
tail(0, 0, tents, angle * .9);
rotate(radians(5));
tail(0, 0, tents - 3, angle * .2);
rotate(radians(5));
tail(0, 0, tents + 2, angle * 1.02);
rotate(radians(5));
tail(0, 0, tents + 3, angle * .4);
rotate(radians(5));
tail(0, 0, tents + 5, angle * .3);
rotate(radians(5));
tail(0, 0, tents, angle * 1.03);
rotate(radians(5));
tail(0, 0, tents + 2, angle * 1.01);
rotate(radians(5));
tail(0, 0, tents - 2, angle * 1.04);
rotate(radians(5));
tail(0, 0, tents - 3, angle * .4);
rotate(radians(5));
tail(0, 0, tents - 2, angle * .2);
rotate(radians(5));
tail(0, 0, tents, angle * .6);
rotate(radians(5));
tail(0, 0, tents + 5, angle * 1.02);
rotate(radians(5));
tail(0, 0, tents - 1, angle * 1.03);
rotate(radians(5));
tail(0, 0, tents + 2, angle * .9);
rotate(radians(5));
tail(0, 0, tents, angle * .7);
rotate(radians(5));
tail(0, 0, tents + 2, angle * 1.03);
rotate(radians(5));
tail(0, 0, tents + 5, angle * 1.01);
rotate(radians(5));
tail(0, 0, tents - 1, angle * 1.04);
rotate(radians(5));
tail(0, 0, tents -3, angle * 1.03);
rotate(radians(5));
tail(0, 0, tents, angle * .2);
rotate(radians(5));
tail(0, 0, tents - 2, angle * .3);
rotate(radians(5));
tail(0, 0, tents + 4, angle * 1.03);
rotate(radians(5));
tail(0, 0, tents + 1, angle * 1.05);
rotate(radians(5));
tail(0, 0, tents, angle * .3);
rotate(radians(5));
tail(0, 0, tents + 2, angle * .4);
rotate(radians(5));
tail(0, 0, tents + 4, angle * .7);
rotate(radians(5));
tail(0, 0, tents - 2, angle * 1.02);
rotate(radians(5));
tail(0, 0, tents, angle * .9);
rotate(radians(5));
tail(0, 0, tents - 3, angle * 1.03);
rotate(radians(5));
tail(0, 0, tents + 5, angle * 1.05);
rotate(radians(5));
tail(0, 0, tents + 2, angle * .7);
rotate(radians(5));
tail(0, 0, tents + 1, angle * .4);
rotate(radians(5));
tail(0, 0, tents, angle * 1.03);
rotate(radians(5));
tail(0, 0, tents - 1, angle * 1.02);
rotate(radians(5));
tail(0, 0, tents + 1, angle * 1.03);
rotate(radians(5));
tail(0, 0, tents + 4, angle * .8);
rotate(radians(5));
tail(0, 0, tents - 3, angle * .3);
popMatrix();
//blinking eyes
fill(0);
if(smile == true) //when eats food
{
if(currentTime - startMillis <= 1000)
{
stroke(0);
strokeWeight(5);
//left eye
line(x - eyes, y, x - (eyes - 5), y - 5);
line(x - (eyes - 5), y - 5, x - (eyes - 10), y);
//right eye
line(x + eyes, y, x + (eyes - 5), y - 5);
line(x + (eyes - 5), y - 5, x + (eyes - 10), y);
inc += 0.3; //increases speed of fluff
}
else
{
smile = false;
inc += 0.01;
}
}
else
{
if(currentTime%50 == 0)
{
stroke(0);
strokeWeight(5);
line(x - eyes, y, x - (eyes - 10), y);
line(x + eyes, y, x + (eyes - 10), y);
}
else
{
ellipse(x - (eyes - 5), y, 10, 30);
ellipse(x + (eyes - 5), y, 10, 30);
}
}
//mouth for eating
if(drawn == true)
{
rect(monsterX - 10, monsterY + 5, 20, 30);
}
}
}
void tail(int x, int y, int units, float angle) //x, y, length, angle of bend
{
pushMatrix();
translate(x, y);
for (int i = units; i > 0; i--)
{
strokeWeight(i); //changes thickness
line(0, 0, 0, .5);
translate(0, -8); //controls closeness of lines
rotate(angle);
}
popMatrix();
}
void mousePressed()
{
drawn = true;
circleX = mouseX;
circleY = mouseY;
}
Cindy - L
on Monday, Nov 24, 2008 – 2:33 am