Crosshair is back

This commit is contained in:
2026-04-25 01:14:16 -04:00
parent 3f6ef4b56c
commit 4680a0f3f4
3 changed files with 28 additions and 10 deletions

1
.gitignore vendored
View File

@@ -52,3 +52,4 @@ GPF-output/**
__pycache__/
.clangd-query/
COMMIT.txt
CLAUDE.md

Binary file not shown.

View File

@@ -6,6 +6,8 @@
#include "Layout/Geometry.h"
#include "Widgets/Layout/Anchors.h"
#include "Common.h"
#include "Engine/GameViewportClient.h"
#include "Slate/SGameLayerManager.h"
#include "Kismet/KismetTextLibrary.h"
#include "UObject/UObjectIterator.h"
@@ -246,17 +248,32 @@ FFormatArgumentData UlxFormatDataLibrary::FormatArgumentDataTransform(const FTra
FFormatArgumentData UlxFormatDataLibrary::FormatArgumentDataGeometry(const FGeometry &AutoConvertedValue, const FString &Name)
{
FVector2D LocalSize = AutoConvertedValue.GetLocalSize();
FVector2D AbsPos = AutoConvertedValue.GetAbsolutePosition();
FVector2D AbsSize = AutoConvertedValue.GetAbsoluteSize();
FVector2D UL = AutoConvertedValue.GetAbsolutePosition();
FVector2D LR = AutoConvertedValue.GetAbsolutePositionAtCoordinates(FVector2f(1.0f, 1.0f));
if (GEngine && GEngine->GameViewport)
{
TSharedPtr<IGameLayerManager> GameLayerManager = GEngine->GameViewport->GetGameLayerManager();
if (GameLayerManager.IsValid())
{
const FGeometry ViewportGeometry = GameLayerManager->GetViewportWidgetHostGeometry();
const FVector2D ViewportLocalSize = FVector2D(ViewportGeometry.GetLocalSize());
FVector2D ViewportPixelSize;
GEngine->GameViewport->GetViewportSize(ViewportPixelSize);
if (ViewportLocalSize.X > 0.0 && ViewportLocalSize.Y > 0.0)
{
const FVector2D PixelScale = ViewportPixelSize / ViewportLocalSize;
UL = ViewportGeometry.AbsoluteToLocal(UL) * PixelScale;
LR = ViewportGeometry.AbsoluteToLocal(LR) * PixelScale;
}
}
}
FFormatArgumentData Result;
Result.ArgumentValueType = EFormatArgumentType::Text;
Result.ArgumentName = Name;
Result.ArgumentValue = FText::Format(
INVTEXT("Geom(Local={0}x{1} Abs={2}x{3} Pos={4},{5})"),
FText::AsNumber(LocalSize.X), FText::AsNumber(LocalSize.Y),
FText::AsNumber(AbsSize.X), FText::AsNumber(AbsSize.Y),
FText::AsNumber(AbsPos.X), FText::AsNumber(AbsPos.Y));
INVTEXT("UL={0},{1} LR={2},{3}"),
FText::AsNumber(UL.X), FText::AsNumber(UL.Y),
FText::AsNumber(LR.X), FText::AsNumber(LR.Y));
return Result;
}
@@ -312,7 +329,7 @@ void UlxFormatDataLibrary::FormatLogMessageInternal(UObject *Context, ElxFormatL
double Now = FPlatformTime::Seconds();
FString Key = Context->GetClass()->GetName() + TEXT("::") + InPattern;
double &Last = LastLogTime.FindOrAdd(Key, 0.0);
if (Now - Last < 1.0)
if (Now - Last < 2.0)
{
return;
}