From 81a8c2ae44fab1ad98202e08354c5caad2f5c67f Mon Sep 17 00:00:00 2001 From: Rafal Swierczek <34179rs@gmail.com> Date: Sun, 1 Oct 2023 17:43:38 +0100 Subject: [PATCH] Started Implementing Vision Link Functionality --- .../Recon/{ => VisionLink}/VisionLink.cpp | 9 ++- .../Recon/{ => VisionLink}/VisionLink.h | 4 ++ .../VisionLink/VisionLinkEnemyLOSTest.cpp | 70 +++++++++++++++++++ .../Recon/VisionLink/VisionLinkEnemyLOSTest.h | 30 ++++++++ 4 files changed, 112 insertions(+), 1 deletion(-) rename EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/{ => VisionLink}/VisionLink.cpp (68%) rename EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/{ => VisionLink}/VisionLink.h (89%) create mode 100644 EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLinkEnemyLOSTest.cpp create mode 100644 EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLinkEnemyLOSTest.h diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink.cpp b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.cpp similarity index 68% rename from EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink.cpp rename to EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.cpp index 62fb9b7f..9ac77162 100644 --- a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink.cpp +++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.cpp @@ -38,7 +38,14 @@ void AVisionLink::SendOutPingPulse() UpdatePulsesRemaining(NumOfPingPulsesLeftInThisCycle); if (NumOfPingPulsesLeftInThisCycle < 0) return; - // THIS IS WHERE I"LL PUT PING PULSE LOGIC + FActorSpawnParameters SpawnParams; + SpawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn; + FVector SpawnLoc = (GetActorLocation() - EquippedOffset) + EnemyLOSTestActor.GetDefaultObject()->SpawnOffset; + + AActor* LOSTestActor = GetWorld()->SpawnActor(EnemyLOSTestActor, SpawnLoc, GetActorRotation(), SpawnParams); + TArray EmptyActorArray; + Cast(LOSTestActor)->TestLOS(EmptyActorArray, GetOwner()); + UE_LOG(LogTemp, Warning, TEXT("Ping Pulse!")); GetWorld()->GetTimerManager().SetTimer(PulseHandle, this, &AVisionLink::SendOutPingPulse, TimeInbetweenPingPulses, false); PlayPingPulseAnim(TimeInbetweenPingPulses); diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink.h b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.h similarity index 89% rename from EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink.h rename to EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.h index 97869006..fa5ac3e9 100644 --- a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink.h +++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.h @@ -3,6 +3,7 @@ #pragma once #include "CoreMinimal.h" +#include "VisionLinkEnemyLOSTest.h" #include "EndlessVendetta/GadgetSystem/ReconGadget.h" #include "VisionLink.generated.h" @@ -32,6 +33,9 @@ protected: UPROPERTY(EditDefaultsOnly, Category = "Vision Link") int NumberOfPingPulses = 1; + UPROPERTY(EditDefaultsOnly, Category = "Vision Link") + TSubclassOf EnemyLOSTestActor; + UPROPERTY(BlueprintReadOnly, Category = "Vision Link") float CooldownLength; diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLinkEnemyLOSTest.cpp b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLinkEnemyLOSTest.cpp new file mode 100644 index 00000000..7d837c18 --- /dev/null +++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLinkEnemyLOSTest.cpp @@ -0,0 +1,70 @@ +// Fill out your copyright notice in the Description page of Project Settings. + + +#include "VisionLinkEnemyLOSTest.h" + +#include "Components/BoxComponent.h" +#include "Kismet/KismetMathLibrary.h" + +// Sets default values +AVisionLinkEnemyLOSTest::AVisionLinkEnemyLOSTest() +{ + // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. + PrimaryActorTick.bCanEverTick = true; + +} + +// Called when the game starts or when spawned +void AVisionLinkEnemyLOSTest::BeginPlay() +{ + Super::BeginPlay(); + +} + +// Called every frame +void AVisionLinkEnemyLOSTest::Tick(float DeltaTime) +{ + Super::Tick(DeltaTime); + +} + +void AVisionLinkEnemyLOSTest::TestLOS(TArray EnemiesInLink, AActor* LOSActor) +{ + // Get all overlapping Actors + UBoxComponent* CollisionBox = Cast(GetComponentByClass(UBoxComponent::StaticClass())); + if (!IsValid(CollisionBox)) + { + Destroy(); + return; + } + TArray OverlappingEnemies; + CollisionBox->GetOverlappingActors(OverlappingEnemies); + if (OverlappingEnemies.IsEmpty()) + { + Destroy(); + return; + } + + for (int i = 0; i < OverlappingEnemies.Num(); i++) + { + // Overlapping Enemies Array should only contain enemies which aren't already in the link + if (!OverlappingEnemies[i]->ActorHasTag(FName("Enemy")) || EnemiesInLink.Contains(OverlappingEnemies[i])) OverlappingEnemies.RemoveAt(i); + } + if (OverlappingEnemies.IsEmpty()) + { + Destroy(); + return; + } + + for (AActor* Enemy : OverlappingEnemies) + { + FRotator LookAtRotation = UKismetMathLibrary::FindLookAtRotation(LOSActor->GetActorLocation(), Enemy->GetActorLocation()); + UE_LOG(LogTemp, Warning, TEXT("Look at Rotation: %f"), LookAtRotation.Yaw); + } + + Destroy(); + + +} + + diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLinkEnemyLOSTest.h b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLinkEnemyLOSTest.h new file mode 100644 index 00000000..40d7846a --- /dev/null +++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLinkEnemyLOSTest.h @@ -0,0 +1,30 @@ +// Fill out your copyright notice in the Description page of Project Settings. + +#pragma once + +#include "CoreMinimal.h" +#include "GameFramework/Actor.h" +#include "VisionLinkEnemyLOSTest.generated.h" + +UCLASS() +class ENDLESSVENDETTA_API AVisionLinkEnemyLOSTest : public AActor +{ + GENERATED_BODY() + + +protected: + // Called when the game starts or when spawned + virtual void BeginPlay() override; + +public: + UPROPERTY(EditDefaultsOnly, Category = "Vision Link") + FVector SpawnOffset = FVector(0, 0, 0 ); + + // Sets default values for this actor's properties + AVisionLinkEnemyLOSTest(); + + // Called every frame + virtual void Tick(float DeltaTime) override; + + void TestLOS(TArray EnemiesInLink, AActor* LOS_Actor); +};