示例#1
0
        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);
        }
示例#2
0
        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);
        }