Beispiel #1
0
        /// <summary>
        /// Toggles a riff at the given position.
        /// </summary>
        /// <param name="newRiff">Riff to toggle.</param>
        /// <param name="pos">Measure to toggle.</param>
        public void ToggleRiff(Riff newRiff, int pos)
        {
            SongPiece songPiece = _songPieces[_songPieceIndices[pos]];
            Measure   measure   = _measures[songPiece.MeasureIndices[0]];

            // For each riff in measure
            foreach (int r in measure.RiffIndices)
            {
                Riff riff = _riffs[r];

                // Skip if riff not the same instrument
                if (riff.Instrument != newRiff.Instrument)
                {
                    continue;
                }

                // Remove riff if it exists
                if (newRiff == riff)
                {
                    measure.RiffIndices.Remove(newRiff.Index);
                }

                // Replace riff with new one
                else
                {
                    measure.RiffIndices.Remove(riff.Index);
                    measure.RiffIndices.InsertSorted <int>(newRiff.Index, false);
                }

                return;
            }

            // Riff not already there
            measure.RiffIndices.InsertSorted <int>(newRiff.Index, false);
        }
Beispiel #2
0
        /// <summary>
        /// Creates a new song piece and registers it.
        /// </summary>
        public SongPiece NewSongPiece()
        {
            // Create new song piece
            SongPiece songPiece = new SongPiece();

            // Init measures
            Measure measure = NewMeasure();

            songPiece.MeasureIndices.Add(measure.Index);

            // Register song piece
            RegisterSongPiece(songPiece);

            return(songPiece);
        }
Beispiel #3
0
        /// <summary>
        /// Plays all notes at the given beat.
        /// </summary>
        /// <param name="pos">Beat at which to play notes.</param>
        public void PlaySong(int pos)
        {
            try {
                SongPiece songPiece = _songPieces[_songPieceIndices[pos / Riff.MAX_BEATS]];
                Measure   measure   = _measures[songPiece.MeasureIndices[0]];

                // Play all notes
                foreach (int i in measure.RiffIndices)
                {
                    _riffs[i].PlayRiff(pos % Riff.MAX_BEATS);
                }
            }
            catch (ArgumentOutOfRangeException) {
                Debug.LogError("Song.PlaySong(): index out of range! " + pos);
            }
        }
Beispiel #4
0
 /// <summary>
 /// Adds a song piece to the song and assigns it an index.
 /// </summary>
 /// <param name="songPiece">Song piece to register.</param>
 public void RegisterSongPiece(SongPiece songPiece)
 {
     songPiece.Index = _songPieces.Count;
     _songPieces.Add(songPiece);
     _songPieceIndices.Add(songPiece.Index);
 }