public void PerformTest() { OpenFileDialog ofd = new OpenFileDialog(); SaveFileDialog sfd = new SaveFileDialog(); FolderBrowserDialog fbd = new FolderBrowserDialog(); fbd.Description = "Where did you decompile to?"; if (fbd.ShowDialog() == DialogResult.OK) { if (sfd.ShowDialog() == DialogResult.OK) { if (ofd.ShowDialog() == DialogResult.OK) { GameDefinition gd = Core.Prometheus.Instance.GetGameDefinitionByGameID("halopc"); IMapFile map = gd.CreateMapFileObject(); ILibrary library = new DiskFileLibrary(fbd.SelectedPath, "Compiler Test Library"); map.RegisterTag(library, ofd.FileName.Replace(fbd.SelectedPath + '\\', "")); map.RegisterTag(library, @"globals\globals.globals"); map.RegisterTag(library, @"ui\ui_tags_loaded_all_scenario_types.tag_collection"); map.RegisterTag(library, @"ui\shell\bitmaps\background.bitmap"); map.RegisterTag(library, @"ui\shell\strings\loading.unicode_string_list"); map.RegisterTag(library, @"ui\shell\main_menu\mp_map_list.unicode_string_list"); map.RegisterTag(library, @"ui\shell\bitmaps\trouble_brewing.bitmap"); map.RegisterTag(library, @"sound\sfx\ui\cursor.sound"); map.RegisterTag(library, @"sound\sfx\ui\forward.sound"); map.RegisterTag(library, @"sound\sfx\ui\back.sound"); map.RegisterTag(library, @"ui\ui_tags_loaded_multiplayer_scenario_type.tag_collection"); FileStream fs = File.Create(sfd.FileName); map.CompileCache(fs, library); fs.Close(); } } } }
public void PerformTest() { OpenFileDialog ofd = new OpenFileDialog(); SaveFileDialog sfd = new SaveFileDialog(); FolderBrowserDialog fbd = new FolderBrowserDialog(); fbd.Description = "Where did you decompile to?"; if (fbd.ShowDialog() == DialogResult.OK) { if (sfd.ShowDialog() == DialogResult.OK) { if (ofd.ShowDialog() == DialogResult.OK) { FileStream fs = File.OpenRead(ofd.FileName); TagFile tf = new TagFile(fs); fs.Close(); GameDefinition gd = Core.Prometheus.Instance.GetGameDefinitionByGameID(tf.GameID); IMapFile map = gd.CreateMapFileObject(); ILibrary library = new DiskFileLibrary(fbd.SelectedPath, "Compiler Test Library"); map.RegisterTag(library, ofd.FileName.Replace(fbd.SelectedPath + '\\', "")); while (ofd.ShowDialog() == DialogResult.OK) { map.RegisterTag(library, ofd.FileName.Replace(fbd.SelectedPath + '\\', "")); } fs = File.Create(sfd.FileName); map.CompileCache(fs, library); fs.Close(); } } } }
private void UpdateViewportLightmaps() { string path = (Prometheus.Instance.ProjectManager.ProjectFolder as DiskFileLibrary).RootPath; SetOperation("Updating lightmaps..."); DiskFileLibrary _folder = Prometheus.Instance.ProjectManager.ProjectFolder as DiskFileLibrary; // write all the new lightmaps to foreach (IBsp bsp in m_bsp) { for (int lIndex = 0; lIndex < m_textures.Count; lIndex++) { SetOperation("Updating lightmap #" + (lIndex + 1) + "..."); try { Texture texture = TextureLoader.FromFile(MdxRender.Device, path + @"LightMaps\lightmap_" + lIndex + ".bmp"); bsp.UpdateLightmap(lIndex, texture); } catch (Microsoft.DirectX.Direct3D.InvalidDataException) { // Dunno why this happens... but we don't want it happening.... } } } }
public RecycleBin(string sourceFolder, ILibrary linkedLibrary) { if (!Directory.Exists(sourceFolder)) { Directory.CreateDirectory(sourceFolder); } File.SetAttributes(sourceFolder, FileAttributes.Hidden); recycleFolder = new DiskFileLibrary(sourceFolder, linkedLibrary.Name + "_RecycleBin"); this.linkedLibrary = linkedLibrary; LoadEntryTable(); }
/// <summary> /// Saves the generated lightmaps to files. /// </summary> public void SaveAll() { SetOperation("Saving data..."); if (Prometheus.Instance.ProjectManager.ProjectFolder != null) { DiskFileLibrary _folder = Prometheus.Instance.ProjectManager.ProjectFolder as DiskFileLibrary; //TODO: Serailise current state to XML file. m_textures.SaveAllRaw(_folder.RootPath); } else { throw new RadiosityException("Cannot run radiosity without a project loaded."); } }
public ProjectNodeSource(string name, IDocumentManager documentManager, ProjectManager projectManager, DefaultState defaultState) : base(name) { this.projectManager = projectManager; this.documentManager = documentManager; this.documentManager.DocumentRenamed += documentManager_DocumentRenamed; game = Core.Prometheus.Instance.GetGameDefinitionByGameID(projectManager.GameID); // Combined tag source - Project References and TemplateTags that exist in the project. projectReferences = new ProjectReferencesLibrary( "projectrefs", projectManager.Project, projectManager.Project.Templates); projectReferences.FileAdded += FileAdded; projectReferences.FileRemoved += FileRemoved; projectFolder = projectManager.ProjectFolder; projectFolder.FileAdded += FileAdded; projectFolder.FileRemoved += FileRemoved; projectFolder.FolderAdded += FolderAdded; projectFolder.FolderRemoved += FolderRemoved; projectManager.Project.Templates.FileAdded += Templates_FileAdded; projectManager.Project.Templates.FileRemoved += Templates_FileRemoved; AddNodeType(CreateNodeType <RootNodeType>(defaultState)); UnreferencedState unreferenced = new UnreferencedState(this, "unreferenced", Resources.document_plain16, Resources.document_plain16, Color.Gray, Color.White); MissingReferencedState missing = new MissingReferencedState(this, "missing_reference", Resources.document_error16, Resources.document_error16, Color.Red, Color.White); NodeType folder = CreateNodeType <FolderNodeType>(Resources.folder16, Resources.folder_closed16); AddNodeType(folder); folder.NodeRenamed += new System.EventHandler <NodeRenamedEventArgs>(folder_NodeRenamed); NodeType tagNode = CreateNodeType <TagNode>(Resources.document16); tagNode.AddNodeState(new ValidReferencedState(this, "valid_reference", Resources.document16, Resources.document16, Color.Black, Color.White)); tagNode.AddNodeState(new DocumentOpenState(documentManager, game.GameID, TagLocation.Project, Resources.document_view16, Resources.document_view16, Color.Blue, Color.White)); tagNode.AddNodeState(unreferenced); tagNode.AddNodeState(missing); AddNodeType(tagNode); tagNode.NodeRenamed += new System.EventHandler <NodeRenamedEventArgs>(tagNode_NodeRenamed); ObjectTag objectFile = CreateNodeType <ObjectTag>(Resources.data16); objectFile.AddNodeState(new DocumentOpenState(documentManager, game.GameID, TagLocation.Project, Resources.data_view16, Resources.data_view16, Color.Blue, Color.White)); objectFile.AddNodeState(new ValidReferencedState(this, "valid_reference", Resources.data16, Resources.data16, Color.Black, Color.White)); objectFile.AddNodeState(unreferenced); objectFile.AddNodeState(missing); AddNodeType(objectFile); objectFile.NodeRenamed += new System.EventHandler <NodeRenamedEventArgs>(tagNode_NodeRenamed); NodeType modelFile = CreateNodeType <ModelTag>(Resources.cube_molecule16); modelFile.AddNodeState(new DocumentOpenState(documentManager, game.GameID, TagLocation.Project, Resources.cube_molecule_view16, Resources.cube_molecule_view16, Color.Blue, Color.White)); modelFile.AddNodeState(new ValidReferencedState(this, "valid_reference", Resources.cube_molecule16, Resources.cube_molecule16, Color.Black, Color.White)); modelFile.AddNodeState(unreferenced); modelFile.AddNodeState(missing); AddNodeType(modelFile); modelFile.NodeRenamed += new System.EventHandler <NodeRenamedEventArgs>(tagNode_NodeRenamed); NodeType sbspFile = CreateNodeType <SbspTag>(Resources.environment16); sbspFile.AddNodeState(new DocumentOpenState(documentManager, game.GameID, TagLocation.Project, Resources.environment_view16, Resources.environment_view16, Color.Blue, Color.White)); sbspFile.AddNodeState(new ValidReferencedState(this, "valid_reference", Resources.environment16, Resources.environment16, Color.Black, Color.White)); sbspFile.AddNodeState(unreferenced); sbspFile.AddNodeState(missing); AddNodeType(sbspFile); sbspFile.NodeRenamed += new System.EventHandler <NodeRenamedEventArgs>(tagNode_NodeRenamed); NodeType scenarioFile = CreateNodeType <ScenarioTag>(Resources.earth16); scenarioFile.AddNodeState(new DocumentOpenState(documentManager, game.GameID, TagLocation.Project, Resources.earth_view16, Resources.earth_view16, Color.Blue, Color.White)); scenarioFile.AddNodeState(new ValidReferencedState(this, "valid_reference", Resources.earth16, Resources.earth16, Color.Black, Color.White)); scenarioFile.AddNodeState(unreferenced); scenarioFile.AddNodeState(missing); AddNodeType(scenarioFile); scenarioFile.NodeRenamed += new System.EventHandler <NodeRenamedEventArgs>(tagNode_NodeRenamed); NodeType propertiesNode = CreateNodeType <PropertiesRootNodeType>(Resources.preferences16); AddNodeType(propertiesNode); NodeType essentialTagsNode = CreateNodeType <EssentialTagsRoot>(Resources.components16); AddNodeType(essentialTagsNode); NodeType projectTemplateTagNode = CreateNodeType <ProjectTemplateTagNodeType>(Resources.application16); AddNodeType(projectTemplateTagNode); NodeType globalTemplateTagNode = CreateNodeType <GlobalTemplateTagNodeType>(Resources.joystick16); AddNodeType(globalTemplateTagNode); NodeType recycleBinNode = CreateNodeType <RecycleBinRootNodeType>(Resources.garbage_empty16); recycleBinNode.AddNodeState(new RecycleBinContainsFilesState(projectManager.Project.RecycleBin, "recyclebin_not_empty", Resources.garbage_full16, Resources.garbage_full16, Color.Black, Color.White)); //TODO: Need to create a state for when the recycle bin is completely full (though, I'm not sure how this //would work, because you can't say that it's "full" because you don't know how big the file is that they //are going to try to add - it may fit or it may not, and the recycle bin is very unlikely to contain //the exact number of bytes that it can hold before it is considered "full".) AddNodeType(recycleBinNode); }
/// <summary> /// Loads the specified project file into a ProjectFile object, optionally notifying /// the GUI to load the scenario file. /// </summary> public ProjectFile OpenProject(string filename, ScenarioAction action) { // TODO: Ensure that the file exists. StreamReader reader = new StreamReader(new FileStream(filename, FileMode.Open)); string xmlText = reader.ReadToEnd(); reader.Close(); XmlDocument projectDoc = new XmlDocument(); projectDoc.LoadXml(xmlText); // Setup the object and locate its GameDef/Template objects. ProjectFile project = new ProjectFile(projectDoc); Platform platform = (Platform)Enum.Parse(typeof(Platform), project.GamePlatform); string gameID = GameDefinition.GetGameID(project.GameName, platform); GameDefinition def = Prometheus.Instance.GetGameDefinitionByGameID(gameID); gameDefinition = def; foreach (ProjectTemplate template in def.ProjectTemplates) { if (template.Name == project.TemplateName) { project.Template = template; } } // Locate the scenario tag. if (project.Templates.ContainsTemplateElement("Scenario")) { scenarioTag = project.Templates["Scenario"].Path; } else { throw new Exception("The project does not reference a scenario, which is a required element."); } // Open the DiskFileLibrary for the project. string projectFolder = Path.GetDirectoryName(filename); DiskFileLibrary library = new DiskFileLibrary(projectFolder + "\\Tags", project.MapName); // TODO: Decide which one of these is neccessary. project.ProjectFolder = library; this.projectFolder = library; // Add the project to the list and register it with the Pool. this.filename = filename; this.project = project; this.project.Dirty += new EventHandler(project_Dirty); Prometheus.Instance.Pool.RegisterProject(def.Name, library); // Hey other code! Guess what we just did!!!!!11 OnOpenedProject(); bool loadScenario = false; if (action == ScenarioAction.Load) { loadScenario = true; } else if (action == ScenarioAction.PromptUser) { CancelEventArgs e = new CancelEventArgs(false); if (ScenarioOpening != null) { ScenarioOpening(this, e); } loadScenario = !e.Cancel; } if (loadScenario) { try { TagPath path = new TagPath(project.Templates["Scenario"].Path, GameID, TagLocation.Project); Prometheus.Instance.OnAddScene(path); } catch (TagAlreadyExistsException ex) { Output.Write(OutputTypes.Warning, ex.Message); } catch (PoolException ex) { Output.Write(OutputTypes.Warning, ex.Message); } } return(project); }