Files
BABA_YAGA/Assets/Scripts/Interactables/LampInteractable.cs
2026-04-15 10:45:47 +07:00

82 lines
2.7 KiB
C#

using UnityEngine;
using System.Collections.Generic;
namespace OnlyScove.Scripts
{
public class LampInteractable : BaseInteractable
{
[Header("Light Settings")] [SerializeField]
private List<Light> targetLights = new List<Light>(); // Cho phép gán nhiều đèn
[SerializeField] private bool isOn = true;
[Header("Emission Settings (Optional)")] [SerializeField]
private MeshRenderer lampRenderer;
[SerializeField] private int materialIndex = 0;
[SerializeField] private string emissionColorProperty = "_EmissionColor";
private Material lampMaterial;
private Color originalEmissionColor;
public override string InteractionPrompt
{
get
{
string action = isOn ? "Tắt " : "Bật ";
string name = interactionData != null ? interactionData.promptText : "Đèn";
return action + name;
}
}
private void Start()
{
// Khởi tạo Material (tạo bản thực thi riêng để không lỗi Shader)
if (lampRenderer != null && materialIndex < lampRenderer.materials.Length)
{
lampMaterial = lampRenderer.materials[materialIndex];
if (lampMaterial.HasProperty(emissionColorProperty))
{
originalEmissionColor = lampMaterial.GetColor(emissionColorProperty);
}
}
UpdateLightState();
}
protected override void PerformInteraction(PlayerStateMachine player)
{
isOn = !isOn;
UpdateLightState();
// Log cực mạnh để bạn kiểm tra Console
Debug.LogWarning($"<color=yellow>[Lamp]</color> Đèn đã chuyển sang: {(isOn ? "BẬT" : "TẮT")}");
}
private void UpdateLightState()
{
// Bật/Tắt tất cả các đèn trong danh sách
foreach (var light in targetLights)
{
if (light != null) light.enabled = isOn;
}
// Bật/Tắt hiệu ứng phát sáng của vật liệu
if (lampMaterial != null)
{
if (isOn)
{
lampMaterial.SetColor(emissionColorProperty, originalEmissionColor);
lampMaterial.EnableKeyword("_EMISSION");
}
else
{
// Tắt hẳn màu phát sáng
lampMaterial.SetColor(emissionColorProperty, Color.black);
lampMaterial.DisableKeyword("_EMISSION");
}
}
}
}
}