Example #1
0
 public override void Check(ArcChart chart)
 {
     // foreach (var h in chart.Holds)
     // {
     //     foreach (var t in chart.Timings)
     //     {
     //         if (t.Timing > h.Timing && t.Timing < h.EndTiming)
     //         {
     //             Faults.Add(h);
     //         }
     //     }
     // }
     foreach (var a in chart.Arcs)
     {
         foreach (var t in chart.Timings)
         {
             if (t.Timing > a.Timing && t.Timing < a.EndTiming)
             {
                 if (Mathf.Approximately(a.XStart, a.XEnd) && Mathf.Approximately(a.YStart, a.YEnd))
                 {
                     continue;
                 }
                 Faults.Add(a);
             }
         }
     }
     Faults = Faults.Distinct().ToList();
 }
Example #2
0
        public override void Check(ArcChart chart)
        {
            List <(ArcArcTap, float, float)> ats = new List <(ArcArcTap, float, float)>();

            foreach (var arc in chart.Arcs)
            {
                foreach (var at in arc.ArcTaps)
                {
                    float t = 1f * (at.Timing - arc.Timing) / (arc.EndTiming - arc.Timing);
                    float x = ArcAlgorithm.X(arc.XStart, arc.XEnd, t, arc.LineType);
                    float y = ArcAlgorithm.Y(arc.YStart, arc.YEnd, t, arc.LineType);
                    ats.Add((at, x, y));
                }
            }
            for (int i = 0; i < ats.Count - 1; ++i)
            {
                for (int k = i + 1; k < ats.Count; ++k)
                {
                    if (ats[i].Item2 == ats[k].Item2 &&
                        ats[i].Item3 == ats[k].Item3 &&
                        ats[i].Item1.Timing == ats[k].Item1.Timing)
                    {
                        Faults.Add(ats[i].Item1);
                    }
                }
            }
            Faults = Faults.Distinct().ToList();
        }
 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)});");
     }
 }
Example #4
0
 public override void Check(ArcChart chart)
 {
     foreach (var h in chart.Holds)
     {
         if (h.EndTiming <= h.Timing)
         {
             Faults.Add(h);
         }
     }
     Faults = Faults.Distinct().ToList();
 }
Example #5
0
 public void Clean()
 {
     Timing = 0;
     ArcTimingManager.Instance.Clean();
     ArcTapNoteManager.Instance.Clean();
     ArcHoldNoteManager.Instance.Clean();
     ArcArcManager.Instance.Clean();
     ArcCameraManager.Instance.Clean();
     ArcSceneControlManager.Instance.Clean();
     Chart  = null;
     Length = 0;
 }
Example #6
0
 public override void Check(ArcChart chart)
 {
     for (int i = 0; i < chart.Taps.Count - 1; ++i)
     {
         for (int k = i + 1; k < chart.Taps.Count; ++k)
         {
             if (chart.Taps[i].Timing == chart.Taps[k].Timing &&
                 chart.Taps[i].Track == chart.Taps[k].Track)
             {
                 Faults.Add(chart.Taps[i]);
             }
         }
     }
     Faults = Faults.Distinct().ToList();
 }
Example #7
0
 public override void Check(ArcChart chart)
 {
     foreach (var h in chart.Holds)
     {
         foreach (var t in chart.Taps)
         {
             if (t.Timing >= h.Timing && t.Timing <= h.EndTiming &&
                 t.Track == h.Track)
             {
                 Faults.Add(t);
             }
         }
     }
     Faults = Faults.Distinct().ToList();
 }
Example #8
0
 public override void Check(ArcChart chart)
 {
     foreach (var a in chart.Arcs)
     {
         if (a.EndTiming <= a.Timing)
         {
             if (a.XEnd == a.XStart)
             {
                 if (a.YEnd == a.YStart)
                 {
                     Faults.Add(a);
                 }
             }
         }
     }
     Faults = Faults.Distinct().ToList();
 }
Example #9
0
    public void OnInvoke()
    {
        if (!ArcGameplayManager.Instance.IsLoaded)
        {
            AdeToast.Instance.Show("未加载工程");
            return;
        }

        Status.text = "请点击检查";

        ArcChart chart = ArcGameplayManager.Instance.Chart;

        Fault[] checks = new Fault[] { new ShortHoldFault(), new ShortArcFault(), new TileTapFault(), new TileArcTapFault(), new TileTapHoldFault(),
                                       new TileHoldFault(), new CrossTimingFault() };
        string       path  = AdeProjectManager.Instance.CurrentProjectFolder + "/Arcade/ChartFault.txt";
        FileStream   fs    = new FileStream(path, FileMode.Create);
        StreamWriter sw    = new StreamWriter(fs);
        int          count = 0;

        sw.WriteLine("错误报告");
        sw.WriteLine("\t时间(原始)为aff中定义的Timing,便于在aff中搜索");
        sw.WriteLine("\t时间(偏移)为偏移后时间,便于在Arcade的时间框中直接跳转定位");
        sw.WriteLine();
        foreach (var c in checks)
        {
            c.Check(chart);
            if (c.Faults.Count > 0)
            {
                sw.WriteLine(c.Reason);
                foreach (var f in c.Faults)
                {
                    sw.WriteLine($"\t时间(原始):{f.Timing}\t时间(偏移):{f.Timing + ArcAudioManager.Instance.AudioOffset}");
                }
                count += c.Faults.Count;
            }
        }

        sw.Close();
        Status.text = $"检查完成,共 {count} 个错误";
        Arcade.Util.Shell.FileBrowser.OpenExplorer(path);
    }
Example #10
0
        public bool Load(ArcChart chart, AudioClip audio)
        {
            if (audio == null || chart == null)
            {
                return(false);
            }

            Clean();
            Chart  = chart;
            Length = (int)(audio.length * 1000);

            ArcCameraManager.Instance.ResetCamera();
            ArcAudioManager.Instance.Load(audio, chart.AudioOffset);
            ArcTimingManager.Instance.Load(chart.Timings);
            ArcTapNoteManager.Instance.Load(chart.Taps);
            ArcHoldNoteManager.Instance.Load(chart.Holds);
            ArcArcManager.Instance.Load(chart.Arcs);
            ArcCameraManager.Instance.Load(chart.Cameras);
            ArcSceneControlManager.Instance.Load(chart.SceneControl);

            OnChartLoad.Invoke();
            return(true);
        }
 public override void Check(ArcChart chart)
 {
     foreach (var h in chart.Holds)
     {
         foreach (var t in chart.Timings)
         {
             if (t.Timing > h.Timing && t.Timing < h.EndTiming)
             {
                 Faults.Add(h);
             }
         }
     }
     foreach (var a in chart.Arcs)
     {
         foreach (var t in chart.Timings)
         {
             if (t.Timing > a.Timing && t.Timing < a.EndTiming)
             {
                 Faults.Add(a);
             }
         }
     }
     Faults = Faults.Distinct().ToList();
 }
Example #12
0
 public abstract void Check(ArcChart chart);