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

75 lines
2.1 KiB
C#

// (c) Copyright HutongGames, LLC 2010-2018. All rights reserved.
// 'inclusiveMax' option added by MaDDoX (@brenoazevedo)
using UnityEngine;
namespace HutongGames.PlayMaker.Actions
{
[ActionCategory(ActionCategory.Math)]
[Tooltip("Sets an Integer Variable to a random value between Min/Max.")]
public class RandomInt : FsmStateAction
{
[RequiredField]
[Tooltip("Minimum value for the random number.")]
public FsmInt min;
[RequiredField]
[Tooltip("Maximim value for the random number.")]
public FsmInt max;
[RequiredField]
[UIHint(UIHint.Variable)]
[Tooltip("Store the result in an Integer variable.")]
public FsmInt storeResult;
[Tooltip("Should the Max value be included in the possible results?")]
public bool inclusiveMax;
[Tooltip("Don't repeat the same value twice.")]
public FsmBool noRepeat;
private int randomIndex;
private int lastIndex = -1;
public override void Reset()
{
min = 0;
max = 100;
storeResult = null;
// make default false to not break old behavior.
inclusiveMax = false;
noRepeat = true;
}
public override void OnEnter()
{
PickRandom();
Finish();
}
void PickRandom()
{
if (noRepeat.Value && max.Value != min.Value && (!inclusiveMax && (Mathf.Abs (max.Value - min.Value) > 1) ))
{
do
{
randomIndex = (inclusiveMax) ?
Random.Range(min.Value, max.Value + 1) :
Random.Range(min.Value, max.Value);
} while (randomIndex == lastIndex);
lastIndex = randomIndex;
storeResult.Value = randomIndex;
}
else
{
randomIndex = (inclusiveMax) ?
Random.Range(min.Value, max.Value + 1) :
Random.Range(min.Value, max.Value);
storeResult.Value = randomIndex;
}
}
}
}