59 lines
1.2 KiB
C#
59 lines
1.2 KiB
C#
// (c) Copyright HutongGames, LLC 2010-2013. All rights reserved.
|
|
|
|
using UnityEngine;
|
|
|
|
namespace HutongGames.PlayMaker.Actions
|
|
{
|
|
[ActionCategory(ActionCategory.StateMachine)]
|
|
[Tooltip("Sends a Random Event picked from an array of Events. Optionally set the relative weight of each event.")]
|
|
public class SendRandomEvent : FsmStateAction
|
|
{
|
|
[CompoundArray("Events", "Event", "Weight")]
|
|
public FsmEvent[] events;
|
|
[HasFloatSlider(0, 1)]
|
|
public FsmFloat[] weights;
|
|
public FsmFloat delay;
|
|
|
|
DelayedEvent delayedEvent;
|
|
|
|
public override void Reset()
|
|
{
|
|
events = new FsmEvent[3];
|
|
weights = new FsmFloat[] {1,1,1};
|
|
delay = null;
|
|
}
|
|
|
|
public override void OnEnter()
|
|
{
|
|
if (events.Length > 0)
|
|
{
|
|
int randomIndex = ActionHelpers.GetRandomWeightedIndex(weights);
|
|
|
|
if (randomIndex != -1)
|
|
{
|
|
if (delay.Value < 0.001f)
|
|
{
|
|
Fsm.Event(events[randomIndex]);
|
|
Finish();
|
|
}
|
|
else
|
|
{
|
|
delayedEvent = Fsm.DelayedEvent(events[randomIndex], delay.Value);
|
|
}
|
|
|
|
return;
|
|
}
|
|
}
|
|
|
|
Finish();
|
|
}
|
|
|
|
public override void OnUpdate()
|
|
{
|
|
if (DelayedEvent.WasSent(delayedEvent))
|
|
{
|
|
Finish();
|
|
}
|
|
}
|
|
}
|
|
} |