Gibbed Travel code


SUBMITTED BY: Guest

DATE: July 29, 2014, 12:18 p.m.

FORMAT: C#

SIZE: 6.2 kB

HITS: 9162

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. namespace Gibbed.Borderlands2.GameInfo.Loaders
  5. {
  6. internal static class TravelStationDefinitionLoader
  7. {
  8. public static InfoDictionary<TravelStationDefinition> Load(
  9. InfoDictionary<DownloadableContentDefinition> downloadableContents)
  10. {
  11. try
  12. {
  13. var raws = LoaderHelper
  14. .DeserializeJson<Dictionary<string, Raw.TravelStationDefinition>>("Travel Stations");
  15. var defs = new InfoDictionary<TravelStationDefinition>(
  16. raws.ToDictionary(kv => kv.Key,
  17. kv => GetTravelStationDefinition(downloadableContents, kv)));
  18. foreach (var kv in raws.Where(kv => string.IsNullOrEmpty(kv.Value.PreviousStation) == false))
  19. {
  20. if (defs.ContainsKey(kv.Value.PreviousStation) == false)
  21. {
  22. throw ResourceNotFoundException.Create("travel station", kv.Value.PreviousStation);
  23. }
  24. defs[kv.Key].PreviousStation = defs[kv.Value.PreviousStation];
  25. }
  26. foreach (var kv in raws
  27. .Where(
  28. kv =>
  29. (kv.Value is Raw.LevelTravelStationDefinition) &&
  30. string.IsNullOrEmpty(((Raw.LevelTravelStationDefinition)kv.Value).DestinationStation) == false))
  31. {
  32. var rawLevelTravelStation = (Raw.LevelTravelStationDefinition)kv.Value;
  33. if (defs.ContainsKey(rawLevelTravelStation.DestinationStation) == false)
  34. {
  35. throw ResourceNotFoundException.Create("level travel station",
  36. rawLevelTravelStation.DestinationStation);
  37. }
  38. var levelTravelStation = (LevelTravelStationDefinition)defs[kv.Key];
  39. levelTravelStation.DestinationStation =
  40. (LevelTravelStationDefinition)defs[rawLevelTravelStation.DestinationStation];
  41. }
  42. return defs;
  43. }
  44. catch (Exception e)
  45. {
  46. throw new InfoLoadException("failed to load travel stations", e);
  47. }
  48. }
  49. private static TravelStationDefinition GetTravelStationDefinition(
  50. InfoDictionary<DownloadableContentDefinition> downloadableContents,
  51. KeyValuePair<string, Raw.TravelStationDefinition> kv)
  52. {
  53. DownloadableContentDefinition dlcExpansion = null;
  54. if (string.IsNullOrEmpty(kv.Value.DLCExpansion) == false)
  55. {
  56. if (downloadableContents.ContainsKey(kv.Value.DLCExpansion) == false)
  57. {
  58. throw ResourceNotFoundException.Create("downloadable content", kv.Value.DLCExpansion);
  59. }
  60. dlcExpansion = downloadableContents[kv.Value.DLCExpansion];
  61. }
  62. if (kv.Value is Raw.FastTravelStationDefinition)
  63. {
  64. return GetFastTravelStationDefinition(dlcExpansion, kv);
  65. }
  66. if (kv.Value is Raw.LevelTravelStationDefinition)
  67. {
  68. return GetLevelTravelStationDefinition(dlcExpansion, kv);
  69. }
  70. throw new InvalidOperationException();
  71. }
  72. private static TravelStationDefinition GetFastTravelStationDefinition(
  73. DownloadableContentDefinition dlcExpansion, KeyValuePair<string, Raw.TravelStationDefinition> kv)
  74. {
  75. var raw = (Raw.FastTravelStationDefinition)kv.Value;
  76. return new FastTravelStationDefinition()
  77. {
  78. ResourcePath = kv.Key,
  79. ResourceName = raw.ResourceName,
  80. LevelName = raw.LevelName,
  81. DLCExpansion = dlcExpansion,
  82. StationDisplayName = raw.StationDisplayName,
  83. MissionDependencies = GetMissionStatusData(raw.MissionDependencies),
  84. InitiallyActive = raw.InitiallyActive,
  85. SendOnly = raw.SendOnly,
  86. Description = raw.Description,
  87. Sign = raw.Sign,
  88. InaccessibleObjective = raw.InaccessibleObjective,
  89. AccessibleObjective = raw.AccessibleObjective,
  90. };
  91. }
  92. private static TravelStationDefinition GetLevelTravelStationDefinition(
  93. DownloadableContentDefinition dlcExpansion, KeyValuePair<string, Raw.TravelStationDefinition> kv)
  94. {
  95. var raw = (Raw.LevelTravelStationDefinition)kv.Value;
  96. return new LevelTravelStationDefinition()
  97. {
  98. ResourcePath = kv.Key,
  99. ResourceName = raw.ResourceName,
  100. LevelName = raw.LevelName,
  101. DLCExpansion = dlcExpansion,
  102. StationDisplayName = raw.StationDisplayName,
  103. MissionDependencies = GetMissionStatusData(kv.Value.MissionDependencies),
  104. };
  105. }
  106. private static List<MissionStatusData> GetMissionStatusData(IEnumerable<Raw.MissionStatusData> raws)
  107. {
  108. if (raws == null)
  109. {
  110. return null;
  111. }
  112. return raws.Select(raw => new MissionStatusData()
  113. {
  114. MissionDefinition = raw.MissionDefinition,
  115. MissionStatus = raw.MissionStatus,
  116. IsObjectiveSpecific = raw.IsObjectiveSpecific,
  117. ObjectiveDefinition = raw.ObjectiveDefinition,
  118. ObjectiveStatus = raw.ObjectiveStatus,
  119. }).ToList();
  120. }
  121. }
  122. }

comments powered by Disqus