// Fill out your copyright notice in the Description page of Project Settings. #pragma once #include "Characters/Components/ShootingComponent.h" #include "Player/InteractionComponent.h" #include "CoreMinimal.h" #include "GameFramework/PlayerController.h" #include "ExoPlayerController.generated.h" class AExoPlayerCharacter; class UInputMappingContext; class UInputAction; struct FInputActionValue; UCLASS() class EXO_API AExoPlayerController : public APlayerController { GENERATED_BODY() public: AExoPlayerController(); virtual void BeginPlay() override; virtual void PlayerTick(float DeltaTime) override; protected: virtual void SetupInputComponent() override; // Po prawej przypisane aktualnie klawisze UFUNCTION(BlueprintCallable, Category = "Input") void Move(const FInputActionValue& InputActionValue); // WSAD UFUNCTION(BlueprintCallable, Category = "Input") void Look(const FInputActionValue& InputActionValue); // MouseXY UFUNCTION(BlueprintCallable, Category = "Input") void Interact(); // E UFUNCTION(BlueprintCallable, Category = "Input") void PlayerJump(); // Space UFUNCTION(BlueprintCallable, Category = "Input") void PlayerDodge(); // Left Alt UFUNCTION(BlueprintCallable, Category = "Input") void ResetDodge(); UFUNCTION(BlueprintCallable, Category = "Input") void PlayerStartCrouch(); // LCtrl\C\X UFUNCTION(BlueprintCallable, Category = "Input") void PlayerStopCrouch(); // LCtrl\C\X UFUNCTION(BlueprintCallable, Category = "Input") void ResetSlide(); UFUNCTION(BlueprintCallable, Category = "Input") void PlayerStartSprint(); // LShift(Hold) UFUNCTION(BlueprintCallable, Category = "Input") void PlayerStopSprint(); UFUNCTION(BlueprintCallable, Category = "Input") void PlayerShoot(); // LPM UFUNCTION(BlueprintCallable, Category = "Input") void PlayerThrow(); // G UFUNCTION(BlueprintCallable, Category = "Input") void PlayerStartAim(); // PPM (pressed) UFUNCTION(BlueprintCallable, Category = "Input") void PlayerStopAim(); // PPM (released) UFUNCTION(BlueprintCallable, Category = "Input") void PlayerMeleAttack(); // V - nieprzypisane UFUNCTION(BlueprintCallable, Category = "Input") void PlayerChangeWeapon(); // MouseScroll UFUNCTION(BlueprintCallable, Category = "Input") void PlayerSelectFirstWeapon(); // 1 UFUNCTION(BlueprintCallable, Category = "Input") void PlayerSelectSecondWeapon(); // 2 UFUNCTION(BlueprintCallable, Category = "Input") void PlayerDropWeapon(); // F UFUNCTION(BlueprintCallable, Category = "Input") void PlayerReload(); // R UFUNCTION(BlueprintCallable, Category = "Cover System") bool CheckForCover(); UFUNCTION(BlueprintCallable, Category = "Cover System") float CalculateCoverAimOffset(); UFUNCTION(BlueprintCallable, Category = "Cover System") void UpdateSmoothCoverCamera(float DeltaTime); void OnCoverTimer(); // Cover System DEBUG UFUNCTION(Exec, Category = "Cover System") void DebugCoverSystem(bool show); bool bShowCoverSystemDebug = false; UPROPERTY(EditAnywhere, Category = "Input") TObjectPtr InputContext; UPROPERTY(EditAnywhere, Category= "Input") TObjectPtr MoveAction; UPROPERTY(EditAnywhere, Category = "Input") TObjectPtr InteractAction; UPROPERTY(EditAnywhere, Category = "Input") TObjectPtr LookAction; UPROPERTY(EditAnywhere, Category = "Input") TObjectPtr JumpAction; UPROPERTY(EditAnywhere, Category = "Input") TObjectPtr SprintAction; UPROPERTY(EditAnywhere, Category = "Input") TObjectPtr CrouchAction; UPROPERTY(EditAnywhere, Category = "Input") TObjectPtr DodgeAction; UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Movement Properties") FTimerHandle DodgeCooldownTimer; UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Movement Properties") FTimerHandle SlideCooldownTimer; UPROPERTY(EditAnywhere, Category = "Movement Properties") bool CanDodge = true; UPROPERTY(EditAnywhere, Category = "Movement properties") bool bIsSprinting = false; UPROPERTY(EditAnywhere, Category = "Input") TObjectPtr ShootAction; UPROPERTY(EditAnywhere, Category = "Input") TObjectPtr ThrowAction; UPROPERTY(EditAnywhere, Category = "Input") TObjectPtr ReloadAction; UPROPERTY(EditAnywhere, Category = "Input") TObjectPtr AimAction; UPROPERTY(EditAnywhere, Category = "Input") TObjectPtr MeleAction; UPROPERTY(EditAnywhere, Category = "Input") TObjectPtr ChangeWeaponAction; UPROPERTY(EditAnywhere, Category = "Input") TObjectPtr SelectFirstWeaponAction; UPROPERTY(EditAnywhere, Category = "Input") TObjectPtr SelectSecondWeaponAction; UPROPERTY(EditAnywhere, Category = "Input") TObjectPtr DropWeaponAction; UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Character") TObjectPtr PlayerCharacter; /** Alpha wysokości kamery podczas wychulania zza osłony * 0 - Wysokość kucania * 1 - Maksymalna wysokość wychylenia określona przez CoverAimStandFactor **/ UPROPERTY(EditAnywhere, Category = "Cover System") float TargetCoverStandAlpha = 0.0f; /** Częstotliwość okresowego szukania osłon podczas kucania */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cover System") float CoverCheckRate = 0.5f; /** Dystans na którym postać jest w stanie odnaleźć osłonę */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cover System") float MaxDistanceFromCover = 50.0f; /** Używa wysokości oczu do określenia minimalnej wysokości przeszkody * którą można określić osłoną */ UPROPERTY(EditAnywhere, Category = "Cover System") bool bUseEyeHeight = true; /** Minimalna wysokość przeszkody którą można określić osłoną */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cover System", meta = (EditCondition = "!UseEyeHeight")) float CoverObstacleMinHeight = 75.0f; /** Maksymalna wysokość przeszkody którą można określić osłoną */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cover System") float CoverObstacleMaxHeight = 125.0f; /** Promień wolnej przestrzeni przez którą można się wychylić */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cover System") float CoverAimWindowRadius = 2.0f; /** Dystans od kamery po wychyleniu który musi być wolny by dało się wychylić */ UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cover System") float CoverAimFreeDistance = 150.0f; /** Określa na jaki procent "Stania" postać może się podnieść podczas celowania * zza osłony.
* 0 -> Nie podniesie się wogóle (jakby wychylanie się było wyłączone)
* 1 -> Postać jest w stanie się podnieść do pełnej wysokości, tak jakby normalnie stała **/ UPROPERTY(EditAnywhere, meta = (ClampMin = "0.0", ClampMax = "1.0", UIMin = "0.0", UIMax = "1.0") , BlueprintReadWrite, Category = "Cover System") float CoverAimStandFactor = 0.9f; // Trace Channel po którym szukać geometrii potencjalnych osłon UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Cover System") TEnumAsByte CoverTraceChannel = ECC_WorldStatic; private: UInteractionComponent* InteractionComponent; UShootingComponent* ShootingComponent; float CoverStandAlpha = 0.0f; // deprecated FTimerHandle CoverCheckTimer; float MaxCoverAimHeight; float CoverAimHeightOffset; //FTransform TargetCameraOffset; //FTransform CameraOffset; };