TASK 05

// chameleoned ladybug    ---created by pei-wen huang

#include "CanvasPlus.as"

//the centerline of the ladybug is x = y

//basic variables
var basePoint = new Array ( .33, .55);
//background color
var bG = new Array ( .73, 1, .96);
//shadow color
var sC = new Array( .18, .25, .15);
//body color and color increment
var wC = new Array ( .88, .16, .1);
var colorInc = .05;
//dot and head color
var dC = new Array ( .11, 0, .22);
//for antenna
var pa1 = new Array ( basePoint[0] - .08, basePoint[0] - .22);
//for body
var pa2 = new Array ( basePoint[1] + .275, basePoint[1] + .215);
var pa3 = new Array ( basePoint[1] + .215, basePoint[1] + .275);
var pa4 = new Array ( basePoint[0], basePoint[0]);
//for dot
var pa5 = new Array ( basePoint[1] - .05, basePoint[0] - .05);
var pa6 = new Array ( basePoint[1] + .15, basePoint[0] + .04);
var pa7 = new Array ( basePoint[1] + .24, basePoint[1] + .02);
//for  butterfly bow
var pa8 = new Array ( basePoint[0] + .02, basePoint[0] - .09);
var pa9 = new Array ( basePoint[0] + .1, basePoint[0] - .02);
var pa10 = new Array ( basePoint[0] - .03, basePoint[0] + .105);
var pa11 = new Array ( basePoint[0] - .09, basePoint[0] + .04);
//moving variables
var angle = 0;
var radius1 = .04;
var radius2 = .015;

//character functions

function drawAntenna() {
	//including line and circle
	var filled = true;
	var px1 = basePoint[0], py1 = px1;
	var rx1 = .03;
	var ry1 = rx1;
	var endP1 = Moving1(radius1, angle);
	endP1[0] += pa1[0];
	endP1[1] += pa1[1];
	angle += .05;
	Canvas.setPenWeight( .022);
	//shadow
	Canvas.setPenColor( sC[0], sC[1], sC[2]);
	Canvas.drawLine ( px1 - .02, py1 + .03, endP1[0] - .02, endP1[1] + .03);
	Canvas.drawLine ( px1 - .02, py1 + .03, endP1[1] - .02, endP1[0] + .03);
	Canvas.drawOval ( filled, endP1[0] - .02, endP1[1] + .03, rx1, ry1);
	Canvas.drawOval ( filled, endP1[1] - .02, endP1[0] + .03, rx1, ry1);
	//antenna
	Canvas.setPenColor(  dC[0], dC[1], dC[1]);
	Canvas.drawLine ( px1, py1, endP1[0], endP1[1]);
	Canvas.drawLine ( px1, py1, endP1[1], endP1[0]);
	Canvas.drawOval ( filled, endP1[0], endP1[1], rx1, ry1);
	Canvas.drawOval ( filled, endP1[1], endP1[0], rx1, ry1);
}

function Moving1(distance, radianAngle) {
	// convert polar distance / angle to cartesian x / y
	var x1 = distance * Math.cos(radianAngle);
	var y1 = distance * Math.sin(radianAngle);
	return new Array( x1, y1);
}

function Moving2(distance, radianAngle) {
	// convert polar distance / angle to cartesian x / y
	var x2 = distance * Math.cos(radianAngle);
	var y2 = distance * Math.cos(radianAngle);
	return new Array(x2, y2);
}

function drawFace() {
	var filled = true;
	var rx2 = .13;
	var ry2 = rx2;
	var endP2 = Moving2(radius2, angle);
	endP2[0] += basePoint[0];
	endP2[1] += basePoint[0];
	angle += .03;
	//shadow
	Canvas.setPenColor( sC[0], sC[1], sC[2]);
	Canvas.drawOval(filled, endP2[0] - .02, endP2[0] + .03, rx2, ry2);
	//head
	Canvas.setPenColor( dC[0], dC[1], dC[2]);
	Canvas.drawOval(filled, endP2[0], endP2[0], rx2, ry2);
}

function drawHead() {

	//combine face and antenna together
	drawAntenna();
	drawFace();
}

function drawWing() {
	var filled = true;
	var px2 = basePoint[1];
	var py2 = px2;
	var rx2 = .35;
	var ry2 = rx2;

	//shadow
	Canvas.setPenColor( sC[0], sC[1], sC[2]);
	Canvas.drawOval( filled, px2 - .035, py2 + .045, rx2, ry2);
	//wings
	Canvas.setPenColor( wC[0], wC[1], wC[2]);
	wC[0] += colorInc, wC[1] += colorInc, wC[2] += colorInc;
	wC[0] %= 1.0, wC[1] %= 1.0, wC[2] %= 1.0;
	Canvas.drawOval( filled, px2, py2, rx2, ry2);
}

function drawBody() {
	//inner black part
	var filled = true;
	var paB = new array ( pa2, pa3, pa4);
	//no shadow needed
	Canvas.setPenColor( 0, 0, 0);
	Canvas.drawRegion( filled, paB);
}

function drawDot() {
	//the dots on the wings
	var filled = true;
	var rx3 = .055;
	var ry3 = rx3;
	//no shadow needed
	Canvas.setPenColor( dC[0], dC[1], dC[2] - .1);
	Canvas.drawOval( filled, pa5[0], pa5[1], rx3, ry3);
	Canvas.drawOval( filled, pa5[1], pa5[0], rx3, ry3);
	Canvas.drawOval( filled, pa6[0], pa6[1], rx3, ry3);
	Canvas.drawOval( filled, pa6[1], pa6[0], rx3, ry3);
	Canvas.drawOval( filled, pa7[0], pa7[1], rx3, ry3);
	Canvas.drawOval( filled, pa7[1], pa7[0], rx3, ry3);
}

function drawButterflyBow(){
	var filled = true;
	var BB1 = new array ( pa8, pa9, pa4); 
	var BB2 = new array ( pa10, pa11, pa4);
	Canvas.setPenColor( 1, .5, .5);
	Canvas.drawRegion( filled, BB1);
	Canvas.drawRegion( filled, BB2);
}

function drawCharacter() {
	//later functions paint over previous results
	Canvas.setBackgroundColor( bG[0], bG[1], bG[2]);
	drawHead();
	drawWing();
	drawBody();
	drawDot();
	drawButterflyBow();
}

// associate our functions with appropriate events
_root.onEnterFrame = drawCharacter;

// stop the playback head from leaving this frame
stop();