showBurn(sdkCard, startDelay, animateDuration, dissolveDelay, dissolveDuration, sourceScreenPosition, targetScreenPosition) {
    // reset
    if (sdkCard != null) {
      this.setSdkCard(sdkCard);
    } else {
      this.hideSnapshot();
    }

    if (this.sdkCard != null) {
      return new Promise((resolve, reject) => {
        // stop running animations
        this.stopAnimations();

        // set default delay
        if (startDelay == null) { startDelay = 0.0; }

        // hide by scaling to 0
        this.setScale(0.0);

        // wait for resources
        Promise.all([
          this.whenRequiredResourcesReady(),
          this.whenResourcesReady(this.getCardResourceRequestId()),
        ])
          .spread((requiredRequestId, cardResourceRequestId) => {
            if (!this.getAreResourcesValid(requiredRequestId) || !this.getAreResourcesValid(cardResourceRequestId)) return; // load invalidated or resources changed

            const centerPosition = this.getCenterPosition();
            const cardBackgroundContentSize = this.getCardBackgroundContentSize();

            // get movement and rotation
            const dx = targetScreenPosition.x - sourceScreenPosition.x;
            const dy = targetScreenPosition.y - sourceScreenPosition.y;
            let anchorX;
            if (dx < 0.0) { anchorX = 0.0; } else if (dx > 0.0) { anchorX = 1.0; } else { anchorX = 0.5; }
            let anchorY;
            if (dy < 0.0) { anchorY = 0.0; } else if (dy > 0.0) { anchorY = 1.0; } else { anchorY = 0.5; }
            const angRotX = 30;// * (dy < 0.0 ? -1 : 1);
            const angRotY = 60 * (dx < 0.0 ? -1 : 1);
            const angRotZ = 0;
            const contentSize = this.getContentSize();
            const sourceScreenPositionWithAnchor = cc.p(sourceScreenPosition.x + (anchorX - 0.5) * contentSize.width, sourceScreenPosition.y + (anchorY - 0.5) * contentSize.height);
            const targetScreenPositionWithAnchor = cc.p(targetScreenPosition.x + (anchorX - 0.5) * contentSize.width, targetScreenPosition.y + (anchorY - 0.5) * contentSize.height);

            // set starting properties
            this.setAnchorPoint(anchorX, anchorY);
            this.setPosition(sourceScreenPositionWithAnchor);
            this.setSecondaryXYZRotation(new cc.kmVec3(angRotX, angRotY, angRotZ));

            // set starting position
            this.setPosition(sourceScreenPosition);

            // show burn animation
            const burnAction = cc.sequence(
              cc.delayTime(startDelay),
              cc.spawn(
                cc.sequence(
                  cc.moveTo(animateDuration, targetScreenPositionWithAnchor).easing(cc.easeExponentialOut()),
                  cc.callFunc(() => {
                    this.setAnchorPoint(0.5, 0.5);
                    this.setPosition(targetScreenPosition);
                  }),
                ),
                cc.targetedAction(
                  this._outlineGlow,
                  cc.sequence(
                    cc.show(),
                    cc.fadeIn(0.3 * animateDuration).easing(cc.easeIn(1.0)),
                    cc.delayTime(animateDuration),
                    cc.fadeOut(0.2 * animateDuration).easing(cc.easeOut(1.0)),
                    cc.hide(),
                  ),
                ).easing(cc.easeExponentialOut()),
                SecondaryXYZRotateBy.create(animateDuration, -angRotX, -angRotY, -angRotZ).easing(cc.easeExponentialOut()),
                cc.scaleTo(animateDuration, 1.0).easing(cc.easeExponentialOut()),
              ),
              cc.delayTime(dissolveDelay),
              cc.spawn(
                cc.callFunc(() => {
                  // snapshot self
                  this.recordSnapshot();

                  // set snapshot as dissolving
                  this._snapshotSprite.setDissolving(true);

                  // particles
                  const particles = new cc.ParticleSystem(RSX.ptcl_card_appear.plist);
                  particles.setPosVar(cc.p(cardBackgroundContentSize.width * 0.5, cardBackgroundContentSize.height * 0.5));
                  particles.setPosition(centerPosition);
                  this.addChild(particles, -1);
                }),
                cc.targetedAction(this._snapshotSprite, cc.actionTween(dissolveDuration, TweenTypes.DISSOLVE, 0.0, 1.0).easing(cc.easeIn(3.0))),
              ),
              cc.callFunc(() => {
                this.setSdkCard(null);
                resolve();
              }),
            );
            this.addAnimationAction(burnAction);
            this.runAction(burnAction);
          });
      })
        .catch((error) => { EventBus.getInstance().trigger(EVENTS.error, error); });
    }
    return Promise.resolve();
  }
Shows card being burned.
@param sdkCard
@param startDelay
@param animateDuration
@param dissolveDelay
@param dissolveDuration
@param sourceScreenPosition
@param targetScreenPosition
@returns {Promise}