示例#1
0
        public BTTree CreateAndSaveEmptyBTTree(string _name = "UntitleBTTree")
        {
            BTTree newTree = BTTree.CreateEmptyBTTree();
            // find a name
            string baseName = _name;
            string surfix   = ".btt";
            int    index    = 0;
            string name     = baseName;
            string fullname = name + surfix;
            string path     = CatProject.GetStandardPath(m_btTreeReadDirectoryRoot);

            while (File.Exists(path + fullname))
            {
                ++index;
                name     = baseName + index;
                fullname = name + surfix;
            }
            m_btTrees.Add(name, newTree);
            newTree.Save(CatProject.GetStandardPath(m_btTreeWriteDirectory) + fullname);
            if (Mgr <CatProject> .Singleton != null)
            {
                Mgr <CatProject> .Singleton.SynchronizeBTTrees();
            }
            return(newTree);
        }
示例#2
0
        /**
         * @brief create an empty scene
         *
         * @param game the game engine
         *
         * @result an empty scene
         * */
        public static Scene CreateEmptyScene(CatProject _project)
        {
            Scene newScene = new Scene();

            // basic
            newScene.setYAngle(45.0f);
            newScene._XBound = new Vector2(-4.0f, 4.0f);
            newScene._YBound = new Vector2(-0.2f, 0.2f);
            newScene._ZBound = new Vector2(0.0f, 4.0f);

            // working list
            newScene._renderList = new RenderList();
            //newScene._colliderList = new ColliderList();
            newScene.m_physicsSystem = new PhysicsSystem();
            newScene.m_shadowSystem  = new ShadowSystem(_project);
            newScene._renderList.SetShadowRender(newScene.m_shadowSystem);
            newScene._uiRenderer = new UIRenderer();
            newScene.m_physicsSystem.Initialize();

            if (Mgr <GameEngine> .Singleton._gameEngineMode == GameEngine.GameEngineMode.MapEditor)
            {
                newScene._debugDrawableList = new DebugDrawableList();
                newScene._debugDrawableList.AddItem(newScene);

                newScene._selectableList = new RepeatableList <ISelectable>();
            }

            // empty list
            newScene._gameObjectList      = new GameObjectList();
            newScene.m_postProcessManager = new PostProcessManager();
            //newScene.m_postProcessManager.AddPostProcess()
            CreatePostProcess(newScene);
            return(newScene);
        }
示例#3
0
        private void UpdateShadingEffect(CatProject _project)
        {
            string accumulateLightEffectPath = "effect\\AccumulateLight";

            try {
                m_accumulateEffect = _project.contentManger.Load <Effect>
                                         (accumulateLightEffectPath);
            }
            catch (ContentLoadException) {
                System.Windows.Forms.MessageBox.Show("Cannot load essential shaders (" +
                                                     accumulateLightEffectPath + ") for " +
                                                     "Shadow System", "Vital Error");
                Mgr <GameEngine> .Singleton.Exit();
            }
        }
示例#4
0
        private void MountInGameProject()
        {
            CatProject project = CatProject.OpenProject(AppDomain.CurrentDomain.BaseDirectory + "project.xml", this);

            if (project == null)
            {
                System.Windows.Forms.MessageBox.Show("Level file project.xml does not exist.", "Vital Error",
                                                     System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
                Exit();
            }
            Mgr <CatProject> .Singleton = project;
            Scene scene = Scene.LoadScene(project.GetSceneFileAddress(project.startupSceneName));

            if (scene == null)
            {
                System.Windows.Forms.MessageBox.Show("Fail to load startup scene: " + project.startupSceneName, "Vital Error",
                                                     System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
                Exit();
            }
            scene.InitializeScene();
            scene.ActivateScene();
            Mgr <Scene> .Singleton = scene;
        }
示例#5
0
        /**
         * @brief Load models under the directory
         *
         * @param _modelDirectory the directory containing .model files
         * @param _project CatProject
         *
         * @result the CatModelList
         * */
        public static CatModelList LoadModels(string _modelDirectory, CatProject _project)
        {
            // create
            CatModelList modelList = new CatModelList();

            // search for .material files under _materialDirectory
            if (!Directory.Exists(_modelDirectory))
            {
                return(modelList);
            }
            string[] files = Directory.GetFiles(_modelDirectory, "*.model");
            foreach (string file in files)
            {
                XmlDocument doc = new XmlDocument();
                doc.Load(file);
                XmlNode nodeModel = doc.SelectSingleNode(
                    typeof(CatModel).ToString());
                Serialable.BeginSupportingDelayBinding();
                CatModel catsModel = CatModel.DoUnserial(nodeModel) as CatModel;
                Serialable.EndSupportingDelayBinding();
                modelList.AddModel(catsModel);
            }
            return(modelList);
        }
示例#6
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);
        }
示例#7
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);
        }
示例#8
0
 public void Initialize(CatProject _project)
 {
     InitFreeList();
     UpdateBuffer();
     UpdateShadingEffect(_project);
 }
示例#9
0
 public ShadowSystem(CatProject _project)
 {
     Initialize(_project);
 }