Fix speech bubble (#5042)
* Fix speech bubble position when eye rotated * Fix speech bubble size jitter when floating up
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
using Content.Client.Chat.Managers;
|
using Content.Client.Chat.Managers;
|
||||||
|
using Content.Client.Viewport;
|
||||||
using Robust.Client.Graphics;
|
using Robust.Client.Graphics;
|
||||||
using Robust.Client.UserInterface;
|
using Robust.Client.UserInterface;
|
||||||
using Robust.Client.UserInterface.Controls;
|
using Robust.Client.UserInterface.Controls;
|
||||||
@@ -114,13 +115,16 @@ namespace Content.Client.Chat.UI
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
var worldPos = _senderEntity.Transform.WorldPosition;
|
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);
|
var screenPos = lowerCenter - (Width / 2, ContentHeight + _verticalOffsetAchieved);
|
||||||
|
// Round to nearest 0.5
|
||||||
|
screenPos = (screenPos * 2).Rounded() / 2;
|
||||||
LayoutContainer.SetPosition(this, screenPos);
|
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;
|
SetHeight = height;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user