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; }