71 lines
2.7 KiB
C#
71 lines
2.7 KiB
C#
using System.Collections.Generic;
|
|
using UnityEngine;
|
|
using UnityEngine.Serialization;
|
|
|
|
namespace CharacterSystem
|
|
{
|
|
[CreateAssetMenu(fileName = "DifficultyModule", menuName = "Scriptable Objects/DifficultyModule")]
|
|
public class DifficultyModule : ScriptableObject
|
|
{
|
|
[FormerlySerializedAs("difficultyPresetsEasy")]
|
|
[SerializeField] private List<DifficultyPreset> _difficultyPresetsEasy = new List<DifficultyPreset>();
|
|
[FormerlySerializedAs("difficultyPresetsMedium")]
|
|
[SerializeField] private List<DifficultyPreset> _difficultyPresetsMedium = new List<DifficultyPreset>();
|
|
[FormerlySerializedAs("difficultyPresetsHard")]
|
|
[SerializeField] private List<DifficultyPreset> _difficultyPresetsHard = new List<DifficultyPreset>();
|
|
[FormerlySerializedAs("minThinkTime")]
|
|
[SerializeField] private float _minThinkTime;
|
|
[FormerlySerializedAs("maxThinkTime")]
|
|
[SerializeField] private float _maxThinkTime = 2f;
|
|
|
|
private int _presetIndex;
|
|
private List<DifficultyPreset> _activeDifficultyList;
|
|
|
|
public float ThinkTime => Random.Range(_minThinkTime, _maxThinkTime);
|
|
|
|
public void PullSettings()
|
|
{
|
|
string difficulty = SettingsManager.GetString(SettingKey.DIFFICULTY);
|
|
string mode = SettingsManager.GetString(SettingKey.DIFFICULTY_MODE);
|
|
_activeDifficultyList = mode == "Заработок" ? _difficultyPresetsHard : GetListByDifficulty(difficulty);
|
|
|
|
ResetPresetIndex();
|
|
}
|
|
|
|
public DifficultyPreset GetCurrentPreset()
|
|
{
|
|
if (_activeDifficultyList == null || _activeDifficultyList.Count == 0)
|
|
return null;
|
|
|
|
return _activeDifficultyList[_presetIndex];
|
|
}
|
|
|
|
public void IncreaseDifficulty()
|
|
{
|
|
if (_activeDifficultyList == null || _activeDifficultyList.Count == 0)
|
|
return;
|
|
|
|
_presetIndex = Mathf.Clamp(_presetIndex + 1, 0, _activeDifficultyList.Count - 1);
|
|
}
|
|
|
|
public void DecreaseDifficulty()
|
|
{
|
|
if (_activeDifficultyList == null || _activeDifficultyList.Count == 0)
|
|
return;
|
|
|
|
_presetIndex = Mathf.Clamp(_presetIndex - 1, 0, _activeDifficultyList.Count - 1);
|
|
}
|
|
|
|
public void ResetPresetIndex()
|
|
=> _presetIndex = _activeDifficultyList == null ? 0 : _activeDifficultyList.Count / 2;
|
|
|
|
private List<DifficultyPreset> GetListByDifficulty(string difficulty) => difficulty switch
|
|
{
|
|
"Легкая" => _difficultyPresetsEasy,
|
|
"Средняя" => _difficultyPresetsMedium,
|
|
"Сложная" => _difficultyPresetsHard,
|
|
_ => _difficultyPresetsMedium
|
|
};
|
|
}
|
|
}
|