51 lines
1.4 KiB
C#
51 lines
1.4 KiB
C#
using System.Collections.Generic;
|
||
using UnityEngine;
|
||
|
||
namespace CharacterSystem
|
||
{
|
||
[CreateAssetMenu(fileName = "ReplicasSet", menuName = "Scriptable Objects/ReplicasSet")]
|
||
public class ReplicasSet : ScriptableObject
|
||
{
|
||
public GameEvent type;
|
||
|
||
[SerializeField] private List<Replica> _referenceList;
|
||
|
||
private List<Replica> _currentPool;
|
||
|
||
[field: SerializeField, Range(0f, 1f)] public float PlayProbability { get; private set; } = 1f;
|
||
|
||
public Replica GetNext()
|
||
{
|
||
if (_currentPool == null || _currentPool.Count == 0)
|
||
Refill();
|
||
|
||
if (_currentPool.Count == 0)
|
||
{
|
||
Debug.LogError($"Набор реплик {name} пуст");
|
||
return default;
|
||
}
|
||
|
||
Replica item = _currentPool[^1];
|
||
_currentPool.RemoveAt(_currentPool.Count - 1);
|
||
return item;
|
||
}
|
||
|
||
public void Refill()
|
||
{
|
||
_currentPool = _referenceList == null
|
||
? new List<Replica>()
|
||
: new List<Replica>(_referenceList);
|
||
Shuffle(_currentPool);
|
||
}
|
||
|
||
private void Shuffle(List<Replica> list)
|
||
{
|
||
for (int i = 0; i < list.Count; i++)
|
||
{
|
||
int randomIndex = Random.Range(i, list.Count);
|
||
(list[i], list[randomIndex]) = (list[randomIndex], list[i]);
|
||
}
|
||
}
|
||
}
|
||
}
|