示例#1
0
        public static Computer LoadComputer(string filename, bool preventAddingToNetmap = false, bool preventInitDaemons = false)
        {
            filename = LocalizedFileLoader.GetLocalizedFilepath(filename);

            os = OS.currentInstance;

            executor.SetText(filename, true);

            holder = new ComputerHolder();

            foreach (var custom in CustomExecutors)
            {
                var customInstance = (ComputerExecutor)Activator.CreateInstance(custom.ExecutorType);
                customInstance.Init(os, ref holder);
                executor.RegisterTempExecutor(custom.Element, customInstance.Execute, custom.Options);
            }

            foreach (var customDaemon in DaemonManager.CustomDaemons)
            {
                executor.RegisterTempExecutor("Computer." + customDaemon.Name, (exec, info) =>
                {
                    DaemonManager.TryLoadCustomDaemon(info, comp, os);
                });
            }

            if (!executor.TryParse(out var ex))
            {
                throw new FormatException($"{filename}: {ex.Message}", ex);
            }

            var ret = comp;

            comp = null;

            if (ret == null)
            {
                return(null);
            }

            if (!preventInitDaemons)
            {
                ret.initDaemons();
            }
            if (!preventAddingToNetmap)
            {
                os.netMap.nodes.Add(ret);
                eos?.links.Add(os.netMap.nodes.Count - 1);
            }

            os     = null;
            eos    = null;
            holder = null;

            return(ret);
        }
 public virtual void Init(OS os, ref ComputerHolder comp)
 {
     Os    = os;
     _comp = comp;
 }