diff --git a/Dalamud/Game/Gui/GameGui.cs b/Dalamud/Game/Gui/GameGui.cs
index 301f7a634..d3b479642 100644
--- a/Dalamud/Game/Gui/GameGui.cs
+++ b/Dalamud/Game/Gui/GameGui.cs
@@ -184,8 +184,18 @@ public sealed unsafe class GameGui : IDisposable, IServiceType
///
/// Coordinates in the world.
/// Converted coordinates.
- /// True if worldPos corresponds to a position in front of the camera.
+ /// True if worldPos corresponds to a position in front of the camera and screenPos is in the viewport.
public bool WorldToScreen(Vector3 worldPos, out Vector2 screenPos)
+ => this.WorldToScreen(worldPos, out screenPos, out var inView) && inView;
+
+ ///
+ /// Converts in-world coordinates to screen coordinates (upper left corner origin).
+ ///
+ /// Coordinates in the world.
+ /// Converted coordinates.
+ /// True if screenPos corresponds to a position inside the camera viewport.
+ /// True if worldPos corresponds to a position in front of the camera.
+ public bool WorldToScreen(Vector3 worldPos, out Vector2 screenPos, out bool inView)
{
// Get base object with matrices
var matrixSingleton = this.getMatrixSingleton();
@@ -203,9 +213,12 @@ public sealed unsafe class GameGui : IDisposable, IServiceType
screenPos.X = (0.5f * width * (screenPos.X + 1f)) + windowPos.X;
screenPos.Y = (0.5f * height * (1f - screenPos.Y)) + windowPos.Y;
- return pCoords.Z > 0 &&
- screenPos.X > windowPos.X && screenPos.X < windowPos.X + width &&
- screenPos.Y > windowPos.Y && screenPos.Y < windowPos.Y + height;
+ var inFront = pCoords.Z > 0;
+ inView = inFront &&
+ screenPos.X > windowPos.X && screenPos.X < windowPos.X + width &&
+ screenPos.Y > windowPos.Y && screenPos.Y < windowPos.Y + height;
+
+ return inFront;
}
///