int cx = 400; int cy = 425; int r = 250; int x; int y; Gnomard gnomard1; void setup(){ size(800, 800); gnomard1 = new Gnomard(5,x,y); } void draw(){ background(0); stroke(255); float t = millis()/900.0; x = (int)(cx+r*cos(t)); y = (int)(cy+r*sin(t)); gnomard1.booger(x, y); } class Gnomard { float eyeR; float eyeG; float eyeB; float gnomX; float gnomY; float tailX; float tailY; float[] xVals = new float[10]; float[] yVals = new float[10]; int startX; int startY; int avgLen; int currentPos = 0; Gnomard(int avgLenAssignment, int tempStartX, int tempStartY) { avgLen = avgLenAssignment; startX = tempStartX; startY = tempStartY; gnomX = X; gnomY = Y; for (int i = 0; i < 10; i++) { xVals[i] = 0; yVals[i] = 0; } } int getX() { return startX; } int getY() { return startY; } void booger(float tempGnomX, float tempGnomY) { gnomX = tempGnomX; gnomY = tempGnomY; xVals[currentPos] = gnomX; yVals[currentPos] = gnomY; currentPos++; if (currentPos >= avgLen) { currentPos = 0; } tailX = 0; tailY = 0; for (int i = 0; i < avgLen ; i++) { tailX += xVals[i]; tailY += yVals[i]; } tailX /= avgLen; tailY /= avgLen; ellipseMode(CENTER); rectMode(CENTER); //hat ball noStroke(); if (mousePressed == true) { fill (245, 7, 103, 80); } else { fill(0, 0, 0, 0); } ellipse(gnomX, gnomY-150, 40, 40); ellipse(gnomX, gnomY-150, 30, 30); ellipse(gnomX, gnomY-150, 20, 20); ellipse(gnomX, gnomY-150, 10, 10); //left wing... eeeeeeek! pushMatrix(); translate(gnomX-15, gnomY); rotate(cos(frameCount%PI)); beginShape(); fill(50); noStroke(); vertex(0, 0); bezierVertex(-20, -20, -40, -30, -60, 5); bezierVertex(-40, 30, -20, -20, 0, 0); endShape(); popMatrix(); //right wing... eeeeeeek! pushMatrix(); translate(gnomX+15, gnomY); rotate(-cos(frameCount%PI)); beginShape(); fill(50); noStroke(); vertex(0, 0); bezierVertex(20, -20, 40, -30, 60, 5); bezierVertex(40, 30, 20, -20, 0, 0); endShape(); popMatrix(); //body stroke(150); fill(150); rect(gnomX, gnomY, 30, 40); ellipse(gnomX, gnomY+20, 30, 30); //tail ellipse(tailX, gnomY+50-(gnomY - tailY)/2, 17, 17); ellipse(tailX-(gnomX - tailX), gnomY+70-(gnomY - tailY), 9, 9); ellipse(tailX-(gnomX - tailX)*2, gnomY+85-(gnomY - tailY)*2, 4, 4); //hat noStroke(); fill(245, 7, 103); triangle(gnomX, gnomY-145, gnomX-20, gnomY-90, gnomX+20, gnomY-90); //head noStroke(); fill(150); ellipse(gnomX, gnomY-55, 100, 80); fill(255); ellipse(gnomX, gnomY-55, 90, 70); //eyes stroke(0); eyeR = random(255); eyeG = random(255); eyeB = random(255); fill(eyeR, eyeG, eyeB); ellipse(gnomX-25, gnomY-55, 25, 25); ellipse(gnomX+25, gnomY-55, 25, 25); fill(255); ellipse(gnomX-27, gnomY-52, 17, 15); ellipse(gnomX+23, gnomY-52, 17, 15); ellipse(gnomX-21, gnomY-62, 8, 7); ellipse(gnomX+29, gnomY-62, 8, 7); //stashhhhhh noStroke(); beginShape(); fill(60); vertex(gnomX+20, gnomY-30); bezierVertex(gnomX+40, gnomY-50, gnomX+60, gnomY, gnomX+80, gnomY-25); bezierVertex(gnomX+60, gnomY+10, gnomX+40, gnomY-40, gnomX+20, gnomY-30); endShape(); beginShape(); fill(60); vertex(gnomX-80, gnomY-25); bezierVertex(gnomX-60, gnomY, gnomX-40, gnomY-50, gnomX-20, gnomY-30); bezierVertex(gnomX-40, gnomY-40, gnomX-60, gnomY+10, gnomX-80, gnomY-25); endShape(); //mouth if (mousePressed == true) { fill(0); } else { fill (255); } ellipse(gnomX, gnomY-33, 10, 16); } }