90 lines
2.3 KiB
C#
90 lines
2.3 KiB
C#
// (c) Copyright HutongGames, LLC 2010-2016. All rights reserved.
|
|
|
|
#if UNITY_5_3 || UNITY_5_3_OR_NEWER
|
|
|
|
using System;
|
|
using UnityEngine;
|
|
using UnityEngine.SceneManagement;
|
|
|
|
namespace HutongGames.PlayMaker.Actions
|
|
{
|
|
[ActionCategory(ActionCategory.Scene)]
|
|
[Tooltip("Allow scenes to be activated. Use this after LoadSceneAsynch where you did not activated the scene upon loading")]
|
|
public class AllowSceneActivation : FsmStateAction
|
|
{
|
|
[RequiredField]
|
|
[UIHint(UIHint.Variable)]
|
|
[Tooltip("The name of the new scene. It cannot be empty or null, or same as the name of the existing scenes.")]
|
|
public FsmInt aSynchOperationHashCode;
|
|
|
|
[Tooltip("Allow the scene to be activated")]
|
|
public FsmBool allowSceneActivation;
|
|
|
|
[ActionSection("Result")]
|
|
|
|
[Tooltip("The loading's progress.")]
|
|
[UIHint(UIHint.Variable)]
|
|
public FsmFloat progress;
|
|
|
|
[Tooltip("True when loading is done")]
|
|
[UIHint(UIHint.Variable)]
|
|
public FsmBool isDone;
|
|
|
|
[Tooltip("Event sent when scene loading is done")]
|
|
public FsmEvent doneEvent;
|
|
|
|
[Tooltip("Event sent when action could not be performed. Check Log for more information")]
|
|
public FsmEvent failureEvent;
|
|
|
|
public override void Reset()
|
|
{
|
|
aSynchOperationHashCode = null;
|
|
allowSceneActivation = true;
|
|
|
|
progress = null;
|
|
isDone = null;
|
|
doneEvent = null;
|
|
failureEvent = null;
|
|
}
|
|
|
|
public override void OnEnter()
|
|
{
|
|
DoAllowSceneActivation ();
|
|
}
|
|
|
|
public override void OnUpdate()
|
|
{
|
|
if (!progress.IsNone)
|
|
progress.Value = LoadSceneAsynch.aSyncOperationLUT [aSynchOperationHashCode.Value].progress;
|
|
|
|
if (!isDone.IsNone) {
|
|
isDone.Value = LoadSceneAsynch.aSyncOperationLUT [aSynchOperationHashCode.Value].isDone;
|
|
}
|
|
|
|
if (LoadSceneAsynch.aSyncOperationLUT [aSynchOperationHashCode.Value].isDone) {
|
|
LoadSceneAsynch.aSyncOperationLUT.Remove (aSynchOperationHashCode.Value);
|
|
Fsm.Event (doneEvent);
|
|
Finish ();
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
void DoAllowSceneActivation()
|
|
{
|
|
if (aSynchOperationHashCode.IsNone ||
|
|
allowSceneActivation.IsNone ||
|
|
LoadSceneAsynch.aSyncOperationLUT==null ||
|
|
!LoadSceneAsynch.aSyncOperationLUT.ContainsKey(aSynchOperationHashCode.Value)
|
|
) {
|
|
Fsm.Event(failureEvent);
|
|
Finish();
|
|
return;
|
|
}
|
|
|
|
LoadSceneAsynch.aSyncOperationLUT [aSynchOperationHashCode.Value].allowSceneActivation = allowSceneActivation.Value;
|
|
}
|
|
}
|
|
}
|
|
|
|
#endif |