bool TryGetFinalBinPath(IServiceProvider serviceProvider, Properties props, out string binPath) { while (true) { var useBinPath = (bool)props.Item(nameof(MDKOptions.UseManualGameBinPath)).Value; binPath = ((string)props.Item(nameof(MDKOptions.GameBinPath))?.Value)?.Trim() ?? ""; if (!useBinPath || binPath == "") { binPath = _spaceEngineers.GetInstallPath("Bin64"); if (binPath == null) { // We don't have a path. Just exit, let the dialog take care of it return(true); } } var binDirectory = new DirectoryInfo(binPath); if (!binDirectory.Exists) { // We have a configured path, but it fails. var res = VsShellUtilities.ShowMessageBox(serviceProvider, Text.IngameScriptWizard_TryGetFinalBinPath_SEBinPathNotFoundDescription, Text.IngameScriptWizard_TryGetFinalBinPath_SEBinPathNotFound, OLEMSGICON.OLEMSGICON_CRITICAL, OLEMSGBUTTON.OLEMSGBUTTON_RETRYCANCEL, OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_SECOND); if (res == 4) { continue; } binPath = null; return(false); } binPath = binDirectory.ToString().TrimEnd('\\'); return(true); } }
/// <summary> /// Creates an instance of <see cref="MDKOptions" /> /// </summary> public MDKOptions() { _spaceEngineers = new SpaceEngineers(); ((MDKOptionsControl)Child).Options = this; _gameBinPath = _spaceEngineers.GetInstallPath("Bin64"); _outputPath = _spaceEngineers.GetDataPath("IngameScripts", "local"); }
public static async Task Update(string whitelistCacheFileName, string output) { var api = await LoadAsync(whitelistCacheFileName); var spaceEngineers = new SpaceEngineers(); var typeDefinitions = await TypeDefinitions.LoadAsync(spaceEngineers.GetInstallPath("Content\\Data")); await api.SaveAsync(typeDefinitions, output); }
public SpaceEngineersText() { var spaceEngineers = new SpaceEngineers(); var document = XDocument.Load(spaceEngineers.GetInstallPath(@"Content\Data\Localization\MyTexts.resx")); var stringElements = document.XPathSelectElements(@"root/data"); foreach (var element in stringElements) { _texts[(string)element.Attribute("name")] = (string)element.Element("value"); } }
public async Task Scan(string whitelistCacheFileName) { await Task.Run(() => { var whitelist = Whitelist.Load(whitelistCacheFileName); var spaceEngineers = new SpaceEngineers(); var installPath = Path.Combine(spaceEngineers.GetInstallPath(), "bin64"); MDKUtilityFramework.Load(installPath); var dllFiles = Directory.EnumerateFiles(installPath, "*.dll", SearchOption.TopDirectoryOnly) .ToList(); foreach (var dllFile in dllFiles) { Visit(whitelist, dllFile); } foreach (var assemblyGroup in _members.GroupBy(m => m.DeclaringType.Assembly)) { var assemblyPath = new Uri(assemblyGroup.Key.CodeBase).LocalPath; var xmlFileName = Path.ChangeExtension(assemblyPath, "xml"); XDocument documentation; if (File.Exists(xmlFileName)) { documentation = XDocument.Load(xmlFileName); } else { documentation = null; } foreach (var typeGroup in assemblyGroup.GroupBy(m => m.DeclaringType)) { var typeEntry = ApiEntry.Create(typeGroup.Key, documentation); _entries.Add(typeEntry); foreach (var member in typeGroup) { var entry = ApiEntry.Create(member, documentation); _entries.Add(entry); } } } foreach (var entry in _entries) { entry.ResolveLinks(_entries); } }); }
public static async Task <ProgrammableBlockApi> LoadAsync(string whitelistCacheFileName) { var api = new ProgrammableBlockApi(); await Task.Run(() => { var members = new List <MemberInfo>(); var spaceEngineers = new SpaceEngineers(); var installPath = Path.Combine(spaceEngineers.GetInstallPath(), "bin64"); MDKUtilityFramework.Load(installPath); var dllFiles = Directory.EnumerateFiles(installPath, "*.dll", SearchOption.TopDirectoryOnly) .ToList(); foreach (var file in dllFiles) { LoadAssembly(file); } //var assemblies = dllFiles.Select(LoadAssembly).Where(a => a != null).ToList(); var assemblies = AppDomain.CurrentDomain.GetAssemblies().ToList(); var whitelist = Whitelist.Load(whitelistCacheFileName); api._whitelist = whitelist; foreach (var assembly in assemblies) { Visit(whitelist, assembly, members); } // Hack. I'm getting duplicated entries and atm I cannot be bothered to do a proper check // for why... var visitedMembers = new HashSet <MemberInfo>(); foreach (var assemblyGroup in members.GroupBy(m => m.GetAssembly())) { foreach (var typeGroup in assemblyGroup.GroupBy(m => m.DeclaringType)) { if (typeGroup.Key == null) { foreach (var type in typeGroup) { var entry = api.GetEntry(type); if (!api._entries.Contains(entry)) { api._entries.Add(entry); } } continue; } var typeEntry = api.GetEntry(typeGroup.Key); if (typeEntry != null) { if (!visitedMembers.Add(typeEntry.Member)) { continue; } if (!api._entries.Contains(typeEntry)) { api._entries.Add(typeEntry); } foreach (var member in typeGroup) { var entry = api.GetEntry(member); if (entry != null) { if (!visitedMembers.Add(member)) { continue; } api._entries.Add(entry); } } } } } foreach (var entry in api.Entries) { entry.ResolveLinks(); } }); return(api); }