myGaze/Assets/myScripts/EyeInteractableDwellLight.cs
2025-11-03 22:28:23 +01:00

126 lines
3.2 KiB
C#

using UnityEngine;
using System.Collections;
[RequireComponent(typeof(Collider))]
public class EyeInteractableDwellLight : MonoBehaviour
{
[Header("Dwell Settings")]
[SerializeField] private float dwellTime = 1f; // Time in seconds to look at object
[Header("Light Reference")]
[SerializeField] private Light targetLight; // The light to turn on/off
[Header("Visual Feedback (Optional)")]
[SerializeField] private Material hoverMaterial;
[SerializeField] private GameObject selectionRing;
private MeshRenderer meshRenderer;
private Material originalMaterial;
private float currentDwellTimer = 0f;
private bool isLooking = false;
private bool canToggle = true; // برای جلوگیری از toggle های پشت سر هم
void Start()
{
meshRenderer = GetComponent<MeshRenderer>();
if (meshRenderer != null)
{
originalMaterial = meshRenderer.material;
}
if (selectionRing != null)
{
selectionRing.SetActive(false);
}
if (targetLight != null)
{
targetLight.enabled = false;
}
}
void Update()
{
if (isLooking && canToggle)
{
currentDwellTimer += Time.deltaTime;
Debug.Log($"Dwell progress: {currentDwellTimer:F2}/{dwellTime:F2}");
if (currentDwellTimer >= dwellTime)
{
ToggleLight();
currentDwellTimer = 0f; // ریست تایمر بعد از toggle
canToggle = false; // جلوگیری از toggle مجدد تا نگاه رو ببره
}
}
}
public void OnStartLooking()
{
isLooking = true;
Debug.Log("Started looking at: " + gameObject.name);
// Visual feedback
if (meshRenderer != null && hoverMaterial != null)
{
meshRenderer.material = hoverMaterial;
}
if (selectionRing != null)
{
selectionRing.SetActive(true);
}
}
public void OnStopLooking()
{
isLooking = false;
Debug.Log("Stopped looking at: " + gameObject.name);
// ریست تایمر
currentDwellTimer = 0f;
// اجازه toggle دوباره وقتی نگاه رو برداشت
canToggle = true;
// Reset visual feedback
if (meshRenderer != null && originalMaterial != null)
{
meshRenderer.material = originalMaterial;
}
if (selectionRing != null)
{
selectionRing.SetActive(false);
}
}
private void ToggleLight()
{
if (targetLight != null)
{
targetLight.enabled = !targetLight.enabled; // عوض کردن حالت
string status = targetLight.enabled ? "ON" : "OFF";
Debug.Log($"Light toggled {status} on: {gameObject.name}");
}
}
// اگه بخوای دستی ریست کنی
public void ResetInteractable()
{
currentDwellTimer = 0f;
isLooking = false;
canToggle = true;
if (targetLight != null)
{
targetLight.enabled = false;
}
Debug.Log(gameObject.name + " has been reset.");
}
}