// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "Components/Widget.h" #include "Containers/Array.h" #include "HAL/Platform.h" #include "Styling/SlateBrush.h" #include "Templates/SharedPointer.h" #include "UI/Weapons/SCircumferenceMarkerWidget.h" #include "UObject/UObjectGlobals.h" #include "CircumferenceMarkerWidget.generated.h" class SWidget; class UObject; struct FFrame; UCLASS() class UCircumferenceMarkerWidget : public UWidget { GENERATED_BODY() public: UCircumferenceMarkerWidget(const FObjectInitializer& ObjectInitializer); //~UWidget interface public: virtual void SynchronizeProperties() override; protected: virtual TSharedRef RebuildWidget() override; //~End of UWidget interface //~UVisual interface public: virtual void ReleaseSlateResources(bool bReleaseChildren) override; //~End of UVisual interface public: /** The list of positions/orientations to draw the markers at. */ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Appearance) TArray MarkerList; /** The radius of the circle. */ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Appearance, meta=(ClampMin=0.0)) float Radius = 48.0f; /** The marker image to place around the circle. */ UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Appearance) FSlateBrush MarkerImage; /** Whether reticle corner images are placed outside the spread radius */ //@TODO: Make this a 0-1 float alignment instead (e.g., inside/on/outside the radius)? UPROPERTY(EditAnywhere, Category=Corner) uint8 bReticleCornerOutsideSpreadRadius : 1; public: /** Sets the radius of the circle. */ UFUNCTION(BlueprintCallable, Category = "Appearance") void SetRadius(float InRadius); private: /** Internal slate widget representing the actual marker visuals */ TSharedPtr MyMarkerWidget; };