From 0b52fe2b4f1018a8a40f59355e2c4924c687dfc6 Mon Sep 17 00:00:00 2001 From: Kubson96 <42842162+Kubson96@users.noreply.github.com> Date: Fri, 4 Apr 2025 16:33:54 +0200 Subject: [PATCH] feat: add aiming Added aiming feature, possible when holding gun. Aiming FOV depends on gun --- Content/Blueprints/Items/ShotGun.uasset | Bin 28086 -> 28134 bytes .../Components/ShootingComponent.cpp | 27 ++++++++++++++++-- .../Private/Player/ExoPlayerController.cpp | 12 ++++++-- .../Characters/Components/ShootingComponent.h | 15 ++++++++++ Source/Exo/Public/Items/GunBase.h | 3 ++ .../Exo/Public/Player/ExoPlayerController.h | 10 ++++--- 6 files changed, 57 insertions(+), 10 deletions(-) diff --git a/Content/Blueprints/Items/ShotGun.uasset b/Content/Blueprints/Items/ShotGun.uasset index e732e7d0be96bb3470802c223723746e02962609..4dffcc1c1690519052f595826a80d3ebb5b8eda6 100644 GIT binary patch delta 8436 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 XE}`&oqeU%Vqk;mok}|b@jro57k?(~i delta 8284 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 zaUv(GetOwner()); -} + CameraManager = GetWorld()->GetFirstPlayerController()->PlayerCameraManager; + DefaultFOV = CameraManager->GetFOVAngle(); + TargetFOV = DefaultFOV; +} void UShootingComponent::Shoot() { @@ -88,6 +91,7 @@ void UShootingComponent::Reload() if (!IsValid(CurrentGun) || bIsReloading) return; bIsReloading = true; + StopAiming(); CurrentGun->CurrentAmmo = CurrentGun->MaxAmmo; PlayerCharacter->GetWorldTimerManager().SetTimer(ReloadTimer, this, &UShootingComponent::ReloadCompleted, CurrentGun->ReloadTime, false); @@ -120,6 +124,8 @@ void UShootingComponent::PickUpGun(AGunBase* gunItem) void UShootingComponent::DropGun() { if (!IsValid(CurrentGun)) return; + + StopAiming(); FVector ForwardVector = PlayerCharacter->GetActorForwardVector(); FVector PlayerPos = PlayerCharacter->GetActorLocation(); @@ -168,6 +174,7 @@ void UShootingComponent::SwitchGun() SecondaryGun = temp; bIsFirstGunSelected = !bIsFirstGunSelected; + StopAiming(); // Debug info if (bIsFirstGunSelected) @@ -180,11 +187,25 @@ void UShootingComponent::SwitchGun() } } +void UShootingComponent::StartAiming() +{ + if (IsValid(CurrentGun)) + { + TargetFOV = CurrentGun->AimingFOV; + } +} + +void UShootingComponent::StopAiming() +{ + TargetFOV = DefaultFOV; +} + // Called every frame void UShootingComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) { Super::TickComponent(DeltaTime, TickType, ThisTickFunction); - // ... + float CurrentFOV = CameraManager->GetFOVAngle(); + float NewFOV = FMath::FInterpTo(CurrentFOV, TargetFOV, DeltaTime, AimingSpeed); + CameraManager->SetFOV(NewFOV); } - diff --git a/Source/Exo/Private/Player/ExoPlayerController.cpp b/Source/Exo/Private/Player/ExoPlayerController.cpp index d2cffe6..83811d9 100644 --- a/Source/Exo/Private/Player/ExoPlayerController.cpp +++ b/Source/Exo/Private/Player/ExoPlayerController.cpp @@ -57,7 +57,8 @@ void AExoPlayerController::SetupInputComponent() EnhancedInputComponent->BindAction(SprintAction, ETriggerEvent::Started, this, &AExoPlayerController::PlayerStartSprint); EnhancedInputComponent->BindAction(SprintAction, ETriggerEvent::Completed, this, &AExoPlayerController::PlayerStopSprint); EnhancedInputComponent->BindAction(ShootAction, ETriggerEvent::Started, this, &AExoPlayerController::PlayerShoot); - EnhancedInputComponent->BindAction(AimAction, ETriggerEvent::Started, this, &AExoPlayerController::PlayerAim); + EnhancedInputComponent->BindAction(AimAction, ETriggerEvent::Started, this, &AExoPlayerController::PlayerStartAim); + EnhancedInputComponent->BindAction(AimAction, ETriggerEvent::Completed, this, &AExoPlayerController::PlayerStopAim); EnhancedInputComponent->BindAction(MeleAction, ETriggerEvent::Started, this, &AExoPlayerController::PlayerMeleAttack); EnhancedInputComponent->BindAction(ChangeWeaponAction, ETriggerEvent::Started, this, &AExoPlayerController::PlayerChangeWeapon); EnhancedInputComponent->BindAction(SelectFirstWeaponAction, ETriggerEvent::Started, this, &AExoPlayerController::PlayerSelectFirstWeapon); @@ -159,9 +160,14 @@ void AExoPlayerController::PlayerShoot() ShootingComponent->Shoot(); } -void AExoPlayerController::PlayerAim() +void AExoPlayerController::PlayerStartAim() { - + ShootingComponent->StartAiming(); +} + +void AExoPlayerController::PlayerStopAim() +{ + ShootingComponent->StopAiming(); } void AExoPlayerController::PlayerMeleAttack() diff --git a/Source/Exo/Public/Characters/Components/ShootingComponent.h b/Source/Exo/Public/Characters/Components/ShootingComponent.h index f70a72e..04ded36 100644 --- a/Source/Exo/Public/Characters/Components/ShootingComponent.h +++ b/Source/Exo/Public/Characters/Components/ShootingComponent.h @@ -25,6 +25,9 @@ public: UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Character") TObjectPtr PlayerCharacter; + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category = "Camera") + TObjectPtr CameraManager; + protected: // Called when the game starts virtual void BeginPlay() override; @@ -54,6 +57,15 @@ public: UFUNCTION(Category = "Shooting") void SelectGun(bool bSelectFirstSlot); + UFUNCTION(Category = "Shooting") + void StartAiming(); + + UFUNCTION(Category = "Shooting") + void StopAiming(); + + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Shooting") + float AimingSpeed = 30.0f; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Shooting") float DropGunRange = 20.0f; @@ -74,6 +86,9 @@ private: bool bCanShoot = true; bool bIsReloading = false; + float DefaultFOV; + float TargetFOV; + bool bIsFirstGunSelected = true; float MeleDamageValue = 50.f; diff --git a/Source/Exo/Public/Items/GunBase.h b/Source/Exo/Public/Items/GunBase.h index f5ed743..f75af53 100644 --- a/Source/Exo/Public/Items/GunBase.h +++ b/Source/Exo/Public/Items/GunBase.h @@ -31,6 +31,9 @@ public: UPROPERTY(EditAnywhere, Category = "Shooting") float ReloadTime = 3.0f; + UPROPERTY(EditAnywhere, Category = "Shooting") + float AimingFOV = 55.0f; + UPROPERTY(EditAnywhere, Category = "Ammo") int32 CurrentAmmo = 10; diff --git a/Source/Exo/Public/Player/ExoPlayerController.h b/Source/Exo/Public/Player/ExoPlayerController.h index 38f1d9e..61064e6 100644 --- a/Source/Exo/Public/Player/ExoPlayerController.h +++ b/Source/Exo/Public/Player/ExoPlayerController.h @@ -63,7 +63,10 @@ protected: void PlayerShoot(); // LPM UFUNCTION(BlueprintCallable, Category = "Input") - void PlayerAim(); // PPM - nieprzypisane + void PlayerStartAim(); // PPM (pressed) + + UFUNCTION(BlueprintCallable, Category = "Input") + void PlayerStopAim(); // PPM (released) UFUNCTION(BlueprintCallable, Category = "Input") void PlayerMeleAttack(); // V - nieprzypisane @@ -82,9 +85,8 @@ protected: UFUNCTION(BlueprintCallable, Category = "Input") void PlayerReload(); // R - - -protected: + + UPROPERTY(EditAnywhere, Category = "Input") TObjectPtr InputContext;