using UnityEngine;
using UnityEngine.UI;
public class Clicker : MonoBehaviour
{
public Button clickButton;
public Text counterText;
public AudioClip clickSound;
public float pressScale = 0.9f;
public float animationDuration = 0.1f;
private int clicks;
private AudioSource audioSource;
private Vector3 originalScale;
private bool isAnimating;
private float animationTimer;
private bool isPressed;
private void Start()
{
clicks = PlayerPrefs.GetInt("Clicks", 0);
UpdateText();
clickButton.onClick.AddListener(OnClick);
audioSource = gameObject.AddComponent<AudioSource>();
audioSource.playOnAwake = false;
audioSource.spatialBlend = 0f;
originalScale = clickButton.transform.localScale;
}
private void OnClick()
{
clicks++;
UpdateText();
PlayerPrefs.SetInt("Clicks", clicks);
PlayerPrefs.Save();
PlaySound();
StartPressAnimation();
}
private void UpdateText()
{
counterText.text = clicks.ToString();
}
private void PlaySound()
{
if (clickSound != null)
{
audioSource.PlayOneShot(clickSound);
}
}
private void StartPressAnimation()
{
isPressed = true;
isAnimating = true;
animationTimer = 0f;
}
private void Update()
{
if (!isAnimating) return;
animationTimer += Time.deltaTime;
float t = Mathf.Clamp01(animationTimer / animationDuration);
if (isPressed)
{
float scale = Mathf.Lerp(1f, pressScale, t);
clickButton.transform.localScale = originalScale * scale;
if (t >= 1f)
{
isPressed = false;
animationTimer = 0f;
}
}
else
{
float scale = Mathf.Lerp(pressScale, 1f, t);
clickButton.transform.localScale = originalScale * scale;
if (t >= 1f)
{
clickButton.transform.localScale = originalScale;
isAnimating = false;
}
}
}
private void OnApplicationPause(bool pause)
{
PlayerPrefs.SetInt("Clicks", clicks);
PlayerPrefs.Save();
}
}