parseDialogNode (dialogNode, shot) {
    const commands = []
    const text = processText(dialogNode, this._templateDataParameters)
    const shouldClear = getClearText(dialogNode)
    const side = getSpeaker(dialogNode) || 'left'

    if (shouldClear) {
      commands.push(this.clearShownDialogBubbles())
    }

    if (text) {
      // Use the camera setting from the shotSetup.
      const { zoom } = getCamera(shot)
      const { x, y } = getTextPosition(dialogNode) || getDefaultTextPosition(side, zoom)
      const width = getTextWidth(dialogNode)
      const id = ++_id
      idTextMap[id] = this.getHashFromText(dialogNode.text)
      commands.push((new SpeechBubble({
        div: this.div,
        htmlString: text,
        x,
        y,
        shownDialogBubbles: this.shownDialogBubbles,
        side,
        textDuration: getTextAnimationLength(dialogNode),
        zoom,
        width,
        id
      })).createBubbleCommand())
    }
    return commands
  }
The system method that is run on every dialogNode.
@param {import('../../../../app/schemas/models/selectors/cinematic').DialogNode} dialogNode
@param {Shot} currentShot
@returns {AbstractCommand[]}