public void TriggerMusicSequence(LoopSequenceTrigger aTrigger) { LoopSequence loopSequence = loopSequences.Find(x => x.sequences.Exists(y => y.trigger == aTrigger)); if (loopSequences == null) { return; } List <MusicLooper.PlayingTrack> playingTracks = musicLooper.activeTracks; currentTracksForSequence.Clear(); currentTracksToRemove.Clear(); AddSequenceTracks(loopSequence, aTrigger); musicLooper.SetBaseTrack(loopSequence.baseLoop); currentLoopSequence = loopSequence; for (int i = playingTracks.Count - 1; i >= 0; --i) { MusicLooper.PlayingTrack playingTrack = playingTracks[i]; if (!currentTracksForSequence.Exists(x => x == playingTrack.loopTrack)) { if (playingTrack.isPlaying && !playingTrack.isChanging) { currentTracksToRemove.Add(playingTrack.loopTrack); musicLooper.StopTrack(playingTrack.loopTrack); } else { musicLooper.RemoveTrack(playingTrack.loopTrack); } } } if (currentTracksToRemove.Count == 0) { PlaySequenceTracks(); } else { musicLooper.onLoopStopped += OnLoopStopped; } }
void AddSequenceTracks(LoopSequence aSequence, LoopSequenceTrigger aTrigger) { List <MusicLooper.PlayingTrack> playingTracks = musicLooper.activeTracks; foreach (LoopSequence.Sequence sequence in aSequence.sequences) { foreach (LoopTrack track in sequence.loops) { if (!playingTracks.Exists(x => x.loopTrack == track)) { musicLooper.AddTrack(track); } currentTracksForSequence.Add(track); } if (sequence.trigger == aTrigger) { break; } } }
public void TriggerLoopSequence(LoopSequenceTrigger aTrigger) { sequenceMusicPlayer.TriggerMusicSequence(aTrigger); sequencedMusic = true; }