Files
beyond/Assets/ThirdParty/PlayMaker/Actions/SceneManager/SendSceneLoadedEvent.cs
2024-11-20 15:21:28 +01:00

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