// (c) Copyright HutongGames, LLC 2010-2018. All rights reserved. using UnityEngine; namespace HutongGames.PlayMaker.Actions { [ActionCategory(ActionCategory.Array)] [Tooltip("Get a Random item from an Array.")] public class ArrayGetRandom : FsmStateAction { [RequiredField] [UIHint(UIHint.Variable)] [Tooltip("The Array to use.")] public FsmArray array; [RequiredField] [UIHint(UIHint.Variable)] [Tooltip("Store the value in a variable.")] [MatchElementType("array")] public FsmVar storeValue; [Tooltip("The index of the value in the array.")] [UIHint(UIHint.Variable)] public FsmInt index; [Tooltip("Don't get the same item twice in a row.")] public FsmBool noRepeat; [Tooltip("Repeat every frame while the state is active.")] public bool everyFrame; private int randomIndex; private int lastIndex = -1; public override void Reset() { array = null; storeValue = null; index = null; everyFrame = false; noRepeat = false; } // Code that runs on entering the state. public override void OnEnter() { DoGetRandomValue(); if (!everyFrame) { Finish(); } } public override void OnUpdate() { DoGetRandomValue(); } private void DoGetRandomValue() { if (storeValue.IsNone) { return; } if (!noRepeat.Value || array.Length == 1) { randomIndex = Random.Range(0, array.Length); } else { do { randomIndex = Random.Range(0, array.Length); } while (randomIndex == lastIndex); lastIndex = randomIndex; } index.Value = randomIndex; storeValue.SetValue(array.Get(index.Value)); } } }