showBuyNode(duration, buttonText, font, fontSize, textColor) {
    if (duration == null) { duration = 0.0; }
    if (buttonText == null) { buttonText = this.buyButtonText; }
    if (font == null) { font = this.buyButtonFont; }
    if (fontSize == null) { fontSize = this.buyFontSize; }
    if (textColor == null) { textColor = this.buyButtonTextColor; }

    return this.whenRequiredResourcesReady().then((requestId) => {
      if (!this.getAreResourcesValid(requestId)) return; // load invalidated or resources changed

      this.removeBuyNodes(duration);

      this.buyButtonText = buttonText;
      this.buyFontSize = fontSize;
      this.buyButtonFont = font;
      this.buyButtonTextColor = textColor;

      const buyButtonSprite = new ccui.Scale9Sprite(RSX.button_secondary.img);
      const buyButtonGlowSprite = new ccui.Scale9Sprite(RSX.button_secondary_glow.img);
      const buyButtonSize = buyButtonSprite.getContentSize();
      const buyButtonLabel = new cc.LabelTTF(this.buyButtonText, this.buyButtonFont, this.buyFontSize, null, cc.TEXT_ALIGNMENT_CENTER);
      buyButtonLabel.setFontFillColor(this.buyButtonTextColor);

      this.buyNode = new cc.ControlButton(buyButtonLabel, buyButtonSprite);
      this.buyNode.setPreferredSize(buyButtonSize);
      this.buyNode.setAdjustBackgroundImage(false);
      this.buyNode.setZoomOnTouchDown(false);
      this.buyNode.setBackgroundSpriteForState(buyButtonSprite, cc.CONTROL_STATE_NORMAL);
      this.buyNode.setBackgroundSpriteForState(buyButtonGlowSprite, cc.CONTROL_STATE_HIGHLIGHTED);
      this.addChild(this.buyNode, this.buyZOrder);

      // add as interactive
      this.addInteractiveElement(this.buyNode);

      if (this.isRunning()) {
        // resize when this is already running (in scene)
        // otherwise, resize will occur automatically on first init
        this.resizeBuyNodes();
      }

      if (duration != null && duration > 0.0) {
        this.buyNode.setOpacity(0.0);
        this.buyNode.fadeTo(duration, 255.0);
      }
    });
  }
Shows press to buy button and returns a promise.
@param {Number} [duration=0.0] time in seconds
@param {String} [buttonText=this.buyButtonText]
@param {String} [font=this.buyButtonFont]
@param {Number} [fontSize=this.buyFontSize]
@param {cc.Color} [textColor=this.textColor]
@returns {Promise}