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 _referenceList; private List _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() : new List(_referenceList); Shuffle(_currentPool); } private void Shuffle(List list) { for (int i = 0; i < list.Count; i++) { int randomIndex = Random.Range(i, list.Count); (list[i], list[randomIndex]) = (list[randomIndex], list[i]); } } } }