- TD-13: IQuestManager.CompleteQuest 改用 IRewardTarget,移除 using BaseGames.Player - TD-14: HurtFlashController 缓存 WaitForSeconds(_waitForFlash 字段) - TD-16: LiquidType 枚举迁移至 BaseGames.Core.Events;LiquidEvent.LiquidType 改为枚举直接比较 - TD-17: DeathScreenController 移除失效的 _onPlayerDied 订阅,改为 OnEnable 直接启动延迟显示 影响文件: IQuestManager.cs / HurtFlashController.cs / LiquidType.cs(迁移) / LiquidEvent.cs / LiquidZone.cs / WaterDangerState.cs / UnderwaterPostProcessingController.cs / UnderwaterAudioController.cs / DeathScreenController.cs 评审文档: Docs/Review/FrameworkReview_2026_May_v11.md(综合评分 9.30/10)
55 lines
2.0 KiB
C#
55 lines
2.0 KiB
C#
// Assets/Scripts/World/Liquid/LiquidZone.cs
|
||
using BaseGames.Core.Events;
|
||
using MoreMountains.Feedbacks;
|
||
using UnityEngine;
|
||
|
||
namespace BaseGames.World.Liquid
|
||
{
|
||
/// <summary>
|
||
/// 挂在液态区域根 GameObject 上。
|
||
/// 酸液/熔岩时需同时挂载 HazardZone(InstantKill 类型)。
|
||
/// </summary>
|
||
[RequireComponent(typeof(Collider2D))]
|
||
public class LiquidZone : MonoBehaviour
|
||
{
|
||
[Header("液体类型")]
|
||
[SerializeField] private LiquidType _liquidType = LiquidType.Water;
|
||
|
||
[Header("区域标识(存档/跨系统识别)")]
|
||
[SerializeField] private string _zoneId;
|
||
|
||
[Header("伤害(Water 类型专用;Acid/Lava 由子节点 HazardZone 处理)")]
|
||
[SerializeField] private bool _dealsDrowningDamage = false;
|
||
[SerializeField] private float _drowningDamagePerSecond = 5f;
|
||
|
||
[Header("物理配置")]
|
||
[SerializeField] private LiquidPhysicsConfigSO _physicsConfig;
|
||
|
||
[Header("Event Channels")]
|
||
[SerializeField] private LiquidEventChannelSO _onPlayerEntered;
|
||
[SerializeField] private LiquidEventChannelSO _onPlayerExited;
|
||
|
||
[Header("Feedback")]
|
||
[SerializeField] private MMFeedbacks _splashEnterFeedback;
|
||
[SerializeField] private MMFeedbacks _splashExitFeedback;
|
||
|
||
public LiquidType Type => _liquidType;
|
||
public LiquidPhysicsConfigSO Physics => _physicsConfig;
|
||
public string ZoneId => _zoneId;
|
||
|
||
private void OnTriggerEnter2D(Collider2D other)
|
||
{
|
||
if (!other.CompareTag("Player")) return;
|
||
_splashEnterFeedback?.PlayFeedbacks();
|
||
_onPlayerEntered?.Raise(new LiquidEvent(_zoneId, _liquidType));
|
||
}
|
||
|
||
private void OnTriggerExit2D(Collider2D other)
|
||
{
|
||
if (!other.CompareTag("Player")) return;
|
||
_splashExitFeedback?.PlayFeedbacks();
|
||
_onPlayerExited?.Raise(new LiquidEvent(_zoneId, _liquidType));
|
||
}
|
||
}
|
||
}
|