From 848430aebd59571c7efcc0e4c143086c01eb32c8 Mon Sep 17 00:00:00 2001 From: MH261677 Date: Thu, 26 Oct 2023 15:49:11 +0100 Subject: [PATCH] Finished Creating Sniper Weapon --- .../BaseWeapons/Snipers/BaseSniper.uasset | 4 +- .../BaseWeapons/WBP_AmmoCount.uasset | 4 +- .../7/VS/TBSU6BHEHN191N9FG8A6XN.uasset | 3 + .../WeaponSystem/BaseWeaponClass.h | 11 +-- .../WeaponSystem/SniperClass.cpp | 68 +++++++++++++++++-- .../WeaponSystem/SniperClass.h | 8 ++- 6 files changed, 82 insertions(+), 16 deletions(-) create mode 100644 EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/7/VS/TBSU6BHEHN191N9FG8A6XN.uasset diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/Snipers/BaseSniper.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/Snipers/BaseSniper.uasset index 410bc4c2..dec79762 100644 --- a/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/Snipers/BaseSniper.uasset +++ b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/Snipers/BaseSniper.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4d4a7e220c05cd641cf8f6465c767efb4bf895ca9ac7d473530dff9daeecac55 -size 124137 +oid sha256:d5625ec21d5212c05429ac81906d5aa5e6ee935ee0bcbcdd16477cbd64165c16 +size 125077 diff --git a/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/WBP_AmmoCount.uasset b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/WBP_AmmoCount.uasset index ff0850c9..8506b4d5 100644 --- a/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/WBP_AmmoCount.uasset +++ b/EndlessVendetta/Content/FirstPerson/Blueprints/BaseWeapons/WBP_AmmoCount.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:4aef926e64cc0bd15cd6df6c9683311954a37d3a4576cd79a564efe16ef7920d -size 64353 +oid sha256:12a2bf04dd00e6b7507070952dc3382734b02f049bd6a73a24f066b802071ca6 +size 64438 diff --git a/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/7/VS/TBSU6BHEHN191N9FG8A6XN.uasset b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/7/VS/TBSU6BHEHN191N9FG8A6XN.uasset new file mode 100644 index 00000000..34849915 --- /dev/null +++ b/EndlessVendetta/Content/__ExternalActors__/FirstPerson/Maps/GunMechanicTester/7/VS/TBSU6BHEHN191N9FG8A6XN.uasset @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b166a03dba174d55220b56cde59bb17914ac485c6b2b4055d1c99ad6d6d3da7 +size 6183 diff --git a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/BaseWeaponClass.h b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/BaseWeaponClass.h index 1de19d01..531048b8 100644 --- a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/BaseWeaponClass.h +++ b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/BaseWeaponClass.h @@ -7,6 +7,7 @@ #include "Components/ArrowComponent.h" #include "Kismet/KismetMathLibrary.h" #include "EndlessVendetta/InteractionInterface.h" +#include "Engine/EngineTypes.h" #include "BaseWeaponClass.generated.h" class AEndlessVendettaCharacter; @@ -54,7 +55,11 @@ public: // Called every frame virtual void Tick(float DeltaTime) override; void ReloadTimer(); - + + float currentPitch; + + UPROPERTY(EditAnywhere) + float BulletDistance; UPROPERTY(EditAnywhere, BlueprintReadWrite) FString WeaponName; @@ -177,14 +182,10 @@ protected: private: - UPROPERTY(EditAnywhere) - float BulletDistance; - float originalMagnitude; float originalMaxAngleLeft; float originalMaxAngleRight; float originalMinMultiplier; - float currentPitch; }; diff --git a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/SniperClass.cpp b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/SniperClass.cpp index b357df11..9ace82f6 100644 --- a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/SniperClass.cpp +++ b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/SniperClass.cpp @@ -2,7 +2,10 @@ #include "SniperClass.h" -#include "EndlessVendettaCharacter.h" +#include "EndlessVendetta/EndlessVendettaCharacter.h" +#include "EndlessVendetta/AI/AICharacter.h" +#include "Engine/DamageEvents.h" +#include "Kismet/GameplayStatics.h" // Sets default values ASniperClass::ASniperClass() @@ -15,24 +18,77 @@ ASniperClass::ASniperClass() void ASniperClass::BeginPlay() { Super::BeginPlay(); - } // Called every frame void ASniperClass::Tick(float DeltaTime) { - Super::Tick(DeltaTime); + ApplyRecoil(DeltaTime); + recoilMagnitude = 1; + if(endlessVendettaChar->bIsPlayerMoving == false ) + { + recoilResultPitch = 0; + recoilMagnitude = -1; + } + if (currentPitch < 0 && bStopShooting) + { + float increment = currentPitch * DeltaTime * 8; + currentPitch -= increment; + playerInWorld->AddControllerPitchInput(-increment); + } } void ASniperClass::Fire() { - + if(currentAmmoCount > 0 && !bSingleShotOnly) + { + bSingleShotOnly = true; + //do damage fallof based off distance + traceStart = GunStartArrow->GetComponentLocation(); + traceEnd = traceStart + (GunStartArrow->GetForwardVector() * BulletDistance); + if (GetWorldTimerManager().IsTimerActive(timerHandle)) return; + GetWorld()->LineTraceSingleByChannel(outHit, traceStart, traceEnd, ECC_Visibility, collisionParams); + DrawDebugLine(this->GetWorld(), traceStart, traceEnd, FColor::Black , false, 0.2f, 0U, 0.2f); + playerControllerRef->PlayerCameraManager->StartCameraShake(CameraShakeClass, 1); + currentAmmoCount -= 1; + bulletCountShoot += 1; + bStopShooting = false; + GenerateRecoilVector(); + ApplyRecoil(UGameplayStatics::GetWorldDeltaSeconds(this->GetWorld())); + this->GetWorld()->GetTimerManager().SetTimer(SniperTimerHandle, this, &ASniperClass::StopFire, FireRate, false); + if (outHit.bBlockingHit) + { + UE_LOG(LogTemp, Display, TEXT("Hit: %s"), *outHit.GetActor()->GetName()); + if (!Cast(outHit.GetActor())) return; + Cast(outHit.GetActor())->TakeDamage(WeaponDamage, FPointDamageEvent(), GetWorld()->GetFirstPlayerController(), this); + } + } + else if(currentAmmoCount <= 0) + { + UE_LOG(LogTemp, Display, TEXT("No ammo, Ammo count: %d"), currentAmmoCount); + } } void ASniperClass::ApplyRecoil(float DeltaTime) { - if (endlessVendettaChar->bIsPlayerMoving) + if (recoilTime < 0.3) { - UE_LOG(LogTemp, Display, TEXT("playerMovingIsTrue")); + float amplitude = RecoilCurve->GetFloatValue(recoilTime); //get current value of curve in time + recoilTime += DeltaTime; + + playerInWorld->AddControllerPitchInput(GetRecoilPitch(amplitude, recoilTime)); + + currentPitch += GetRecoilPitch(amplitude,recoilTime); + + playerInWorld->AddControllerPitchInput(FMath::RandRange(-5 * DeltaTime, 5* DeltaTime)); + GunStartArrow->AddRelativeRotation(FRotator(-GetRecoilPitch(amplitude, recoilTime), 0, 0)); + playerInWorld->AddControllerYawInput(GetRecoilYaw(amplitude, recoilTime)); + + UpdateSamples(amplitude, recoilTime); } } + +void ASniperClass::StopFire() +{ + bSingleShotOnly = false; +} diff --git a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/SniperClass.h b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/SniperClass.h index 1b590477..721020b1 100644 --- a/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/SniperClass.h +++ b/EndlessVendetta/Source/EndlessVendetta/WeaponSystem/SniperClass.h @@ -4,7 +4,6 @@ #include "CoreMinimal.h" #include "BaseWeaponClass.h" -#include "EndlessVendettaCharacter.h" #include "SniperClass.generated.h" /** @@ -27,10 +26,17 @@ public: // Called every frame virtual void Tick(float DeltaTime) override; +private: + + bool bSingleShotOnly; + FTimerHandle SniperTimerHandle; + protected: virtual void Fire() override; virtual void ApplyRecoil(float DeltaTime) override; + + void StopFire(); };