UI系统优化
This commit is contained in:
@@ -56,10 +56,13 @@ namespace BaseGames.World.Map
|
||||
private List<Image> _pinImages = new();
|
||||
private List<Image> _exitImages = new();
|
||||
private string _highlightedRoomId;
|
||||
private IMapService _mapSvc; // 面板活跃期间缓存,避免高频 ServiceLocator 查询
|
||||
private readonly CompositeDisposable _subs = new();
|
||||
|
||||
private void OnEnable()
|
||||
{
|
||||
_mapSvc = ServiceLocator.GetOrDefault<IMapService>();
|
||||
|
||||
// 首次打开时建立格子;后续打开只刷新探索状态,跳过重复 Instantiate
|
||||
if (_cells.Count == 0)
|
||||
BuildGrid();
|
||||
@@ -75,6 +78,7 @@ namespace BaseGames.World.Map
|
||||
private void OnDisable()
|
||||
{
|
||||
_subs.Clear();
|
||||
_mapSvc = null;
|
||||
HideTooltip();
|
||||
}
|
||||
|
||||
@@ -95,11 +99,10 @@ namespace BaseGames.World.Map
|
||||
// 面板重新打开时同步关闭期间积累的探索进度
|
||||
private void RefreshAllCells()
|
||||
{
|
||||
var svc = ServiceLocator.GetOrDefault<IMapService>();
|
||||
foreach (var (roomId, cell) in _cells)
|
||||
{
|
||||
if (cell == null) continue;
|
||||
cell.SetVisibility(GetVisibility(svc, roomId));
|
||||
cell.SetVisibility(GetVisibility(_mapSvc, roomId));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,12 +111,11 @@ namespace BaseGames.World.Map
|
||||
private void BuildGrid()
|
||||
{
|
||||
if (_database?.AllRooms == null) return;
|
||||
var svc = ServiceLocator.GetOrDefault<IMapService>();
|
||||
foreach (var room in _database.AllRooms)
|
||||
{
|
||||
if (room == null) continue;
|
||||
var cell = Instantiate(_cellPrefab, _roomContainer);
|
||||
cell.Setup(room, GetVisibility(svc, room.RoomId), ChooseIcon(room),
|
||||
cell.Setup(room, GetVisibility(_mapSvc, room.RoomId), ChooseIcon(room),
|
||||
ShowTooltip, HideTooltip);
|
||||
_cells[room.RoomId] = cell;
|
||||
}
|
||||
@@ -149,9 +151,8 @@ namespace BaseGames.World.Map
|
||||
|
||||
private void OnMapUpdated(string roomId)
|
||||
{
|
||||
var svc = ServiceLocator.GetOrDefault<IMapService>();
|
||||
if (_cells.TryGetValue(roomId, out var cell))
|
||||
cell.SetVisibility(GetVisibility(svc, roomId));
|
||||
cell.SetVisibility(GetVisibility(_mapSvc, roomId));
|
||||
}
|
||||
|
||||
// ── 玩家位置图标 ──────────────────────────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user