コード例 #1
0
ファイル: Entity.cs プロジェクト: Wizerdy/Wild
 public void CopyMovementValues(Entity entity)
 {
     speedMax     = entity.speedMax;
     speed        = entity.Speed;
     acceleration = entity.Acceleration;
     frictions    = entity.Frictions;
     turn         = entity.Turn;
     turnAround   = entity.TurnAround;
 }
コード例 #2
0
            public void Update(IList <T> items, float deltaTime)
            {
                FindChanges(items, out _, out List <ScrollListItem> toRemove);

                //Fade out and destroy old ones
                foreach (ScrollListItem item in toRemove)
                {
                    item._lerp  = 1.0f;
                    item._state = ScrollListItem.State.FadingOut;
                    item._item.OnHide();
                    _itemsBeingRemoved.Add(item);
                }

                UpdateOrdering();
                UpdateContentSize();

                //Lerp items to their target positions, lerp fade in
                foreach (ScrollListItem item in _items)
                {
                    if (item._lerp < 1.0f)
                    {
                        item._lerp = Mathf.Clamp01(item._lerp + _lerpSpeed * deltaTime);

                        if (item._state == ScrollListItem.State.Moving)
                        {
                            float curvedLerp = MovementCurve.Evaluate(item._lerp);
                            item._item.GetTransform().anchoredPosition = Vector2.Lerp(item._fromPosition, item._targetPosition, curvedLerp);
                        }
                        else if (item._state == ScrollListItem.State.FadingIn)
                        {
                            item._item.SetFade(item._lerp);
                        }

                        if (item._lerp >= 1.0f)
                        {
                            item._state = ScrollListItem.State.Normal;
                        }
                    }
                }

                //Lerp fade out for items being removed, destroy any that are no zero
                for (int i = 0; i < _itemsBeingRemoved.Count;)
                {
                    _itemsBeingRemoved[i]._lerp += _lerpSpeed * deltaTime;

                    if (_itemsBeingRemoved[i]._lerp > 1.0f)
                    {
                        _itemPool.Destroy(_itemsBeingRemoved[i]._item.GetTransform().gameObject);
                        _itemsBeingRemoved.RemoveAt(i);
                    }
                    else
                    {
                        _itemsBeingRemoved[i]._item.SetFade(1.0f - _itemsBeingRemoved[i]._lerp);
                        i++;
                    }
                }
            }
コード例 #3
0
        private void RenderMovement(List <IElementNode[]> renderNodes, CancellationTokenSource tokenSource)
        {
            double   previousMovement = 2.0;
            TimeSpan startTime        = TimeSpan.Zero;
            TimeSpan timeInterval     = TimeSpan.FromMilliseconds(_timeInterval);
            int      intervals        = Convert.ToInt32(Math.Ceiling(TimeSpan.TotalMilliseconds / _timeInterval));
            int      burst            = Direction != WipeDirection.DiagonalUp ? 0 : _pulsePercent - 1;

            List <WipeClass> renderElements = new List <WipeClass>();

            for (int i = 0; i < intervals; i++)
            {
                double position = (double)100 / intervals * i;
                double movement = MovementCurve.GetValue(position) / 100;
                if (previousMovement != movement)
                {
                    if (renderElements.Count > 0)
                    {
                        renderElements.Last().Duration = startTime - renderElements.Last().StartTime;
                    }

                    WipeClass wc = new WipeClass
                    {
                        ElementIndex = (int)((renderNodes.Count - 1) * movement),
                        StartTime    = startTime,
                        Duration     = TimeSpan - startTime
                    };

                    if (ReverseColorDirection)
                    {
                        wc.ReverseColorDirection = previousMovement < movement ? 0 : 1;
                    }

                    renderElements.Add(wc);
                }

                previousMovement = movement;
                startTime       += timeInterval;
            }
            double pos = ((double)100 / _pulsePercent) / 100;

            // Now render element
            foreach (var wipeNode in renderElements)
            {
                for (int i = 0; i < _pulsePercent; i++)
                {
                    double position = wipeNode.ReverseColorDirection - pos * i;
                    if (position < 0)
                    {
                        position = -position;
                    }
                    Color  color      = _data.ColorGradient.GetColorAt(position);
                    double curveValue = _data.Curve.GetValue(position * 100) / 100;

                    if (wipeNode.ElementIndex - i > 0 && wipeNode.ElementIndex - i + burst < renderNodes.Count)
                    {
                        IElementNode[] elementGroup = renderNodes[wipeNode.ElementIndex - i + burst];
                        if (tokenSource != null && tokenSource.IsCancellationRequested)
                        {
                            return;
                        }

                        foreach (var item in elementGroup)
                        {
                            if (tokenSource != null && tokenSource.IsCancellationRequested)
                            {
                                return;
                            }
                            if (item != null)
                            {
                                var result = PulseRenderer.RenderNode(item, curveValue, color, wipeNode.Duration);
                                result.OffsetAllCommandsByTime(wipeNode.StartTime);
                                _elementData.Add(result);
                            }
                        }
                    }
                }
            }
        }