地图系统

This commit is contained in:
2026-06-05 18:41:33 +08:00
parent 613f2a4d13
commit fe4fd60083
234 changed files with 33090 additions and 4899 deletions

View File

@@ -15,13 +15,14 @@ namespace BaseGames.World.Map
/// 颜色通过 <see cref="SetColors"/> 从外部注入,不在此处硬编码。
/// <para><see cref="RT"/> 属性在 Awake 中缓存,避免调用方反复 GetComponent。</para>
/// </summary>
public class MapRoomCellUI : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
public class MapRoomCellUI : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler, IPointerClickHandler
{
[SerializeField] private Image _bg;
[SerializeField] private Image _icon;
[SerializeField] private RawImage _outlineImage; // 可选:房间非矩形轮廓纹理
[SerializeField] private Image _highlight; // 可选:当前房间高亮描边(玩家所在时激活)
[SerializeField] private Image _fogOverlay; // 可选未知房间雾效覆盖层R12-FD
[SerializeField] private Image _teleportMarker;// 可选可传送站点标记CanTeleportTo 为真时激活)
// 实例颜色(默认值与原硬编码保持一致);可通过 SetColors 统一覆盖
private Color _colExplored = Color.white;
@@ -30,8 +31,10 @@ namespace BaseGames.World.Map
private RoomVisibility _currentVisibility;
private string _displayName;
private string _roomId; // 供点击回调携带(传送选择)
private Action<string> _onHover;
private Action _onHoverExit;
private Action<string> _onClick; // 点击回调(传送选择),由 MapPanel 注入
/// <summary>格子的 RectTransformAwake 中缓存,外部直接访问无需 GetComponent。</summary>
public RectTransform RT { get; private set; }
@@ -47,6 +50,7 @@ namespace BaseGames.World.Map
Action<string> onHover = null, Action onHoverExit = null)
{
_displayName = room.DisplayName;
_roomId = room.RoomId;
_onHover = onHover;
_onHoverExit = onHoverExit;
@@ -113,6 +117,15 @@ namespace BaseGames.World.Map
if (_highlight != null) _highlight.enabled = v;
}
/// <summary>注入点击回调(携带 RoomId由 MapPanel 在创建格子时设置MinimapHUD 不设置即不可点击。</summary>
public void SetClickHandler(Action<string> onClick) => _onClick = onClick;
/// <summary>设置"可传送站点"标记显隐CanTeleportTo 为真时由 MapPanel 调用)。</summary>
public void SetTeleportable(bool v)
{
if (_teleportMarker != null) _teleportMarker.enabled = v;
}
/// <summary>
/// 新发现房间时播放闪白淡出动画R12-FC
/// 由 MapPanel.OnRoomMappedAnim 调用;协程安全:组件被销毁后 Unity 自动终止。
@@ -138,5 +151,8 @@ namespace BaseGames.World.Map
}
public void OnPointerExit(PointerEventData _) => _onHoverExit?.Invoke();
/// <summary>点击格子:转发 RoomId 给注入的回调MapPanel 据 CanTeleportTo 决定是否发起传送选择)。</summary>
public void OnPointerClick(PointerEventData _) => _onClick?.Invoke(_roomId);
}
}