public Pointers( TargetSystem *targetSystem, float *playerViewTriangleRotation, AtkUnitBase *currentSourceBase, AtkComponentNode *currentMapIconsRootComponentNode, AtkImageNode *weatherIconNode, nint naviMapTextureD3D11ShaderResourceView ) { TargetSystem = targetSystem; WeatherIconNode = weatherIconNode; NaviMapTextureD3D11ShaderResourceView = naviMapTextureD3D11ShaderResourceView; CurrentMapIconsRootComponentNode = currentMapIconsRootComponentNode; CurrentSourceBase = currentSourceBase; PlayerViewTriangleRotation = playerViewTriangleRotation; }
private static unsafe void DrawDistanceToTarget( bool prioritizeMouseOverTarget, TargetSystem *targetSystem, float scale, uint colour, Vector2 pMin, string prefix, string suffix ) { var drawList = ImGui.GetWindowDrawList(); var current = prioritizeMouseOverTarget && targetSystem->MouseOverTarget != null ? targetSystem->MouseOverTarget : targetSystem->GetCurrentTarget(); if (current is null) { return; } var distanceFromPlayer = *current switch { { ObjectKind : var o } when (ObjectKind) o is ObjectKind.Pc or ObjectKind.BattleNpc or ObjectKind.EventNpc => current->YalmDistanceFromPlayerX, _ => byte.MaxValue }; if (distanceFromPlayer == byte.MaxValue) { return; } var text = $"{prefix}{distanceFromPlayer + 1}{suffix}"; var font = UiBuilder.DefaultFont; var distanceToTargetScale = font.FontSize * scale; // NOTE: Manually unrolled loop // Imitates a black border around text // A quick'n'dirty solution to be used sparingly drawList.AddText(font, distanceToTargetScale, pMin + new Vector2(-1, +1) , 0xFF000000, text); drawList.AddText(font, distanceToTargetScale, pMin + new Vector2(0, +1) , 0xFF000000 , text); drawList.AddText(font, distanceToTargetScale, pMin + new Vector2(+1, +1) , 0xFF000000, text); drawList.AddText(font, distanceToTargetScale, pMin + new Vector2(-1, 0) , 0xFF000000, text); drawList.AddText(font, distanceToTargetScale, pMin + new Vector2(+1, 0) , 0xFF000000, text); drawList.AddText(font, distanceToTargetScale, pMin + new Vector2(-1, -1) , 0xFF000000, text); drawList.AddText(font, distanceToTargetScale, pMin + new Vector2(0, -1) , 0xFF000000, text); drawList.AddText(font, distanceToTargetScale, pMin + new Vector2(+1, -1) , 0xFF000000, text); drawList.AddText(font, distanceToTargetScale, pMin, colour, text); }