ctor(sdkCard) {
    // initialize properties that may be required in init
    this._stateActions = [];
    this._stateQueue = [];
    this._statChangeQueue = [];

    // do super ctor
    this._super(sdkCard);

    // setup action state record
    this._actionStateRecord = new ActionStateRecord();
    const resolvePropertiesToRecord = {
      isReady: function () {
        const { sdkCard } = this;
        if (sdkCard.getGameSession().isNew()) {
          return sdkCard.isOwnedByPlayer1();
        } if (sdkCard.getGameSession().isOver()) {
          return false;
        } if (sdkCard.getIsActive() && sdkCard.isOwnersTurn() && sdkCard.getIsTargetable() && sdkCard.getCanAct()) {
          // has moved but not attacked, check if any targets are in range
          if (!sdkCard.getCanMove() && sdkCard.getCanAttack()) {
            return sdkCard.getAttackRange().getValidTargets(sdkCard.getGameSession().getBoard(), sdkCard).length > 0;
          }
          return true;
        }
        return false;
      }.bind(this),
    };
    this._actionStateRecord.setupToRecordStateOnEvent(EVENTS.update_cache_step, resolvePropertiesToRecord);

    // set content size to match tile size
    const contentSize = cc.size(CONFIG.TILESIZE, CONFIG.TILESIZE);
    this.setContentSize(contentSize);

    // create sprites
    const spriteOptions = _.extend({}, sdkCard.getSpriteOptions());
    if (spriteOptions.spriteIdentifier == null) { spriteOptions.spriteIdentifier = this.getAnimResource().idle; }
    this.centerOffset = cc.p(
      this.centerOffset.x + (spriteOptions.offset ? spriteOptions.offset.x : 0),
      this.centerOffset.y + (spriteOptions.offset ? spriteOptions.offset.y : 0),
    );

    this.initEntitySprites(spriteOptions);
    this.initSupportNodes(spriteOptions);

    // all entities are not ready by default
    this.removeReadiness();

    // update by initial owner
    this.resetStateByOwner();
    this.updateSpritesForOwner();
  }
*************************************************************************
 EntityNode
 var EntityNode = SdkNode
 EntityNode.create()
**************************************************************************