import { TmoAssembler } from "./TmoAssembler";

export default cc.Class({
    extends: cc.Sprite,

    /**
     * 设置TextureIndex
     */
    setTextureIdx(idx) {
        this._textureIdx = idx
        this.setVertsDirty();
    },

    _getDefaultMaterial() {
        // 从TiledMap取得默认的材质
        return this._getTiledMap().getObjectMaterial();
    },

    _updateMaterial() {
        // make sure material is belong to self.
        let material = this.getMaterial(0);
        if (material) {
            if (material.getDefine('USE_TEXTURE') !== undefined) {
                material.define('USE_TEXTURE', true);
            }
            // 手动设置哈希值，避免无法合批
            material.updateHash(999999);

            // 增加WITH_COLOR宏定义
            let noColor = this.isNoColor();
            material.define('WITH_COLOR', !noColor);
        }

        cc.BlendFunc.prototype._updateMaterial.call(this);
    },

    _resetAssembler() {
        // 修改默认Assembler
        let assembler = this._assembler = new TmoAssembler();
        assembler.init(this);

        this._updateColor();
        this.setVertsDirty();
    },

    _getTiledMap() {
        return this.node._tiledMap;
    },

    isNoColor() {
        return this._getTiledMap().isNoColor();
    }
});
