public static void AnimationOptimze(ProgressiveKeyFrames key_frames, Selector ref_animation_selector) { if (key_frames.Timeline.Count == 1) { var props = key_frames.Timeline.First(); } }
public void Test() { var t1 = new ProgressiveFrame(0f, new List <Property>() { new Property("top", "200"), new Property("left", "100"), }); var t2 = new ProgressiveFrame(0f, new List <Property>() { new Property("top", "200"), new Property("left", "100"), }); var t3 = new ProgressiveFrame(1f, new List <Property>() { new Property("top", "200"), new Property("left", "100"), }); Assert.IsTrue(Compressor.ProgressiveFrameValueComparer.Default.Equals(t1, t2)); Assert.IsFalse(Compressor.ProgressiveFrameValueComparer.Default.Equals(t3, t2)); ProgressiveKeyFrames frames = new ProgressiveKeyFrames("test"); BuildTestTimeline(frames); var before_count = frames.Timeline.Count; Compressor.Compress(frames); var after_count = frames.Timeline.Count; Assert.IsTrue(after_count < before_count); }
private void BuildTestTimeline(ProgressiveKeyFrames frames) { frames.Timeline.Add(new ProgressiveFrame(0f, new List <Property>() { new Property("top", "200"), new Property("left", "100"), })); frames.Timeline.Add(new ProgressiveFrame(0.2f, new List <Property>() { new Property("top", "0"), new Property("left", "100"), })); frames.Timeline.Add(new ProgressiveFrame(0.4f, new List <Property>() { new Property("top", "100"), new Property("left", "200"), })); frames.Timeline.Add(new ProgressiveFrame(0.4f, new List <Property>() { new Property("top", "100"), new Property("left", "200"), })); frames.Timeline.Add(new ProgressiveFrame(0.4f, new List <Property>() { new Property("top", "100"), new Property("left", "200"), })); frames.Timeline.Add(new ProgressiveFrame(0.6f, new List <Property>() { new Property("top", "100"), new Property("left", "1000"), })); frames.Timeline.Add(new ProgressiveFrame(0.6f, new List <Property>() { new Property("top", "100"), new Property("left", "100"), })); frames.Timeline.Add(new ProgressiveFrame(0.8f, new List <Property>() { new Property("top", "100"), new Property("left", "100"), })); frames.Timeline.Add(new ProgressiveFrame(1f, new List <Property>() { new Property("top", "0"), new Property("left", "0"), })); }
public static (KeyFrames frames, int start_time, int duration) ConverterTimelineToKeyFrames(CommandTimeline storyboard_timeline, string name) { var command_value_converter = GetValueConverter(storyboard_timeline.Event); var extra_imm_timeline = new List <(long, int, IEnumerable <Property>)>(); var keyframe_timeline = TimelineConvert.ConvertToKeyFrame(storyboard_timeline).Select(x => (x.time, command_value_converter.Convert(x.cmd, x.time))); int start_time = keyframe_timeline.Min(x => x.Item1); int end_time = keyframe_timeline.Max(x => x.Item1); var duration = end_time - start_time; Log.User($"Build Frame {storyboard_timeline} -> {name} "); ProgressiveKeyFrames kf = new ProgressiveKeyFrames(name); foreach (var frame in keyframe_timeline) { var progress = CalculateInterploter(frame.Item1); kf.Timeline.Add(new ProgressiveFrame() { NormalizeTime = progress, ChangedProperties = frame.Item2.ToList() }); } Compressor.Compress(kf); ProgressiveFrameSeparater.Separate(kf); return(kf, start_time, duration); //todo float CalculateInterploter(float time) { float t; if (time <= start_time) { t = 0; } else if (time >= end_time) { t = 1; } else { t = ((time - start_time) / (end_time - start_time)); } return(t); } }
public static void Separate(ProgressiveKeyFrames key_frames) { float current_progress = -2857; int repeat = 0; foreach (var frame in key_frames.Timeline.OrderBy(x => x.NormalizeTime)) { if (frame.NormalizeTime == current_progress) { repeat++; frame.NormalizeTime = 0.00001f * repeat + current_progress; } else { repeat = 0; current_progress = frame.NormalizeTime; } } }
public static void Compress(ProgressiveKeyFrames key_frames) { key_frames.Timeline = key_frames.Timeline.Distinct(ProgressiveFrameValueComparer.Default).ToList(); }