UnitFile.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. using System;
  2. using Newtonsoft.Json;
  3. using Newtonsoft.Json.Linq;
  4. using System.IO;
  5. using System.Text;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Diagnostics;
  9. namespace UnitEditor
  10. {
  11. public class UnitFile
  12. {
  13. private string m_filename;
  14. private List<string> m_renderables_names;
  15. private List<Renderable> m_renderables;
  16. private List<string> m_nodes_names;
  17. private List<Node> m_nodes;
  18. //------------------------------------------------------------------------------
  19. public UnitFile (string file_name)
  20. {
  21. Debug.Assert(File.Exists (file_name));
  22. m_filename = file_name;
  23. // Parse json file
  24. string json_string = string.Empty;
  25. JObject m_root;
  26. using (StreamReader streamReader = new StreamReader(file_name))
  27. {
  28. json_string = streamReader.ReadToEnd();
  29. m_root = JObject.Parse (json_string);
  30. }
  31. // Deserialize renderables
  32. JToken renderables_token = m_root ["renderables"];
  33. Dictionary<string, Renderable> renderables = JsonConvert.DeserializeObject<Dictionary<string, Renderable>>(renderables_token.ToString());
  34. m_renderables_names = new List<string> (renderables.Keys.ToArray ());
  35. m_renderables = new List<Renderable> (renderables.Values.ToArray ());
  36. // Deserialize Nodes
  37. JToken nodes_token = m_root ["nodes"];
  38. Dictionary<string, Node> nodes = JsonConvert.DeserializeObject<Dictionary<string, Node>> (nodes_token.ToString ());
  39. m_nodes_names = new List<string> (nodes.Keys.ToArray ());
  40. m_nodes = new List<Node> (nodes.Values.ToArray ());
  41. }
  42. //------------------------------------------------------------------------------
  43. public string[] renderables_names()
  44. {
  45. return m_renderables_names.ToArray ();
  46. }
  47. //------------------------------------------------------------------------------
  48. public Renderable[] renderables()
  49. {
  50. return m_renderables.ToArray ();
  51. }
  52. //------------------------------------------------------------------------------
  53. public string[] nodes_name()
  54. {
  55. return m_nodes_names.ToArray ();
  56. }
  57. //------------------------------------------------------------------------------
  58. public Node[] nodes()
  59. {
  60. return m_nodes.ToArray ();
  61. }
  62. //------------------------------------------------------------------------------
  63. public void save()
  64. {
  65. using (StreamWriter writer = new StreamWriter (m_filename))
  66. {
  67. string json_string = "{";
  68. json_string += "\"renderables\": {";
  69. for (int i = 0; i < m_renderables.Count; i++)
  70. {
  71. string renderables_token = string.Format ("\t\"{0}\" : {1}", m_renderables_names[i], JsonConvert.SerializeObject(m_renderables[i]));
  72. if (i < m_renderables.Count - 1)
  73. json_string += ",";
  74. json_string += renderables_token;
  75. }
  76. json_string += "},\n";
  77. json_string += "\"nodes\": {";
  78. for (int i = 0; i < m_nodes.Count; i++)
  79. {
  80. string nodes_token = string.Format ("\t\"{0}\" : {1}", m_nodes_names[i], JsonConvert.SerializeObject(m_nodes[i]));
  81. json_string += nodes_token;
  82. }
  83. json_string += "}";
  84. json_string += "}";
  85. writer.Write (json_string);
  86. }
  87. }
  88. }
  89. }