// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "GameFramework/PlayerController.h" #include "EnhancedInput/Public/InputAction.h" #include "SideScrollingPlayerController.generated.h" class ASideScrollingCharacter; class UInputMappingContext; /** * A simple Side Scrolling Player Controller * Manages input mappings * Respawns the player pawn at the player start if it is destroyed */ UCLASS(abstract, Config="Game") class ASideScrollingPlayerController : public APlayerController { GENERATED_BODY() protected: /** Input mapping context for this player */ UPROPERTY(EditAnywhere, Category="Input|Input Mappings") TArray DefaultMappingContexts; /** Input Mapping Contexts */ UPROPERTY(EditAnywhere, Category="Input|Input Mappings") TArray MobileExcludedMappingContexts; /** Mobile controls widget to spawn */ UPROPERTY(EditAnywhere, Category="Input|Touch Controls") TSubclassOf MobileControlsWidgetClass; /** Pointer to the mobile controls widget */ UPROPERTY() TObjectPtr MobileControlsWidget; /** If true, the player will use UMG touch controls even if not playing on mobile platforms */ UPROPERTY(EditAnywhere, Config, Category = "Input|Touch Controls") bool bForceTouchControls = false; /** Character class to respawn when the possessed pawn is destroyed */ UPROPERTY(EditAnywhere, Category="Respawn") TSubclassOf CharacterClass; protected: /** Gameplay initialization */ virtual void BeginPlay() override; /** Initialize input bindings */ virtual void SetupInputComponent() override; /** Pawn initialization */ virtual void OnPossess(APawn* InPawn) override; /** Called if the possessed pawn is destroyed */ UFUNCTION() void OnPawnDestroyed(AActor* DestroyedActor); /** Returns true if the player should use UMG touch controls */ bool ShouldUseTouchControls() const; };