// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "GameFramework/PlayerController.h" #include "AgrarianGamePlayerController.generated.h" class UInputMappingContext; class UUserWidget; class UAgrarianMvpFrontendWidget; class AAgrarianShelterActor; /** * Basic PlayerController class for a third person game * Manages input mappings */ UCLASS(abstract) class AAgrarianGamePlayerController : public APlayerController { GENERATED_BODY() protected: /** Input Mapping Contexts */ 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; UPROPERTY(EditAnywhere, Category = "Agrarian|MVP UI") TSubclassOf MvpFrontendWidgetClass; UPROPERTY() TObjectPtr MvpFrontendWidget; /** 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; /** Gameplay initialization */ virtual void BeginPlay() override; /** Input mapping context setup */ virtual void SetupInputComponent() override; /** Returns true if the player should use UMG touch controls */ bool ShouldUseTouchControls() const; public: UFUNCTION(Exec) void AgrarianGrantItem(FName ItemId, int32 Quantity); UFUNCTION(Exec) void AgrarianSaveWorld(); UFUNCTION(Exec) void AgrarianLoadWorld(); UFUNCTION(Exec) void AgrarianSurvival(); UFUNCTION(Exec) void AgrarianHeal(); UFUNCTION(Exec) void AgrarianRespawn(); UFUNCTION(Exec) void AgrarianDropItem(FName ItemId, int32 Quantity); UFUNCTION(Exec) void AgrarianSplitStack(int32 StackIndex, int32 SplitQuantity); UFUNCTION(Exec) void AgrarianUseItem(FName ItemId, int32 Quantity); UFUNCTION(Exec) void AgrarianCraft(FName RecipeId); UFUNCTION(Exec) void AgrarianCraftStatus(); UFUNCTION(Exec) void AgrarianTravel(float X, float Y, float Z); UFUNCTION(Exec) void AgrarianTravelHome(); UFUNCTION(Exec) void AgrarianServerTravel(FName MapName); protected: UFUNCTION(Server, Reliable) void ServerAgrarianGrantItem(FName ItemId, int32 Quantity); UFUNCTION(Server, Reliable) void ServerAgrarianSaveWorld(); UFUNCTION(Server, Reliable) void ServerAgrarianLoadWorld(); UFUNCTION(Server, Reliable) void ServerAgrarianHeal(); UFUNCTION(Server, Reliable) void ServerAgrarianRespawn(); UFUNCTION(Server, Reliable) void ServerAgrarianDropItem(FName ItemId, int32 Quantity); UFUNCTION(Server, Reliable) void ServerAgrarianSplitStack(int32 StackIndex, int32 SplitQuantity); UFUNCTION(Server, Reliable) void ServerAgrarianUseItem(FName ItemId, int32 Quantity); UFUNCTION(Server, Reliable) void ServerAgrarianCraft(FName RecipeId); UFUNCTION(Server, Reliable) void ServerAgrarianTravel(FVector Destination); UFUNCTION(Server, Reliable) void ServerAgrarianServerTravel(FName MapName); };