public ArcChart(RawAffChart raw) { AudioOffset = raw.AudioOffset; foreach (var item in raw.items) { addRawItem(item); } }
public ArcChart(RawAffChart raw) { AudioOffset = raw.AudioOffset; TimingPointDensityFactor = raw.TimingPointDensityFactor; AdditionalMetadata = raw.additionalMetadata; foreach (var item in raw.items) { addRawItem(item, null); } }
public void Serialize(Stream stream, ChartSortMode mode = ChartSortMode.Timing) { List <ArcEvent> events = new List <ArcEvent>(); events.AddRange(Timings); events.AddRange(Taps); events.AddRange(Holds); events.AddRange(Arcs); events.AddRange(Cameras); events.AddRange(SceneControl); switch (mode) { case ChartSortMode.Timing: events = events.OrderBy(arcEvent => arcEvent.Timing) .ThenBy(arcEvent => (arcEvent is ArcTiming ? 1 : arcEvent is ArcTap ? 2 : arcEvent is ArcHold ? 3 : arcEvent is ArcArc ? 4 : 5)) .ToList(); break; case ChartSortMode.Type: events = events.OrderBy(arcEvent => (arcEvent is ArcTiming ? 1 : arcEvent is ArcTap ? 2 : arcEvent is ArcHold ? 3 : arcEvent is ArcArc ? 4 : 5)) .ThenBy(arcEvent => arcEvent.Timing) .ToList(); break; } RawAffChart raw = new RawAffChart(); raw.AudioOffset = ArcAudioManager.Instance.AudioOffset; foreach (var e in events) { if (e is IIntoRawItem) { raw.items.Add((e as IIntoRawItem).IntoRawItem()); } } ArcaeaFileFormat.DumpToStream(stream, raw); }
public void Serialize(Stream stream, ChartSortMode mode = ChartSortMode.Timing) { List <ArcEvent> events = new List <ArcEvent>(); events.AddRange(Timings); events.AddRange(Cameras); events.AddRange(SceneControl); events.AddRange(Taps); events.AddRange(Holds); events.AddRange(Arcs); List <ArcEvent> mainEvents = new List <ArcEvent>(); Dictionary <ArcTimingGroup, List <ArcEvent> > timingGroupEvents = new Dictionary <ArcTimingGroup, List <ArcEvent> >(); foreach (var timingGroup in TimingGroups) { timingGroupEvents.Add(timingGroup, new List <ArcEvent>()); timingGroupEvents[timingGroup].AddRange(timingGroup.Timings); } foreach (var arcEvent in events) { if (arcEvent is IHasTimingGroup) { ArcTimingGroup timingGroup = (arcEvent as IHasTimingGroup).TimingGroup; if (timingGroup != null) { timingGroupEvents[timingGroup].Add(arcEvent); continue; } } mainEvents.Add(arcEvent); } mainEvents = SortedEvent(mainEvents, mode); foreach (var timingGroup in TimingGroups) { timingGroupEvents[timingGroup] = SortedEvent(timingGroupEvents[timingGroup], mode); } RawAffChart raw = new RawAffChart(); raw.AudioOffset = ArcAudioManager.Instance.AudioOffset; raw.TimingPointDensityFactor = TimingPointDensityFactor; raw.additionalMetadata = AdditionalMetadata; foreach (var e in mainEvents) { if (e is IIntoRawItem) { var rawItem = (e as IIntoRawItem).IntoRawItem(); raw.items.Add(rawItem); } } foreach (var timingGroup in TimingGroups) { var timingGroupItem = new RawAffTimingGroup() { Items = new List <IRawAffNestableItem>(), Type = timingGroup.Type }; foreach (var e in timingGroupEvents[timingGroup]) { if (e is IIntoRawItem) { var rawItem = (e as IIntoRawItem).IntoRawItem() as IRawAffNestableItem; timingGroupItem.Items.Add(rawItem); } } raw.items.Add(timingGroupItem); } ArcaeaFileFormat.DumpToStream(stream, raw); }