Exemplo n.º 1
0
        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);
        }