static IEnumerable <T> RevertFrames <T>(IList <T> keyFrames, long beginFrame, long endFrame, Func <T, long> getFrameNumber, Func <T, long, T> setFrameNumber, Func <T, InterpolatePoint[]> getInterpolation, Func <T, InterpolatePoint[], T> setInterpolation) { var frameNumbers = keyFrames.Select(getFrameNumber).Select(_ => beginFrame + (endFrame - _)).ToArray(); var interpol = new[] { getInterpolation(keyFrames.First()) }.Concat(keyFrames.Skip(1).Select(getInterpolation).Select(_ => { for (int i = 0; i < _.Length; i += 2) { var a = _[i]; var b = _[i + 1]; _[i] = new InterpolatePoint(127 - b.X, 127 - b.Y); _[i + 1] = new InterpolatePoint(127 - a.X, 127 - a.Y); } return(_); }).Reverse()).ToArray(); return(keyFrames.Zip(frameNumbers, setFrameNumber).Reverse().Zip(interpol, setInterpolation)); }
static VmdInterpolationPoint[] ToArray(InterpolatePoint a, InterpolatePoint b) { return new[] { new VmdInterpolationPoint((byte)a.X, (byte)a.Y), new VmdInterpolationPoint((byte)b.X, (byte)b.Y) }; }
static VmdInterpolationPoint[] ToArray(InterpolatePoint a, InterpolatePoint b) { return(new[] { new VmdInterpolationPoint((byte)a.X, (byte)a.Y), new VmdInterpolationPoint((byte)b.X, (byte)b.Y) }); }