/// <summary>
	/// Called when a scene finishes playing its intro flow.
	/// </summary>
	/// <param name='scene'>
	/// The scene.
	/// </param>
	public void OnSceneIntroFinished(SceneBlock scene)
	{
		Debug.Log("Scene INTRO: " + scene.name);
		
		// If this is the current scene because the previous scene was destroyed, start the idle flow
		if (loadedScenes[0] == scene) {
			// We go from intro to outro automatically
			AdvanceFlow();
			
			// Preload the next scene
			if (loadedScenes[0].preloadNextScene) {
				LoadScene(loadedScenes[0].nextScene);
			}
		}
	}
	/// <summary>
	/// Called when a scene finishes playing its outro flow.
	/// </summary>
	/// <param name='scene'>
	/// The scene.
	/// </param>
	public void OnSceneOutroFinished(SceneBlock scene)
	{
		Debug.Log("Scene OUTRO: " + scene.name);
		DestroyScene(scene);
		
		// If the outro flow finished after the intro flow of the next scene, start the idle flow of the next scene
		if (loadedScenes.Count < 1 || !loadedScenes[0].IsPlaying()) {
			AdvanceFlow();
			
			// Preload the next scene
			if (loadedScenes[0].preloadNextScene) {
				LoadScene(loadedScenes[0].nextScene);
			}
		}
	}
	/// <summary>
	/// Destroys the scene.
	/// </summary>
	/// <param name='scene'>
	/// Scene.
	/// </param>
	protected void DestroyScene(SceneBlock scene)
	{
		loadedScenes.Remove(scene);
		Destroy(scene.gameObject);
	}
	/// <summary>
	/// Called when a scene finishes playing its idle flow.
	/// </summary>
	/// <param name='scene'>
	/// The scene.
	/// </param>
	public void OnSceneIdleFinished(SceneBlock scene)
	{
		Debug.Log("Scene IDLE: " + scene.name);
		
		if (GenericSettings.Instance.Autoplay) {
			AdvanceFlow();
		}
	}