using UnityEngine;
namespace BaseGames.World
{
///
/// 世界标记点(架构 21_LiquidPuzzleModule §14)。
/// 用于在地图/小地图上标注目标、NPC、兴趣点等。
/// 通过事件频道通知 UI 层显示/隐藏图标。
///
public class WorldMarker : MonoBehaviour
{
[Header("标记配置")]
[SerializeField] private WorldMarkerType _markerType = WorldMarkerType.Objective;
[SerializeField] private string _markerId = "";
[SerializeField] private string _labelKey = ""; // 本地化 Key
[Header("事件频道")]
[SerializeField] private WorldMarkerEventChannelSO _onMarkerActivated;
[SerializeField] private WorldMarkerEventChannelSO _onMarkerDeactivated;
public WorldMarkerType MarkerType => _markerType;
public string MarkerId => _markerId;
public string LabelKey => _labelKey;
private bool _isActive;
public bool IsActive => _isActive;
// ── 公共 API ──────────────────────────────────────────────────────
public void Activate()
{
if (_isActive) return;
_isActive = true;
_onMarkerActivated?.Raise(this);
}
public void Deactivate()
{
if (!_isActive) return;
_isActive = false;
_onMarkerDeactivated?.Raise(this);
}
// ── 编辑器辅助 ────────────────────────────────────────────────────
private void OnDrawGizmosSelected()
{
Gizmos.color = _markerType switch
{
WorldMarkerType.Objective => Color.yellow,
WorldMarkerType.NPC => Color.cyan,
WorldMarkerType.PointOfInterest => Color.green,
WorldMarkerType.Exit => Color.blue,
WorldMarkerType.Secret => Color.magenta,
_ => Color.white,
};
Gizmos.DrawWireSphere(transform.position, 0.4f);
}
}
/// 世界标记类型(架构 21_LiquidPuzzleModule §14)。
public enum WorldMarkerType
{
Objective,
NPC,
PointOfInterest,
Exit,
Secret,
}
}