UNPKG

polygonjs-engine

Version:

node-based webgl 3D engine https://polygonjs.com

55 lines (48 loc) 1.89 kB
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; } }