import { _decorator, Component, instantiate, Node, Prefab } from 'cc';
import { JNFrameInfo, JNSyncFrameEvent } from '../../extensions/ngame/assets/ngame/sync/frame/JNSyncFrame';
import { app } from './App';
import { JNSyncAction } from '../../extensions/ngame/assets/ngame/sync/JNSyncAction';
import { Camera } from 'cc';
const { ccclass, property } = _decorator;

@ccclass('WorldCanvas')
export class WorldCanvas extends Component {

    @property(Node)
    root:Node = null;
    @property(Camera)
    camera:Camera = null;
    
    @property(Prefab)
    prefab:Prefab = null;

    async onLoad(){

        //重置相机位置
        this.camera.node.setWorldPosition(0,0,1000);

        //监听帧同步
        app.event.on(JNSyncFrameEvent.CLEAR,this.clear,this);
        app.event.on(JNSyncFrameEvent.CREATE,this.create,this);
        
        //监听帧回调
        app.socket.on(JNSyncAction.NSyncFrameBack,this.onFrameBack,this,"JNFrameInfo");

        app.sync.onReset();
        app.sync.onStart();

    }

    //清除世界
    clear(){
        this.root.removeAllChildren();
    }

    //创建世界
    create(){
        this.root.addChild(instantiate(this.prefab))
        this.scheduleOnce(() => {
            app.sync.onStart();
        });
    }

    update(deltaTime: number) {
        app.sync.update(deltaTime);
    }

    onFrameBack(info:JNFrameInfo){
        app.sync.addFrame(info,true);
    }
}