// 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; class ACameraActor; /** * 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; UPROPERTY(EditAnywhere, Category = "Agrarian|MVP UI", meta = (ClampMin = "0.0")) float MvpFrontendStartupDelaySeconds = 24.25f; FTimerHandle MvpFrontendStartupTimerHandle; /** 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; void ShowMvpFrontend(); void ShowMvpPauseMenu(); void HandleMvpConfirmInput(); void HandleMvpBackInput(); void HandleMvpEscapeInput(); void ApplyMvpCharacterProxyToPawn(); void SetMvpFrontendPresentationActive(bool bNewActive); void ApplyDefaultInputMappingContexts(); void CreateOrUpdateMvpFrontendCamera(); void CacheAndApplyMvpHudSuppression(bool bSuppress); virtual void AcknowledgePossession(APawn* P) override; FName SelectedMvpCharacterProxyId = TEXT("male"); UPROPERTY() TObjectPtr MvpFrontendCameraActor; bool bMvpFrontendPresentationActive = false; bool bCachedMvpHudState = false; bool bCachedShowDebugHUD = true; bool bCachedShowMvpHudFrame = true; bool bCachedShowCriticalStatsHUD = true; bool bCachedShowInventoryHUD = true; bool bCachedShowCraftingHUD = true; bool bCachedShowInteractionPrompt = true; bool bCachedShowDeathRespawnUI = true; bool bCachedShowDebugDevMenu = false; 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 AgrarianToggleInventoryUI(); UFUNCTION(Exec) void AgrarianToggleCraftingUI(); UFUNCTION(Exec) void AgrarianToggleInteractionPrompts(); UFUNCTION(Exec) void AgrarianToggleDeathRespawnUI(); UFUNCTION(Exec) void AgrarianToggleDebugDevMenu(); UFUNCTION(Exec) void AgrarianSetUiScale(float NewUiScale); UFUNCTION(Exec) void AgrarianToggleHighContrastUI(); UFUNCTION(Exec) void AgrarianSelectCharacter(FName Archetype); UFUNCTION(Exec) void AgrarianCompleteFrontend(); UFUNCTION(Exec) void AgrarianShowMvpScreen(FName ScreenName); UFUNCTION(Exec) void AgrarianInvestorSmokeTest(float CaptureDelaySeconds = 6.0f, float QuitDelaySeconds = 18.0f); 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); };