コード例 #1
0
        public void SetupArcTapConnection()
        {
            if (Arc == null || (Arc.EndTiming - Arc.Timing) == 0)
            {
                return;
            }
            List <ArcTap> taps = ArcTapNoteManager.Instance.Taps;

            ArcTap[] sameTimeTapNotes = taps.Where((s) => Mathf.Abs(s.Timing - Timing) <= 1).ToArray();
            foreach (ArcTap t in sameTimeTapNotes)
            {
                LineRenderer l   = UnityEngine.Object.Instantiate(ArcArcManager.Instance.ConnectionPrefab, t.transform).GetComponent <LineRenderer>();
                float        p   = 1f * (Timing - Arc.Timing) / (Arc.EndTiming - Arc.Timing);
                Vector3      pos = new Vector3(ArcAlgorithm.ArcXToWorld(ArcAlgorithm.X(Arc.XStart, Arc.XEnd, p, Arc.LineType)),
                                               ArcAlgorithm.ArcYToWorld(ArcAlgorithm.Y(Arc.YStart, Arc.YEnd, p, Arc.LineType)) - 0.5f)
                                   - new Vector3(ArcArcManager.Instance.Lanes[t.Track - 1], 0);
                l.SetPosition(1, new Vector3(pos.x, 0, pos.y));
                l.startColor = l.endColor = ArcArcManager.Instance.ConnectionColor;
                l.startColor = l.endColor = new Color(l.endColor.r, l.endColor.g, l.endColor.b, t.Alpha * 0.8f);
                l.enabled    = t.Enable;
                l.transform.localPosition = new Vector3();

                if (t.ConnectionLines.ContainsKey(this))
                {
                    UnityEngine.Object.Destroy(t.ConnectionLines[this].gameObject);
                    t.ConnectionLines.Remove(this);
                }

                t.ConnectionLines.Add(this, l);
            }
        }
コード例 #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();
        }
コード例 #3
0
        private void UpdateArcTapCursor()
        {
            if (selectedArc != null && selectedArc.Instance == null)
            {
                selectedArc = null;
                if (Mode == ClickToCreateMode.ArcTap)
                {
                    Mode = ClickToCreateMode.Idle;
                }
                return;
            }
            if (Mode != ClickToCreateMode.ArcTap || selectedArc == null)
            {
                AdeCursorManager.Instance.EnableArcTapCursor  = false;
                AdeCursorManager.Instance.EnableVerticalPanel = false;
                return;
            }
            Vector3 pos    = AdeCursorManager.Instance.AttachedHorizontalPoint;
            int     timing = ArcTimingManager.Instance.CalculateTimingByPosition(-pos.z * 1000) - ArcAudioManager.Instance.AudioOffset;

            canAddArcTap = selectedArc.Timing <= timing && selectedArc.EndTiming >= timing;
            AdeCursorManager.Instance.EnableArcTapCursor  = canAddArcTap;
            AdeCursorManager.Instance.EnableVerticalPanel = canAddArcTap;
            if (!canAddArcTap)
            {
                return;
            }
            ArcTimingManager timingManager = ArcTimingManager.Instance;
            float            t             = 1f * (timing - selectedArc.Timing) / (selectedArc.EndTiming - selectedArc.Timing);
            Vector2          gizmo         = new Vector3(ArcAlgorithm.ArcXToWorld(ArcAlgorithm.X(selectedArc.XStart, selectedArc.XEnd, t, selectedArc.LineType)),
                                                         ArcAlgorithm.ArcYToWorld(ArcAlgorithm.Y(selectedArc.YStart, selectedArc.YEnd, t, selectedArc.LineType)) - 0.5f);

            AdeCursorManager.Instance.ArcTapCursorPosition = gizmo;
        }
コード例 #4
0
        public void Relocate()
        {
            ArcTimingManager timingManager = ArcTimingManager.Instance;
            int   offset = ArcAudioManager.Instance.AudioOffset;
            float t      = 1f * (Timing - Arc.Timing) / (Arc.EndTiming - Arc.Timing);

            LocalPosition = new Vector3(ArcAlgorithm.ArcXToWorld(ArcAlgorithm.X(Arc.XStart, Arc.XEnd, t, Arc.LineType)),
                                        ArcAlgorithm.ArcYToWorld(ArcAlgorithm.Y(Arc.YStart, Arc.YEnd, t, Arc.LineType)) - 0.5f,
                                        -timingManager.CalculatePositionByTimingAndStart(Arc.Timing + offset, Timing + offset) / 1000f - 0.6f);
            SetupArcTapConnection();
        }
コード例 #5
0
        public void Instantiate(ArcArc arc)
        {
            Arc      = arc;
            Instance = UnityEngine.Object.Instantiate(ArcArcManager.Instance.ArcTapPrefab, arc.transform);
            ArcTimingManager timingManager = ArcTimingManager.Instance;
            int   offset = ArcAudioManager.Instance.AudioOffset;
            float t      = 1f * (Timing - arc.Timing) / (arc.EndTiming - arc.Timing);

            LocalPosition = new Vector3(ArcAlgorithm.ArcXToWorld(ArcAlgorithm.X(arc.XStart, arc.XEnd, t, arc.LineType)),
                                        ArcAlgorithm.ArcYToWorld(ArcAlgorithm.Y(arc.YStart, arc.YEnd, t, arc.LineType)) - 0.5f,
                                        -timingManager.CalculatePositionByTimingAndStart(arc.Timing + offset, Timing + offset) / 1000f - 0.6f);
            SetupArcTapConnection();
        }
コード例 #6
0
        public void AddArcTap(ArcArcTap arctap)
        {
            if (arctap.Timing > EndTiming || arctap.Timing < Timing)
            {
                throw new ArgumentOutOfRangeException("ArcTap 时间不在 Arc 范围内");
            }
            ArcTimingManager timingManager = ArcTimingManager.Instance;
            int offset = ArcAudioManager.Instance.AudioOffset;

            arctap.Instantiate(this);
            float t = 1f * (arctap.Timing - Timing) / (EndTiming - Timing);

            arctap.LocalPosition = new Vector3(ArcAlgorithm.ArcXToWorld(ArcAlgorithm.X(XStart, XEnd, t, LineType)),
                                               ArcAlgorithm.ArcYToWorld(ArcAlgorithm.Y(YStart, YEnd, t, LineType)) - 0.5f,
                                               -timingManager.CalculatePositionByTimingAndStart(Timing + offset, arctap.Timing + offset) / 1000f - 0.6f);
            ArcTaps.Add(arctap);
        }
コード例 #7
0
        private void UpdateInfo()
        {
            EnableInfo = EnableVertical || EnableHorizontal;
            string content = string.Empty;

            if (!EnableInfo)
            {
                return;
            }
            content += $"音乐时间: {AttachedTiming + ArcAudioManager.Instance.AudioOffset}\n";
            content += $"谱面时间: {AttachedTiming}";
            if (EnableVertical)
            {
                Vector3 pos = AttachedVerticalPoint;
                content += $"\n坐标: ({ArcAlgorithm.WorldXToArc(pos.x).ToString("f2")},{ArcAlgorithm.WorldYToArc(pos.y).ToString("f2")})";
            }
            if (AdeClickToCreate.Instance.Enable && AdeClickToCreate.Instance.Mode != ClickToCreateMode.Idle)
            {
                content += $"\n点立得: {AdeClickToCreate.Instance.Mode.ToString()}";
                if (AdeClickToCreate.Instance.Mode == ClickToCreateMode.Arc)
                {
                    content += $"\n{AdeClickToCreate.Instance.CurrentArcColor}/{AdeClickToCreate.Instance.CurrentArcIsVoid}/{AdeClickToCreate.Instance.CurrentArcType}";
                }
            }
            if (rangeSelectPosition != null)
            {
                content += $"\n段落选择起点: {rangeSelectPosition}";
            }
            if (SelectedNotes.Count == 1 && SelectedNotes[0] is ArcArc)
            {
                ArcArc arc = SelectedNotes[0] as ArcArc;
                float  p   = (AttachedTiming - arc.Timing) / (arc.EndTiming - arc.Timing);
                if (p >= 0 && p <= 1)
                {
                    float x = ArcAlgorithm.X(arc.XStart, arc.XEnd, p, arc.LineType);
                    float y = ArcAlgorithm.Y(arc.YStart, arc.YEnd, p, arc.LineType);
                    content += $"\nArc: {(p * 100).ToString("f2")}%, {x.ToString("f2")}, {y.ToString("f2")}";
                }
            }
            InfoText.text = content;
        }