/********************************
 *movebird.c 
 * 
 * Albert Chan 11/27/00
 *****************************/


#include "bird.h"

void UpdateBird(struct Birds b);
	struct Birds b;
    struct ThreeVector v1,v2,v3;
main(){
	

}	

	void UpdateBird(struct Birds b){
		int i,j;
		for (i=0; i<NUMBIRDS; i++){
			if(b.chirp==0)    /* bird didn't chirp*/
				b[i].resting=0;
			else
				b[i].resting=1;   /*bird chirp*/
		}
		for(j=0; j<NUMBIRDS; j++){
			if (b[j].resting==1){
				v1=rule1(b,j);
				v2=rule2(b,j);
				v3=rule3(b,j);
				b.velocity=AddVector(b.velocity, (AddVector(v1,(AddVector(v2,v3)))));
				b.position=AddVector(b.position, b.velocity);
			}
		}
	}

	/* rule1 is birds fly toward the center*/
	struct ThreeVector rule1(struct Birds b, int whichone){
	struct	ThreeVector center;
		int k;
		for(k=0; k<NUMBIRDS; k++){
			if(whichone != k)
				center=AddVector(center, b.position);
			center=DivideVector(center,NUMBIRDS-1);
		}
        return (SubtractVector(center, b[k].position))/MINDIST;
		}

	struct 	ThreeVector rule2(struct Birds b, int whichone){
			struct ThreeVector c;
			int p;
			for(p=0; p<NUMBIRDS; p++){
				if(whichone != p){
					if((SubtractVector(b[p].position, b[whichone].position) < MINDIST) 
						c=SubtractVector(c,SubtractVector(b[p].position, b[whichone].position));
				}
			}
			return c;
		}

	struct	ThreeVector rule3(struct Birds b, int whichone){
			struct ThreeVector pvelocity;
			int r;
			for(r=0; r<NUMBIRDS; r++){
				if(whichone != r)
					pvelocity=AddVector(pvelocity, bird[r].velocity);
				pvelocity=DivideVector(pvelocity,NUMBIRDS-1);
			}
			return	pvelocity=DivideVector(SubtractVector(pvelocity,bird[r].velocity),FACTOR)

		}

	struct	ThreeVector AddVector(ThreeVector v1,ThreeVector v2){
		   struct 	ThreeVector v;
			v.x=v1.x+v2.x;
			v.y=v1.y+v2.y;
			v.z=v1.z+v2.z;
			return v;
		}
	struct	ThreeVector SubtractVector(ThreeVector v1,ThreeVector v2){
	       struct  ThreeVector v;
			v.x=abs(v1.x-v2.x);
			v.y=abs(v1.y-v2.y);
			v.z=abs(v1.z-v2.z);
			return v;
		}
	struct	ThreeVector DivideVector(ThreeVector v1,int num){
          struct  	ThreeVector v;
			v.x=v1.x/num;
			v.y=v1.y/num;
			v.z=v1.z/num;
			return v;
		}
