public void CopyMovementValues(Entity entity) { speedMax = entity.speedMax; speed = entity.Speed; acceleration = entity.Acceleration; frictions = entity.Frictions; turn = entity.Turn; turnAround = entity.TurnAround; }
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++; } } }
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); } } } } } }