async optionsReaction() {
        const aList = this.buildMutatedOptionList();
        this._optionsReactor.clear();
	    const l = aList.length;
        const o = this._options;
        const SHADING = o.shading;
	    for (let i = 0; i < l; ++i) {
	        let opt = aList[i];
	        switch (opt) {

                case 'screen.height':
                case 'screen.width':
                    if (!this._renderCanvas) {
                        this._renderCanvas = CanvasHelper.createCanvas(o.screen.width, o.screen.height);
                    }
                    this._renderCanvas.width = o.screen.width;
                    this._renderCanvas.height = o.screen.height;
                    this._offsetTop = (o.screen.width - o.screen.height) >>> 1;
                    this._renderContext = this._renderCanvas.getContext('2d');
                    this.adaptFocal();
                    CanvasHelper.setImageSmoothing(this._renderCanvas, o.textures.smooth);
                    this.transmitOptionToStorey(opt);
                    this.connectStoreyProperties();
                    break;

                case 'screen.focal':
                    this.transmitOptionToStorey(opt);
                    break;

                case 'metrics.spacing':
                case 'metrics.height':
                    this.transmitOptionToStorey(opt);
                    break;


                case 'shading.factor':
                    this.transmitOptionToStorey('shading.factor');
                    break;

                case 'shading-settings':
                    this.setShadingSettings(
                        SHADING.shades,
                        SHADING.color,
                        SHADING.filter,
                        SHADING.brightness
                    );
                    //this.transmitOptionToStorey(opt);
                    break;

                case 'textures.files.walls':
                    if (o.textures.files.walls !== '') {
                        const wallImage = await CanvasHelper.loadCanvas(o.textures.files.walls);
                        this.setWallTextures(wallImage);
                        this.setWallShadingSettings(
                            SHADING.shades,
                            SHADING.color,
                            SHADING.filter,
                            SHADING.brightness
                        );
                    }
                    break;

                case 'textures.files.flats':
                    if (o.textures.files.flats !== '') {
                        const flatImage = await CanvasHelper.loadCanvas(o.textures.files.flats);
                        this.setFlatTextures(flatImage);
                        this.setFlatShadingSettings(
                            SHADING.shades,
                            SHADING.color,
                            SHADING.filter,
                            SHADING.brightness
                        );
                    }
                    break;

                case 'textures.files.background':
                    if (o.textures.files.background !== '') {
                        const bgImage = await CanvasHelper.loadCanvas(o.textures.files.background);
                        this.setBackground(bgImage);
                    }
                    break;

                case 'textures.stretch':
                    this.transmitOptionToStorey(opt);
                    break;
            }
        }
    }
/**
     * reads the mutations that occurs on the option object
     * and recomputes that need to be recomputed
     */
reads the mutations that occurs on the option object
and recomputes that need to be recomputed
reads the mutations that occurs on the option object and recomputes that need to be recomputed
async optionsReaction() {
        const aList = this.buildMutatedOptionList();
        this._optionsReactor.clear();
	    const l = aList.length;
        const o = this._options;
        const SHADING = o.shading;
	    for (let i = 0; i < l; ++i) {
	        let opt = aList[i];
	        switch (opt) {
                case 'screen.height':
                case 'screen.width':
                    if (!this._renderCanvas) {
                        this._renderCanvas = CanvasHelper.createCanvas(o.screen.width, o.screen.height);
                    }
                    this._renderCanvas.width = o.screen.width;
                    this._renderCanvas.height = o.screen.height;
                    this._offsetTop = (o.screen.width - o.screen.height) >>> 1;
                    this._renderContext = this._renderCanvas.getContext('2d');
                    this.adaptFocal();
                    CanvasHelper.setImageSmoothing(this._renderCanvas, o.textures.smooth);
                    this.transmitOptionToStorey(opt);
                    this.connectStoreyProperties();
                    break;
                case 'screen.focal':
                    this.transmitOptionToStorey(opt);
                    break;
                case 'metrics.spacing':
                case 'metrics.height':
                    this.transmitOptionToStorey(opt);
                    break;
                case 'shading.factor':
                    this.transmitOptionToStorey('shading.factor');
                    break;
                case 'shading-settings':
                    this.setShadingSettings(
                        SHADING.shades,
                        SHADING.color,
                        SHADING.filter,
                        SHADING.brightness
                    );
                    break;
                case 'textures.files.walls':
                    if (o.textures.files.walls !== '') {
                        const wallImage = await CanvasHelper.loadCanvas(o.textures.files.walls);
                        this.setWallTextures(wallImage);
                        this.setWallShadingSettings(
                            SHADING.shades,
                            SHADING.color,
                            SHADING.filter,
                            SHADING.brightness
                        );
                    }
                    break;
                case 'textures.files.flats':
                    if (o.textures.files.flats !== '') {
                        const flatImage = await CanvasHelper.loadCanvas(o.textures.files.flats);
                        this.setFlatTextures(flatImage);
                        this.setFlatShadingSettings(
                            SHADING.shades,
                            SHADING.color,
                            SHADING.filter,
                            SHADING.brightness
                        );
                    }
                    break;
                case 'textures.files.background':
                    if (o.textures.files.background !== '') {
                        const bgImage = await CanvasHelper.loadCanvas(o.textures.files.background);
                        this.setBackground(bgImage);
                    }
                    break;
                case 'textures.stretch':
                    this.transmitOptionToStorey(opt);
                    break;
            }
        }
    }
async optionsReaction ( ) { const aList = this . buildMutatedOptionList ( ) ; this . _optionsReactor . clear ( ) ; const l = aList . length ; const o = this . _options ; const SHADING = o . shading ; for ( let i = 0 ; i < l ; ++ i ) { let opt = aList [ i ] ; switch ( opt ) { case 'screen.height' : case 'screen.width' : if ( ! this . _renderCanvas ) { this . _renderCanvas = CanvasHelper . createCanvas ( o . screen . width , o . screen . height ) ; } this . _renderCanvas . width = o . screen . width ; this . _renderCanvas . height = o . screen . height ; this . _offsetTop = ( o . screen . width - o . screen . height ) >>> 1 ; this . _renderContext = this . _renderCanvas . getContext ( '2d' ) ; this . adaptFocal ( ) ; CanvasHelper . setImageSmoothing ( this . _renderCanvas , o . textures . smooth ) ; this . transmitOptionToStorey ( opt ) ; this . connectStoreyProperties ( ) ; break ; case 'screen.focal' : this . transmitOptionToStorey ( opt ) ; break ; case 'metrics.spacing' : case 'metrics.height' : this . transmitOptionToStorey ( opt ) ; break ; case 'shading.factor' : this . transmitOptionToStorey ( 'shading.factor' ) ; break ; case 'shading-settings' : this . setShadingSettings ( SHADING . shades , SHADING . color , SHADING . filter , SHADING . brightness ) ; break ; case 'textures.files.walls' : if ( o . textures . files . walls !== '' ) { const wallImage = await CanvasHelper . loadCanvas ( o . textures . files . walls ) ; this . setWallTextures ( wallImage ) ; this . setWallShadingSettings ( SHADING . shades , SHADING . color , SHADING . filter , SHADING . brightness ) ; } break ; case 'textures.files.flats' : if ( o . textures . files . flats !== '' ) { const flatImage = await CanvasHelper . loadCanvas ( o . textures . files . flats ) ; this . setFlatTextures ( flatImage ) ; this . setFlatShadingSettings ( SHADING . shades , SHADING . color , SHADING . filter , SHADING . brightness ) ; } break ; case 'textures.files.background' : if ( o . textures . files . background !== '' ) { const bgImage = await CanvasHelper . loadCanvas ( o . textures . files . background ) ; this . setBackground ( bgImage ) ; } break ; case 'textures.stretch' : this . transmitOptionToStorey ( opt ) ; break ; } } }
reads the mutations that occurs on the option object
 and recomputes that need to be recomputed
reads the mutations that occurs on the option object and recomputes that need to be recomputed
//this.transmitOptionToStorey(opt);