From 3d0881cefdcf36b97efb61efa6b1d7c61922d286 Mon Sep 17 00:00:00 2001 From: ShadowCommander <10494922+ShadowCommander@users.noreply.github.com> Date: Tue, 26 Oct 2021 18:31:22 -0700 Subject: [PATCH] Fix speech bubble (#5042) * Fix speech bubble position when eye rotated * Fix speech bubble size jitter when floating up --- Content.Client/Chat/UI/SpeechBubble.cs | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/Content.Client/Chat/UI/SpeechBubble.cs b/Content.Client/Chat/UI/SpeechBubble.cs index fb71812eb0..22cd41e331 100644 --- a/Content.Client/Chat/UI/SpeechBubble.cs +++ b/Content.Client/Chat/UI/SpeechBubble.cs @@ -1,5 +1,6 @@ using System; using Content.Client.Chat.Managers; +using Content.Client.Viewport; using Robust.Client.Graphics; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; @@ -114,13 +115,16 @@ namespace Content.Client.Chat.UI return; var worldPos = _senderEntity.Transform.WorldPosition; - worldPos += (0, EntityVerticalOffset); + var scale = _eyeManager.MainViewport.GetRenderScale(); + var offset = new Vector2(0, EntityVerticalOffset * EyeManager.PixelsPerMeter * scale); + var lowerCenter = (_eyeManager.WorldToScreen(worldPos) - offset) / UIScale; - var lowerCenter = _eyeManager.WorldToScreen(worldPos) / UIScale; var screenPos = lowerCenter - (Width / 2, ContentHeight + _verticalOffsetAchieved); + // Round to nearest 0.5 + screenPos = (screenPos * 2).Rounded() / 2; LayoutContainer.SetPosition(this, screenPos); - var height = MathHelper.Clamp(lowerCenter.Y - screenPos.Y, 0, ContentHeight); + var height = MathF.Ceiling(MathHelper.Clamp(lowerCenter.Y - screenPos.Y, 0, ContentHeight)); SetHeight = height; }