import { Widget, _decorator, Node, Label, Vec3, tween, isValid, math } from 'cc';
import { UIBase } from '../scriptBase/UIBase';
import { UI } from '../enum/UI';
import { GameMgr } from '../manager/GameMgr';
import { CoinItem } from '../uiItem/CoinItem';
import { CoinMgr } from '../manager/CoinMgr';
import { EventType } from '../enum/EventType';
import { EventMgr } from '../manager/EventMgr';
import { AudioMgr } from '../manager/AudioMgr';
const { ccclass, property, requireComponent } = _decorator;

@ccclass('UI/UIGame')
@requireComponent(Widget)
export class UIGame extends UIBase {

    private lbLevel: Label = null
    private coinItem: CoinItem = null

    protected onLoad(): void {
        this.lbLevel = this.findComp('SettingItem/LbLevel', Label)
        this.coinItem = this.findComp('CoinItem', CoinItem)
    }

    protected onEnable(): void {
        EventMgr.on(EventType.MergeGoods, this.onMergeGoods, this)
    }

    protected onDisable(): void {
        EventMgr.off(EventType.MergeGoods, this.onMergeGoods, this)
    }

    public onOpen(data?: any): void {
        this.lbLevel.string = `Level:${GameMgr.CurLevel + 1}`
        this.coinItem.init(CoinMgr.CurCoin)
        AudioMgr.playBgm(`游戏内音乐${math.randomRangeInt(0, 3)}`)
    }

    public onClose(data?: any): void {
    }

    protected onBtnSettingClick(): void {
        this.open(UI.Pause)
    }

    private onMergeGoods(worldPos: Vec3): void {
        this.coinItem.updateCoin(CoinMgr.CurCoin, false)
        const flyCoin: Node = this.coinItem.createFlyCoin()
        flyCoin.setWorldPosition(worldPos)
        const tw = tween(flyCoin)
        tw.to(0.5, { worldPosition: this.coinItem.node.worldPosition }, { easing: 'sineOut' })
        tw.call(() => {
            if (isValid(flyCoin)) {
                flyCoin.destroy()
            }
        })
        tw.start()
    }

}


