serializationTools.ts 1.9 KB

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