serializationTools.ts 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import { NodeMaterial } from 'babylonjs/Materials/Node/nodeMaterial';
  2. import { GlobalState } from './globalState';
  3. import { Texture } from 'babylonjs/Materials/Textures/texture';
  4. import { DataStorage } from 'babylonjs/Misc/dataStorage';
  5. import { NodeMaterialBlock } from 'babylonjs/Materials/Node/nodeMaterialBlock';
  6. import { NodeMaterialModes } from 'babylonjs/Materials/Node/Enums/nodeMaterialModes';
  7. import { PreviewType } from './components/preview/previewType';
  8. export class SerializationTools {
  9. public static UpdateLocations(material: NodeMaterial, globalState: GlobalState) {
  10. material.editorData = {
  11. locations: []
  12. };
  13. // Store node locations
  14. for (var block of material.attachedBlocks) {
  15. let node = globalState.onGetNodeFromBlock(block);
  16. material.editorData.locations.push({
  17. blockId: block.uniqueId,
  18. x: node ? node.x : 0,
  19. y: node ? node.y : 0
  20. });
  21. }
  22. globalState.storeEditorData(material.editorData);
  23. }
  24. public static Serialize(material: NodeMaterial, globalState: GlobalState, selectedBlocks?: NodeMaterialBlock[]) {
  25. let bufferSerializationState = Texture.SerializeBuffers;
  26. Texture.SerializeBuffers = DataStorage.ReadBoolean("EmbedTextures", true);
  27. this.UpdateLocations(material, globalState);
  28. let serializationObject = material.serialize(selectedBlocks);
  29. Texture.SerializeBuffers = bufferSerializationState;
  30. return JSON.stringify(serializationObject, undefined, 2);
  31. }
  32. public static Deserialize(serializationObject: any, globalState: GlobalState) {
  33. globalState.onIsLoadingChanged.notifyObservers(true);
  34. globalState.nodeMaterial!.loadFromSerialization(serializationObject, "");
  35. }
  36. }