1
0

Map.cs 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. using System.IO;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using YamlDotNet.Core;
  5. using Robust.Shared.Utility;
  6. using YamlDotNet.RepresentationModel;
  7. namespace Content.Tools
  8. {
  9. public sealed class Map
  10. {
  11. public Map(string path)
  12. {
  13. Path = path;
  14. using var reader = new StreamReader(path);
  15. var stream = new YamlStream();
  16. stream.Load(reader);
  17. Root = stream.Documents[0].RootNode;
  18. TilemapNode = (YamlMappingNode) Root["tilemap"];
  19. GridsNode = (YamlSequenceNode) Root["grids"];
  20. EntitiesNode = (YamlSequenceNode) Root["entities"];
  21. foreach (var entity in EntitiesNode)
  22. {
  23. var uid = uint.Parse(entity["uid"].AsString());
  24. if (uid >= NextAvailableEntityId)
  25. NextAvailableEntityId = uid + 1;
  26. Entities[uid] = (YamlMappingNode) entity;
  27. }
  28. }
  29. // Core
  30. public string Path { get; }
  31. public YamlNode Root { get; }
  32. // Useful
  33. public YamlMappingNode TilemapNode { get; }
  34. public YamlSequenceNode GridsNode { get; }
  35. // Entities lookup
  36. private YamlSequenceNode EntitiesNode { get; }
  37. public Dictionary<uint, YamlMappingNode> Entities { get; } = new Dictionary<uint, YamlMappingNode>();
  38. public uint MaxId => Entities.Max(entry => entry.Key);
  39. public uint NextAvailableEntityId { get; set; }
  40. // ----
  41. public void Save(string fileName)
  42. {
  43. // Update entities node
  44. EntitiesNode.Children.Clear();
  45. foreach (var kvp in Entities)
  46. EntitiesNode.Add(kvp.Value);
  47. using var writer = new StreamWriter(fileName);
  48. var document = new YamlDocument(Root);
  49. var stream = new YamlStream(document);
  50. var emitter = new Emitter(writer);
  51. var fixer = new TypeTagPreserver(emitter);
  52. stream.Save(fixer, false);
  53. writer.Flush();
  54. }
  55. public void Save()
  56. {
  57. Save(Path);
  58. }
  59. }
  60. }