Files
2024-11-20 15:21:28 +01:00

93 lines
2.1 KiB
C#

// (c) Copyright HutongGames, LLC 2010-2013. All rights reserved.
// Thanks derkoi:
// http://hutonggames.com/playmakerforum/index.php?topic=4700.0
using UnityEngine;
namespace HutongGames.PlayMaker.Actions
{
[ActionCategory(ActionCategory.Time)]
[Tooltip("Delays a State from finishing by a random time. NOTE: Other actions continue, but FINISHED can't happen before Time.")]
public class RandomWait : FsmStateAction
{
[RequiredField]
[Tooltip("Minimum amount of time to wait.")]
public FsmFloat min;
[RequiredField]
[Tooltip("Maximum amount of time to wait.")]
public FsmFloat max;
[Tooltip("Event to send when timer is finished.")]
public FsmEvent finishEvent;
[Tooltip("Ignore time scale.")]
public bool realTime;
private float startTime;
private float timer;
private float time;
public override void Reset()
{
min = 0f;
max = 1f;
finishEvent = null;
realTime = false;
}
public override void OnEnter()
{
time = Random.Range(min.Value, max.Value);
if (time <= 0)
{
Fsm.Event(finishEvent);
Finish();
return;
}
startTime = FsmTime.RealtimeSinceStartup;
timer = 0f;
}
public override void OnUpdate()
{
// update time
if (realTime)
{
timer = FsmTime.RealtimeSinceStartup - startTime;
}
else
{
timer += Time.deltaTime;
}
if (timer >= time)
{
Finish();
if (finishEvent != null)
{
Fsm.Event(finishEvent);
}
}
}
#if UNITY_EDITOR
public override string AutoName()
{
return ActionHelpers.AutoNameRange(this, min, max);
}
public override float GetProgress()
{
return Mathf.Min(timer / time, 1f);
}
#endif
}
}