Инкапсулированы методы появления и ухода персонажа Инкапсулирована работа с аниматором Работа с репликами вынесена в ScriptableObject Логика MessageBox вынесена в отдельный класс Переработан event bus персонажей Сложность и призовой модуль вынесены в отдельные классы Character.cs приведён к Single Responsibility Principle.
39 lines
1.2 KiB
C#
39 lines
1.2 KiB
C#
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
|
|
namespace CharacterSystem
|
|
{
|
|
[CreateAssetMenu(fileName = "ReplicasSet", menuName = "Scriptable Objects/ReplicasSet")]
|
|
public class ReplicasSet : ScriptableObject
|
|
{
|
|
public GameEvent type;
|
|
[field: SerializeField, Range(0, 1)] public float playProbability { get; } = 1f;
|
|
|
|
[SerializeField] private List<Replica> _referenceList;
|
|
private List<Replica> _currentPool;
|
|
|
|
public Replica GetNext()
|
|
{
|
|
if (_currentPool.Count == 0) Refill();
|
|
|
|
Replica item = _currentPool[^1]; // Берем последний элемент
|
|
_currentPool.RemoveAt(_currentPool.Count - 1);
|
|
return item;
|
|
}
|
|
|
|
public void Refill()
|
|
{
|
|
_currentPool = 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]);
|
|
}
|
|
}
|
|
}
|
|
} |