Пример #1
0
        public override bool VPostInitialize()
        {
            if (InitScriptResource != null && InitScriptResource != "")
            {
                Cv_ScriptResource scriptRes = Cv_ResourceManager.Instance.GetResource <Cv_ScriptResource>(InitScriptResource, Owner.ResourceBundle);
                scriptRes.RunScript(Owner, RunInEditor);
            }

            return(true);
        }
Пример #2
0
        private void OnExecuteScriptTimeout()
        {
            if (Owner == null)
            {
                return;
            }

            if (ScriptResource != null && ScriptResource != "")
            {
                Cv_ScriptResource scriptRes = Cv_ResourceManager.Instance.GetResource <Cv_ScriptResource>(ScriptResource, Owner.ResourceBundle);
                scriptRes.RunScript(Owner, RunInEditor);
            }

            m_bRanOnce = true;

            if (!ExecuteOnce)
            {
                m_Timer = new Cv_TimerProcess(Interval, OnExecuteScriptTimeout);
                Cv_ProcessManager.Instance.AttachProcess(m_Timer);
            }
        }
Пример #3
0
        protected sealed override void Initialize()
        {
            if (!EditorRunning)
            {
                CurrentGraphicsDevice = GraphicsDevice;
            }

            Cv_Debug debug = new Cv_Debug();

            debug.Initialize("Logs/logTags.xml");

            if (!CheckEngineSystemResources())
            {
                Cv_Debug.Error("Not enough system resources to run the engine.");
                Exit();
                return;
            }

            if (!VCheckGameSystemResources())
            {
                Cv_Debug.Error("Not enough system resources to run the game.");
                Exit();
                return;
            }

            ReadProjectFile();

            ResourceManager = new Cv_ResourceManager();
            if (!ResourceManager.Initialize(m_BundleInfo, UseDevelopmentDirectories))
            {
                Cv_Debug.Error("Unable to initialize resource manager.");
                Exit();
                return;
            }

            if (!EditorRunning && !LoadStrings("English"))
            {
                Cv_Debug.Error("Unable to load strings.");
                Exit();
                return;
            }

            ProcessManager = new Cv_ProcessManager();
            if (!ProcessManager.Initialize())
            {
                Cv_Debug.Error("Unable to initialize process manager.");
                Exit();
                return;
            }

            ScriptManager = new Cv_LuaScriptManager();
            if (!ScriptManager.VInitialize())
            {
                Cv_Debug.Error("Unable to initialize script manager.");
                Exit();
                return;
            }

            //This loads the preInit Lua script if there's one
            if (InitScriptLocation != null && InitScriptLocation != "" && InitScriptBundle != null && InitScriptBundle != "")
            {
                Cv_ScriptResource initScript = ResourceManager.GetResource <Cv_ScriptResource>(InitScriptLocation, InitScriptBundle);
                initScript.RunScript();
            }

            EventManager = new Cv_EventManager(true);
            if (!EventManager.Initialize())
            {
                Cv_Debug.Error("Unable to initialize event manager.");
                Exit();
                return;
            }

            SoundManager = new Cv_SoundManager();
            if (!SoundManager.Initialize())
            {
                Cv_Debug.Error("Unable to initialize sound manager.");
                Exit();
                return;
            }

            InputManager = new Cv_InputManager();
            if (!InputManager.Initialize())
            {
                Cv_Debug.Error("Unable to initialize input manager.");
                Exit();
                return;
            }

            Window.Title      = VGetGameTitle();
            SaveGameDirectory = GetSaveGameDirectory(VGetGameAppDirectoryName());

            Logic = VCreateGameLogic();
            if (Logic == null)
            {
                Cv_Debug.Error("Unable to create game logic.");
                Exit();
                return;
            }

            Scene = new Cv_SceneElement(this);
            var gvs = VCreateGameViews();

            foreach (var gv in gvs)
            {
                Logic.AddView(gv);
            }
            Logic.AddGamePhysics(VCreateGamePhysics());
            Logic.Initialize();

            Running = true;

            VInitialize();

            base.Initialize();
        }
        private bool CheckAnimationFinished()
        {
            if (OnEnd != null)
            {
                OnEnd();
            }

            if (OnEndScript != null && OnEndScript != "")
            {
                Cv_ScriptResource scriptRes = Cv_ResourceManager.Instance.GetResource <Cv_ScriptResource>(OnEndScript, Owner.ResourceBundle);
                scriptRes.RunScript(Owner);
            }

            if (Looping)
            {
                Finished = false;
                m_Animation.CurrPointIndex = 0;
            }
            else
            {
                Finished = true;
            }

            if (ResetOnEnd)
            {
                m_TransformComponent.Transform = m_InitialTransform;

                if (m_SpriteComponent != null)
                {
                    m_SpriteComponent.Color = new Color(m_SpriteComponent.Color, m_iInitialSpriteAlpha);
                }

                if (m_TextComponent != null)
                {
                    m_TextComponent.Color = new Color(m_TextComponent.Color, m_iInitialTextAlpha);
                }

                if (m_ParticleEmitterComponent != null)
                {
                    m_ParticleEmitterComponent.Color = new Color(m_ParticleEmitterComponent.Color, m_iInitialParticleAlpha);
                }
            }
            else if (Finished)
            {
                var prevKeyFrame = m_Animation.AnimationKeyFrames[m_Animation.CurrPointIndex - 1];

                var newPos   = new Vector3(m_InitialTransform.Position.X + prevKeyFrame.X, m_InitialTransform.Position.Y + prevKeyFrame.Y, m_InitialTransform.Position.Z);
                var newScale = new Vector2(prevKeyFrame.ScaleX * m_InitialTransform.Scale.X, prevKeyFrame.ScaleY * m_InitialTransform.Scale.Y);

                m_TransformComponent.SetPosition(newPos);
                m_TransformComponent.SetScale(newScale);
                m_TransformComponent.SetRotation(m_InitialTransform.Rotation + prevKeyFrame.Rotation);

                if (m_SpriteComponent != null)
                {
                    m_SpriteComponent.Color = new Color(m_SpriteComponent.Color, (int)(prevKeyFrame.Alpha * m_iInitialSpriteAlpha));
                }

                if (m_TextComponent != null)
                {
                    m_TextComponent.Color = new Color(m_TextComponent.Color, (int)(prevKeyFrame.Alpha * m_iInitialTextAlpha));
                }

                if (m_ParticleEmitterComponent != null)
                {
                    m_ParticleEmitterComponent.Color = new Color(m_ParticleEmitterComponent.Color, (int)(prevKeyFrame.Alpha * m_iInitialParticleAlpha));
                }
            }

            GetInitialTransformAndAlpha();

            return(Finished);
        }
Пример #5
0
        internal bool UnloadScene(string scenePath)
        {
            Cv_SceneInfo sceneInfo;

            if (!m_ScenePaths.TryGetValue(scenePath, out sceneInfo))
            {
                return(true);
            }

            Cv_XmlResource resource;

            resource = Cv_ResourceManager.Instance.GetResource <Cv_XmlResource>(sceneInfo.SceneResource, sceneInfo.ResourceBundle, Caravel.EditorRunning);

            var root = ((Cv_XmlData)resource.ResourceData).RootNode;

            if (root == null)
            {
                Cv_Debug.Error("Failed to unload scene resource file: " + sceneInfo.SceneResource);
                return(false);
            }

            if (!Caravel.Logic.OnPreUnloadScene(root, sceneInfo.ID, sceneInfo.SceneName))
            {
                Cv_Debug.Error("Failed to unload scene resource file: " + sceneInfo.SceneResource);
                return(false);
            }

            string unloadScript = null;

            var scriptElement = root.SelectNodes("Script").Item(0);

            if (scriptElement != null)
            {
                unloadScript = scriptElement.Attributes["unLoad"].Value;
            }

            if (unloadScript != null && unloadScript != "")
            {
                Cv_ScriptResource unLoadRes = Cv_ResourceManager.Instance.GetResource <Cv_ScriptResource>(unloadScript, sceneInfo.ResourceBundle);
                unLoadRes.RunScript();
            }

            var entitiesToRemove = Caravel.Logic.GetSceneEntities(sceneInfo.ID);

            foreach (var e in entitiesToRemove)
            {
                if (e != null && !e.DestroyRequested)
                {
                    Caravel.Logic.DestroyEntity(e);
                }
            }

            Caravel.Logic.OnUnloadScene(root, sceneInfo.ID, sceneInfo.SceneName, sceneInfo.SceneResource, sceneInfo.ResourceBundle);

            lock (m_Scenes)
            {
                m_Scenes.Remove(sceneInfo.ID);
                m_ScenePaths.Remove(scenePath);
            }

            if (MainScene == sceneInfo.ID && m_Scenes.Count > 0)
            {
                MainScene = m_Scenes.Keys.First();
            }

            return(true);
        }
Пример #6
0
        internal Cv_Entity[] LoadScene(string sceneResource, string resourceBundle, string sceneName, XmlElement overrides,
                                       Cv_Transform?sceneTransform, Cv_EntityID parentID = Cv_EntityID.INVALID_ENTITY)
        {
            Cv_XmlResource resource;

            resource = Cv_ResourceManager.Instance.GetResource <Cv_XmlResource>(sceneResource, resourceBundle, Caravel.EditorRunning);

            var root = ((Cv_XmlData)resource.ResourceData).RootNode;

            if (root == null)
            {
                Cv_Debug.Error("Failed to load scene resource file: " + sceneResource);
                return(null);
            }

            if (!Caravel.Logic.OnPreLoadScene(root, sceneName))
            {
                return(null);
            }

            Cv_SceneID newID = (Cv_SceneID)m_iLastSceneID;

            m_iLastSceneID++;

            if (MainScene == Cv_SceneID.INVALID_SCENE)
            {
                MainScene = newID;
            }

            var scenePath = "/" + sceneName;
            var parent    = CaravelApp.Instance.Logic.GetEntity(parentID);

            if (parent != null)
            {
                scenePath = parent.EntityPath + scenePath;
            }

            Cv_SceneInfo info = new Cv_SceneInfo();

            info.SceneResource  = sceneResource;
            info.ResourceBundle = resourceBundle;
            info.InitTransform  = sceneTransform;
            info.SceneName      = sceneName;
            info.ID             = newID;
            info.ScenePath      = scenePath;
            info.parentID       = parentID;
            info.SceneRoot      = Cv_EntityID.INVALID_ENTITY;

            lock (m_Scenes)
            {
                m_Scenes.Add(newID, info);
                m_ScenePaths.Add(scenePath, info);
            }

            string preLoadScript  = null;
            string postLoadScript = null;

            var scriptElement = root.SelectNodes("Script").Item(0);

            if (scriptElement != null)
            {
                preLoadScript  = scriptElement.Attributes["preLoad"].Value;
                postLoadScript = scriptElement.Attributes["postLoad"].Value;
            }

            if (preLoadScript != null && preLoadScript != "")
            {
                Cv_ScriptResource preLoadRes = Cv_ResourceManager.Instance.GetResource <Cv_ScriptResource>(preLoadScript, resourceBundle);
                preLoadRes.RunScript();
            }

            var sceneRootNodes = root.SelectNodes("StaticEntities/Entity|StaticEntities/Scene");

            if (sceneRootNodes.Count > 1 || sceneRootNodes.Count <= 0 || sceneRootNodes.Item(0).Name == "Scene")
            {
                Cv_Debug.Error("Invalid scene root node for scene " + sceneName + "(" + sceneResource + ").\n Either the scene has multiple roots, no root or its root is not an entity.");
                return(null);
            }

            XmlElement overridesNode = overrides;

            if (sceneTransform != null)
            {
                if (overridesNode == null)
                {
                    XmlDocument doc = new XmlDocument();
                    overridesNode = doc.CreateElement("Overrides");
                }

                var transformNode = GenerateTransformXml(sceneTransform.Value, overridesNode.OwnerDocument);
                overridesNode.AppendChild(transformNode);
            }

            var sceneRootNode = sceneRootNodes.Item(0);
            var sceneRoot     = InstantiateSceneEntity(true, sceneRootNode, resourceBundle, parentID, newID, overridesNode);

            if (sceneRoot != null)
            {
                info.SceneRoot = sceneRoot.ID;

                var entitiesCreated = new List <Cv_Entity>();
                entitiesCreated.Add(sceneRoot);

                var entitiesNodes = sceneRootNode.SelectNodes("Entity|Scene");
                entitiesCreated.AddRange(CreateNestedEntities(entitiesNodes, sceneRoot.ID, resourceBundle, newID));

                if (!Caravel.Logic.OnLoadScene(root, newID, sceneName))
                {
                    if (MainScene == newID)
                    {
                        MainScene = Cv_SceneID.INVALID_SCENE;
                    }

                    var entitiesToRemove = Caravel.Logic.GetSceneEntities(newID);
                    foreach (var e in entitiesToRemove)
                    {
                        if (e != null && !e.DestroyRequested)
                        {
                            Caravel.Logic.DestroyEntity(e);
                        }
                    }

                    lock (m_Scenes)
                    {
                        m_Scenes.Remove(newID);
                        m_ScenePaths.Remove(scenePath);
                    }

                    return(null);
                }

                if (postLoadScript != null && postLoadScript != "")
                {
                    Cv_ScriptResource postLoadRes = Cv_ResourceManager.Instance.GetResource <Cv_ScriptResource>(postLoadScript, resourceBundle);
                    postLoadRes.RunScript();
                }

                return(entitiesCreated.ToArray());
            }

            lock (m_Scenes)
            {
                m_Scenes.Remove(newID);
                m_ScenePaths.Remove(scenePath);
            }

            return(null);
        }