public void UpdateDependenciesRecursive(PhactoryHost.Database.Resource resource, List <PhactoryHost.Database.Resource> resourceDependencies) { App.Controller.View.AppDoEvents(); if (resource == null) { return; } string filename = resource.RelativePath; string extension = Helper.StringHelper.GetFileExtension(filename); FileInfo resourceFileInfo = Helper.StringHelper.GetFileInfo(resource); if (resourceFileInfo.LastWriteTime > resource.LastWriteTime) { resource.LastWriteTime = resourceFileInfo.LastWriteTime; PhactoryHost.CompilerPlugin compiler = App.Controller.PluginManager.GetCompiler(extension); if (compiler != null) { compiler.UpdateDependencies(resource); } } foreach (int resourceDependencyId in resource.IdDependencies) { PhactoryHost.Database.Resource resourceDependency = App.Controller.Entities.GetResource(resourceDependencyId); if (!resourceDependencies.Contains(resourceDependency)) { resourceDependencies.Add(resourceDependency); } UpdateDependenciesRecursive(resourceDependency, resourceDependencies); } }
private bool CompileResource(PhactoryHost.Database.Resource resource) { if (App.Controller.UserConfig.VerboseOutput == false) { if (resource.IdOutputs.Count == 1) { PhactoryHost.Database.Resource outputResource = App.Controller.Entities.GetResource(resource.IdOutputs[0]); if (outputResource.Id != App.Controller.Entities.StartupResourceId) { if (App.Controller.PluginManager.Host.IsResourceReferencedByOtherResources(outputResource).Count == 0) { // simply skip compilation return(true); } } } } string filename = resource.RelativePath; string extension = Helper.StringHelper.GetFileExtension(filename); PhactoryHost.CompilerPlugin compiler = App.Controller.PluginManager.GetCompiler(extension); if (compiler == null) { if (App.Controller.UserConfig.VerboseOutput) { App.Controller.Log.Append(resource.DisplayName + " (skipped)"); } return(true); } bool showInLog = true; string typeInfo = ""; if (resource.IsIncludeResource) { typeInfo += " (include resource)"; showInLog = App.Controller.UserConfig.VerboseOutput; } if (resource.IsOutputResource) { typeInfo += " (output resource)"; showInLog = App.Controller.UserConfig.VerboseOutput; } if (showInLog) { App.Controller.Log.Append(resource.DisplayName + typeInfo); } App.Controller.View.AppDoEvents(); return(compiler.Compile(resource)); }
public List <PhactoryHost.CompilerPlugin> GetPluginCompilers() { List <PhactoryHost.CompilerPlugin> pluginCompilers = new List <PhactoryHost.CompilerPlugin>(); foreach (PhactoryHost.Plugin plugin in plugins) { PhactoryHost.CompilerPlugin pluginCompiler = plugin as PhactoryHost.CompilerPlugin; if (pluginCompiler != null) { pluginCompilers.Add(pluginCompiler); } } return(pluginCompilers); }
public void CreateNewResource(PhactoryHost.Database.Resource resource) { string extension = Helper.StringHelper.GetFileInfo(resource).Extension; PhactoryHost.EditorPlugin editor = pluginManager.GetEditor(extension); if (editor != null) { editor.CreateEmptyResource(resource); } PhactoryHost.CompilerPlugin compiler = pluginManager.GetCompiler(extension); if (compiler != null) { resource.IsIncludeResource = compiler.IsIncludeResource(resource); compiler.RefreshOutput(resource); } InsertFileMostRecentUsed(Helper.StringHelper.GetFileInfo(resource).FullName); }
public PhactoryHost.CompilerPlugin GetCompiler(string extension) { PhactoryHost.CompilerPlugin compiler = null; foreach (PhactoryHost.Plugin plugin in plugins) { compiler = plugin as PhactoryHost.CompilerPlugin; if (compiler != null) { foreach (PhactoryHost.PluginExtension supportedExtension in compiler.GetSupportedExtensions()) { if (supportedExtension.GetName() == extension) { return(compiler); } } } } return(null); }
private void plugins_SelectedIndexChanged(object sender, EventArgs e) { if (lvPlugins.SelectedItems.Count == 0) { return; } if (LastPlugin != null) { LastPlugin.SaveSettings(); } PhactoryHost.Plugin plugin = null; if (lvPlugins.SelectedItems.Count > 0) { plugin = App.Controller.PluginManager.GetPluginByName(lvPlugins.SelectedItems[0].Text); } LastPlugin = plugin; description.Text = plugin.GetDescription(); PhactoryHost.ToolPlugin toolPlugin = plugin as PhactoryHost.ToolPlugin; PhactoryHost.EditorPlugin editorPlugin = plugin as PhactoryHost.EditorPlugin; PhactoryHost.CompilerPlugin compilerPlugin = plugin as PhactoryHost.CompilerPlugin; PhactoryHost.RunnerPlugin runnerPlugin = plugin as PhactoryHost.RunnerPlugin; if (toolPlugin != null) { type.Text = "Tool Module"; } if (editorPlugin != null) { type.Text = "Editor Module"; } if (compilerPlugin != null) { type.Text = "Build Module"; } if (runnerPlugin != null) { type.Text = "Runner Module"; } version.Text = "" + plugin.GetVersion(); extensions.Items.Clear(); defaultPluginForUnknownExtensions.Checked = false; List <PhactoryHost.PluginExtension> supportedExtensions = null; if (editorPlugin != null) { supportedExtensions = editorPlugin.GetSupportedExtensions(); defaultPluginForUnknownExtensions.Checked = editorPlugin.IsDefaultPluginForUnknownTypes(); } if (compilerPlugin != null) { supportedExtensions = compilerPlugin.GetSupportedExtensions(); } if (runnerPlugin != null) { supportedExtensions = runnerPlugin.GetSupportedExtensions(); } if (supportedExtensions != null) { foreach (PhactoryHost.PluginExtension supportedExtension in supportedExtensions) { extensions.Items.Add(supportedExtension.GetName()); } } }
private void LogPluginInfo(PhactoryHost.Plugin plugin) { PhactoryHost.ToolPlugin tool = plugin as PhactoryHost.ToolPlugin; PhactoryHost.EditorPlugin editor = plugin as PhactoryHost.EditorPlugin; PhactoryHost.CompilerPlugin compiler = plugin as PhactoryHost.CompilerPlugin; PhactoryHost.RunnerPlugin runner = plugin as PhactoryHost.RunnerPlugin; if (tool != null) { App.Controller.Log.Append(plugin.GetName() + " " + plugin.GetVersion() + " (tool)"); } else if (editor != null) { string extensions = ""; foreach (PhactoryHost.PluginExtension supportedExtension in editor.GetSupportedExtensions()) { if (extensions.Length > 0) { extensions += ", "; } extensions += "*" + supportedExtension.GetName(); } string text = plugin.GetName() + " " + plugin.GetVersion() + " (editor for " + extensions + ")"; if (editor.IsDefaultPluginForUnknownTypes()) { text += " (also used as default editor for unknown types)"; } App.Controller.Log.Append(text); } else if (compiler != null) { string extensions = ""; foreach (PhactoryHost.PluginExtension supportedExtension in compiler.GetSupportedExtensions()) { if (extensions.Length > 0) { extensions += ", "; } extensions += "*" + supportedExtension.GetName(); } App.Controller.Log.Append(plugin.GetName() + " " + plugin.GetVersion() + " (compiler for " + extensions + ")"); } else if (runner != null) { string extensions = ""; foreach (PhactoryHost.PluginExtension supportedExtension in runner.GetSupportedExtensions()) { if (extensions.Length > 0) { extensions += ", "; } extensions += "*" + supportedExtension.GetName(); } App.Controller.Log.Append(plugin.GetName() + " " + plugin.GetVersion() + " (runner for " + extensions + ")"); } }
public bool DoesIncludeResourceNeedCompile(PhactoryHost.Database.Resource resourceDependency, PhactoryHost.Database.Resource resource) { if (resourceDependency.SkipNeedCompile) { return(resourceDependency.NeedCompile); } string filename = resourceDependency.RelativePath; string extension = Helper.StringHelper.GetFileExtension(filename); PhactoryHost.CompilerPlugin compiler = App.Controller.PluginManager.GetCompiler(extension); if (compiler != null) { if (resourceDependency.IsIncludeResource) { if (resourceDependency.FileExists == false) { resourceDependency.SkipNeedCompile = true; resourceDependency.NeedCompile = true; return(true); } else { foreach (int resourceOutputId in resource.IdOutputs) { PhactoryHost.Database.Resource resourceOutput = App.Controller.Entities.GetResource(resourceOutputId); if (resourceOutput.FileExists == false) { resourceDependency.SkipNeedCompile = true; resourceDependency.NeedCompile = true; return(true); } else { if (resourceDependency.LastWriteTime > resourceOutput.LastWriteTime) { resourceDependency.SkipNeedCompile = true; resourceDependency.NeedCompile = true; return(true); } } } } } } foreach (int dependencyId in resourceDependency.IdDependencies) { PhactoryHost.Database.Resource iResourceDependency = App.Controller.Entities.GetResource(dependencyId); if (DoesIncludeResourceNeedCompile(iResourceDependency, resource)) { resourceDependency.SkipNeedCompile = true; resourceDependency.NeedCompile = true; return(true); } } resourceDependency.SkipNeedCompile = true; resourceDependency.NeedCompile = false; return(false); }