1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- 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<TextMeshPro>();
- 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;
- }
|