Exemple #1
0
        private void UpdateBPMEvents(BMSEvent bmsEvent)
        {
            // No need to handle this unless it is beat coloring mode
            if (coloringMode != ColoringMode.Beat)
            {
                return;
            }
            switch (bmsEvent.type)
            {
            case BMSEventType.BeatReset:
                bpmBasePointBeatFlow = 0;
                bpmBasePoint         = bmsEvent.time;
                timeSign             = bmsEvent.Data2F;
                break;

            case BMSEventType.BPM:
                double newBpm = bmsEvent.Data2F;
                bpmBasePointBeatFlow += (bmsEvent.time - bpmBasePoint).ToAccurateMinute() * bpm;
                bpmBasePoint          = bmsEvent.time;
                bpm = newBpm;
                break;

            case BMSEventType.STOP:
                bpmBasePoint -= new TimeSpan(bmsEvent.data2);
                break;
            }
        }
Exemple #2
0
        protected virtual void PreNoteEvent(BMSEvent bmsEvent)
        {
            switch (bmsEvent.type)
            {
            case BMSEventType.Note:
            case BMSEventType.LongNoteStart:
            case BMSEventType.LongNoteEnd:
                break;

            case BMSEventType.BeatReset:
            case BMSEventType.BPM:
            case BMSEventType.STOP:
                UpdateBPMEvents(bmsEvent);
                return;

            default: return;
            }
            if (bmsManager.NoteLimit > 0 && spawnedNoteHandlers.Count >= bmsManager.NoteLimit && noteHandlers.Count <= 0)
            {
                holdedEvents.Enqueue(bmsEvent);
            }
            else
            {
                SpawnHoldedNotes();
                HandleSpawn(bmsEvent);
            }
        }
 public BmsLongNote(float Timing, int Track, float Duration, BMSEvent NativeEvent)
 {
     this.Timing      = Timing;
     this.Track       = Track;
     this.Duration    = Duration;
     this.NativeEvent = NativeEvent;
 }
Exemple #4
0
        static void OnBmsEvent(BMSEvent bmsEvent)
        {
            switch (bmsEvent.type)
            {
            case BMSEventType.BeatReset:
                Console.ForegroundColor = ConsoleColor.DarkGray;
                Console.WriteLine("{0,-17} Beat reset to {1}", bmsEvent.time, BitConverter.Int64BitsToDouble(bmsEvent.data2));
                return;

            case BMSEventType.BPM:
                Console.ForegroundColor = ConsoleColor.DarkGray;
                Console.WriteLine("{0,-17} BPM changed to {1}", bmsEvent.time, BitConverter.Int64BitsToDouble(bmsEvent.data2));
                return;

            case BMSEventType.STOP:
                Console.ForegroundColor = ConsoleColor.DarkGray;
                Console.WriteLine("{0,-17} STOP event for {1}", bmsEvent.time, new TimeSpan(bmsEvent.data2));
                return;

            case BMSEventType.BMP:
                Console.ForegroundColor = ConsoleColor.DarkGray;
                Console.WriteLine("{0,-17} BGA changed to {2} in channel {1}", bmsEvent.time, bmsEvent.data1, bmsEvent.data2);
                return;

            case BMSEventType.WAV:
                Console.ResetColor();
                Console.WriteLine("{0,-17} Play BGM {1}", bmsEvent.time, bmsEvent.data2);
                break;

            case BMSEventType.Note:
                Console.ResetColor();
                Console.WriteLine("{0,-17} Note click {2} in channel {1}", bmsEvent.time, bmsEvent.data1, bmsEvent.data2);
                break;

            case BMSEventType.LongNoteStart:
                Console.ResetColor();
                Console.WriteLine("{0,-17} Note hold {2} in channel {1}", bmsEvent.time, bmsEvent.data1, bmsEvent.data2);
                break;

            case BMSEventType.LongNoteEnd:
                Console.ForegroundColor = ConsoleColor.DarkGray;
                Console.WriteLine("{0,-17} Note released {2} in channel {1}", bmsEvent.time, bmsEvent.data1, bmsEvent.data2);
                return;
            }
            int streamId;

            if (resources.TryGetValue(bmsEvent.data2, out streamId))
            {
                if (!Bass.ChannelPlay(streamId, true))
                {
                    Console.WriteLine("Failed to play sound: {0}", Bass.LastError);
                }
            }
        }
Exemple #5
0
        static void OnBmsEvent(BMSEvent bmsEvent)
        {
            switch (bmsEvent.type)
            {
            case BMSEventType.BeatReset:
                Console.ForegroundColor = ConsoleColor.DarkGray;
                Console.WriteLine("{0,-17} Beat reset to {1}", bmsEvent.time, bmsEvent.Data2F);
                return;

            case BMSEventType.BPM:
                Console.ForegroundColor = ConsoleColor.DarkGray;
                Console.WriteLine("{0,-17} BPM changed to {1}", bmsEvent.time, bmsEvent.Data2F);
                return;

            case BMSEventType.STOP:
                Console.ForegroundColor = ConsoleColor.DarkGray;
                Console.WriteLine("{0,-17} STOP event for {1}", bmsEvent.time, new TimeSpan(bmsEvent.data2));
                return;

            case BMSEventType.BMP:
                Console.ForegroundColor = ConsoleColor.DarkGray;
                Console.WriteLine("{0,-17} BGA changed to {2} in channel {1}", bmsEvent.time, bmsEvent.data1, bmsEvent.data2);
                return;

            case BMSEventType.WAV:
                Console.ResetColor();
                Console.WriteLine("{0,-17} Play BGM {1}", bmsEvent.time, bmsEvent.data2);
                break;

            case BMSEventType.Note:
                Console.ResetColor();
                Console.WriteLine("{0,-17} Note click {2} in channel {1}", bmsEvent.time, bmsEvent.data1, bmsEvent.data2);
                break;

            case BMSEventType.LongNoteStart:
                Console.ResetColor();
                Console.WriteLine("{0,-17} Note hold {2} in channel {1}", bmsEvent.time, bmsEvent.data1, bmsEvent.data2);
                break;

            case BMSEventType.LongNoteEnd:
                Console.ForegroundColor = ConsoleColor.DarkGray;
                Console.WriteLine("{0,-17} Note released {2} in channel {1}", bmsEvent.time, bmsEvent.data1, bmsEvent.data2);
                return;
            }
            CachedSound audio;

            if (resources.TryGetValue(bmsEvent.data2, out audio))
            {
                pendingPlaySound.Enqueue(audio);
            }
        }
Exemple #6
0
        private void HandleSpawn(BMSEvent bmsEvent)
        {
            bool isLongNote = bmsManager.LongNoteType > 0 && _handledChannels.Contains(bmsEvent.data1) && (bmsEvent.type == BMSEventType.LongNoteStart ||
                                                                                                           bmsEvent.type == BMSEventType.LongNoteEnd);

            if (!_handledChannels.Contains(bmsEvent.data1))
            {
                return;
            }
            int index = Array.IndexOf(channels, bmsEvent.data1);

            if (index < 0)
            {
                return;
            }
            float       delta       = (float)index / (channels.Length - 1);
            bool        createNew   = true;
            NoteHandler noteHandler = null;

            if (isLongNote)
            {
                int idx = Array.IndexOf(channels, bmsEvent.data1);
                noteHandler = longNoteHandlers[idx];
                createNew   = noteHandler == null;
                if (createNew)
                {
                    longNoteHandlers[idx] = noteHandler = GetFreeNoteHandler();
                }
                else
                {
                    longNoteHandlers[idx] = null;
                }
            }
            else
            {
                noteHandler = GetFreeNoteHandler();
            }

            if (createNew)
            {
                noteHandler.Register(this, bmsManager, bmsEvent.time, bmsEvent.data1, (int)bmsEvent.data2, delta, isLongNote);
            }
            else
            {
                noteHandler.RegisterLongNoteEnd(bmsEvent.time, (int)bmsEvent.data2);
            }

            if (isLongNote ? createNew : true)
            {
                switch (coloringMode)
                {
                case ColoringMode.Timing:
                    noteHandler.SetColor(defaultColor);
                    if (hasColors)
                    {
                        if (currentMatchingTime != bmsEvent.time)
                        {
                            matchingTimeNoteHandlers.Clear();
                        }
                        currentMatchingTime = bmsEvent.time;
                        matchingTimeNoteHandlers.Add(noteHandler);
                        if (matchingTimeNoteHandlers.Count > 1)
                        {
                            if (matchingTimeNoteHandlers.Count == 2)
                            {
                                currentColor++;
                                foreach (var nh in matchingTimeNoteHandlers)
                                {
                                    nh.SetMatchColor();
                                }
                            }
                            noteHandler.SetMatchColor();
                        }
                    }
                    break;

                case ColoringMode.Channel:
                    if (hasColors)
                    {
                        int colorId = Array.IndexOf(handledChannels, bmsEvent.data1);
                        noteHandler.SetColor(matchColors[colorId > 0 ? colorId % matchColors.Length : 0]);
                    }
                    break;

                case ColoringMode.Beat:
                    double currentBeat = ((bmsEvent.time - bpmBasePoint).ToAccurateMinute() * bpm + bpmBasePointBeatFlow) % timeSign;
                    noteHandler.SetColor(HelperFunctions.ColorFromHSL(Mathf.Log(HelperFunctions.FindDivision(currentBeat), 2) / 9, 1, 0.55F));
                    break;

                default:
                    noteHandler.SetColor(defaultColor);
                    break;
                }
            }
#if UNITY_EDITOR || DEBUG
            noteHandler.gameObject.name = string.Format("NOTE #{0:0000}:{1:0000} @{2}", bmsEvent.data1, bmsEvent.data2, bmsEvent.time);
#endif
        }
 public BmsNote(float Timing, int Track, BMSEvent NativeEvent)
 {
     this.Timing      = Timing;
     this.Track       = Track;
     this.NativeEvent = NativeEvent;
 }
 public BmsEvent(BmsEventType Type, float Timing, BMSEvent NativeEvent)
 {
     this.Type        = Type;
     this.Timing      = Timing;
     this.NativeEvent = NativeEvent;
 }