serializationTools.ts 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  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 './dataStorage';
  5. export class SerializationTools {
  6. public static UpdateLocations(material: NodeMaterial, globalState: GlobalState) {
  7. material.editorData = {
  8. locations: []
  9. };
  10. // Store node locations
  11. for (var block of material.attachedBlocks) {
  12. let node = globalState.onGetNodeFromBlock(block);
  13. material.editorData.locations.push({
  14. blockId: block.uniqueId,
  15. x: node ? node.x : 0,
  16. y: node ? node.y : 0
  17. });
  18. }
  19. globalState.storeEditorData(material.editorData);
  20. }
  21. public static Serialize(material: NodeMaterial, globalState: GlobalState) {
  22. let bufferSerializationState = Texture.SerializeBuffers;
  23. Texture.SerializeBuffers = DataStorage.ReadBoolean("EmbedTextures", true);
  24. this.UpdateLocations(material, globalState);
  25. let serializationObject = material.serialize();
  26. Texture.SerializeBuffers = bufferSerializationState;
  27. return JSON.stringify(serializationObject, undefined, 2);
  28. }
  29. public static Deserialize(serializationObject:any, globalState: GlobalState) {
  30. globalState.onIsLoadingChanged.notifyObservers(true);
  31. globalState.nodeMaterial!.loadFromSerialization(serializationObject, "");
  32. globalState.onResetRequiredObservable.notifyObservers();
  33. }
  34. }