private ScrollingSelector(ScrollingSelector <T> source, Func <uint, ITicker> getTicker = null, uint?delay = null, uint?endsDelay = null, uint?availableDigits = null, ImmutableList <T> values = null, int?offset = null, Option <ITicker>?ticker = null) { this.getTicker = getTicker ?? source.getTicker; this.delay = delay ?? source.delay; this.endsDelay = endsDelay ?? source.endsDelay; this.availableDigits = availableDigits ?? source.availableDigits; this.values = values ?? source.values; this.offset = offset ?? source.offset; this.ticker = ticker ?? source.ticker; }
public ISelector <T> Tick(uint currentTime) { var result = this; ticker.MatchSome((tck) => { if (tck.Ticked(currentTime)) { var offsetN = offset >= values.Count - availableDigits ? 0 : offset + 1; var currentDelay = offsetN == 0 || offsetN == values.Count - availableDigits ? endsDelay : delay; result = new ScrollingSelector <T>(this, offset: offsetN, ticker: getTicker(currentDelay).SomeNotNull()); } }); return(result); }