From 2c299728102b1f3d1ee53ed036e73477adae0b73 Mon Sep 17 00:00:00 2001 From: Marcel Hara Date: Fri, 6 Oct 2023 16:11:28 +0100 Subject: [PATCH] Added Basic weapon scope in functionality --- EndlessVendetta/Config/DefaultEditor.ini | 5 ++- .../FPWeapon/Mesh/SK_FPGun_Skeleton.uasset | 4 +- .../Blueprints/BP_FirstPersonCharacter.uasset | 4 +- .../BaseWeapons/BP_BaseWeapon.uasset | 4 +- .../Input/Actions/IA_GunAimIn.uasset | 3 ++ .../FirstPerson/Input/IMC_Default.uasset | 4 +- .../Animations/FirstPerson_AnimBP.uasset | 4 +- .../0/3Z/SNIBJQL2L6YHSC7MTTK1C2.uasset | 3 -- .../EndlessVendettaCharacter.cpp | 40 ++++++++++++++++++- .../EndlessVendettaCharacter.h | 11 ++++- .../WeaponSystem/BaseWeaponClass.cpp | 17 +++++--- .../WeaponSystem/BaseWeaponClass.h | 3 +- 12 files changed, 78 insertions(+), 24 deletions(-) create mode 100644 EndlessVendetta/Content/FirstPerson/Input/Actions/IA_GunAimIn.uasset delete mode 100644 EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/0/3Z/SNIBJQL2L6YHSC7MTTK1C2.uasset diff --git a/EndlessVendetta/Config/DefaultEditor.ini b/EndlessVendetta/Config/DefaultEditor.ini index 58552fae..e7314343 100644 --- a/EndlessVendetta/Config/DefaultEditor.ini +++ b/EndlessVendetta/Config/DefaultEditor.ini @@ -5,4 +5,7 @@ SimpleMapName=/Game/FirstPerson/Maps/FirstPersonExampleMap bAllowClassAndBlueprintPinMatching=true bReplaceBlueprintWithClass= true bDontLoadBlueprintOutsideEditor= true -bBlueprintIsNotBlueprintType= true \ No newline at end of file +bBlueprintIsNotBlueprintType= true + +[/Script/AdvancedPreviewScene.SharedProfiles] + diff --git a/EndlessVendetta/Content/FPWeapon/Mesh/SK_FPGun_Skeleton.uasset b/EndlessVendetta/Content/FPWeapon/Mesh/SK_FPGun_Skeleton.uasset index 69ba91c0..c6396a47 100644 --- a/EndlessVendetta/Content/FPWeapon/Mesh/SK_FPGun_Skeleton.uasset +++ b/EndlessVendetta/Content/FPWeapon/Mesh/SK_FPGun_Skeleton.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:eec8c05a75e7932e3834cbc1cd1b112f29171212b871fa1552f458ceb1b65948 -size 8000 +oid sha256:f9c7063e48c0b3c23194a6a2fc3625da96d20bbd92fece19210001cf0cac8964 +size 8568 diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/BP_FirstPersonCharacter.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/BP_FirstPersonCharacter.uasset index 0e677a52..441dabb0 100644 --- a/EndlessVendetta/Content/FirstPerson/Blueprints/BP_FirstPersonCharacter.uasset +++ b/EndlessVendetta/Content/FirstPerson/Blueprints/BP_FirstPersonCharacter.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:a64df34489d5d5452a5b7310e944fd0cb2ea1a2a52eacf2c7bcf9a8d03aadb2c -size 40999 +oid sha256:ff90caf01f6ea20dccd612ea5629215ce5c5a4a63e4da2ec242cabf9000bd6c6 +size 42353 diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/BP_BaseWeapon.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/BP_BaseWeapon.uasset index eb786d5b..dc2d119d 100644 --- a/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/BP_BaseWeapon.uasset +++ b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/BP_BaseWeapon.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c12dd919c67095a4cdc8439b9a0e8c25d5d65566abbd657d7b43bcdf6dac24b8 -size 29704 +oid sha256:af36276c4e513a207e06ec1eaa8f5c4273ab5634330a999db47ac9128e7d02ec +size 29776 diff --git a/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_GunAimIn.uasset b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_GunAimIn.uasset new file mode 100644 index 00000000..59590b50 --- /dev/null +++ b/EndlessVendetta/Content/FirstPerson/Input/Actions/IA_GunAimIn.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75503df8d15af2a4661c6cd18bc8f690d50f79cafe5ea8e2b3665db0b882cc24 +size 1370 diff --git a/EndlessVendetta/Content/FirstPerson/Input/IMC_Default.uasset b/EndlessVendetta/Content/FirstPerson/Input/IMC_Default.uasset index 6c703775..bb4e7fab 100644 --- a/EndlessVendetta/Content/FirstPerson/Input/IMC_Default.uasset +++ b/EndlessVendetta/Content/FirstPerson/Input/IMC_Default.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:639f363d6702f2597b9140becc6854a1a5e5872978e79c4a83b062ccec7c1966 -size 15739 +oid sha256:6a0af94b654f58c85c8b4453fa211608ecc7bc67b9c82e2e3768814e906babcd +size 16334 diff --git a/EndlessVendetta/Content/FirstPersonArms/Animations/FirstPerson_AnimBP.uasset b/EndlessVendetta/Content/FirstPersonArms/Animations/FirstPerson_AnimBP.uasset index c514eab5..20a95d4b 100644 --- a/EndlessVendetta/Content/FirstPersonArms/Animations/FirstPerson_AnimBP.uasset +++ b/EndlessVendetta/Content/FirstPersonArms/Animations/FirstPerson_AnimBP.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:175427d440d7f510cbbfa4630c82a677a83348f3b3b5cc555e09a7b03cf2e4ee -size 473991 +oid sha256:bc9b39a1c54d40b77f7893a00f72fc8e3feedec1d19fbdfa2db4f64d47e63bc3 +size 478510 diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/0/3Z/SNIBJQL2L6YHSC7MTTK1C2.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/0/3Z/SNIBJQL2L6YHSC7MTTK1C2.uasset deleted file mode 100644 index 82931fab..00000000 --- a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/0/3Z/SNIBJQL2L6YHSC7MTTK1C2.uasset +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:1beca35b5b67f492442adf27a1933f51133cce10ed01c3ae69b21a371efe6c4e -size 5061 diff --git a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp index 38f6b3b4..d7a13fac 100644 --- a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp +++ b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.cpp @@ -89,6 +89,8 @@ void AEndlessVendettaCharacter::SetupPlayerInputComponent(class UInputComponent* //Weapon Shooting EnhancedInputComponent->BindAction(TapShootAction, ETriggerEvent::Triggered, this, &AEndlessVendettaCharacter::FireCaller); + EnhancedInputComponent->BindAction(GunAimInAction, ETriggerEvent::Triggered, this, &AEndlessVendettaCharacter::GunRightClick); + EnhancedInputComponent->BindAction(GunAimInAction, ETriggerEvent::Completed, this, &AEndlessVendettaCharacter::StopGunRightClick); } } @@ -188,8 +190,6 @@ void AEndlessVendettaCharacter::EquipSecondary() AActor* SecondaryWeaponActor = GetWorld()->SpawnActor(SecondaryWeaponClass, spawnParams); SecondaryWeaponActor->AttachToComponent(Mesh1P, AttachmentRules, FName("GripPoint")); SecondaryWeapon = Cast(SecondaryWeaponActor); - - } //Calls the fire function in the baseWeaponClass @@ -206,6 +206,42 @@ void AEndlessVendettaCharacter::FireCaller() } } +void AEndlessVendettaCharacter::GunRightClick() +{ + if (IsValid(PrimaryWeapon)) + { + for (UActorComponent* actorComp : this->GetComponentsByTag(UArrowComponent::StaticClass(), FName("ScopedLocationArrow"))) + { + ScopedLocationArrow = Cast(actorComp); + break; + } + if (!IsValid(ScopedLocationArrow)) return; + PrimaryWeapon->SetActorLocation(ScopedLocationArrow->GetComponentLocation()); + PrimaryWeapon->WeaponScopedFire(); + this->GetFirstPersonCameraComponent()->SetFieldOfView(50); //change this number to a number you can change in editor eventually + } + if (IsValid(SecondaryWeapon)) + { + SecondaryWeapon->WeaponScopedFire(); + SecondaryWeapon->SetActorLocation(ScopedLocationArrow->GetComponentLocation()); + this->GetFirstPersonCameraComponent()->SetFieldOfView(50); //change this number to a number you can change in editor eventually + } +} + +void AEndlessVendettaCharacter::StopGunRightClick() +{ + if (IsValid(PrimaryWeapon)) + { + PrimaryWeapon->SetActorRelativeLocation(FVector(0,0,0)); + this->GetFirstPersonCameraComponent()->SetFieldOfView(90); + } + if (IsValid(SecondaryWeapon)) + { + SecondaryWeapon->SetActorRelativeLocation(FVector(0,0,0)); + this->GetFirstPersonCameraComponent()->SetFieldOfView(90); + } +} + void AEndlessVendettaCharacter::Move(const FInputActionValue& Value) { diff --git a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h index 259737a7..597364e8 100644 --- a/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h +++ b/EndlessVendetta/Source/EndlessVendetta/EndlessVendettaCharacter.h @@ -58,9 +58,9 @@ class AEndlessVendettaCharacter : public ACharacter UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Input, meta=(AllowPrivateAccess = "true")) class UInputAction* TapShootAction; - + UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Input, meta=(AllowPrivateAccess = "true")) - class UInputAction* HoldShootAction; + class UInputAction* GunAimInAction; public: AEndlessVendettaCharacter(); @@ -103,6 +103,13 @@ public: UFUNCTION(BlueprintCallable, Category = "Weapons") void FireCaller(); + UFUNCTION(BlueprintCallable, Category = "Weapons") + void GunRightClick(); + + UFUNCTION(BlueprintCallable, Category = "Weapons") + void StopGunRightClick(); + + UArrowComponent* ScopedLocationArrow; protected: /** Called for movement input */ diff --git a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/BaseWeaponClass.cpp b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/BaseWeaponClass.cpp index 170ad5ab..1e914665 100644 --- a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/BaseWeaponClass.cpp +++ b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/BaseWeaponClass.cpp @@ -52,9 +52,7 @@ void ABaseWeaponClass::Tick(float DeltaTime) } - - -// Recoil Handling // +// Recoil Handling //////////////////////////////////////////////////////////////////////////////////////////////////////////// void ABaseWeaponClass::GenerateRecoilVector() { float angle = FMath::RandRange(recoilMaxAngleLeft, -recoilMaxAngleRight); //randomg recoil vector angle between left and right @@ -117,8 +115,7 @@ void ABaseWeaponClass::UpdateSamples(float Amp, float Time) recoilCurvet = Time; } - -// Fire handling // +// Fire handling ////////////////////////////////////////////////////////////////////////////////////////////////////////// void ABaseWeaponClass::ClickDetectionTimer() { GetWorldTimerManager().SetTimer(timerHandle, this, &ABaseWeaponClass::Fire, 1 / FireRate, false); @@ -155,4 +152,14 @@ void ABaseWeaponClass::Fire() UE_LOG(LogTemp, Display, TEXT("hit item: %s"), *outHit.GetActor()->GetName()); } } + +void ABaseWeaponClass::WeaponScopedFire() +{ + UE_LOG(LogTemp, Display, TEXT("Activated WeaponScopedFire function in BaseWeaponClass")); + recoilMagnitude -= 0.2f; + recoilMaxAngleLeft /= 2.f; + recoilMaxAngleRight /= 2.f; + recoilMinMultiplier -= 2.f; +} + diff --git a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/BaseWeaponClass.h b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/BaseWeaponClass.h index b7e3b654..4e3e498a 100644 --- a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/BaseWeaponClass.h +++ b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/BaseWeaponClass.h @@ -106,7 +106,8 @@ public: UFUNCTION(BlueprintCallable, Category = "Recoil") void UpdateSamples(float Amp, float Time); - + UFUNCTION(BlueprintCallable, Category = "Weapons") + void WeaponScopedFire(); private: