示例#1
0
 void addRawItem(IRawAffItem item)
 {
     if (item is RawAffTiming)
     {
         Timings.Add(new ArcTiming(item as RawAffTiming));
     }
     else if (item is RawAffTap)
     {
         Taps.Add(new ArcTap(item as RawAffTap));
     }
     else if (item is RawAffHold)
     {
         Holds.Add(new ArcHold(item as RawAffHold));
     }
     else if (item is RawAffArc)
     {
         Arcs.Add(new ArcArc(item as RawAffArc));
     }
     else if (item is RawAffCamera)
     {
         Cameras.Add(new ArcCamera(item as RawAffCamera));
     }
     else if (item is RawAffSceneControl)
     {
         SceneControl.Add(new ArcSceneControl(item as RawAffSceneControl));
     }
 }
示例#2
0
 static void writeItem(TextWriter writer, IRawAffItem item)
 {
     if (item is RawAffTiming)
     {
         var timing = item as RawAffTiming;
         writer.WriteLine($"timing({timing.Timing},{timing.Bpm.ToString("f2")},{timing.BeatsPerLine.ToString("f2")});");
     }
     else if (item is RawAffTap)
     {
         var tap = item as RawAffTap;
         writer.WriteLine($"({tap.Timing},{tap.Track});");
     }
     else if (item is RawAffHold)
     {
         var hold = item as RawAffHold;
         writer.WriteLine($"hold({hold.Timing},{hold.EndTiming},{hold.Track});");
     }
     else if (item is RawAffArc)
     {
         var arc = item as RawAffArc;
         if (arc.ArcTaps.Count > 0)
         {
             arc.IsVoid = true;
         }
         writer.WriteLine($"arc({arc.Timing},{arc.EndTiming},{arc.XStart.ToString("f2")},{arc.XEnd.ToString("f2")}" +
                          $",{ArcChart.ToLineTypeString(arc.LineType)},{arc.YStart.ToString("f2")},{arc.YEnd.ToString("f2")},{arc.Color},none,{arc.IsVoid.ToString().ToLower()})" +
                          (arc.ArcTaps.Count > 0?$"[{string.Join(",",arc.ArcTaps.Select(e=>$"arctap({e.Timing})"))}]":"") +
                          ";");
     }
     else if (item is RawAffCamera)
     {
         var cam = item as RawAffCamera;
         writer.WriteLine($"camera({cam.Timing},{cam.MoveX.ToString("f2")},{cam.MoveY.ToString("f2")},{cam.MoveZ.ToString("f2")}," +
                          $"{cam.RotateX.ToString("f2")},{cam.RotateY.ToString("f2")},{cam.RotateZ.ToString("f2")},{ArcChart.ToCameraTypeString(cam.CameraType)},{cam.Duration});");
     }
     else if (item is RawAffSceneControl)
     {
         var           scenecontrol = item as RawAffSceneControl;
         List <string> values       = new List <string>();
         values.Add(scenecontrol.Timing.ToString());
         values.Add(scenecontrol.Type);
         foreach (var @param in scenecontrol.Params)
         {
             if (@param is RawAffInt)
             {
                 values.Add((@param as RawAffInt).data.ToString());
             }
             else if (@param is RawAffFloat)
             {
                 values.Add((@param as RawAffFloat).data.ToString("f2"));
             }
             else if (@param is RawAffWord)
             {
                 values.Add((@param as RawAffWord).data);
             }
         }
         writer.WriteLine($"scenecontrol({string.Join(",",values)});");
     }
 }
示例#3
0
 void addRawItem(IRawAffItem item, ArcTimingGroup timingGroup)
 {
     if (item is RawAffTiming)
     {
         if (timingGroup == null)
         {
             Timings.Add(new ArcTiming(item as RawAffTiming));
         }
         else
         {
             timingGroup.Timings.Add(new ArcTiming(item as RawAffTiming));
         }
     }
     else if (item is RawAffTap)
     {
         Taps.Add(new ArcTap(item as RawAffTap, timingGroup));
     }
     else if (item is RawAffHold)
     {
         Holds.Add(new ArcHold(item as RawAffHold, timingGroup));
     }
     else if (item is RawAffArc)
     {
         Arcs.Add(new ArcArc(item as RawAffArc, timingGroup));
     }
     else if (item is RawAffCamera)
     {
         Cameras.Add(new ArcCamera(item as RawAffCamera));
     }
     else if (item is RawAffSceneControl)
     {
         SceneControl.Add(new ArcSceneControl(item as RawAffSceneControl, timingGroup));
     }
     else if (item is RawAffTimingGroup)
     {
         ArcTimingGroup arcTimingGroup = new ArcTimingGroup()
         {
             Id   = TimingGroups.Count + 1,
             Type = (item as RawAffTimingGroup).Type,
         };
         TimingGroups.Add(arcTimingGroup);
         foreach (var nestedItem in (item as RawAffTimingGroup).Items)
         {
             addRawItem(nestedItem, arcTimingGroup);
         }
     }
 }
示例#4
0
        void GenTimingGroup(ArcaeaFileFormatParser.EventContext context)
        {
            RejectSubevents(context, "timinggroup");
            LimitValuesCount(context, "timinggroup", 1);
            List <IRawAffNestableItem> items           = new List <IRawAffNestableItem>();
            TimingGroupType?           timingGroupType = TimingGroupType.Normal;

            if (context.values().value().Length > 0)
            {
                var rawTimingGroupType = CheckValueType <RawAffWord>(context.values().value()[0], "arc", "arc 类型");
                timingGroupType = ParseWord(timingGroupTypes, rawTimingGroupType.data, context.values().value()[0], "arc", "arc 类型");
            }
            foreach (var item in context.segment().body().item())
            {
                IRawAffEvent @event = item.@event().value;
                if (!(@event is IRawAffItem))
                {
                    chart.warning.Add($"第 {item.@event().Start.Line + lineOffset} 行第 {item.@event().Start.Column + 1} 列,不可作为物件使用的事件:{item.@event().GetText()},此事件将被忽略");
                    continue;
                }
                IRawAffItem rawItem = @event as IRawAffItem;
                if (!(rawItem is IRawAffNestableItem))
                {
                    chart.warning.Add($"第 {item.Start.Line + lineOffset} 行第 {item.Start.Column + 1} 列,不可在 timinggroup 中嵌套使用的物件:{item.@event().GetText()},此物件将被忽略");
                    nonNestableItems.Add(rawItem);
                    continue;
                }
                items.Add(rawItem as IRawAffNestableItem);
            }
            if (timingGroupType == null)
            {
                return;
            }
            context.value = new RawAffTimingGroup()
            {
                Items = items,
                Type  = timingGroupType.Value,
            };
        }