public void LoadData(string dataDirectory, bool defaultToCompiled = true) { _dataDirectory = dataDirectory; LuaContext?.Dispose(); LuaContext = new Lua(); var dataSource = new JObject(); var files = Directory.GetFiles(dataDirectory, "*.*", SearchOption.AllDirectories); var jsonFinished = false; if (defaultToCompiled) { var compiledFile = files.FirstOrDefault(x => x.EndsWith("compiled.json")); if (compiledFile != null) { var source = File.ReadAllText(compiledFile); dataSource.Merge(JObject.Parse(source)); jsonFinished = true; } } foreach (string file in files) { var ext = Path.GetExtension(file); if (ext == ".lua") { LuaContext.DoFile(file); } else if (!jsonFinished && ext == ".json") { var text = File.ReadAllText(file); dataSource.Merge(JObject.Parse(text)); } } GameData = dataSource.ToObject <GameDataObject>(); foreach (var skillTree in GameData.TalentTrees) { skillTree.Hellforge = this; foreach (var node in skillTree.Nodes) { node.Graph = skillTree; } } foreach (var affix in GameData.Affixes) { if (!string.IsNullOrEmpty(affix.Inherits)) { var parent = GameData.Affixes.First(x => x.Name == affix.Inherits); if (parent != null) { affix.Inherit(parent); } } } }