Source: scene/scene_manager.js


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 };