setTimelineData method

TrackEntry setTimelineData(
  1. TrackEntry? to,
  2. List<TrackEntry> mixingToArray,
  3. Set<int> propertyIDs
)

Implementation

TrackEntry setTimelineData(
    TrackEntry? to, List<TrackEntry> mixingToArray, Set<int> propertyIDs) {
  if (to != null) mixingToArray.add(to);
  final TrackEntry lastEntry = mixingFrom != null
      ? mixingFrom!.setTimelineData(this, mixingToArray, propertyIDs)
      : this;
  if (to != null) mixingToArray.removeLast();

  final List<TrackEntry> mixingTo = mixingToArray;
  final int mixingToLast = mixingToArray.length - 1;
  final List<Timeline> timelines = animation!.timelines;
  final int timelinesCount = animation!.timelines.length;
  final Int32List timelineData = Int32List.fromList(
      ArrayUtils.copyWithNewArraySize(this.timelineData, timelinesCount, -1));
  this.timelineDipMix.length = 0;
  final List<TrackEntry?> timelineDipMix = ArrayUtils.copyWithNewArraySize(
      this.timelineDipMix, timelinesCount, null);

  outer:
  for (int i = 0; i < timelinesCount; i++) {
    final int id = timelines[i].getPropertyId();
    if (!propertyIDs.add(id)) {
      timelineData[i] = AnimationState.subsequent;
    } else if (to == null || !to.hasTimeline(id)) {
      timelineData[i] = AnimationState.first;
    } else {
      for (int ii = mixingToLast; ii >= 0; ii--) {
        final TrackEntry entry = mixingTo[ii];
        if (!entry.hasTimeline(id)) {
          if (entry.mixDuration > 0) {
            timelineData[i] = AnimationState.dipMix;
            timelineDipMix[i] = entry;
            continue outer;
          }
        }
      }
      timelineData[i] = AnimationState.dip;
    }
  }
  return lastEntry;
}