44 lines
1.1 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|
|
}
|