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