showCastingStartState() {
    let showDuration = 0.0;
    // console.log(this.sdkCard.getLogName(), "showCastingStartState", this._numCastingStatesToShow, this._showingCastingStartStateTimeoutId == null, this._showingCastingStartState, this._showingCastingState);
    // update casting state
    this._cleanupCastingEndStateTimeout();
    this._numCastingStatesToShow++;

    if (this.canChangeState() && this._showingCastingStartStateTimeoutId == null) {
      if (this._showingCastingStartState && !this.getHasActiveState()) {
        // special case: casting loop never started because cast end was triggered
        this.showCastingLoopState();
      } else {
        // get duration
        const animResource = this.getAnimResource();
        const animIdentifier = animResource && animResource.castStart;
        const anim = cc.animationCache.getAnimation(animIdentifier);
        if (anim) {
          showDuration += anim.getDuration() * 0.5;
        }

        // add cast delay
        showDuration += CONFIG.GENERAL_CAST_START_DELAY;

        this._showingCastingStartStateTimeoutId = setTimeout(() => {
          this._showingCastingStartStateTimeoutId = null;
          this.whenResourcesReady(this.getCardResourceRequestId()).then((cardResourceRequestId) => {
            if (!this.getAreResourcesValid(cardResourceRequestId)) return; // card has changed
            // console.log(this.sdkCard.getLogName(), " > > showCastingStartState", this._numCastingStatesToShow, this._showingCastingEndStateTimeoutId == null, !this.getHasActiveState(), !this._showingCastingState);
            if (this.canChangeState() && this._showingCastingEndStateTimeoutId == null) {
              const animAction = animIdentifier && UtilsEngine.getAnimationAction(animIdentifier);
              if (animAction != null && !this.getHasActiveState() && !this._showingCastingState && !this._showingCastState) {
                // clear all states
                this.showNoState();
                this.removeReadinessVisualTag();
                this._showingCastingStartState = true;
                this._stateActions.push(this.entitySprite.runAction(cc.sequence(
                  animAction,
                  cc.callFunc(() => {
                    this.cleanupStateActions();
                    this.showCastingLoopState();
                  }),
                )));
              }
            }
          });
        }, CONFIG.GENERAL_CAST_START_DELAY * 1000.0);
      }
    }

    return showDuration;
  }
Shows entity casting start state.
@returns {Number} duration of show