Reference Source

src/toolbar/FirstPersonMode.js

  1. import {Controller} from "../Controller.js";
  2.  
  3. /** @private */
  4. class FirstPersonMode extends Controller {
  5.  
  6. constructor(parent, cfg) {
  7.  
  8. super(parent, cfg);
  9.  
  10. if (!cfg.buttonElement) {
  11. throw "Missing config: buttonElement";
  12. }
  13.  
  14. const buttonElement = cfg.buttonElement;
  15. const cameraControl = this.viewer.cameraControl;
  16. const cameraControlNavModeMediator = cfg.cameraControlNavModeMediator;
  17.  
  18. cameraControl.navMode = "orbit";
  19. cameraControl.followPointer = true;
  20.  
  21. this.on("enabled", (enabled) => {
  22. if (!enabled) {
  23. buttonElement.classList.add("disabled");
  24. } else {
  25. buttonElement.classList.remove("disabled");
  26. }
  27. });
  28.  
  29. this.on("active", (active) => {
  30. if (active) {
  31. buttonElement.classList.add("active");
  32. } else {
  33. buttonElement.classList.remove("active");
  34. }
  35. });
  36.  
  37. this.on("active", (active) => {
  38. cameraControlNavModeMediator.setFirstPersonModeActive(active);
  39. if (active) {
  40. cameraControl.followPointer = true;
  41. cameraControl.pivoting = false;
  42. } else {
  43. cameraControl.pivoting = true;
  44. }
  45. });
  46.  
  47. buttonElement.addEventListener("click", (event) => {
  48. if (this.getEnabled()) {
  49. const active = this.getActive();
  50. this.setActive(!active);
  51. }
  52. event.preventDefault();
  53. });
  54.  
  55. this.bimViewer.on("reset", ()=>{
  56. this.setActive(false);
  57. });
  58. }
  59. }
  60.  
  61. export {FirstPersonMode};