using UnityEngine;
using System.Collections;
using System.Collections.Generic;
namespace IndianOceanAssets.Engine2_5D
{
///
/// 怪物灵灯光照响应 —— 挂到敌人预制体上。
/// 当怪物被灵灯碰触时,在敌人位置创建一个独立光源,亮起 3 秒后消失。
/// 光源独立于敌人存在,即使敌人立即死亡也能正常显示。
///
[RequireComponent(typeof(HealthSystem))]
public class EnemyLanternLight : MonoBehaviour
{
[Header("光照参数")]
[Tooltip("亮起持续时间(秒)")]
[SerializeField] private float lightDuration = 3f;
[Tooltip("亮起时的光照半径")]
[SerializeField] private float lightRadius = 3f;
[Tooltip("亮起时的光照强度")]
[SerializeField] private float lightIntensity = 0.8f;
///
/// 由 SpiritLantern 在碰触时调用。
/// 在敌人当前位置创建一个独立光源,3秒后自动销毁。
///
public void ActivateLight()
{
// 在敌人位置创建独立光源物体
GameObject lightObj = new GameObject("EnemyLanternGlow");
lightObj.transform.position = transform.position;
// 添加 LightSource 组件
LightSource ls = lightObj.AddComponent();
ls.SetRadius(lightRadius);
ls.SetIntensity(lightIntensity);
// 启动自动销毁协程(挂在独立物体上,不受敌人死亡影响)
lightObj.AddComponent().Initialize(ls, lightDuration);
}
}
///
/// 内部辅助组件:光源亮起后渐隐并自动销毁。
///
internal class AutoDestroyLight : MonoBehaviour
{
private LightSource _lightSource;
private float _duration;
private float _elapsed;
public void Initialize(LightSource ls, float duration)
{
_lightSource = ls;
_duration = duration;
_elapsed = 0f;
}
private void Update()
{
_elapsed += Time.deltaTime;
float t = Mathf.Clamp01(_elapsed / _duration);
if (_lightSource != null)
{
// 前 70% 保持全亮,后 30% 渐隐
float fadeT = Mathf.Clamp01((t - 0.7f) / 0.3f);
_lightSource.SetIntensity(Mathf.Lerp(0.8f, 0f, fadeT));
}
if (t >= 1f)
{
Destroy(gameObject);
}
}
}
}