Space Plunder
Loading...
Searching...
No Matches
SCircumferenceMarkerWidget Class Reference

#include <SCircumferenceMarkerWidget.h>

Inheritance diagram for SCircumferenceMarkerWidget:

Public Member Functions

void Construct (const FArguments &InArgs)
 
 SCircumferenceMarkerWidget ()
 
virtual int32 OnPaint (const FPaintArgs &Args, const FGeometry &AllottedGeometry, const FSlateRect &MyCullingRect, FSlateWindowElementList &OutDrawElements, int32 LayerId, const FWidgetStyle &InWidgetStyle, bool bParentEnabled) const override
 
virtual FVector2D ComputeDesiredSize (float) const override
 
virtual bool ComputeVolatility () const override
 
void SetRadius (float NewRadius)
 
void SetMarkerList (TArray< FCircumferenceMarkerEntry > &NewMarkerList)
 

Private Member Functions

 SLATE_BEGIN_ARGS (SCircumferenceMarkerWidget)
 
FSlateRenderTransform GetMarkerRenderTransform (const FCircumferenceMarkerEntry &Marker, const float BaseRadius, const float HUDScale) const
 

Private Attributes

const FSlateBrush * MarkerBrush
 
TArray< FCircumferenceMarkerEntryMarkerList
 
TAttribute< float > Radius
 
TAttribute< FSlateColor > ColorAndOpacity
 
bool bColorAndOpacitySet
 
uint8 bReticleCornerOutsideSpreadRadius: 1
 

Constructor & Destructor Documentation

◆ SCircumferenceMarkerWidget()

SCircumferenceMarkerWidget::SCircumferenceMarkerWidget ( )
14{
15}

Member Function Documentation

◆ ComputeDesiredSize()

FVector2D SCircumferenceMarkerWidget::ComputeDesiredSize ( float ) const
overridevirtual
80{
81 check(MarkerBrush);
82 const float SampledRadius = Radius.Get();
83 return FVector2D((MarkerBrush->ImageSize.X + SampledRadius) * 2.0f, (MarkerBrush->ImageSize.Y + SampledRadius) * 2.0f);
84}
TAttribute< float > Radius
Definition SCircumferenceMarkerWidget.h:74
const FSlateBrush * MarkerBrush
Definition SCircumferenceMarkerWidget.h:68

◆ ComputeVolatility()

virtual bool SCircumferenceMarkerWidget::ComputeVolatility ( ) const
inlineoverridevirtual
57{ return true; }

◆ Construct()

void SCircumferenceMarkerWidget::Construct ( const FArguments & InArgs)

What each marker on the circumference looks like At which angles should a marker be drawn The radius of the circle The color and opacity of the marker

18{
19 MarkerBrush = InArgs._MarkerBrush;
20 MarkerList = InArgs._MarkerList;
21 Radius = InArgs._Radius;
22 bColorAndOpacitySet = InArgs._ColorAndOpacity.IsSet();
23 ColorAndOpacity = InArgs._ColorAndOpacity;
24}
TArray< FCircumferenceMarkerEntry > MarkerList
Definition SCircumferenceMarkerWidget.h:71
bool bColorAndOpacitySet
Definition SCircumferenceMarkerWidget.h:78
TAttribute< FSlateColor > ColorAndOpacity
Definition SCircumferenceMarkerWidget.h:77

◆ GetMarkerRenderTransform()

FSlateRenderTransform SCircumferenceMarkerWidget::GetMarkerRenderTransform ( const FCircumferenceMarkerEntry & Marker,
const float BaseRadius,
const float HUDScale ) const
private
27{
28 // Determine the radius to use for the corners
29 float XRadius = BaseRadius;
30 float YRadius = BaseRadius;
32 {
33 XRadius += MarkerBrush->ImageSize.X * 0.5f;
34 YRadius += MarkerBrush->ImageSize.X * 0.5f;
35 }
36
37 // Get the angle and orientation for this reticle corner
38 const float LocalRotationRadians = FMath::DegreesToRadians(Marker.ImageRotationAngle);
39 const float PositionAngleRadians = FMath::DegreesToRadians(Marker.PositionAngle);
40
41 // First rotate the corner image about the origin
42 FSlateRenderTransform RotateAboutOrigin(Concatenate(FVector2D(-MarkerBrush->ImageSize.X * 0.5f, -MarkerBrush->ImageSize.Y * 0.5f), FQuat2D(LocalRotationRadians), FVector2D(MarkerBrush->ImageSize.X * 0.5f, MarkerBrush->ImageSize.Y * 0.5f)));
43
44 // Move the rotated image to the right place on the spread radius
45 return TransformCast<FSlateRenderTransform>(Concatenate(RotateAboutOrigin, FVector2D(XRadius * FMath::Sin(PositionAngleRadians) * HUDScale, -YRadius * FMath::Cos(PositionAngleRadians) * HUDScale)));
46}
uint8 bReticleCornerOutsideSpreadRadius
Definition SCircumferenceMarkerWidget.h:82
float PositionAngle
Definition SCircumferenceMarkerWidget.h:25
float ImageRotationAngle
Definition SCircumferenceMarkerWidget.h:29

◆ OnPaint()

int32 SCircumferenceMarkerWidget::OnPaint ( const FPaintArgs & Args,
const FGeometry & AllottedGeometry,
const FSlateRect & MyCullingRect,
FSlateWindowElementList & OutDrawElements,
int32 LayerId,
const FWidgetStyle & InWidgetStyle,
bool bParentEnabled ) const
overridevirtual
49{
50 const bool bIsEnabled = ShouldBeEnabled(bParentEnabled);
51 const ESlateDrawEffect DrawEffects = bIsEnabled ? ESlateDrawEffect::None : ESlateDrawEffect::DisabledEffect;
52 const FVector2D LocalCenter = AllottedGeometry.GetLocalPositionAtCoordinates(FVector2D(0.5f, 0.5f));
53
54 const bool bDrawMarkers = (MarkerList.Num() > 0) && (MarkerBrush != nullptr);
55
56 if (bDrawMarkers == true)
57 {
58 const FLinearColor MarkerColor = bColorAndOpacitySet ?
59 ColorAndOpacity.Get().GetColor(InWidgetStyle) :
60 (InWidgetStyle.GetColorAndOpacityTint() * MarkerBrush->GetTint(InWidgetStyle));
61
62 if (MarkerColor.A > KINDA_SMALL_NUMBER)
63 {
64 const float BaseRadius = Radius.Get();
65 const float ApplicationScale = GetDefault<UUserInterfaceSettings>()->ApplicationScale;
66 for (const FCircumferenceMarkerEntry& Marker : MarkerList)
67 {
68 const FSlateRenderTransform MarkerTransform = GetMarkerRenderTransform(Marker, BaseRadius, ApplicationScale);
69
70 const FPaintGeometry Geometry(AllottedGeometry.ToPaintGeometry(MarkerBrush->ImageSize, FSlateLayoutTransform(LocalCenter - (MarkerBrush->ImageSize * 0.5f)), MarkerTransform, FVector2D(0.0f, 0.0f)));
71 FSlateDrawElement::MakeBox(OutDrawElements, LayerId, Geometry, MarkerBrush, DrawEffects, MarkerColor);
72 }
73 }
74 }
75
76 return LayerId;
77}
FSlateRenderTransform GetMarkerRenderTransform(const FCircumferenceMarkerEntry &Marker, const float BaseRadius, const float HUDScale) const
Definition SCircumferenceMarkerWidget.cpp:26
Definition SCircumferenceMarkerWidget.h:20

◆ SetMarkerList()

void SCircumferenceMarkerWidget::SetMarkerList ( TArray< FCircumferenceMarkerEntry > & NewMarkerList)
96{
97 MarkerList = NewMarkerList;
98}

◆ SetRadius()

void SCircumferenceMarkerWidget::SetRadius ( float NewRadius)
87{
88 if (Radius.IsBound() || (Radius.Get() != NewRadius))
89 {
90 Radius = NewRadius;
91 Invalidate(EInvalidateWidgetReason::Layout);
92 }
93}

◆ SLATE_BEGIN_ARGS()

SCircumferenceMarkerWidget::SLATE_BEGIN_ARGS ( SCircumferenceMarkerWidget )
inlineprivate
35 : _MarkerBrush(FCoreStyle::Get().GetBrush("Throbber.CircleChunk"))
36 , _Radius(48.0f)
37 {
38 }

Member Data Documentation

◆ bColorAndOpacitySet

bool SCircumferenceMarkerWidget::bColorAndOpacitySet
private

◆ bReticleCornerOutsideSpreadRadius

uint8 SCircumferenceMarkerWidget::bReticleCornerOutsideSpreadRadius
private

Whether reticle corner images are placed outside the spread radius

◆ ColorAndOpacity

TAttribute<FSlateColor> SCircumferenceMarkerWidget::ColorAndOpacity
private

Color and opacity of the markers

◆ MarkerBrush

const FSlateBrush* SCircumferenceMarkerWidget::MarkerBrush
private

What each marker on the circumference looks like

◆ MarkerList

TArray<FCircumferenceMarkerEntry> SCircumferenceMarkerWidget::MarkerList
private

Angles around the reticle center to place ReticleCornerImage icons

◆ Radius

TAttribute<float> SCircumferenceMarkerWidget::Radius
private

The radius of the circle


The documentation for this class was generated from the following files: