viewerManager.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import { Observable } from 'babylonjs';
  2. import { AbstractViewer } from './viewer';
  3. class ViewerManager {
  4. private viewers: { [key: string]: AbstractViewer };
  5. public onViewerAdded: (viewer: AbstractViewer) => void;
  6. public onViewerAddedObservable: Observable<AbstractViewer>;
  7. constructor() {
  8. this.viewers = {};
  9. this.onViewerAddedObservable = new Observable();
  10. }
  11. public addViewer(viewer: AbstractViewer) {
  12. this.viewers[viewer.getBaseId()] = viewer;
  13. this._onViewerAdded(viewer);
  14. }
  15. public getViewerById(id: string): AbstractViewer {
  16. return this.viewers[id];
  17. }
  18. public getViewerByHTMLElement(element: HTMLElement) {
  19. for (let id in this.viewers) {
  20. if (this.viewers[id].containerElement === element) {
  21. return this.getViewerById(id);
  22. }
  23. }
  24. }
  25. public getViewerPromiseById(id: string): Promise<AbstractViewer> {
  26. return new Promise((resolve, reject) => {
  27. let viewerFunction = (viewer: AbstractViewer) => {
  28. if (viewer.getBaseId() === id) {
  29. resolve(viewer);
  30. this.onViewerAddedObservable.removeCallback(viewerFunction);
  31. }
  32. }
  33. this.onViewerAddedObservable.add(viewerFunction);
  34. });
  35. }
  36. private _onViewerAdded(viewer: AbstractViewer) {
  37. this.onViewerAdded && this.onViewerAdded(viewer);
  38. this.onViewerAddedObservable.notifyObservers(viewer);
  39. }
  40. }
  41. export let viewerManager = new ViewerManager();