private bool LoadFile(EngineScriptFile engineScriptFile) { if (File.Exists(engineScriptFile.FileFullName)) { try { string content = File.ReadAllText(engineScriptFile.FileFullName); _lua["_hg_chunk_"] = content; _lua["_hg_chunk_name_"] = engineScriptFile.FileName; _lua.DoString(@"_sandbox_.run(_hg_chunk_, _hg_chunk_name_, nil, _engine_, _engine_namespace_)"); _lua["_hg_chunk_"] = null; _lua["_hg_chunk_name_"] = null; } catch (Exception ex) { if (ex is LuaScriptException luaEx) { Logger.Log(luaEx.Message, LogLevel.Debug); } Logger.LogException(ex); return(false); } finally { _lua["_hg_chunk_"] = null; _lua["_hg_chunk_name_"] = null; } return(true); } return(false); }
public static EngineScript LoadEngineScript(DirectoryInfo dirInfo) { EngineScript engineScript = null; foreach (FileInfo fileInfo in dirInfo.GetFiles("*.toc", SearchOption.TopDirectoryOnly)) { string filename = Path.GetFileNameWithoutExtension(fileInfo.Name); if (filename == dirInfo.Name) { string fileRelativePath = Path.Combine(dirInfo.Name, fileInfo.Name); engineScript = new EngineScript { Name = filename }; var engineScriptFile = new EngineScriptFile { FileName = fileRelativePath, FileFullName = fileInfo.FullName, IsToc = true }; engineScript.Files.Add(engineScriptFile); List <string> tocContent = File.ReadAllLines(fileInfo.FullName).ToList(); foreach (string line in tocContent) { string trimmedLine = line.Trim(); if (trimmedLine.StartsWith("##")) { if (TocReadValue(trimmedLine, "## Title:", out var value)) { engineScript.Title = value; continue; } if (TocReadValue(trimmedLine, "## Author:", out value)) { engineScript.Author = value; continue; } if (TocReadValue(trimmedLine, "## Description:", out value)) { if (!string.IsNullOrEmpty(engineScript.Description)) { engineScript.Description += Environment.NewLine; } engineScript.Description += value; continue; } } if (!string.IsNullOrEmpty(trimmedLine) && !trimmedLine.StartsWith("##") && trimmedLine.EndsWith(".lua")) { fileRelativePath = Path.Combine(dirInfo.Name, trimmedLine); string fileFullPath = Path.Combine(dirInfo.FullName, trimmedLine); engineScriptFile = new EngineScriptFile { FileName = fileRelativePath, FileFullName = fileFullPath, IsToc = false }; engineScript.Files.Add(engineScriptFile); } } break; // only one toc file per profile engine } } return(engineScript); }