import { SimulationRenderer } from '../../simulationRenderer/classes/SimulationRenderer' import { Gate, PinWrapper } from '../../simulation/classes/Gate' import { GateState, TransformState, RendererState, CameraState, SimulationState, WireState, WireLimit } from '../types/SimulationSave' import { Transform } from '../../../common/math/classes/Transform' import { Camera } from '../../simulationRenderer/classes/Camera' import { Simulation } from '../../simulation/classes/Simulation' import { Wire } from '../../simulation/classes/Wire' export const getTransformState = (transform: Transform): TransformState => { return { position: transform.position, rotation: transform.rotation, scale: transform.scale } } export const getCameraState = (camera: Camera): CameraState => { return { transform: getTransformState(camera.transform) } } export const getWireLimit = (pin: PinWrapper): WireLimit => { return { id: pin.value.gate.id, index: pin.index, total: pin.total } } export const getWireState = (wire: Wire): WireState => { return { from: getWireLimit(wire.start), to: getWireLimit(wire.end), id: wire.id } } export const getSimulationState = (simulation: Simulation): SimulationState => { return { gates: Array.from(simulation.gates).map(getGateState), wires: simulation.wires.map(getWireState), mode: simulation.mode } } export const getGateState = (gate: Gate): GateState => { return { id: gate.id, template: gate.template.metadata.name, transform: getTransformState(gate.transform) } } export const getRendererState = ( renderer: SimulationRenderer ): RendererState => { return { camera: getCameraState(renderer.camera), simulation: getSimulationState(renderer.simulation) } }