import { Group, PerspectiveCamera, Scene } from '../../node_modules/three/build/three.module.js';
import { Environment } from './environment.js';
// import { OrbitControls } from '';
import { InformationSource } from '../reporter/information_source.js';
import {
Reporter,
checkPropTypes,
WrappedImage,
BuildableComponent
} from '../main.js';
/** Scene manager */
class SceneManager extends InformationSource {
/**
* @param {Reporter} reporter
* @param {Object} settings
* @param {UUID} [settings.id]
* @param {Array<Environment>} [ settings.environments ]
*/
// * @param {Object} [settings.controls = OrbitControls]
constructor( reporter, settings ) {
super(reporter, settings);
checkPropTypes(
settings,
{
},
{
environments: val =>
Array.isArray(val) && val.every( env => env instanceof Environment )
}
);
if ( settings.environments != undefined ){
this._environments = settings.environments; // this._environments = [ defaultEnvironment, ...settings.environments];
this._scene.environment = settings.environments[0]._envMapEXR;
}
}
static basis = '+X+Y+Z';
/** @type {Scene} */
_scene = new Scene();
get scene() {
return this._scene;
}
/**
* List of actors. (A configurator is an actor)
* @type {Array<Actor>}
*/
actors = [];
/**
* @param {Actor} actor
*/
addActor(actor) {
this.report({ msg: `Adding ${actor.label}`, level: 'notice'});
this.actors.push(actor);
}
}
export { SceneManager };