diff --git a/EOLib/Domain/Map/MapCellStateProvider.cs b/EOLib/Domain/Map/MapCellStateProvider.cs index 57cd408d2..cec40def1 100644 --- a/EOLib/Domain/Map/MapCellStateProvider.cs +++ b/EOLib/Domain/Map/MapCellStateProvider.cs @@ -39,7 +39,7 @@ public IMapCellState GetCellStateAt(int x, int y) var character = _mapStateProvider.Characters.Values.Concat(new[] { _characterProvider.MainCharacter }) .FirstOrNone(c => CharacterAtCoordinates(c, x, y)); var npc = _mapStateProvider.NPCs.FirstOrNone(n => NPCAtCoordinates(n, x, y)); - var items = _mapStateProvider.MapItems.Where(i => i.X == x && i.Y == y); + var items = _mapStateProvider.MapItems.Where(i => i.X == x && i.Y == y).OrderByDescending(i => i.UniqueID); return new MapCellState { diff --git a/EndlessClient/Rendering/MapEntityRenderers/MapItemLayerRenderer.cs b/EndlessClient/Rendering/MapEntityRenderers/MapItemLayerRenderer.cs index f83458dd6..437c39c98 100644 --- a/EndlessClient/Rendering/MapEntityRenderers/MapItemLayerRenderer.cs +++ b/EndlessClient/Rendering/MapEntityRenderers/MapItemLayerRenderer.cs @@ -34,7 +34,10 @@ protected override bool ElementExistsAt(int row, int col) public override void RenderElementAt(SpriteBatch spriteBatch, int row, int col, int alpha, Vector2 additionalOffset = default) { - var items = _currentMapStateProvider.MapItems.Where(item => item.X == col && item.Y == row); + var items = _currentMapStateProvider + .MapItems + .Where(item => item.X == col && item.Y == row) + .OrderBy(item => item.UniqueID); foreach (var item in items) { diff --git a/EndlessClient/Rendering/MouseCursorRenderer.cs b/EndlessClient/Rendering/MouseCursorRenderer.cs index 9d0cb7126..2f7151fcd 100644 --- a/EndlessClient/Rendering/MouseCursorRenderer.cs +++ b/EndlessClient/Rendering/MouseCursorRenderer.cs @@ -171,7 +171,7 @@ private void UpdateCursorSourceRectangle(IMapCellState cellState) else if (cellState.Items.Any()) { _cursorIndex = CursorIndex.HoverItem; - UpdateMapItemLabel(Option.Some(cellState.Items.Last())); + UpdateMapItemLabel(Option.Some(cellState.Items.First())); } else if (cellState.TileSpec != TileSpec.None) UpdateCursorIndexForTileSpec(cellState.TileSpec); @@ -179,6 +179,13 @@ private void UpdateCursorSourceRectangle(IMapCellState cellState) if (!cellState.Items.Any()) UpdateMapItemLabel(Option.None()); + if (_mapItemText.Visible) + { + //relative to cursor DrawPosition, since this control is a parent of MapItemText + _mapItemText.DrawPosition = new Vector2(DrawArea.X + 32 - _mapItemText.ActualWidth / 2f, + DrawArea.Y + -_mapItemText.ActualHeight - 4); + } + _startClickTime.MatchSome(st => { if ((DateTime.Now - st).TotalMilliseconds > 350) @@ -225,10 +232,6 @@ private void UpdateMapItemLabel(Option item) _mapItemText.Text = text; _mapItemText.ResizeBasedOnText(); _mapItemText.ForeColor = _itemNameColorService.GetColorForMapDisplay(data); - - //relative to cursor DrawPosition, since this control is a parent of MapItemText - _mapItemText.DrawPosition = new Vector2(DrawArea.X + 32 - _mapItemText.ActualWidth / 2f, - DrawArea.Y + -_mapItemText.ActualHeight - 4); } }, none: () =>