public boolean tick(Map map)
	{
		life = System.currentTimeMillis()-startTime;
		
		if(life >= lifeLength)
			return false;
			
		
		velocity = velocity.add(environment);
		Vector2 correction = new Vector2(0,0);
		if(map != null)
			correction = map.getCorrection(pos.add(velocity).subtract(new Vector2(dim/2,dim/2)).getColliderWithDim(new Vector2(dim,dim)));
		pos = pos.add(velocity.add(correction));
		
		if(!correction.equals(new Vector2(0,0)))
		{
			velocity = velocity.add(velocity.multiply(correction.normalize()).multiply(new Vector2(2,2)));
		}
		
		float percentage = ((float)life)/((float)lifeLength);
		float red = (float) Interpolator.linearInterpolate(startColor.getRed(), endColor.getRed(), percentage)/255f;
		float green = (float) Interpolator.linearInterpolate(startColor.getGreen(), endColor.getGreen(), percentage)/255f;
		float blue = (float) Interpolator.linearInterpolate(startColor.getBlue(), endColor.getBlue(), percentage)/255f;
		color = new Color(red,green,blue);
		
		dim = (int) Interpolator.linearInterpolate(startSize, endSize, percentage);
		alpha = (float) Interpolator.linearInterpolate(startAlpha, endAlpha, percentage);
		
		return true;
	}