using UnityEngine; using System.Collections.Generic; namespace OnlyScove.Scripts { public class LampInteractable : BaseInteractable { [Header("Light Settings")] [SerializeField] private List targetLights = new List(); // 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($"[Lamp] Đè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"); } } } } }