/// <summary>
        /// Load the scene in the given ScenePackage.
        /// </summary>
        /// <param name="scenePackage">The ScenePackage to load.</param>
        public IEnumerable <SceneBuildStatus> loadScene(ScenePackage scenePackage, SceneBuildOptions options)
        {
            currentScenePackage = scenePackage;
            yield return(new SceneBuildStatus()
            {
                Message = "Setting up Resources"
            });

            sceneResourceManager.changeResourcesToMatch(scenePackage.ResourceManager);
            sceneResourceManager.initializeResources();

            currentScene = scenePackage.SceneDefinition.createScene();
            if (OnSceneLoading != null)
            {
                OnSceneLoading.Invoke(this, currentScene);
            }
            currentSimObjects = scenePackage.SimObjectManagerDefinition.createSimObjectManager(currentScene.getDefaultSubScene());
            foreach (var status in currentScene.buildSceneStatus(options))
            {
                yield return(status);
            }
            if (OnSceneLoaded != null)
            {
                OnSceneLoaded.Invoke(this, currentScene);
            }
        }
예제 #2
0
        public void build()
        {
            if (projectData.CreateSceneFile)
            {
                Log.ImportantInfo("Building project {0}", name);
                ScenePackage scenePackage = new ScenePackage();
                scenePackage.ResourceManager            = PluginManager.Instance.createScratchResourceManager();
                scenePackage.SceneDefinition            = sceneFileInterface.getFileObject();
                scenePackage.SimObjectManagerDefinition = new SimObjectManagerDefinition();
                commonBuild(scenePackage);

                String sceneFileName = Path.GetFullPath(Path.Combine(workingDirectory, projectData.SceneFileName));
                try
                {
                    using (var stream = File.Open(sceneFileName, System.IO.FileMode.Create, System.IO.FileAccess.ReadWrite, System.IO.FileShare.None))
                    {
                        saver.saveObject(scenePackage, stream);
                        Log.ImportantInfo("Finished building project {0} to {1}.", name, sceneFileName);
                    }
                }
                catch (Exception e)
                {
                    Log.Error("Could not save project {0} to file {1} because:\n{2}", name, sceneFileName, e.Message);
                }
            }
        }
예제 #3
0
        public IEnumerable <SceneBuildStatus> loadSceneDefinitionCo(String fileName)
        {
            ScenePackage scenePackage;

            using (var stream = VirtualFileSystem.Instance.openStream(fileName, Engine.Resources.FileMode.Open, Engine.Resources.FileAccess.Read))
            {
                scenePackage = saver.restoreObject <ScenePackage>(stream);
            }
            return(loadSceneCo(scenePackage));
        }
예제 #4
0
        internal void buildInstances(ScenePackage scenePackage)
        {
            foreach (InstanceFileInterface instanceFileInterface in instanceFiles.Values)
            {
                instanceFileInterface.buildInstance(scenePackage.SimObjectManagerDefinition);
            }

            foreach (InstanceGroup group in groups.Values)
            {
                group.buildInstances(scenePackage);
            }
        }
예제 #5
0
        /// <summary>
        /// Save the scene to the given filename.
        /// </summary>
        /// <param name="filename">The filename to save to.</param>
        public void saveScene(String filename)
        {
            ScenePackage scenePackage = new ScenePackage();

            scenePackage.SceneDefinition            = sceneController.getSceneDefinition();
            scenePackage.ResourceManager            = resourceController.getResourceManager();
            scenePackage.SimObjectManagerDefinition = simObjectController.getSimObjectManagerDefinition();
            using (var stream = File.Open(filename, System.IO.FileMode.Create, System.IO.FileAccess.ReadWrite, System.IO.FileShare.None))
            {
                saver.saveObject(scenePackage, stream);
            }
            Log.ImportantInfo("Scene saved to {0}.", filename);
        }
예제 #6
0
 /// <summary>
 /// 多线程翻译脚本语言
 /// </summary>
 /// <param name="threadId">线程id</param>
 private void ParseHandler(object threadId)
 {
     while (true)
     {
         // 取队列中还未处理的场景
         ScenePackage handleSp = null;
         lock (this.splitQueue)
         {
             if (this.splitQueue.Count > 0)
             {
                 handleSp = this.splitQueue.Dequeue();
             }
         }
         if (handleSp == null)
         {
             break;
         }
         StringBuilder sceneBuilder = new StringBuilder();
         // 处理主序列
         sceneBuilder.AppendLine(this.ParseToScript(handleSp));
         // 处理函数
         foreach (var fp in handleSp.GetFunc())
         {
             sceneBuilder.AppendLine();
             sceneBuilder.AppendLine(fp.functionDeclaration);
             sceneBuilder.AppendLine(this.ParseToScript(fp));
             sceneBuilder.AppendLine(fp.functionEndDeclaration);
         }
         // 生成代码加入结果向量
         lock (this.resList)
         {
             this.resList.Add(new KeyValuePair <string, string>(handleSp.sceneName, sceneBuilder.ToString()));
         }
         lock (this.consoleMutex)
         {
             Console.WriteLine(String.Format("Finish Code Generation \"{0}\" At thread {1}", handleSp.sceneName, (int)threadId));
         }
     }
     // 递增完成信号量
     lock (consoleMutex)
     {
         this.finishedThread++;
         Console.WriteLine(String.Format("Thread {0} is Finished", (int)threadId));
     }
 }
예제 #7
0
        public void commonBuild(ScenePackage scenePackage)
        {
            scenePackage.ResourceManager.addResources(resourceFileInterface.getFileObject());
            instanceGroup.buildInstances(scenePackage);

            foreach (ProjectReference reference in projectData.ProjectReferences.ReferencedProjectNames)
            {
                Project refProject = solution.getProject(reference.ProjectName);
                if (refProject != null)
                {
                    Log.ImportantInfo("Building referenced project {0}.", refProject.Name);
                    refProject.commonBuild(scenePackage);
                }
                else
                {
                    Log.Error("Could not find referenced project {0} for project {1}. Project could not be built.", reference.ProjectName, Name);
                }
            }
        }
예제 #8
0
        public IEnumerable <SceneBuildStatus> openScene(String filename, ResourceProvider resourceProvider)
        {
            medicalScene.destroyScene();
            if (resourceProvider.exists(filename))
            {
                currentSceneFile      = VirtualFileSystem.GetFileName(filename);
                currentSceneDirectory = VirtualFileSystem.GetDirectoryName(filename);
                using (Stream file = resourceProvider.openFile(filename))
                {
                    XmlTextReader textReader   = null;
                    ScenePackage  scenePackage = null;
                    try
                    {
                        yield return(new SceneBuildStatus()
                        {
                            Message = "Loading Scene File"
                        });

                        textReader   = new XmlTextReader(file);
                        scenePackage = xmlSaver.restoreObject(textReader) as ScenePackage;
                    }
                    finally
                    {
                        if (textReader != null)
                        {
                            textReader.Close();
                        }
                    }
                    if (scenePackage != null)
                    {
                        foreach (var status in medicalScene.loadScene(scenePackage, SceneBuildOptions.SingleUseDefinitions))
                        {
                            yield return(status);
                        }
                    }
                }
            }
            else
            {
                Log.Error("Could not load scene {0}.", filename);
            }
        }
예제 #9
0
        /// <summary>
        /// Load the scene in the given ScenePackage.
        /// </summary>
        /// <param name="scenePackage">The ScenePackage to load.</param>
        public IEnumerable <SceneBuildStatus> loadSceneCo(ScenePackage scenePackage, SceneBuildOptions options = SceneBuildOptions.SingleUseDefinitions)
        {
            this.scenePackage = scenePackage;
            yield return(new SceneBuildStatus()
            {
                Message = "Setting up Resources"
            });

            sceneResourceManager.changeResourcesToMatch(scenePackage.ResourceManager);
            sceneResourceManager.initializeResources();

            scene       = scenePackage.SceneDefinition.createScene();
            scene.Scope = pluginManager.GlobalScope.ServiceProvider.CreateScope();
            if (OnSceneLoading != null)
            {
                OnSceneLoading.Invoke(this, scene);
            }
            currentSimObjects = scenePackage.SimObjectManagerDefinition.createSimObjectManager(scene.getDefaultSubScene());
            if (dynamicMode)
            {
                foreach (var status in scene.buildSceneStatus(options))
                {
                    yield return(status);
                }
            }
            else
            {
                scene.buildStaticScene();
            }
            if (OnSceneLoaded != null)
            {
                OnSceneLoaded.Invoke(this, scene);
            }
            foreach (DebugInterface debugInterface in pluginManager.DebugInterfaces)
            {
                debugInterface.createDebugInterface(pluginManager.RendererPlugin, scene.getDefaultSubScene());
            }
        }
예제 #10
0
 public void loadScene(ScenePackage scenePackage, SceneBuildOptions options = SceneBuildOptions.SingleUseDefinitions)
 {
     foreach (var step in loadSceneCo(scenePackage, options))
     {
     }
 }