126 lines
3.2 KiB
C#
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.");
|
|
}
|
|
} |