code: public Color getColorAt(float p) {
  		if (p <= 0) {
  			return ((Step) steps.get(0)).col;
  		}
  		if (p > 1) {
  			return ((Step) steps.get(steps.size()-1)).col;
  		}
  		
  		for (int i=1;i<steps.size();i++) {
  			Step prev = ((Step) steps.get(i-1));
  			Step current = ((Step) steps.get(i));
  			
  			if (p <= current.location) {
  				float dis = current.location - prev.location;
  				p -= prev.location;
  				float v = p / dis;
  				
  				Color c = new Color(1,1,1,1);
  				c.a = (prev.col.a * (1 - v)) + (current.col.a * (v));
  				c.r = (prev.col.r * (1 - v)) + (current.col.r * (v));
  				c.g = (prev.col.g * (1 - v)) + (current.col.g * (v));
  				c.b = (prev.col.b * (1 - v)) + (current.col.b * (v));
  				
  				return c;
  			}
  		}
  
  		// shouldn't ever happen
  		return Color.black;
  	}
docs: Get the intepolated colour at the given location on the gradient
  
  @param p The point of the gradient (0 >= n >= 1)
  @return The interpolated colour at the given location