
package tmcm.xModels;

import java.awt.Color;
import java.util.Vector;


class ParamVal {

   int[] frameCounts; // cumulative frame counts  (ref to master copy)
   double[] values;      // value of parameter at given frame counts
   
   ParamVal(int[] frameCounts, double[] values) {
         // Assume that values.length <= frameCounts.length!
         // Assume that first and last entries in values[] are actual
         // numbers; other entries can be NaN!!!
      this.frameCounts = frameCounts;
      this.values = values;
   }
   
   ParamVal(double value) {
      frameCounts = null;
      values = new double[1];
      values[0] = value;
   }

   double getVal(int frameNumber) {  // Asume frameNumber >= 0
      int valCt = values.length;
      if (valCt == 1)
         return values[0];
      else {
         int right = 0;
         while (right < valCt && frameCounts[right] < frameNumber)
            right++;
         if (right >= valCt)
            return values[valCt-1];
         if (frameCounts[right] == frameNumber && !Double.isNaN(values[right]))
            return values[right];
         int left = right - 1;
         while (Double.isNaN(values[right]))
            right++;
         while (Double.isNaN(values[left]))
            left--;
         return values[left] + 
                 ( (values[right]-values[left]) * 
                     (float)(frameNumber-frameCounts[left])/(float)(frameCounts[right]-frameCounts[left]) );
      }
   }
   
}  // end class ParamVal


