Exemple #1
0
 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"),
            }));
        }
Exemple #4
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);
            }
        }
Exemple #5
0
        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;
                }
            }
        }
Exemple #6
0
 public static void Compress(ProgressiveKeyFrames key_frames)
 {
     key_frames.Timeline = key_frames.Timeline.Distinct(ProgressiveFrameValueComparer.Default).ToList();
 }