//Generates a new particle, using the attributes set in the emitter and the position provided by generateStartPosition
ParticleData ParticleEmitter::generateParticle()
{
	Particle *newParticle;
	ParticleData pData;
	GLfloat val;

	//generate using the generation function, if declared
	if(particleGenerator!=NULL)
		newParticle=particleGenerator();
	else
		newParticle=new Particle();

	//set parameters, considering variance
	//color
	if(!(colorVariance==Vector3D(0,0,0)))
	{
		val=getFloatRand()*colorVariance.x;
		pData.color.x=this->initialColor.x+this->initialColor.x*val;
		
		val=getFloatRand()*colorVariance.y;
		pData.color.y=this->initialColor.y+this->initialColor.y*val;

		val=getFloatRand()*colorVariance.z;
		pData.color.z=this->initialColor.z+this->initialColor.z*val;
	}
	else
		pData.color=this->initialColor;

	//size
	if(sizeVariance>0)
	{
		val=getFloatRandNeg()*sizeVariance;
		newParticle->size=this->initialSize+this->initialSize*val;
	}
	else
		newParticle->size=this->initialSize;

	//energy
	if(energyVariance>0)
	{
		val=getFloatRand()*energyVariance;
		newParticle->energy=this->initialEnergy+this->initialEnergy*val;
	}
	else
		newParticle->energy=this->initialEnergy;

	//velocity
	pData.velocity=generateStartVelocity();

	//position
	pData.position=generateStartPosition();

	//particle
	pData.particle=newParticle;
	
	return pData;
}
SimulatedClient::SimulatedClient(int addr, int totalClientPosition, int totalServer, int pathLength, double pleft, double pstay, double pright){
    
    setMyAddr(addr);
    setTotalClientPosition(totalClientPosition);
    setMobilityPathLength(pathLength);
    generateStartPosition();
    
    //setCurrentClientPosition(_startClientPosition);
    _startClientPosition = 0;
    _currentClientPosition = 0;
    
    setMobilityPattern(pleft, pstay, pright);
    _mobilityPath = new vector<int>();
    generateRandomMove_circle();
    writeMove();
    _totalServer = totalServer;
    //generateRandomServer();
    printMobilityPath();
    
}