chip-gameV3/Assets/Scripts/Characters/DifficultyModule.cs

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
};
}
}