Started radial menu setup
This commit is contained in:
@@ -0,0 +1,55 @@
|
||||
// RadialSliceWidget.h
|
||||
// A single wedge of the radial menu. One of these exists per entry, each with
|
||||
// its own dynamic material instance. It knows its own angular span and whether
|
||||
// it is currently the hovered slice — nothing about its neighbours.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CoreMinimal.h"
|
||||
#include "Blueprint/UserWidget.h"
|
||||
#include "RadialSliceWidget.generated.h"
|
||||
|
||||
class UImage;
|
||||
class UMaterialInstanceDynamic;
|
||||
|
||||
UCLASS(Abstract)
|
||||
class URadialSliceWidget : public UUserWidget
|
||||
{
|
||||
GENERATED_BODY()
|
||||
|
||||
public:
|
||||
// Called once when the slice is created. StartAngle/AngleSize are degrees,
|
||||
// clockwise from 12 o'clock; the material uses them to draw just this wedge.
|
||||
void Setup(UMaterialInterface* InSliceMaterial, float StartAngleDeg,
|
||||
float AngleSizeDeg, UTexture2D* Icon, bool bEnabled);
|
||||
|
||||
// Smoothly animate this slice's highlight toward target (0 = off, 1 = on).
|
||||
// Called every tick by the container with the *undilated* delta.
|
||||
void UpdateHighlight(bool bIsHovered, float UndilatedDelta);
|
||||
|
||||
protected:
|
||||
virtual void NativeConstruct() override;
|
||||
|
||||
UPROPERTY(meta = (BindWidget))
|
||||
TObjectPtr<UImage> WedgeImage = nullptr;
|
||||
|
||||
UPROPERTY(meta = (BindWidget))
|
||||
TObjectPtr<UImage> IconImage = nullptr;
|
||||
|
||||
// Speed of the highlight ease. Higher = snappier.
|
||||
UPROPERTY(EditDefaultsOnly, Category = "Radial Menu")
|
||||
float HighlightInterpSpeed = 16.f;
|
||||
|
||||
// Distance in px from the menu center to the icon, placing it on the slice's
|
||||
// centerline. Should sit between the material's InnerRadius and OuterRadius:
|
||||
// roughly (InnerRadius + OuterRadius) * 0.5 * MenuDiameter.
|
||||
UPROPERTY(EditDefaultsOnly, Category = "Radial Menu")
|
||||
float IconRadius = 164.f;
|
||||
|
||||
private:
|
||||
UPROPERTY(Transient)
|
||||
TObjectPtr<UMaterialInstanceDynamic> WedgeMID = nullptr;
|
||||
|
||||
bool bSliceEnabled = true;
|
||||
float CurrentHighlight = 0.f;
|
||||
};
|
||||
Reference in New Issue
Block a user