79 lines
1.7 KiB
C#
79 lines
1.7 KiB
C#
// (c) Copyright HutongGames, LLC 2010-2016. All rights reserved.
|
|
|
|
#if UNITY_5_4_OR_NEWER
|
|
|
|
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.SceneManagement;
|
|
|
|
namespace HutongGames.PlayMaker.Actions
|
|
{
|
|
[ActionCategory(ActionCategory.Scene)]
|
|
[Tooltip("Send an event when a scene was loaded. Use the Safe version when you want to access content of the loaded scene. Use GetSceneloadedEventData to find out about the loaded Scene and load mode")]
|
|
public class SendSceneLoadedEvent : FsmStateAction
|
|
{
|
|
|
|
[Tooltip("The event to send when a scene was loaded")]
|
|
public FsmEvent sceneLoaded;
|
|
|
|
[Tooltip("The event to send when a scene was loaded, with a one frame delay to make sure the scene content was indeed initialized fully")]
|
|
public FsmEvent sceneLoadedSafe;
|
|
|
|
public static Scene lastLoadedScene;
|
|
public static LoadSceneMode lastLoadedMode;
|
|
|
|
int _loaded = -1;
|
|
|
|
public override void Reset()
|
|
{
|
|
sceneLoaded = null;
|
|
}
|
|
|
|
public override void OnEnter()
|
|
{
|
|
_loaded = -1;
|
|
SceneManager.sceneLoaded += SceneManager_sceneLoaded;
|
|
}
|
|
|
|
void SceneManager_sceneLoaded (Scene scene, LoadSceneMode mode)
|
|
{
|
|
lastLoadedScene = scene;
|
|
lastLoadedMode = mode;
|
|
Fsm.Event (sceneLoaded);
|
|
|
|
_loaded = Time.frameCount;
|
|
|
|
if (sceneLoadedSafe == null) {
|
|
Finish ();
|
|
}
|
|
}
|
|
public override void OnUpdate()
|
|
{
|
|
|
|
if (_loaded>-1 && Time.frameCount>_loaded) {
|
|
_loaded = -1;
|
|
Fsm.Event (sceneLoadedSafe);
|
|
Finish ();
|
|
}
|
|
|
|
}
|
|
|
|
|
|
public override void OnExit()
|
|
{
|
|
SceneManager.sceneLoaded -= SceneManager_sceneLoaded;
|
|
}
|
|
|
|
public override string ErrorCheck()
|
|
{
|
|
if (sceneLoaded == null && sceneLoadedSafe == null) {
|
|
return "At least one event setup is required";
|
|
}
|
|
|
|
return string.Empty;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
#endif |