public static CatProject CreateEmptyProject(string _projectName, string _projectUnderDirectory, Game _game) { // 1. create project directory structure string projectRoot = _projectUnderDirectory; projectRoot += _projectName + '/'; // project root TestCreateDirectory(projectRoot); // sub directory // plugin string pluginDirectory = projectRoot + '/' + PLUGIN_DIR; TestCreateDirectory(pluginDirectory); if (File.Exists("plugin/" + BASIC_PLUGIN)) { File.Copy("plugin/" + BASIC_PLUGIN, pluginDirectory + '/' + BASIC_PLUGIN, true); } // resource string resourceDirectory = projectRoot + '/' + RESOURCE_DIR + '/'; TestCreateDirectory(resourceDirectory); TestCreateDirectory(resourceDirectory + "image"); TestCreateDirectory(resourceDirectory + "effect"); TestCreateDirectory(resourceDirectory + "material"); TestCreateDirectory(resourceDirectory + "model"); TestCreateDirectory(resourceDirectory + "prefab"); TestCreateDirectory(resourceDirectory + "scene"); TestCreateDirectory(resourceDirectory + "ai"); // copy basic resource string[] fxs = Directory.GetFiles("resource/effect"); foreach (String fx in fxs) { File.Copy(fx, resourceDirectory + "effect/" + Path.GetFileName(fx), true); } string[] mtrls = Directory.GetFiles("resource/material"); foreach (String mtrl in mtrls) { File.Copy(mtrl, resourceDirectory + "material/" + Path.GetFileName(mtrl), true); } // asset string assetDirectory = projectRoot + '/' + ASSET_DIR; TestCreateDirectory(assetDirectory); // 2. create project instance CatProject newProject = new CatProject(_game); newProject.projectName = _projectName; newProject.projectRoot = projectRoot; newProject.currentSceneName = "UntitleScene"; newProject.startupSceneName = newProject.currentSceneName; newProject.contentManger = new ContentManager(_game.Services); newProject.contentManger.RootDirectory = projectRoot + ASSET_DIR + '/' + RESOURCE_DIR; newProject.m_btTreeManager = new BTTreeManager(); newProject.m_btTreeManager.BTTreeDirectoryRoot = newProject.projectRoot + '/' + ASSET_DIR + '/' + RESOURCE_DIR + "/ai"; newProject.m_btTreeManager.BTTreeWriteDirectory = newProject.projectRoot + '/' + RESOURCE_DIR + "/ai"; // save project files newProject.SaveProject(newProject.GetProjectXMLAddress(), true); Mgr <CatProject> .Singleton = newProject; // create a empty scene Scene scene = Scene.CreateEmptyScene(newProject); scene.SaveScene(newProject.projectRoot + RESOURCE_DIR + "/scene/" + newProject.currentSceneName + ".scene"); newProject.SynchronizeScene(); newProject.SynchronizeBTTrees(); return(newProject); }
public static CatProject OpenProject(string _fileName, Game _game) { if (!File.Exists(_fileName)) { return(null); } XmlDocument doc = new XmlDocument(); doc.Load(_fileName); // get project root int index = _fileName.LastIndexOf('/'); if (index < 0) { index = _fileName.LastIndexOf('\\'); } string projectRoot = ""; if (index >= 0) { projectRoot = _fileName.Substring(0, index) + '/'; } // read project itself CatProject newProject = new CatProject(_game); XmlNode nodeProject = doc.SelectSingleNode("Project"); newProject.projectRoot = projectRoot; newProject.projectName = nodeProject.SelectSingleNode("ProjectName").InnerText; XmlElement nodeSceneLoad = (XmlElement)nodeProject.SelectSingleNode("SceneLoad"); newProject.startupSceneName = nodeSceneLoad.GetAttribute("startup"); newProject.currentSceneName = nodeSceneLoad.GetAttribute("current"); newProject.contentManger = new ContentManager(_game.Services); newProject.contentManger.RootDirectory = projectRoot + ASSET_DIR + '/' + RESOURCE_DIR + '/'; Mgr <CatProject> .Singleton = newProject; // load shader if (Mgr <GameEngine> .Singleton._gameEngineMode == GameEngine.GameEngineMode.MapEditor) { newProject.CompileResource(); newProject.SynchronizeScene(); newProject.SynchronizeBTTrees(); } //newProject.CompileShader(newProject.projectRoot); // read configures // test new materiallist newProject.materialList1 = CatMaterialTemplateList.LoadMaterialTemplates( newProject.projectRoot + ASSET_DIR + '/' + RESOURCE_DIR + "/material/"); // newProject.materialList = MaterialList.LoadMaterilas( // newProject.GetConfigurePath(newProject.materialConfigure), // newProject); // test new model newProject.modelList1 = CatModelList.LoadModels( newProject.projectRoot + ASSET_DIR + '/' + RESOURCE_DIR + "/model/", newProject); // newProject.modelList = ModelList.LoadModels( // newProject.GetConfigurePath(newProject.modelConfigure), // newProject); // load plugins newProject.typeManager = new TypeManager(); newProject.typeManager.Load_Plugins(newProject.projectRoot + PLUGIN_DIR + '/'); newProject.typeManager.LoadConsoleCommands(newProject.projectRoot + PLUGIN_DIR + '/'); newProject.typeManager.LoadBTTreeNodes(newProject.projectRoot + PLUGIN_DIR + '/'); Mgr <GameEngine> .Singleton.CatConsole.SetTypeManager(newProject.typeManager); if (Mgr <GameEngine> .Singleton._gameEngineMode == GameEngine.GameEngineMode.MapEditor) { newProject.typeManager.Load_EditorScripts(newProject.projectRoot + PLUGIN_DIR + '/'); } Mgr <TypeManager> .Singleton = newProject.typeManager; newProject.m_btTreeManager = new BTTreeManager(); newProject.m_btTreeManager.BTTreeDirectoryRoot = newProject.projectRoot + '/' + ASSET_DIR + '/' + RESOURCE_DIR + "/ai"; newProject.m_btTreeManager.BTTreeWriteDirectory = newProject.projectRoot + '/' + RESOURCE_DIR + "/ai"; // newProject.prefabList = PrefabList.LoadPrefabs( // newProject.GetConfigurePath(newProject.prefabConfigure), // newProject); newProject.prefabList = PrefabList.LoadFromFiles( newProject.projectRoot + ASSET_DIR + '/' + RESOURCE_DIR + "/prefab/"); // load current scene // newProject.runningScene = Scene.LoadScene( // newProject.GetSceneFileAddress(newProject.currentSceneName)); return(newProject); }