// Project Lab - NHTV Igad #pragma once #include "GameFramework/PlayerController.h" #include "IngameSkillTree.h" #include "PlayerControllerBase.h" #include "PlayerSetupState.h" #include "DefaultPlayerController.generated.h" UCLASS() class UNREALPROJECT_API ADefaultPlayerController : public APlayerControllerBase { GENERATED_BODY() public: ADefaultPlayerController(const FObjectInitializer& init); virtual void BeginPlay() override; virtual void EndPlay(const EEndPlayReason::Type EndPlayReason) override; virtual void Destroyed() override; virtual void SetupInputComponent() override; virtual void Tick(float DeltaSeconds) override; virtual void Possess(APawn* aPawn) override; virtual void SeamlessTravelFrom(class APlayerController* OldPC) override; // This is used to handle the player being destroyed virtual void PawnPendingDestroy(APawn* inPawn) override; void UpdatePlayerPosition(const FVector& location, const FRotator& rotator); // Called when the possesed pawn is replicated virtual void OnRep_Pawn() override; UFUNCTION(Reliable, Client) void OnLevelUpClient(const TArray& updatedSkills, const TArray& oldSkills); // Only called on server, called to learn skills on the currently owned pawn void LearnSkillsForLevel(); bool GetAbilityButtonLocation(class UAbilityInfo* ability, int32& slot, bool& isAlt); int32 GetCurrentAbilityLevel(class UAbilityInfo* ability); void ToggleSkillTree(); void ToggleMenu(); UFUNCTION(BlueprintCallable, Category="UI") void OnHideUI(); void OnCharacterCreated(class ANetworkCharacter* character); void OnCharacterDestroyed(class ANetworkCharacter* character); const TArray& GetAbilities(APawn* targetPawn = nullptr); bool HasGameFocus(); // Ability cast void CastAbility(int32 index); // Called for hold abilities to turn them off void UnCastAbility(int32 index); UAbilityInfo* GetMappedAbility(int32 index); // Ability Button-Down events void CastAbility0(); void CastAbility1(); void CastAbility2(); void CastAbility3(); void CastAbility4(); void CastAbility5(); void CastAbility6(); void CastAbility7(); void CastAbility8(); // Ability Button-Up events void UnCastAbility0(); void UnCastAbility1(); void UnCastAbility2(); void UnCastAbility3(); void UnCastAbility4(); void UnCastAbility5(); void UnCastAbility6(); void UnCastAbility7(); void UnCastAbility8(); void CoopModifierOn(); void CoopModifierOff(); void MoveForward(float Value); void MoveRight(float Value); void TurnAtRate(float Rate); void LookUp(float Rate); void LookUpAtRate(float Rate); void RightMouseDown(); void RightMouseUp(); void LeftMouseDown(); void ToggleSwitch(); void LeftMouseUp(); void HoldDown(); void HoldUp(); void SpawnCharacterForClient(); void SpawnCharacterForClient(const FVector& location, const FRotator& rotation); UFUNCTION(Reliable, Server, WithValidation) void LearnSkillOnServer(class UBaseSkillObject* object); UFUNCTION( Reliable, Server, WithValidation ) void UnlearnSkillOnServer(class UBaseSkillObject* object); void OnLearnSkill(class UBaseSkillObject* object); void OnUnlearnSkill(class UBaseSkillObject* object); TArray& GetSkills(); void UpdateLevel(); UFUNCTION(Exec) void SetLevel(int32 level); UFUNCTION(Reliable, Server, WithValidation) void SetLevel_Server(int32 level); UFUNCTION(Exec) void Suicide(); UFUNCTION(Reliable, Server, WithValidation) void Suicide_Server(); UFUNCTION(Exec) void TestWinGame(int32 team); UFUNCTION(Client, Reliable) void SpawnCombatText(const FVector& position, const FString& string, const FLinearColor& color); UFUNCTION(Client, Reliable) void SpawnArcingCombatText(const FVector& position, const FString& string, const FLinearColor& color); // Called when setupState is replicated UFUNCTION() virtual void OnRep_Setup() override; UFUNCTION(BlueprintCallable, Category="State") FCharacterClassProperty GetCharacterClassProperties() const; UFUNCTION(BlueprintCallable, Category = "State") class UIngameHUD* GetHUD(); // Player location history struct Location { Location(const FVector& location, const FRotator& rotation) : location(location), rotation(rotation) {} FVector location; FRotator rotation; }; TArray playerLocationHistory; UPROPERTY(BlueprintReadOnly, EditAnywhere) class UCharacterClassPropertySet* characterClassProperties; METRICS_EXPR(Metrics::PlayerHandle* metricsHandle); protected: // Called when the player possesed pawn has changed, on client or server(players) virtual void m_OnPawnChanged(); private: void m_UpdateUI(); void m_CreateIngameSkilltree(); void m_StartBasicAttack(); void m_TickBasicAttack(); void m_StopBasicAttack(); // To check editor play bool m_seamlessTravelDone; // Selected class properties the player chose for his character build FCharacterClassProperty m_classProperties; UPROPERTY(Replicated) TArray m_skills; // Check for recent mouse/controller usage FVector2D m_mouseLast; FVector m_holdDirection; bool m_rightMouseDown; bool m_coopModifier; bool m_holdPosition; bool m_skillTreeInitialized; bool m_usingBasicAttack; TArray m_mainSkillMapping; TArray m_altSkillMapping; TSet m_learnedAbilities; TArray m_alreadyLearnedSkills; uint32 m_framesSinceMenuFocus; UPROPERTY() class UMenuScreen* m_ingameMenu; UPROPERTY() class UMenuPanel* m_ingameMenuPanel; UPROPERTY() class UIngameHUD* m_hud; UPROPERTY() class UUserWidget* m_respawnWidget; UPROPERTY() class USkillTreeWidget* m_skillTreeWidget; friend class ABuff; UPROPERTY() class AIngameSkillTree* m_skillTree; UPROPERTY(Replicated) class ADefaultPlayer* m_defaultPlayer; };