コード例 #1
0
        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();
                    }
                }
            }
        }
コード例 #2
0
ファイル: CompilerTest.cs プロジェクト: p0lar-bear/Prometheus
        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();
                    }
                }
            }
        }
コード例 #3
0
ファイル: Radiosity.cs プロジェクト: p0lar-bear/Prometheus
        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....
                    }
                }
            }
        }
コード例 #4
0
ファイル: RecycleBin.cs プロジェクト: p0lar-bear/Prometheus
        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();
        }
コード例 #5
0
        /// <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.");
            }
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        /// <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);
        }