2026-07-14 11:14:13 +03:00

103 lines
3.2 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections;
using System.Collections.Generic;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
public class NumberInput : MonoBehaviour
{
[Header("Ключ prefs")]
[SerializeField] private string key;
[SerializeField] private bool loadData;
[SerializeField] private bool saveDataOnClose = true;
[Header("Звуки")]
[SerializeField] private AudioClip switchSlotSound;
[SerializeField] private AudioClip switchLetterSound;
[SerializeField] private AudioClip acceptSound;
[SerializeField] private AudioClip openSound;
[Header("Скорость переключения")]
[SerializeField] private float MaxSpeedLetterPerSecond = 8;
[SerializeField] private float MinSpeedLetterPerSecond = 3;
[SerializeField] private float MaxSpeedTime = 3;
[SerializeField] private float MinSpeedTime = 0.5f;
private float switchButtonPressedTime = 0;
private float letterSwitchSpeed = 0;
private float switchDelayRest = 1;
//[SerializeField] private int defaultValue = 1;
[SerializeField] private int minValue = 1;
[SerializeField] private int maxValue = 999;
[SerializeField] private int currentValue;
[SerializeField] TextMeshProUGUI valueLabel;
public void Initialize()
{
LoadSavedData();
SoundManager.instance.playClip(openSound);
}
public int AcceptAndClose()
{
if (!string.IsNullOrEmpty(key) && saveDataOnClose)
{
PlayerPrefs.SetInt(key, currentValue);
SettingsManager.OnSettingsChanged?.Invoke();
}
SoundManager.instance.playClip(acceptSound);
return currentValue;
}
private void LoadSavedData()
{
currentValue = 1;
if (loadData)
currentValue = PlayerPrefs.GetInt(key, 1);
// Заполняем сохраненными данными
valueLabel.text = currentValue.ToString();
}
public void SwitchValue(int continiousDirection)
{
continiousDirection = Mathf.Clamp(continiousDirection, -1, 1);
if (continiousDirection == 0)//сброс переключения
{
switchDelayRest = 0;
switchButtonPressedTime = 0;
return;
}
if (switchDelayRest < 0)
{
//переключение
currentValue = Math.Clamp(currentValue + continiousDirection, minValue, maxValue);
valueLabel.text = currentValue.ToString();
recalculateRest();
}
switchDelayRest -= Time.deltaTime;
switchButtonPressedTime += Time.deltaTime;
void recalculateRest()
{
float k = (MaxSpeedLetterPerSecond - MinSpeedLetterPerSecond)
/ (MaxSpeedTime - MinSpeedTime);
float b = MinSpeedLetterPerSecond - k * MinSpeedTime;
letterSwitchSpeed = k * switchButtonPressedTime + b;
letterSwitchSpeed = Mathf.Clamp(letterSwitchSpeed,
MinSpeedLetterPerSecond,
MaxSpeedLetterPerSecond);
switchDelayRest = 1 / letterSwitchSpeed;
}
}
}