using UnityEngine; using TMPro; using System; public class AnswerOption : MonoBehaviour { [SerializeField] private TextMeshPro answerText; private int answerValue; private MathQuizManager quizManager; private bool isCorrect; private Vector3 startPos, targetPos; private float showTime = 0.8f, disappearTime = 1f, floatHeight = 3f; private float showT = 0f, disappearT = 0f; private bool isShown = false, isDisappearing = false; public static event Action OnAnswerClicked; void Start() { if (!answerText) answerText = GetComponentInChildren(); startPos = transform.position; targetPos = startPos + Vector3.up * floatHeight; Destroy(gameObject, showTime + disappearTime + 15f); } public void Initialize(MathQuizManager mgr, int value, bool correct) { quizManager = mgr; answerValue = value; isCorrect = correct; if (answerText) answerText.text = value.ToString(); Invoke(nameof(StartDisappear), 15f); } void Update() { if (isDisappearing) { disappearT += Time.deltaTime; float t = Mathf.Clamp01(disappearT / disappearTime); transform.position = Vector3.Lerp(transform.position, transform.position + Vector3.up * floatHeight, t); transform.localScale = Vector3.Lerp(Vector3.one, Vector3.zero, t); if (t >= 1f) Destroy(gameObject); } else if (!isShown) { showT += Time.deltaTime; float t = Mathf.Clamp01(showT / showTime); transform.position = Vector3.Lerp(startPos, targetPos, t); transform.localScale = Vector3.Lerp(Vector3.zero, Vector3.one, t); if (t >= 1f) isShown = true; } else { transform.position = Vector3.Lerp(transform.position, targetPos, 0.3f * Time.deltaTime); } } void StartDisappear() { isDisappearing = true; disappearT = 0f; } void OnMouseDown() { if (quizManager != null && isShown && !isDisappearing) { quizManager.CheckAnswer(this); StartDisappear(); OnAnswerClicked?.Invoke(); } } public int GetAnswerValue() => answerValue; }