Esempio n. 1
0
 /**
  * @brief decide whether this object should be updated
  **/
 private bool ShouldBeUpdated(GameObjectList _gameObjectList)
 {
     // Don't update the gameObject if it is not in GameObjectList
     // Case: 1. GameObject a.Update() -> AddGameObject(b), b.AttachToGameObject(c)
     //       2. c.Update() -> b.Update()
     // Here, b has not been added to contentList (not been BindToScene and Initialize yet)
     if (!_gameObjectList.ContainKey(GUID))
     {
         return(false);
     }
     return(true);
 }
Esempio n. 2
0
        public static GameObjectList LoadFromNode(XmlNode node, Scene scene)
        {
            GameObjectList gameObjectList = new GameObjectList();

            Serialable.BeginSupportingDelayBinding();
            foreach (XmlNode gameObject in node.ChildNodes)
            {
                GameObject newGameObject = (GameObject)(Serialable.DoUnserial(gameObject));
                gameObjectList.AddGameObject(newGameObject);
            }
            Serialable.EndSupportingDelayBinding();
            return(gameObjectList);
        }
Esempio n. 3
0
 /**
  * @brief [Called by GameObjectList only] recursively remove self from gameObjectList
  */
 public void RemoveGameObjectTreeFromGameObjectList(GameObjectList _gameObjectList)
 {
     if (m_children != null)
     {
         GameObject[] tempChildren = m_children.ToArray();
         foreach (GameObject child in tempChildren)
         {
             child.RemoveGameObjectTreeFromGameObjectList(_gameObjectList);
         }
     }
     DetachFromParent();
     _gameObjectList.RemoveSingleGameObject(this);
 }
Esempio n. 4
0
 /**
  * @brief [Called by GameObjectList only] update every component in game mode
  *
  * @param lastTimeFrame the time interval since last frame
  * */
 public void Update(int lastTimeFrame, GameObjectList _gameObjectList)
 {
     if (!ShouldBeUpdated(_gameObjectList))
     {
         return;
     }
     if (m_components != null)
     {
         foreach (KeyValuePair <string, CatComponent> key_value in m_components)
         {
             key_value.Value.Update(lastTimeFrame);
         }
     }
     UpdateAbsTranformation(lastTimeFrame);
     if (m_children != null)
     {
         foreach (GameObject child in m_children)
         {
             child.Update(lastTimeFrame, _gameObjectList);
         }
     }
 }
Esempio n. 5
0
        private void InGameUpdateProcess(int _skewedTimeInMS)
        {
            if (Mgr <Scene> .Singleton.GetPhysicsSystem() != null)
            {
                Mgr <Scene> .Singleton.GetPhysicsSystem().Update(_skewedTimeInMS);
            }
            if (Mgr <Scene> .Singleton._gameObjectList != null)
            {
                Scene          curScene       = Mgr <Scene> .Singleton;
                GameObjectList gameObjectList = Mgr <Scene> .Singleton._gameObjectList;
                gameObjectList.UpdateAdd(curScene);
                gameObjectList.UpdateRemove(curScene);
            }
//             if (Mgr<Scene>.Singleton._colliderList != null) {
//                 Mgr<Scene>.Singleton._colliderList.UpdateRemove();
//             }

            if (Mgr <Camera> .Singleton != null)
            {
                Mgr <Camera> .Singleton.Update(_skewedTimeInMS);
            }
            if (Mgr <CatProject> .Singleton.MotionDelegator != null)
            {
                Mgr <CatProject> .Singleton.MotionDelegator.Update(_skewedTimeInMS);
            }
            if (Mgr <Scene> .Singleton._gameObjectList != null)
            {
                Mgr <Scene> .Singleton._gameObjectList.Update(_skewedTimeInMS);
            }
            if (Mgr <Scene> .Singleton.m_shadowSystem != null)
            {
                Mgr <Scene> .Singleton.m_shadowSystem.Update(_skewedTimeInMS);
            }
            if (Mgr <CatProject> .Singleton.SoundManager != null)
            {
                Mgr <CatProject> .Singleton.SoundManager.Update(_skewedTimeInMS);
            }
        }
Esempio n. 6
0
        /**
         * @brief create a scene from an XML file
         *
         * @param node the XML node
         * @param game the game engine
         *
         * @result scene
         * */
        public static Scene LoadScene(string _filename) // node is the current node
        {
            XmlDocument doc = new XmlDocument();

            doc.Load(_filename);
            XmlNode node = doc.SelectSingleNode("Scene");

            Scene newScene = new Scene();

            // working list
            newScene._renderList = new RenderList();
            //newScene._colliderList = new ColliderList();
            newScene.m_physicsSystem = new PhysicsSystem();
            newScene.m_shadowSystem  = new ShadowSystem(Mgr <CatProject> .Singleton);
            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>();
            }
            // bind to current scene
            //Mgr<Scene>.Singleton = newScene;

            // init scene basic list
            // load and construct scene here
            XmlNode    basic      = node.SelectSingleNode("SceneBasic");
            XmlElement sceneBasic = (XmlElement)basic;

            newScene.setYAngle(float.Parse(sceneBasic.GetAttribute("viewAngle")));
            String playerGameObjectName = sceneBasic.GetAttribute("playerGameObjectName");

            XmlElement XBound = (XmlElement)sceneBasic.SelectSingleNode("XBound");

            newScene._XBound = new Vector2(float.Parse(XBound.GetAttribute("min")),
                                           float.Parse(XBound.GetAttribute("max")));

            XmlElement YBound = (XmlElement)sceneBasic.SelectSingleNode("YBound");

            newScene._YBound = new Vector2(float.Parse(YBound.GetAttribute("min")),
                                           float.Parse(YBound.GetAttribute("max")));

            XmlElement ZBound = (XmlElement)sceneBasic.SelectSingleNode("ZBound");

            newScene._ZBound = new Vector2(float.Parse(ZBound.GetAttribute("min")),
                                           float.Parse(ZBound.GetAttribute("max")));

            // camera
            XmlNode nodeCamera = node.SelectSingleNode(typeof(Camera).ToString());

            Serialable.BeginSupportingDelayBinding();
            Camera camera = Serialable.DoUnserial((XmlElement)nodeCamera) as Camera;

            Serialable.EndSupportingDelayBinding();
            //Mgr<Camera>.Singleton = camera;
            newScene.m_camera = camera;
            newScene.m_camera.UpdateView();
            newScene.m_camera.UpdateProjection();

            // postprocess manager
            XmlNode nodePostProcessManager =
                node.SelectSingleNode(typeof(PostProcessManager).ToString());

            Serialable.BeginSupportingDelayBinding();
            newScene.m_postProcessManager =
                Serialable.DoUnserial((XmlElement)nodePostProcessManager) as PostProcessManager;
            Serialable.EndSupportingDelayBinding();

            // gameObjects
            XmlNode gameObjects = node.SelectSingleNode("GameObjects");

            newScene._gameObjectList = GameObjectList.LoadFromNode(gameObjects, newScene);

            PostLoadScene(newScene);

            return(newScene);
        }