# src/toolbar/FirstPersonMode.js

    import {Controller} from "../Controller.js";

    /** @private */
    class FirstPersonMode extends Controller {

        constructor(parent, cfg) {

            super(parent, cfg);

            if (!cfg.buttonElement) {
                throw "Missing config: buttonElement";
            }

            const buttonElement = cfg.buttonElement;
            const cameraControl = this.viewer.cameraControl;
            const cameraControlNavModeMediator = cfg.cameraControlNavModeMediator;

            cameraControl.navMode = "orbit";
            cameraControl.followPointer = true;

            this.on("enabled", (enabled) => {
                if (!enabled) {
                    buttonElement.classList.add("disabled");
                } else {
                    buttonElement.classList.remove("disabled");
                }
            });

            this.on("active", (active) => {
                if (active) {
                    buttonElement.classList.add("active");
                } else {
                    buttonElement.classList.remove("active");
                }
            });

            this.on("active", (active) => {
                cameraControlNavModeMediator.setFirstPersonModeActive(active);
                if (active) {
                    cameraControl.followPointer = true;
                    cameraControl.pivoting = false;
                } else {
                    cameraControl.pivoting = true;
                }
            });

            buttonElement.addEventListener("click", (event) => {
                if (this.getEnabled()) {
                    const active = this.getActive();
                    this.setActive(!active);
                }
                event.preventDefault();
            });

            this.bimViewer.on("reset", ()=>{
                this.setActive(false);
            });
        }
    }

    export {FirstPersonMode};