play_effect_for_interaction(src, priority) {
    if (priority == null) { priority = CONFIG.DEFAULT_SFX_PRIORITY; }

    const isPlayingEffect = this._interaction_sfx != null && (window.isDesktop || this._interaction_sfx.getPlaying()) && (Date.now() - this._interaction_sfx_started_at < CONFIG.INTERACTION_SFX_BLOCKING_DURATION_THRESHOLD * 1000.0);
    if (isPlayingEffect) {
      this._interaction_sfx_waiting_src = src;
      this._interaction_sfx_waiting_priority = priority;
      this._play_waiting_effect_for_interaction();
    } else if (this._interaction_sfx_raf == null) {
      // no interaction sfx waiting to be played, delay briefly
      this._interaction_sfx_waiting_src = src;
      this._interaction_sfx_waiting_priority = priority;
      this._interaction_sfx_waiting_started_at = Date.now();
      this._update_waiting_effect_for_interaction();
    } else if (priority > this._interaction_sfx_waiting_priority) {
      // there is another interaction sfx waiting to be played
      // play this sfx instead of previous
      this._interaction_sfx_waiting_src = src;
      this._interaction_sfx_waiting_priority = priority;
    }
  }
Plays a non-looping interaction sound effect. Only a single interaction sound effect may play at once.
NOTE: do not use this for hover effects, use play_effect instead.
@param {String} src
@param {Number} [priority=0] higher priority takes precedence
@returns {audio_object|null} audio sfx object if playing, otherwise null