playNext() {
    if (this._playlistIndex >= this._sfxPlaylist.length) {
      // complete
      if (_.isFunction(this._onComplete)) {
        this._onComplete();
      }
      this.stop();
    } else {
      // play next
      const sfxData = this._sfxPlaylist[this._playlistIndex];
      if (sfxData != null) {
        const onComplete = this.playNext.bind(this);
        this._currentSfxData = sfxData;
        sfxData.play(onComplete);

        // increment playlist index if there is another sfx after this or we're not looping this sfx
        if (this._playlistIndex < this._sfxPlaylist.length - 1 || !sfxData.getLooping()) {
          this._playlistIndex++;
        }
      }
    }
  }
Plays the next sfx in the sequence. Usually you do not need to call this method directly.