I also saw Lyra just has this under ULyraActivatableWidget. Why this isn’t just part of the base class, I’m not sure, but these are the exact options I was looking for in UCommonActivatableWidget. I guess this is the best way. No need to try to understand all the other stuff for now.
UENUM(BlueprintType)
enum class ELyraWidgetInputMode : uint8
{
Default,
GameAndMenu,
Game,
Menu
};
// An activatable widget that automatically drives the desired input config when activated
UCLASS(Abstract, Blueprintable)
class ULyraActivatableWidget : public UCommonActivatableWidget
{
...
public:
//~UCommonActivatableWidget interface
virtual TOptional<FUIInputConfig> GetDesiredInputConfig() const override;
//~End of UCommonActivatableWidget interface
...
protected:
/** The desired input mode to use while this UI is activated, for example do you want key presses to still reach the game/player controller? */
UPROPERTY(EditDefaultsOnly, Category = Input)
ELyraWidgetInputMode InputConfig = ELyraWidgetInputMode::Default;
/** The desired mouse behavior when the game gets input. */
UPROPERTY(EditDefaultsOnly, Category = Input)
EMouseCaptureMode GameMouseCaptureMode = EMouseCaptureMode::CapturePermanently;
};
TOptional<FUIInputConfig> ULyraActivatableWidget::GetDesiredInputConfig() const
{
switch (InputConfig)
{
case ELyraWidgetInputMode::GameAndMenu:
return FUIInputConfig(ECommonInputMode::All, GameMouseCaptureMode);
case ELyraWidgetInputMode::Game:
return FUIInputConfig(ECommonInputMode::Game, GameMouseCaptureMode);
case ELyraWidgetInputMode::Menu:
return FUIInputConfig(ECommonInputMode::Menu, EMouseCaptureMode::NoCapture);
case ELyraWidgetInputMode::Default:
default:
return TOptional<FUIInputConfig>();
}
}