// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "GameFramework/PlayerController.h" #include "ShooterPlayerController.generated.h" class UInputMappingContext; class AShooterCharacter; class UShooterBulletCounterUI; /** * Simple PlayerController for a first person shooter game * Manages input mappings * Respawns the player pawn when it's destroyed */ UCLASS(abstract) class AUDIOVIDEORECORD_API AShooterPlayerController : public APlayerController { GENERATED_BODY() protected: /** Input mapping contexts 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 */ TObjectPtr MobileControlsWidget; /** Character class to respawn when the possessed pawn is destroyed */ UPROPERTY(EditAnywhere, Category="Shooter|Respawn") TSubclassOf CharacterClass; /** Type of bullet counter UI widget to spawn */ UPROPERTY(EditAnywhere, Category="Shooter|UI") TSubclassOf BulletCounterUIClass; /** Tag to grant the possessed pawn to flag it as the player */ UPROPERTY(EditAnywhere, Category="Shooter|Player") FName PlayerPawnTag = FName("Player"); /** Pointer to the bullet counter UI widget */ TObjectPtr BulletCounterUI; 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); /** Called when the bullet count on the possessed pawn is updated */ UFUNCTION() void OnBulletCountUpdated(int32 MagazineSize, int32 Bullets); /** Called when the possessed pawn is damaged */ UFUNCTION() void OnPawnDamaged(float LifePercent); };