polygonjs-engine
Version:
node-based webgl 3D engine https://polygonjs.com
55 lines (48 loc) • 1.89 kB
text/typescript
import {Number2, Boolean2} from '../../../../types/GlobalTypes';
import {PolyScene} from '../../../scene/PolyScene';
import {CoreString} from '../../../../core/String';
import {NodeJsonExporterData, NodeJsonExporterUIData} from './Node';
import {JsonExportDispatcher} from './Dispatcher';
export interface SceneJsonExporterDataProperties {
frame: number;
frameRange: Number2;
frameRangeLocked: Boolean2;
realtimeState: boolean;
// fps: number;
masterCameraNodePath: string | null;
}
export interface SceneJsonExporterData {
properties?: SceneJsonExporterDataProperties;
root?: NodeJsonExporterData;
ui?: NodeJsonExporterUIData;
}
export class SceneJsonExporter {
private _data: SceneJsonExporterData = {};
constructor(private _scene: PolyScene) {}
data(): SceneJsonExporterData {
this._scene.nodesController.reset_node_context_signatures();
const root_exporter = JsonExportDispatcher.dispatch_node(this._scene.root());
const nodes_data = root_exporter.data();
const ui_data = root_exporter.ui_data();
this._data = {
// __js_version: this._scene.js_version(),
properties: {
// name: this._scene.name(), // this conflicts with saving the name from the admin page
frame: this._scene.frame() || 1,
frameRange: this._scene.frameRange(),
frameRangeLocked: this._scene.timeController.frameRangeLocked,
realtimeState: this._scene.timeController.realtimeState,
// fps: this._scene.time_controller.fps,
masterCameraNodePath: this._scene.camerasController.masterCameraNodePath(),
},
root: nodes_data,
ui: ui_data,
};
return this._data;
}
static sanitize_string(word: string): string {
word = word.replace(/'/g, "'"); // escapes ' (used to be with 2 /, but now only one to have Ian's Mediation saved and loaded correctly - but is actually 2 in Code Exporter)
word = CoreString.escapeLineBreaks(word);
return word;
}
}