sega 116b9b3116 Рефакторинг Character.cs: приведение к SRP и вынос логики
Инкапсулированы методы появления и ухода персонажа
Инкапсулирована работа с аниматором
Работа с репликами вынесена в ScriptableObject
Логика MessageBox вынесена в отдельный класс
Переработан event bus персонажей
Сложность и призовой модуль вынесены в отдельные классы
Character.cs приведён к Single Responsibility Principle.
2026-08-13 16:19:56 +03:00

52 lines
2.0 KiB
C#

using System.Collections.Generic;
using UnityEngine;
namespace CharacterSystem
{
[CreateAssetMenu(fileName = "DifficultyModule", menuName = "Scriptable Objects/DifficultyModule")]
public class DifficultyModule : ScriptableObject
{
[Header("Списки сложностей")]
public List<DifficultyPreset> difficultyPresetsEasy;
public List<DifficultyPreset> difficultyPresetsMedium;
public List<DifficultyPreset> difficultyPresetsHard;
[Header("Время размышлений")]
[SerializeField] float minThinkTime = 0;
[SerializeField] float maxThinkTime = 2;
private int presetIndex;
private List<DifficultyPreset> _activeDifficultyList;
public float ThinkTime => Random.Range(minThinkTime, maxThinkTime);
public void PullSettings() // прокинуть подписку
{
var difficulty = SettingsManager.GetString(SettingKey.DIFFICULTY);
var mode = SettingsManager.GetString(SettingKey.DIFFICULTY_MODE);
_activeDifficultyList = mode == "Заработок" ? difficultyPresetsHard : GetListByDifficulty(difficulty);
ResetPresetIndex();
}
public DifficultyPreset GetCurrentPreset()
=> _activeDifficultyList[presetIndex];
public void IncreaseDifficuly()
=> presetIndex = Mathf.Clamp(presetIndex + 1, 0, _activeDifficultyList.Count - 1);
public void DecreaseDifficuly()
=> presetIndex = Mathf.Clamp(presetIndex - 1, 0, _activeDifficultyList.Count - 1);
public void ResetPresetIndex()
=> presetIndex = _activeDifficultyList.Count / 2;
private List<DifficultyPreset> GetListByDifficulty(string difficulty) => difficulty switch
{
"Легкая" => difficultyPresetsEasy,
"Средняя" => difficultyPresetsMedium,
"Сложная" => difficultyPresetsHard,
_ => difficultyPresetsMedium
};
}
}