private void OnDestroy() { StopAllCoroutines(); if (m_LoadingScreen != null) { Destroy(m_LoadingScreen); m_LoadingScreen = null; } if (m_Overlay != null) { Destroy(m_Overlay); m_Overlay = null; } m_Instance = null; m_ActionController = null; m_OpenedViews.Clear(); m_OpenedViews = null; m_ClosedViews.Clear(); m_ClosedViews = null; m_OpeningView = null; m_ClosingViews.Clear(); m_ClosingViews = null; m_GainingFocusView = null; m_LosingFocusView = null; m_CurrentActionData = null; m_QueuedActions.Clear(); m_QueuedActions = null; }
public virtual void OpenView(FlowViewData viewData, FlowActionData actionData) { m_State = eState.OPENING; m_ViewData = viewData; OnViewOpened(); }
public override void OpenView(FlowViewData viewData, FlowActionData actionData) { base.OpenView(viewData, actionData); LoadHand(1); LoadHand(2); }
private void LoadData() { TextAsset xmlFile = Resources.Load(FLOW_XML_PATH) as TextAsset; if (xmlFile != null && xmlFile.text != "") { XmlDocument xmlDocument = new XmlDocument(); xmlDocument.LoadXml(xmlFile.text); // First, find the root. foreach (XmlNode baseNode in xmlDocument.GetElementsByTagName("flow")) { LoadFlowData(baseNode); // Find the action nodes. foreach (XmlNode viewNode in baseNode.ChildNodes) { // First look for the views. List <FlowActionData> viewActionsData = new List <FlowActionData>(); FlowViewData viewData = LoadViewData(viewNode, ref viewActionsData); if (viewData != null) { m_ViewsData.Add(viewData.ViewId, viewData); // Add it to the view action data list. foreach (FlowActionData actionData in viewActionsData) { Dictionary <string, FlowActionData> actionsData = null; if (m_ViewActionsData.ContainsKey(viewData.ViewId)) { actionsData = m_ViewActionsData[viewData.ViewId]; if (!actionsData.ContainsKey(actionData.ActionName)) { actionsData.Add(actionData.ActionName, actionData); } } else { actionsData = new Dictionary <string, FlowActionData>(); actionsData.Add(actionData.ActionName, actionData); m_ViewActionsData.Add(viewData.ViewId, actionsData); } } } // Then, for global actions. else { FlowActionData actionData = LoadActionData(viewNode); // Add it to the action data list. if (actionData != null && !m_ActionsData.ContainsKey(actionData.ActionName)) { m_ActionsData.Add(actionData.ActionName, actionData); } } } } } }
private void GainFocus(View view, FlowActionData actionData) { // Display overlay if requested/necessary. m_Overlay.transform.position = new Vector3(0.0f, 0.0f, (m_OpenedViews.IndexOf(view) * -m_ActionController.ViewDepth) + m_ActionController.OverlayOffset); m_Overlay.SetActive(m_OpenedViews.Count > 1 && actionData.UseOverlay); m_GainingFocusView.GainFocus(m_CurrentActionData); }
public override void HandleAction(FlowActionData actionData) { base.HandleAction(actionData); if (actionData.ActionName == "LOSE_RABBIT") { m_NbRabbits--; } }
public FlowActionData Clone() { // Remember to always keep this function up to date. FlowActionData actionData = new FlowActionData(ActionName, ViewId, IsPopup, UseLoadingScreen, UseOverlay); foreach (string parameterKey in m_Parameters.Keys) { actionData.AddParameter(parameterKey, m_Parameters[parameterKey]); } return actionData; }
public FlowActionData Clone() { // Remember to always keep this function up to date. FlowActionData actionData = new FlowActionData(ActionName, ViewId, IsPopup, UseLoadingScreen, UseOverlay); foreach (string parameterKey in m_Parameters.Keys) { actionData.AddParameter(parameterKey, m_Parameters[parameterKey]); } return(actionData); }
public bool TriggerAction(FlowActionData actionData) { if (actionData != null) { m_QueuedActions.Add(actionData); TriggerNextAction(); return(true); } return(false); }
public override void OpenView(FlowViewData viewData, FlowActionData actionData) { base.OpenView(viewData, actionData); object levelIdObj = actionData.GetParameterValue("LEVEL_ID"); if (levelIdObj != null) { LoadLevelList(int.Parse(levelIdObj.ToString())); } else { LoadLevelList(); } LoadNextLevel(true); }
private FlowActionData LoadActionData(XmlNode actionNode) { FlowActionData actionData = null; if (actionNode.Name == "action") { string actionName = ""; string viewId = ""; bool isPopup = false; bool useLoadingScreen = false; bool useOverlay = true; foreach (XmlAttribute actionAttributes in actionNode.Attributes) { if (actionAttributes.Name == "name") { actionName = actionAttributes.Value; } else if (actionAttributes.Name == "viewId") { viewId = actionAttributes.Value; } else if (actionAttributes.Name == "popup") { bool.TryParse(actionAttributes.Value, out isPopup); } else if (actionAttributes.Name == "loading") { bool.TryParse(actionAttributes.Value, out useLoadingScreen); } else if (actionAttributes.Name == "overlay") { bool.TryParse(actionAttributes.Value, out useOverlay); } } if (!string.IsNullOrEmpty(actionName)) { actionData = new FlowActionData(actionName, viewId, isPopup, useLoadingScreen, useOverlay); actionData.AddParameters(LoadParameters(actionNode)); } } return(actionData); }
private IEnumerator LoadView(FlowViewData viewData, FlowActionData actionData) { // Let the loading screen appearing. if (actionData.UseLoadingScreen) { yield return(new WaitForSeconds(m_ActionController.LoadingMinDuration)); } // TODO ppoirier: Ideally, we should do an async call. Application.LoadLevelAdditive(viewData.ViewName); // TODO ppoirier: Seems necessary when not on a Pro licence. yield return(null); GameObject viewObj = GameObject.Find(viewData.ViewName); if (viewObj != null) { viewObj.transform.parent = transform; viewObj.transform.position = new Vector3(0.0f, 0.0f, m_OpenedViews.Count * -m_ActionController.ViewDepth); View view = viewObj.GetComponent <View>(); if (view != null) { // Display overlay if requested/necessary. m_Overlay.transform.position = new Vector3(0.0f, 0.0f, m_OpenedViews.Count * -m_ActionController.ViewDepth + m_ActionController.OverlayOffset); m_Overlay.SetActive(actionData.IsPopup && actionData.UseOverlay); view.name = viewData.ViewId; view.OpenView(viewData, actionData); } else { Destroy(viewObj); Debug.LogError("FlowManager, LoadView: The scene '" + viewData.ViewName + "' must have a 'View' script attached to it."); } } else { Debug.LogError("FlowManager, LoadView: Cannot load scene '" + viewData.ViewName + "'."); } }
public bool TriggerAction(string actionName, Dictionary <string, object> parameters = null) { View topView = GetTopView(); FlowActionData actionData = m_ActionController.GetActionData(topView == null ? "" : topView.ViewData.ViewId, actionName); if (actionData != null) { // Make sure not to modify the original one. actionData = actionData.Clone(); actionData.AddParameters(parameters); return(TriggerAction(actionData)); } else { Debug.LogError("FlowManager, TriggerAction: The action '" + actionName + "' didn't exist in the current view (" + (topView == null ? "" : topView.ViewData.ViewId) + ")."); } return(false); }
private FlowViewData LoadViewData(XmlNode viewNode, ref List <FlowActionData> actionsData) { FlowViewData viewData = null; if (viewNode.Name == "view") { string viewId = ""; string viewName = ""; foreach (XmlAttribute viewAttributes in viewNode.Attributes) { if (viewAttributes.Name == "id") { viewId = viewAttributes.Value; } else if (viewAttributes.Name == "name") { viewName = viewAttributes.Value; } } // Keep the string item only if it has a key. if (!string.IsNullOrEmpty(viewId) && !string.IsNullOrEmpty(viewName)) { viewData = new FlowViewData(viewId, viewName); viewData.AddParameters(LoadParameters(viewNode)); foreach (XmlNode actionNode in viewNode.ChildNodes) { FlowActionData actionData = LoadActionData(actionNode); if (actionData != null) { actionsData.Add(actionData); } } } } return(viewData); }
public override void HandleAction(FlowActionData actionData) { if (m_SceneReady) { if (actionData.ActionName == "CHOOSE_ONE_PLAYER") { // Remove if single player only. ControllerInputManager.Instance.RemoveController(ControllerInputManager.Instance.Keyboard2ControllerId); ControllerInputManager.Instance.Keyboard2ControllerId = ControllerInputManager.eControllerId.NONE; ControllerInputManager.Instance.RemoveController(ControllerInputManager.Instance.MouseControllerId); ControllerInputManager.Instance.MouseControllerId = ControllerInputManager.eControllerId.NONE; GameUtils.m_GameMode = GameUtils.eGameMode.ONE_PLAYER; FlowManager.Instance.TriggerAction("GO_TO_MAIN_GAME"); } else if (actionData.ActionName == "CHOOSE_TWO_PLAYER") { GameUtils.m_GameMode = GameUtils.eGameMode.TWO_PLAYER; FlowManager.Instance.TriggerAction("GO_TO_MAIN_GAME"); } } }
public virtual void GainFocus(FlowActionData actionData) { m_State = eState.GAINING_FOCUS; OnFocusGained(); }
public virtual void HandleAction(FlowActionData actionData) { }
public virtual void CloseView(FlowActionData actionData) { m_State = eState.CLOSING; OnViewClosed(); }
public virtual void LoseFocus(FlowActionData actionData) { m_State = eState.LOSING_FOCUS; OnFocusLost(); }
private void TriggerNextAction() { if (!IsBusy && m_QueuedActions.Count > 0) { // Get the first in action in queue. m_CurrentActionData = m_QueuedActions[0]; FlowViewData viewData = m_ActionController.GetViewData(m_CurrentActionData.ViewId); m_QueuedActions.Remove(m_CurrentActionData); View topView = GetTopView(); if (topView != null && viewData != null && viewData.ViewId == topView.ViewData.ViewId) { topView.HandleAction(m_CurrentActionData); TriggerNextAction(); } else if (string.IsNullOrEmpty(m_CurrentActionData.ViewId) || viewData != null) { // Find if the view is already opened. for (int i = m_OpenedViews.Count - 1; i >= 0; --i) { View view = m_OpenedViews[i]; // If already in the queue, it gains the focus. if ((string.IsNullOrEmpty(m_CurrentActionData.ViewId) && view.ViewData == GetBeforeTopView()) || (viewData != null && view.ViewData.ViewId == viewData.ViewId)) { m_GainingFocusView = view; // If a popup, or we are closing the top view. if (string.IsNullOrEmpty(m_CurrentActionData.ViewId) || m_CurrentActionData.IsPopup) { // Close all popup on higher levels than one opening. for (int j = i + 1; j < m_OpenedViews.Count; ++j) { if (m_LosingFocusView == m_OpenedViews[j]) { m_LosingFocusView = null; } m_ClosingViews.Add(m_OpenedViews[j]); } } } // If not in the queue, close/hide the other ones. // We don't want to close view in the case we're just closing the top one. else if (!string.IsNullOrEmpty(m_CurrentActionData.ViewId)) { // If we are opening a popup, hide them. if (m_CurrentActionData.IsPopup) { // If it's the top view. if (topView != null && view.ViewData == topView.ViewData) { // Losing focus because we are opening a new view. m_LosingFocusView = view; } } // If we are not opening a popup, close everything. else { m_ClosingViews.Add(view); } } } // If nothing is gaining focus, we open a new view. if (viewData != null && m_GainingFocusView == null) { m_OpeningView = viewData; } // Display the loading screen if requested. if (m_OpeningView != null && m_CurrentActionData.UseLoadingScreen) { m_LoadingScreen.transform.position = new Vector3(0.0f, 0.0f, (m_OpenedViews.Count + 1) * -m_ActionController.ViewDepth); m_LoadingScreen.SetActive(true); } TriggerNextView(); } else { Debug.LogError("FlowManager, TriggerNextAction: Cannot trigger '" + m_CurrentActionData.ActionName + "' in current scene (" + (viewData == null ? "NONE" : viewData.ViewId) + ")."); TriggerNextAction(); } } }
public bool TriggerAction(FlowActionData actionData) { if (actionData != null) { m_QueuedActions.Add(actionData); TriggerNextAction(); return true; } return false; }
private IEnumerator LoadView(FlowViewData viewData, FlowActionData actionData) { // Let the loading screen appearing. if (actionData.UseLoadingScreen) { yield return new WaitForSeconds(m_ActionController.LoadingMinDuration); } // TODO ppoirier: Ideally, we should do an async call. Application.LoadLevelAdditive(viewData.ViewName); // TODO ppoirier: Seems necessary when not on a Pro licence. yield return null; GameObject viewObj = GameObject.Find(viewData.ViewName); if (viewObj != null) { viewObj.transform.parent = transform; viewObj.transform.position = new Vector3(0.0f, 0.0f, m_OpenedViews.Count * -m_ActionController.ViewDepth); View view = viewObj.GetComponent<View>(); if (view != null) { // Display overlay if requested/necessary. m_Overlay.transform.position = new Vector3(0.0f, 0.0f, m_OpenedViews.Count * -m_ActionController.ViewDepth + m_ActionController.OverlayOffset); m_Overlay.SetActive(actionData.IsPopup && actionData.UseOverlay); view.name = viewData.ViewId; view.OpenView(viewData, actionData); } else { Destroy(viewObj); Debug.LogError("FlowManager, LoadView: The scene '" + viewData.ViewName + "' must have a 'View' script attached to it."); } } else { Debug.LogError("FlowManager, LoadView: Cannot load scene '" + viewData.ViewName + "'."); } }
private FlowActionData LoadActionData(XmlNode actionNode) { FlowActionData actionData = null; if (actionNode.Name == "action") { string actionName = ""; string viewId = ""; bool isPopup = false; bool useLoadingScreen = false; bool useOverlay = true; foreach (XmlAttribute actionAttributes in actionNode.Attributes) { if (actionAttributes.Name == "name") { actionName = actionAttributes.Value; } else if (actionAttributes.Name == "viewId") { viewId = actionAttributes.Value; } else if (actionAttributes.Name == "popup") { bool.TryParse(actionAttributes.Value, out isPopup); } else if (actionAttributes.Name == "loading") { bool.TryParse(actionAttributes.Value, out useLoadingScreen); } else if (actionAttributes.Name == "overlay") { bool.TryParse(actionAttributes.Value, out useOverlay); } } if (!string.IsNullOrEmpty(actionName)) { actionData = new FlowActionData(actionName, viewId, isPopup, useLoadingScreen, useOverlay); actionData.AddParameters(LoadParameters(actionNode)); } } return actionData; }