//////////////////////////////////////////////////////////// // // InputDeviceTracker.h // // Tracks the most recently used input device, classifying // it as keyboard/mouse, Xbox gamepad, or PlayStation // gamepad. The subsystem registers a Slate input // preprocessor that watches button-down events; analog // and mouse-move events are ignored. Read the current // classification via the static accessor. // //////////////////////////////////////////////////////////// #pragma once #include "CoreMinimal.h" #include "Subsystems/GameInstanceSubsystem.h" #include "Framework/Application/IInputProcessor.h" #include "Common.h" #include "InputDeviceTracker.generated.h" //////////////////////////////////////////////////////////// // // FInputDeviceTrackerProcessor // // Slate input preprocessor. Updates the device-class // static on each button-down event. Never consumes // events (always returns false). // //////////////////////////////////////////////////////////// class FInputDeviceTrackerProcessor : public IInputProcessor { public: virtual void Tick(const float DeltaTime, FSlateApplication& SlateApp, TSharedRef Cursor) override {} virtual bool HandleKeyDownEvent(FSlateApplication& SlateApp, const FKeyEvent& KeyEvent) override; virtual bool HandleMouseButtonDownEvent(FSlateApplication& SlateApp, const FPointerEvent& MouseEvent) override; }; //////////////////////////////////////////////////////////// // // UlxInputDeviceTracker // //////////////////////////////////////////////////////////// UCLASS(MinimalAPI) class UlxInputDeviceTracker : public UGameInstanceSubsystem { GENERATED_BODY() public: virtual void Initialize(FSubsystemCollectionBase& Collection) override; virtual void Deinitialize() override; // Returns the classification of the most recently used // input device. Defaults to KeyboardMouse until the // first gamepad button event is observed. // UFUNCTION(BlueprintCallable, Category="Luprex|Input") static ElxControllerType GetLastControllerType(); private: TSharedPtr Processor; };