mirror of
https://github.com/BlackMATov/unity-iso-tools.git
synced 2025-12-15 09:16:08 +07:00
68 lines
1.8 KiB
C#
Executable File
68 lines
1.8 KiB
C#
Executable File
// (c) Copyright HutongGames, LLC 2010-2014. All rights reserved.
|
|
|
|
using UnityEngine;
|
|
using System.Collections.Generic;
|
|
|
|
namespace HutongGames.PlayMaker.Actions
|
|
{
|
|
[ActionCategory(ActionCategory.Array)]
|
|
[Tooltip("Shuffle values in an array. Optionally set a start index and range to shuffle only part of the array.")]
|
|
public class ArrayShuffle : FsmStateAction
|
|
{
|
|
[RequiredField]
|
|
[UIHint(UIHint.Variable)]
|
|
[Tooltip("The Array to shuffle.")]
|
|
public FsmArray array;
|
|
|
|
[Tooltip("Optional start Index for the shuffling. Leave it to none or 0 for no effect")]
|
|
public FsmInt startIndex;
|
|
|
|
[Tooltip("Optional range for the shuffling, starting at the start index if greater than 0. Leave it to none or 0 for no effect, it will shuffle the whole array")]
|
|
public FsmInt shufflingRange;
|
|
|
|
public override void Reset()
|
|
{
|
|
array = null;
|
|
startIndex = new FsmInt {UseVariable=true};
|
|
shufflingRange = new FsmInt {UseVariable=true};
|
|
}
|
|
|
|
// Code that runs on entering the state.
|
|
public override void OnEnter()
|
|
{
|
|
List<object> _list = new List<object>(array.Values);
|
|
|
|
int start = 0;
|
|
int end = _list.Count-1;
|
|
|
|
if (startIndex.Value>0)
|
|
{
|
|
start = Mathf.Min(startIndex.Value,end);
|
|
}
|
|
|
|
if (shufflingRange.Value>0)
|
|
{
|
|
end = Mathf.Min(_list.Count-1,start + shufflingRange.Value);
|
|
|
|
}
|
|
|
|
// Knuth-Fisher-Yates algo
|
|
|
|
// for (int i = proxy.arrayList.Count - 1; i > 0; i--)
|
|
for (int i = end; i > start; i--)
|
|
{
|
|
// Set swapWithPos a random position such that 0 <= swapWithPos <= i
|
|
int swapWithPos = Random.Range(start,i + 1);
|
|
|
|
// Swap the value at the "current" position (i) with value at swapWithPos
|
|
object tmp = _list[i];
|
|
_list[i] = _list[swapWithPos];
|
|
_list[swapWithPos] = tmp;
|
|
}
|
|
|
|
array.Values = _list.ToArray();
|
|
|
|
Finish();
|
|
}
|
|
}
|
|
} |