// *********************************************************************
// Flower.java
// This object draws a new daisy to the specified graphics context.
// The shape of the stalk is a tightly constrained random walk.
//
// Murphy Stein
// NYU Computer Graphics
// 2006
// *********************************************************************

import java.awt.*;

public class Flower {

	int x, y;
	int StalkHeight;
	int StalkThickness;
	int NumPetals;
	int PetalSize;
	
	Point []Stalk;
	Point []Petals;
	
	// ** Constuctor ** //
	// Create a new petal with stalk rooted at x, y
	public Flower(int x, int y)
	{
		
		this.x = x;
		this.y = y;
		StalkThickness = 5;
		StalkHeight = 10;
		PetalSize = 20;
		NumPetals = 5;
		
		Stalk = new Point[StalkHeight];
		Petals = new Point[NumPetals];
		
		int newx = x, newy = y;
		
		
		Stalk[0] = new Point(x, y);
		for (int i = 1; i < StalkHeight; i++) {
			newx += (int)(Math.random()*StalkThickness-StalkThickness/2);
			newy -= (int)(Math.random()*StalkThickness + StalkThickness/2);
			Stalk[i] = new Point(newx, newy);
		}
		
		for (int i = 0; i < NumPetals; i++) {
			Petals[i] = new Point((int)(newx+((PetalSize)*Math.cos(i*(PetalSize)*360/NumPetals))),(int)(newy+((PetalSize)*Math.sin(i*(PetalSize)*360/NumPetals))));
		}
	}
	
	// draw flower to specified graphics context
	public void draw(Graphics g)
	{
		int px, py;
		
		// draw stalk
		for (int i = 0; i < StalkHeight; i++) {
			px = (int)Stalk[i].getX();
			py = (int)Stalk[i].getY();
			g.setColor(Color.black);
			g.drawOval(px-(int)((StalkThickness+1)/2),py-(int)((StalkThickness+1)/2),StalkThickness+1,StalkThickness+1);
			g.setColor(Color.green.darker());
			g.fillOval(px-(int)((StalkThickness)/2),py-(int)((StalkThickness)/2),StalkThickness,StalkThickness);
		}
		
		// draw petals
		for (int i = 0; i < NumPetals; i++) {
			px = (int)Petals[i].getX();
			py = (int)Petals[i].getY();
			g.setColor(Color.yellow.darker());
			g.drawOval(px-(int)((PetalSize+2)/2),py-(int)((PetalSize+2)/2),PetalSize+2,PetalSize+2);
			g.setColor(Color.yellow.brighter());
			g.fillOval(px-(int)((PetalSize)/2),py-(int)((PetalSize)/2),PetalSize,PetalSize);
		}
		
		// draw flower center
		px = (int)Stalk[StalkHeight-1].getX();
		py = (int)Stalk[StalkHeight-1].getY();
		g.setColor(Color.black);
		g.drawOval(px-(int)((PetalSize+2)/2),py-(int)((PetalSize+2)/2),PetalSize+2,PetalSize+2);
		g.setColor(Color.white);
		g.fillOval(px-(int)((PetalSize+1)/2),py-(int)((PetalSize+1)/2),PetalSize+1,PetalSize+1);
	}
}