46 UImage* NewMarker = NewObject<UImage>(
this);
52 NewMarker->SetBrushFromTexture(CompassTex);
57 UCanvasPanelSlot* MarkerSlot = Cast<UCanvasPanelSlot>(NewMarker->Slot);
60 MarkerSlot->SetAnchors(FAnchors(0.5, 0.5, 0.5, 0.5));
61 MarkerSlot->SetSize(FVector2D(60.f, 60.f));
62 MarkerSlot->SetAlignment(FVector2D(0.5f, 0.5f));
63 MarkerSlot->SetPosition(FVector2D(0.f, 0.f));
67 UTextBlock* DistanceText = NewObject<UTextBlock>(
this);
72 UCanvasPanelSlot* TextSlot = Cast<UCanvasPanelSlot>(DistanceText->Slot);
75 TextSlot->SetAnchors(FAnchors(0.5, 0.5, 0.5, 0.5));
76 TextSlot->SetSize(FVector2D(100.f, 20.f));
77 TextSlot->SetAlignment(FVector2D(0.5f, -0.8f));
78 TextSlot->SetPosition(FVector2D(0.f, -5.f));
79 TextSlot->SetZOrder(100);
83 FSlateFontInfo FontInfo = DistanceText->GetFont();
85 DistanceText->SetFont(FontInfo);
86 DistanceText->SetJustification(ETextJustify::Center);
87 DistanceText->SetColorAndOpacity(FLinearColor::White);
88 DistanceText->SetText(FText::FromString(TEXT(
"0m")));
89 DistanceText->SetVisibility(ESlateVisibility::Visible);
92 DistanceText->SetShadowOffset(FVector2D(1.f, 1.f));
93 DistanceText->SetShadowColorAndOpacity(FLinearColor::Black);
119 float CompassSize =
Img_Compass->GetDesiredSize().X;
120 float MarkerRotation = TargetRotation * (CompassSize/360.f);
122 UCanvasPanelSlot* MarkerSlot = Cast<UCanvasPanelSlot>(InMarker->Slot);
125 FVector2D FinalPosition = FVector2D::ZeroVector;
129 FinalPosition = FVector2D(MarkerRotation, 0.f);
130 MarkerSlot->SetPosition(FinalPosition);
134 UCanvasPanelSlot* CompassSlot = Cast<UCanvasPanelSlot>(
Pnl_Compass->Slot);
137 float PositionX = (CompassSlot->GetSize().X / 2);
139 if (FMath::Abs(MarkerRotation) < PositionX)
141 FinalPosition = FVector2D(MarkerRotation, 0.f);
143 else if (MarkerRotation > PositionX)
145 FinalPosition = FVector2D(PositionX, 0.f);
149 FinalPosition = FVector2D(-PositionX, 0.f);
152 MarkerSlot->SetPosition(FinalPosition);
159 UCanvasPanelSlot* TextSlot = Cast<UCanvasPanelSlot>((*FoundText)->Slot);
162 TextSlot->SetPosition(FVector2D(FinalPosition.X, -5.f));
173 float DistanceInMeters = Distance / 100.f;
176 if (DistanceInMeters >= 1000.f)
179 DistanceStr = FString::Printf(TEXT(
"%.1fkm"), DistanceInMeters / 1000.f);
184 DistanceStr = FString::Printf(TEXT(
"%.0fm"), DistanceInMeters);
187 (*FoundText)->SetText(FText::FromString(DistanceStr));