2026-04-01 02:41:07 +07:00
|
|
|
using UnityEngine;
|
2026-04-02 08:54:19 +07:00
|
|
|
using System.Collections.Generic;
|
2026-04-01 02:41:07 +07:00
|
|
|
|
|
|
|
|
namespace OnlyScove.Scripts
|
|
|
|
|
{
|
|
|
|
|
public class LampInteractable : BaseInteractable
|
|
|
|
|
{
|
2026-04-02 08:54:19 +07:00
|
|
|
[Header("Light Settings")] [SerializeField]
|
|
|
|
|
private List<Light> targetLights = new List<Light>(); // Cho phép gán nhiều đèn
|
|
|
|
|
|
2026-04-01 02:41:07 +07:00
|
|
|
[SerializeField] private bool isOn = true;
|
|
|
|
|
|
2026-04-02 08:54:19 +07:00
|
|
|
[Header("Emission Settings (Optional)")] [SerializeField]
|
|
|
|
|
private MeshRenderer lampRenderer;
|
|
|
|
|
|
|
|
|
|
[SerializeField] private int materialIndex = 0;
|
|
|
|
|
[SerializeField] private string emissionColorProperty = "_EmissionColor";
|
|
|
|
|
|
|
|
|
|
private Material lampMaterial;
|
|
|
|
|
private Color originalEmissionColor;
|
|
|
|
|
|
2026-04-01 02:41:07 +07:00
|
|
|
private void Start()
|
|
|
|
|
{
|
2026-04-02 08:54:19 +07:00
|
|
|
// 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();
|
2026-04-01 02:41:07 +07:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
protected override void PerformInteraction(PlayerStateMachine player)
|
|
|
|
|
{
|
|
|
|
|
isOn = !isOn;
|
2026-04-02 08:54:19 +07:00
|
|
|
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");
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-04-01 02:41:07 +07:00
|
|
|
}
|
|
|
|
|
}
|
2026-04-02 08:54:19 +07:00
|
|
|
}
|