2024-06-23 19:12:22 +01:00

44 lines
1.1 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace MBT
{
[AddComponentMenu("")]
[MBTNode("Decorators/Random Chance")]
public class RandomChance : Decorator
{
[Tooltip("Probability should be between 0 and 1")]
public FloatReference probability = new FloatReference(0.5f);
private float roll;
public override void OnAllowInterrupt()
{
roll = Random.Range(0f, 1f);
}
public override NodeResult Execute()
{
Node node = GetChild();
if (node == null) {
return NodeResult.failure;
}
if (node.status == Status.Success || node.status == Status.Failure) {
return NodeResult.From(node.status);
}
if (roll > probability.Value) {
return NodeResult.failure;
}
return node.runningNodeResult;
}
void OnValidate()
{
if (probability.isConstant)
{
probability.Value = Mathf.Clamp(probability.GetConstant(), 0f, 1f);
}
}
}
}