Exemplo n.º 1
0
        private void computeLifetime(SaitenPath path)
        {
            var firstFrameInPath = frames[path].FirstOrDefault();
            var lastFrameInPath  = frames[path].LastOrDefault();

            if (firstFrameInPath == null || lastFrameInPath == null)
            {
                return;
            }

            var startTime = GetTime(firstFrameInPath);
            var endTime   = GetTime(lastFrameInPath);

            float originAdjustment = 0.0f;

            switch (direction.Value)
            {
            case ScrollingDirection.Left:
                originAdjustment = path.OriginPosition.X;
                break;

            case ScrollingDirection.Right:
                originAdjustment = path.DrawWidth - path.OriginPosition.X;
                break;
            }

            path.LifetimeStart = scrollingInfo.Algorithm.GetDisplayStartTime(startTime, originAdjustment, timeRange.Value, scrollLength);
            path.LifetimeEnd   = scrollingInfo.Algorithm.TimeAt(scrollLength * safe_lifetime_end_multiplier, endTime, timeRange.Value, scrollLength);
        }
Exemplo n.º 2
0
        protected void CreateNew(T point)
        {
            var path = new SaitenPath
            {
                PathRadius = PathRadius,
            };

            frames.Add(path, new List <T> {
                point
            });
            pathInitialStateCache.Add(path, new Cached());

            AddInternal(path);
        }
Exemplo n.º 3
0
        private void updatePosition(SaitenPath path, double currentTime)
        {
            var firstFrameInPath = frames[path].FirstOrDefault();

            if (firstFrameInPath == null)
            {
                return;
            }

            var startTime = GetTime(firstFrameInPath);
            var multiple  = direction.Value == ScrollingDirection.Left ? 1 : -1;
            var x         = scrollingInfo.Algorithm.PositionAt(startTime, currentTime, timeRange.Value, scrollLength);

            path.X = (x + Offset) * multiple;
        }
Exemplo n.º 4
0
        // Cant use AddOnce() since the delegate is re-constructed every invocation
        private void computePath(SaitenPath path) => path.Schedule(() =>
        {
            var firstFrameInPath = frames[path].FirstOrDefault();
            if (firstFrameInPath == null)
            {
                return;
            }

            var startTime = GetTime(firstFrameInPath);
            if (pathInitialStateCache[path].IsValid)
            {
                return;
            }

            pathInitialStateCache?[path].Validate();

            // Calculate path
            var frameList = frames[path];
            if (frameList.Count <= 1)
            {
                return;
            }

            path.ClearVertices();

            bool left   = direction.Value == ScrollingDirection.Left;
            path.Anchor = path.Origin = left ? Anchor.TopLeft : Anchor.TopRight;

            var centerPosition = calculator.CenterPosition();
            var scaleDistance  = calculator.Distance();

            foreach (var frame in frameList)
            {
                var x = scrollingInfo.Algorithm.GetLength(startTime, GetTime(frame), timeRange.Value, scrollLength);
                path.AddVertex(new Vector2(left ? x : -x, GetPosition(frame) * scaleDistance - centerPosition));
            }
        });
Exemplo n.º 5
0
 protected void MarkAsInvalid(SaitenPath path) => pathInitialStateCache[path].Invalidate();