|
|
|
|
|
var DEBUG_MODE = false; |
|
var NUM_SLIDERS =6; |
|
|
|
|
|
function segment_average(segment) { |
|
let sum_x = 0; |
|
let sum_y = 0; |
|
let s_len = segment.length; |
|
for (let i=0; i<s_len; i++) { |
|
sum_x = sum_x + segment[i][0]; |
|
sum_y = sum_y + segment[i][1]; |
|
} |
|
return [sum_x / s_len , sum_y / s_len ]; |
|
} |
|
|
|
const bg_color = [255,255,0]; |
|
//facecolor |
|
const facecolor1 = "#C49987"; |
|
const facecolor2 = "#84685B"; |
|
const facecolor3 = "#634E44"; |
|
const facecolor4 = "#4A3B33"; |
|
const facecolor5 = "#382C26"; |
|
|
|
function Face() { |
|
this.eyeballs = 3; |
|
this.face_colour = 1;// color 1~5 |
|
this.right_eye_Size = 0; |
|
this.gender = 1; //1=female 2=male |
|
this.draw = function(positions) { |
|
rectMode(CENTER); |
|
//<<positions>> |
|
//face |
|
let face1 = positions.left_eyebrow[0]; |
|
let face2 = positions.left_eyebrow[2]; |
|
let face3 = positions.left_eyebrow[4]; |
|
let face4 = positions.right_eyebrow[0]; |
|
let face5 = positions.right_eyebrow[2]; |
|
let face6 = positions.right_eyebrow[4]; |
|
let face7 = positions.chin[16]; |
|
let face8 = positions.chin[14]; |
|
let face9 = positions.chin[12]; |
|
let face10 = positions.chin[10]; |
|
let face11 = positions.chin[8]; |
|
let face12 = positions.chin[6]; |
|
let face13 = positions.chin[4]; |
|
let face14 = positions.chin[2]; |
|
let face15 = positions.chin[0]; |
|
let face16 = positions.chin[9]; |
|
let face17 = positions.chin[7]; |
|
let face18 = positions.nose_bridge[0]; |
|
//glasses |
|
let glasses1 = positions.left_eye[0]; |
|
let glasses2 = positions.left_eye[1]; |
|
let glasses3 = positions.left_eye[2]; |
|
let glasses4 = positions.left_eye[3]; |
|
let glasses5 = positions.left_eye[4]; |
|
let glasses6 = positions.left_eye[5]; |
|
let glasses7 = positions.right_eye[0]; |
|
let glasses8 = positions.right_eye[1]; |
|
let glasses9 = positions.right_eye[2]; |
|
let glasses10 = positions.right_eye[3]; |
|
let glasses11 = positions.right_eye[4]; |
|
let glasses12 = positions.right_eye[5]; |
|
//mouth |
|
let mouth1= positions.top_lip[0]; |
|
let mouth2= positions.top_lip[1]; |
|
let mouth3= positions.top_lip[2]; |
|
let mouth4= positions.top_lip[3]; |
|
let mouth5= positions.top_lip[4]; |
|
let mouth6= positions.top_lip[5]; |
|
let mouth7= positions.top_lip[6]; |
|
let mouth8= positions.top_lip[7]; |
|
let mouth9= positions.top_lip[8]; |
|
let mouth10= positions.top_lip[9]; |
|
let mouth11= positions.top_lip[10]; |
|
let mouth12= positions.top_lip[11]; |
|
|
|
let mouth13= positions.bottom_lip[0]; |
|
let mouth14= positions.bottom_lip[1]; |
|
let mouth15= positions.bottom_lip[2]; |
|
let mouth16= positions.bottom_lip[3]; |
|
let mouth17= positions.bottom_lip[4]; |
|
let mouth18= positions.bottom_lip[5]; |
|
let mouth19= positions.bottom_lip[6]; |
|
let mouth20= positions.bottom_lip[7]; |
|
let mouth21= positions.bottom_lip[8]; |
|
let mouth22= positions.bottom_lip[9]; |
|
let mouth23= positions.bottom_lip[10]; |
|
let mouth24= positions.bottom_lip[11]; |
|
|
|
//nose |
|
let nose1 = positions.nose_bridge[1]; |
|
let nose2 = positions.nose_bridge[3]; |
|
let nose3 = positions.nose_tip[2]; |
|
let nose4 = positions.nose_tip[4]; |
|
let nose5 = positions.nose_tip[0]; |
|
|
|
//eye |
|
let left_eye = segment_average(positions.left_eye); |
|
let right_eye = segment_average(positions.right_eye); |
|
let left_eye_size = map(this.righteye, 0, 10, 0.5, 0.8); |
|
let right_eye_size = map(this.lefteye, 0, 10, 0.5, 0.8); |
|
//eyeballs |
|
let right_eyeball_pos = map(this.eyeballs, 0,10, -0.1, 0.5); |
|
//eyebrow |
|
let eyebrow1 = positions.left_eyebrow[0]; |
|
let eyebrow2 = positions.left_eyebrow[1]; |
|
let eyebrow3 = positions.left_eyebrow[2]; |
|
let eyebrow4 = positions.left_eyebrow[3]; |
|
let eyebrow5 = positions.left_eyebrow[4]; |
|
let eyebrow6 = positions.right_eyebrow[0]; |
|
let eyebrow7 = positions.right_eyebrow[1]; |
|
let eyebrow8 = positions.right_eyebrow[2]; |
|
let eyebrow9 = positions.right_eyebrow[3]; |
|
let eyebrow10 = positions.right_eyebrow[4]; |
|
//facecolor |
|
if(this.face_colour == 1){ |
|
faceColour = facecolor1; |
|
} |
|
else if(this.face_colour == 2){ |
|
faceColour = facecolor2; |
|
} |
|
else if(this.face_colour == 3){ |
|
faceColour = facecolor3; |
|
} |
|
else if(this.face_colour == 4){ |
|
faceColour = facecolor4; |
|
} |
|
else if(this.face_colour == 5){ |
|
faceColour = facecolor5; |
|
} |
|
|
|
|
|
beginShape(); |
|
|
|
|
|
//head |
|
fill(faceColour); |
|
|
|
noStroke(); |
|
|
|
vertex(face15[0],face15[1]-1.5); |
|
vertex(face2[0],face2[1]-1); |
|
vertex(face5[0],face5[1]-1); |
|
vertex(face7[0],face7[1]-1.5); |
|
vertex(face8[0],face8[1]); |
|
vertex(face16[0],face16[1]); |
|
vertex(face17[0],face17[1]); |
|
vertex(face14[0],face14[1]); |
|
vertex(face15[0],face15[1]-1.5); |
|
|
|
|
|
|
|
|
|
endShape(); |
|
|
|
//middle glasses |
|
stroke(0); |
|
|
|
strokeWeight(0.08); |
|
line(glasses4[0]+0.2,glasses4[1],glasses7[0]-0.3,glasses7[1]) |
|
//left glasses |
|
fill(0); |
|
noStroke(); |
|
beginShape(); |
|
vertex(glasses1[0]-0.3,glasses1[1]); |
|
|
|
vertex(glasses2[0]-0.2,glasses2[1]+0.5); |
|
vertex(glasses3[0]+0.2,glasses3[1]+0.5); |
|
vertex(glasses4[0]+0.2,glasses4[1]); |
|
vertex(glasses5[0]+0.2,glasses5[1]-0.5); |
|
vertex(glasses6[0]-0.2,glasses6[1]-0.5); |
|
vertex(glasses1[0]-0.3,glasses1[1]); |
|
|
|
endShape(); |
|
//right glasses |
|
fill(0); |
|
noStroke(); |
|
beginShape(); |
|
vertex(glasses7[0]-0.3,glasses7[1]); |
|
|
|
vertex(glasses8[0]-0.2,glasses8[1]+0.5); |
|
vertex(glasses9[0]+0.2,glasses9[1]+0.5); |
|
vertex(glasses10[0]+0.2,glasses10[1]); |
|
vertex(glasses11[0]+0.2,glasses11[1]-0.5); |
|
vertex(glasses12[0]-0.2,glasses12[1]-0.5); |
|
vertex(glasses7[0]-0.3,glasses7[1]); |
|
|
|
endShape(); |
|
//mouth |
|
fill(0); |
|
beginShape(); |
|
curveVertex(mouth1[0],mouth1[1]); |
|
curveVertex(mouth2[0],mouth2[1]); |
|
curveVertex(mouth3[0],mouth3[1]); |
|
curveVertex(mouth4[0],mouth4[1]); |
|
curveVertex(mouth5[0],mouth5[1]); |
|
curveVertex(mouth6[0],mouth6[1]); |
|
curveVertex(mouth7[0],mouth7[1]); |
|
curveVertex(mouth8[0],mouth8[1]); |
|
curveVertex(mouth9[0],mouth9[1]); |
|
curveVertex(mouth10[0],mouth10[1]); |
|
curveVertex(mouth11[0],mouth11[1]); |
|
curveVertex(mouth12[0],mouth12[1]); |
|
curveVertex(mouth1[0],mouth1[1]); |
|
curveVertex(mouth2[0],mouth2[1]); |
|
endShape(); |
|
|
|
beginShape(); |
|
|
|
strokeWeight(2); |
|
curveVertex(mouth2[0],mouth2[1]); |
|
curveVertex(mouth4[0],mouth4[1]); |
|
curveVertex(mouth6[0],mouth6[1]); |
|
curveVertex(mouth22[0]+0.2,mouth22[1]); |
|
curveVertex(mouth22[0],mouth22[1]); |
|
curveVertex(mouth22[0]-0.2,mouth22[1]); |
|
|
|
endShape(CLOSE); |
|
|
|
|
|
|
|
//<<gender>> |
|
|
|
//female |
|
if(this.gender == 1){ |
|
|
|
beginShape(); |
|
fill(0); |
|
vertex(face2[0],face2[1]-1); |
|
|
|
vertex(face2[0]-0.1,face2[1]-2); |
|
vertex(face5[0],face5[1]-1); |
|
|
|
|
|
endShape(); |
|
beginShape(); |
|
fill(0); |
|
vertex(face5[0],face5[1]-1); |
|
vertex(face5[0]+0.1,face5[1]-2); |
|
vertex(face2[0],face2[1]-1); |
|
|
|
endShape(); |
|
beginShape(); |
|
fill(0); |
|
vertex(face5[0],face5[1]-1); |
|
vertex(face18[0]+0.1,face18[1]-2.6); |
|
vertex(face2[0],face2[1]-1); |
|
|
|
endShape(); |
|
} |
|
//male |
|
if(this.gender == 2){ |
|
|
|
beginShape(); |
|
fill(0); |
|
vertex(face16[0]+0.5,face16[1]); |
|
|
|
vertex(face17[0]-0.5,face17[1]+0.6); |
|
vertex(face17[0]-0.5,face17[1]); |
|
vertex(face16[0]+0.5,face16[1]+0.6); |
|
|
|
|
|
|
|
endShape(); |
|
} |
|
noStroke(); |
|
fill(255, 255); |
|
ellipse(left_eye[0],left_eye[1],left_eye_size-0.1,left_eye_size-0.5) |
|
ellipse(right_eye[0],right_eye[1],right_eye_size-0.1,right_eye_size-0.5) |
|
|
|
line(left_eye[0],left_eye[1],right_eye[0],right_eye[1]) |
|
fill(0); |
|
ellipse(left_eye[0]+right_eyeball_pos, left_eye[1], 0.2); |
|
ellipse(right_eye[0]+right_eyeball_pos, right_eye[1], 0.2); |
|
//nose |
|
stroke(0); |
|
|
|
strokeWeight(0.1); |
|
line(nose3[0],nose3[1],nose4[0],nose4[1]); |
|
line(nose3[0],nose3[1],nose5[0],nose5[1]); |
|
//eyebrow |
|
stroke(0); |
|
|
|
strokeWeight(0.15); |
|
line(eyebrow3[0],eyebrow3[1]-0.2,eyebrow5[0],eyebrow5[1]-0.2); |
|
|
|
line(eyebrow8[0],eyebrow8[1]-0.2,eyebrow6[0],eyebrow6[1]-0.2) |
|
} |
|
|
|
this.setProperties = function(settings) { |
|
this.righteye = map(settings[0], 0, 100, 0, 10); |
|
this.lefteye = map(settings[1], 0, 100, 0, 10); |
|
this.face_colour = int(map(settings[2], 0, 100, 1, 5)); |
|
this.gender = int(map(settings[3], 0, 100, 1, 2)); |
|
this.eyeballs = map(settings[4], 0, 100, 0, 5); |
|
} |
|
|
|
this.getProperties = function() { |
|
let settings = new Array(5); |
|
settings[0] = map(this.righteye, 0, 10, 0, 100); |
|
settings[1] = map(this.lefteye, 0, 10, 0, 100); |
|
settings[2] = map(this.face_colour, 1, 5, 0, 100); |
|
settings[3] = map(this.gender, 1, 2, 0, 100); |
|
settings[4] = map(this.eyeballs, 0, 5, 0, 100); |
|
return settings; |
|
} |
|
} |