public KeyMap AddKey(double frame, double warpFrame) { KeyMap map = new KeyMap(frame, warpFrame); if (mKeys.Count == 0) { mKeys.Add(map); } else { KeyMap after = GetMapAfter(warpFrame); if (warpFrame < after.WarpKey) { mKeys.Insert(after.Index, map); } else { mKeys.Insert(after.Index + 1, map); } } SetIndices(); return(map); }
public double GetWarped(double key) { KeyMap before = GetMapBefore(key); if (before.WarpKey == key) { return(before.RealKey); } KeyMap after = GetMapAfter(key); if (after.WarpKey == key) { return(after.RealKey); } if (before == after) //Out of bounds { if (after.Index == (int)(mKeys.Count - 1)) { return(before.RealKey + 1); } return(before.RealKey); } return(Blend(before.RealKey, after.RealKey, (key - before.WarpKey) / (after.WarpKey - before.WarpKey))); }
public void MoveKey(double frame, double warpFrame) { KeyMap after = GetClosest(frame); after.WarpKey = warpFrame; mKeys.Sort(); SetIndices(); }
public void RemoveKey(double warpFrame) { if (mKeys.Count > 2) { KeyMap after = GetClosest(warpFrame); mKeys.Remove(after); } SetIndices(); }
private KeyMap GetMapBefore(double key) { KeyMap mapBefore = mKeys[0]; foreach (KeyMap map in mKeys) { if (map.WarpKey > key) { return(mapBefore); } mapBefore = map; } return(mapBefore); }
public KeyMap GetClosest(double key) { KeyMap before = GetMapBefore(key); if (before.WarpKey == key) { return(before); } KeyMap after = GetMapAfter(key); if (after.WarpKey == key) { return(after); } if (key - before.WarpKey < after.WarpKey - key) { return(before); } return(after); }