/*
 * @Author: YeeChan
 * @Date: 2020-12-23 11:48:49
 * @Description:
 */

/****************************************************
* spine 的封装 主要支持能在ide中自动播放
*****************************************************/
const { ccclass, property, menu, disallowMultiple, executionOrder, requireComponent, executeInEditMode, playOnFocus } = cc._decorator;
@ccclass
@executeInEditMode
@playOnFocus
@menu('FM组件/扩展/FMSkeletonExtend')
export default class FMSkeletonExtend extends sp.Skeleton {

    @property()
    private _isEditorPlay_custom: boolean = true;
    @property({ tooltip: "编辑器中自动播放动作\n勾选状态,在选中节点时,帧率60,否则只有必要时才重绘\n非勾选,不自动播放", type: cc.Boolean })
    set isEditorPlay(val: boolean) {
        this._isEditorPlay_custom = val;
        if (this._isEditorPlay_custom) {
            // let data = this["_skeleton"]["data"];
            // let events = data["events"];
            // let eventsName = this["_N$skeletonData"]["_name"] + "事件集合:"
            // let eventsInfo = "["
            // for (let index = 0; index < events.length; index++) {
            //     let name = events[index].name;
            //     let stringValue = events[index].stringValue;
            //     if (stringValue == "") {
            //         stringValue = "\"\""
            //     }
            //     if (index != 0) {
            //         eventsInfo = eventsInfo + ","
            //     }
            //     eventsInfo = eventsInfo + name + ":" + stringValue
            // }
            // eventsInfo = eventsInfo + "]"

            // Editor.info(eventsName + eventsInfo)
        }
    }
    get isEditorPlay() { return this._isEditorPlay_custom; }



    @property()
    private _isEditoAttach_custom: boolean = false;
    @property({ tooltip: "编辑器中生成挂点\n勾选状态,生成挂点 ATTACHED_NODE_TREE\n非勾选,不做操作", type: cc.Boolean })
    set isEditorAttach(val: boolean) {
        this._isEditoAttach_custom = val;
        if (this._isEditoAttach_custom) {
            this["attachUtil"].generateAllAttachedNodes()
        }
    }
    get isEditorAttach() { return this._isEditoAttach_custom; }



    /**
     * 重写update 修改编辑器模式
     * @param dt 
     */
    protected update(dt: number): void {
        if (CC_EDITOR) {
            if (this.isEditorPlay) {
                CC_EDITOR = false;
                super.update(dt);
                CC_EDITOR = true;
            }
        } else {
            super.update(dt);
        }
    }


    /**
     * 打印spine信息
     */
    public dumpSpineInfo_custom(): void {
        let data = this["_skeleton"]["data"];
        let animations = data["animations"];
        let events = data["events"];
        let skins = data["skins"];

        console.group(`spine : 节点 ${this.name} ,动画 <${this["_N$skeletonData"]["_name"]} >`)

        let animationsName = "动作集合:"
        let animationsInfo = "["
        for (let index = 0; index < animations.length; index++) {
            let name = animations[index].name;
            if (index != 0) {
                animationsInfo = animationsInfo + ","
            }
            animationsInfo = animationsInfo + name;
        }
        animationsInfo = animationsInfo + "]"

        let eventsName = "事件集合:"
        let eventsInfo = "["
        for (let index = 0; index < events.length; index++) {
            let name = events[index].name;
            let stringValue = events[index].stringValue;
            if (stringValue == "") {
                stringValue = "\"\""
            }
            if (index != 0) {
                eventsInfo = eventsInfo + ","
            }
            eventsInfo = eventsInfo + name + ":" + stringValue
        }
        eventsInfo = eventsInfo + "]"

        let skinsName = "皮肤集合:"
        let skinsInfo = "["
        for (let index = 0; index < skins.length; index++) {
            let name = skins[index].name;
            if (index != 0) {
                skinsInfo = skinsInfo + ","
            }
            skinsInfo = skinsInfo + name
        }
        skinsInfo = skinsInfo + "]"


        console.log(
            `%c ${animationsName} %c ${animationsInfo} `,
            'background: #35495E;padding: 1px;border-radius: 2px 0 0 2px;color: #fff;',
            'background: #409EFF;padding: 1px;border-radius: 0 2px 2px 0;color: #fff;'
        );
        console.log(
            `%c ${eventsName} %c ${eventsInfo} `,
            'background: #35495E;padding: 1px;border-radius: 2px 0 0 2px;color: #fff;',
            'background: #409EFF;padding: 1px;border-radius: 0 2px 2px 0;color: #fff;'
        );
        console.log(
            `%c ${skinsName} %c ${skinsInfo} `,
            'background: #35495E;padding: 1px;border-radius: 2px 0 0 2px;color: #fff;',
            'background: #409EFF;padding: 1px;border-radius: 0 2px 2px 0;color: #fff;'
        );

        console.groupEnd()
    }
}