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); }
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); } }
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); }
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); }
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); }