# SceneFlowManager

## Description

**SceneFlowManager** is the core script in runtime. It will use to manage the loading and navigation of scenes according the flow defined in Scene Flow graph.&#x20;

## Static Methods

| Method            | Return           | Parameters                         | Description                                                                              |
| ----------------- | ---------------- | ---------------------------------- | ---------------------------------------------------------------------------------------- |
| GetInstance       | SceneFlowManager | none                               | Get the scene flow manager instance. Only one instance of SceneFlowManager when running. |
| GetActions        | SceneAction\[]   | string sceneUID                    | Get the SceneAction list in current in the scene that with the specified UID.            |
| GetActionsName    | string\[]        | string sceneUID                    | Get the name list of SceneAction in the scene that with the specified UID.               |
| RunAction         | none             | string sceneUID, string actionUID  | Run the action with the specified scene UID and action UID.                              |
| RunActionWithName | none             | string sceneUID, string actionName | Run the action with the specified scene UID and action Name.                             |

## Events

| Event              | Parameter                         | Description                               |
| ------------------ | --------------------------------- | ----------------------------------------- |
| OnSceneStartLoad   | SceneInfo current, SceneInfo next | Invoke when scene start loading.          |
| OnSceneLoaded      | SceneInfo current, SceneInfo next | Invoke when scene load completed.         |
| OnSceneUnload      | SceneInfo current, SceneInfo next | Invoke when scene unload.                 |
| OnOverlayStartLoad | SceneInfo current, SceneInfo next | Invoke when overlay scene start loading.  |
| OnOverlayLoaded    | SceneInfo current, SceneInfo next | Invoke when overlay scene load completed. |
| OnOverlayUnload    | SceneInfo current, SceneInfo next | Invoke when overlay scene unload.         |

## Example

Add events to the SceneFlowManager

```csharp
void Awake(){
    SceneFlowManager manager = SceneFlowManager.GetInstance();
    manager.OnSceneLoaded+=HandleSceneLoaded;
    manager.OnSceneUnload+=HandleSceneUnload;
}

public void HandleSceneLoaded(SceneInfo previous, SceneInfo loaded)
{
    Debug.Log("[Scene Event: OnSceneLoaded] Previous:" + previous.SceneName + " Loaded: " + loaded.SceneName);
}

public void HandleSceneUnload(SceneInfo current, SceneInfo next)
{
    Debug.Log("[Scene Event: OnSceneUnload] Unloaded: " + current.SceneName);
}
```
