Source: components/CameraControlEventDispatcherComponent.js

import { BaseComponent } from './BaseComponent';
import { EventType } from '../const';

const cEnableViewportTag = '__cEnableViewportTag__';

/**
 * @class CameraControlEventDispatcherComponent
 * The camera controller event dispatcher component.
 * @memberof THING
 * @extends THING.BaseComponent
 */
class CameraControlEventDispatcherComponent extends BaseComponent {

	/**
	 * The controller to manage event dispatch.
	 */
	constructor() {
		super();
	}

	// #region BaseComponent Interface

	// #endregion

	get enable() {
		return this.object.hasEvent(EventType.EnableViewport, cEnableViewportTag);
	}
	set enable(value) {
		if (value) {
			// Stop controller when camera disable render to viewport
			this.object.on(EventType.EnableViewport, (ev) => {
				let stateGroup = this.object.control.stateGroup;

				if (ev.value) {
					stateGroup.enable(true, 'changeCamera');
				}
				else {
					stateGroup.enable(false, 'changeCamera', 100000);
				}
			}, cEnableViewportTag);
		}
		else {
			this.object.off(EventType.EnableViewport, cEnableViewportTag);
		}
	}

}

export { CameraControlEventDispatcherComponent }