import { _decorator, Component, Node, Camera, find } from 'cc';
import { Msg } from '../../core/msg/msg';
import { UtilNode } from '../../core/util/util';
import { StaticOcclusionCulling } from '../../../../extensions/pipeline/pipeline/components/occlusion-culling/static/static-occlusion-culling';
const { ccclass, property } = _decorator;

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


    @property
    msg = "msg_set_camera";

    _cameraNode:Node | undefined;

    _camera:Camera | undefined;

    start() {

        Msg.bind(this.msg, this.setCamera, this);
        this._cameraNode = this.node.children[0];
        this._camera = this._cameraNode.getComponent(Camera)!;

    }

    setCamera(active:boolean) {
        this._cameraNode!.active = active;
        if(active) {
            const culling = find('static-occlusion-culling');
            if (culling === undefined || culling === null) {
                console.warn(`Can not find static-occlusion-culling.`);
                return;
            }
            const occlusionCulling = culling.getComponent(StaticOcclusionCulling);
            if(occlusionCulling === null) throw new Error(`culling node not find 'StaticOcclusionCulling'`);

            if(this._camera)
                occlusionCulling.camera = this._camera;
        }

    }
}