public static StaticDataStore GetStaticData(string dataDir) { StaticDataStore newStore = new StaticDataStore();//.Clone(); string curFileName = ""; JObject obj; //try { string dataDirectory = Path.Combine(Path.Combine(SerializationManager.GetWorkingDirectory(), DataDirectory), dataDir); // we start by looking for a version file, no version file, no load. // now we can move on to looking for json files: string[] jsonfiles = Directory.GetFiles(dataDirectory, "*.json"); string[] hjsonfiles = Directory.GetFiles(dataDirectory, "*.hjson"); if (jsonfiles.GetLength(0) < 1 && hjsonfiles.GetLength(0) < 1) { return(null); } foreach (string file in jsonfiles) { curFileName = file; obj = Load(file); StoreObject(obj, newStore); } foreach (string file in hjsonfiles) { curFileName = file; obj = Load(file); StoreObject(obj, newStore); } //Test the components formula for parsability List <Guid> badComponents = new List <Guid>(); foreach (var componentKVP in newStore.ComponentTemplates) { if (!ComponentParseCheck.IsParseable(componentKVP.Value, out var errors)) { badComponents.Add(componentKVP.Key); foreach (var error in errors) { StaticRefLib.EventLog.AddEvent(Event.NewComponentParseError(componentKVP.Value.Name, error)); } } } foreach (var componentID in badComponents) { newStore.ComponentTemplates.Remove(componentID); } } return(newStore); }
public static void LoadData(string dataDir, Game game) { StaticDataStore newStore = game.StaticData;//.Clone(); string curFileName = ""; JObject obj; try { string dataDirectory = Path.Combine(Path.Combine(SerializationManager.GetWorkingDirectory(), DataDirectory), dataDir); // we start by looking for a version file, no version file, no load. DataVersionInfo dataVInfo; if (CheckDataDirectoryVersion(dataDirectory, game.StaticData, out dataVInfo) == false) { throw new StaticDataLoadException("Static Data is explicitly incompatible with currently loaded data."); } // now we can move on to looking for json files: string[] files = Directory.GetFiles(dataDirectory, "*.json"); if (files.GetLength(0) < 1) { return; } foreach (string file in files) { curFileName = file; obj = Load(file); StoreObject(obj, newStore); } if (!newStore.LoadedDataSets.Contains(dataVInfo)) { newStore.LoadedDataSets.Add(dataVInfo); } newStore.SetStorageTypeMap(); //Test the components formula for parsability List <Guid> badComponents = new List <Guid>(); foreach (var componentKVP in newStore.ComponentTemplates) { if (!ComponentParseCheck.IsParseable(componentKVP.Value, out var errors)) { badComponents.Add(componentKVP.Key); foreach (var error in errors) { StaticRefLib.EventLog.AddEvent(Event.NewComponentParseError(componentKVP.Value.Name, error)); } } } foreach (var componentID in badComponents) { newStore.ComponentTemplates.Remove(componentID); } } catch (Exception e) { if (e.GetType() == typeof(JsonSerializationException) || e.GetType() == typeof(JsonReaderException)) { throw new StaticDataLoadException("Bad Json provided in directory: " + curFileName, e); } throw; // rethrow exception if not known ;) } }