diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/LOS_Test.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/LOS_Test.uasset index 8dc51b6b..4d036d96 100644 --- a/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/LOS_Test.uasset +++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/LOS_Test.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:3dcf2376c901c20297196f292d3af9789583d7023bb529d5e347e29cf43967e1 -size 14705 +oid sha256:16b8ace32a02155ad001cb46a64f3b5bef4c4c4ae6f13f0a6e13ac5d683c9a3c +size 14694 diff --git a/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/RG_VisionLink.uasset b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/RG_VisionLink.uasset index 600897ad..570bf9cb 100644 --- a/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/RG_VisionLink.uasset +++ b/EndlessVendetta/Content/Gadgets/ReconGadgets/VisionLink/RG_VisionLink.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2e54f66125275a7482edeefbb4f92ebba6bc1791877f697fd60c6051711946e7 -size 98220 +oid sha256:0d16edae7f13193d1183a5d98fe86bdc3c55fa37936345f8239280501fd89fd5 +size 98008 diff --git a/EndlessVendetta/Content/Levels/GadgetSystemTestLevel.umap b/EndlessVendetta/Content/Levels/GadgetSystemTestLevel.umap index 452a38a1..07a4fcd2 100644 --- a/EndlessVendetta/Content/Levels/GadgetSystemTestLevel.umap +++ b/EndlessVendetta/Content/Levels/GadgetSystemTestLevel.umap @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:e8b0e40ede14db8ce7ce78f51420e587af885afcbc93c4c0e8a24ec6798005ec -size 109679 +oid sha256:9e3dc3ac3d7558e57253059c870b13d20e67e639f7a748c3c6a384d65ae7df7f +size 109712 diff --git a/EndlessVendetta/Content/StarterContent/Architecture/Floor_400x400.uasset b/EndlessVendetta/Content/StarterContent/Architecture/Floor_400x400.uasset index 2a403468..c2a34afc 100644 --- a/EndlessVendetta/Content/StarterContent/Architecture/Floor_400x400.uasset +++ b/EndlessVendetta/Content/StarterContent/Architecture/Floor_400x400.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:30e523627b30cc7ce8fd4c7a81a580903d0c6689149e9f7cbf39c373d5475a40 -size 14831 +oid sha256:4c0ecf0ac0702cc2bd355ec050232a61c49e10f102448efbeb735a51824adef6 +size 14948 diff --git a/EndlessVendetta/Content/StarterContent/HDRI/HDRI_Epic_Courtyard_Daylight.uasset b/EndlessVendetta/Content/StarterContent/HDRI/HDRI_Epic_Courtyard_Daylight.uasset index 0f990580..caa0814c 100644 --- a/EndlessVendetta/Content/StarterContent/HDRI/HDRI_Epic_Courtyard_Daylight.uasset +++ b/EndlessVendetta/Content/StarterContent/HDRI/HDRI_Epic_Courtyard_Daylight.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:bc35eb2d43a47427d30aba0196f9eac90d089dd3abca319528c5d25c83510d0d -size 72364642 +oid sha256:81331a890b185a2c1bc418da80b947c289a8ab67ff91737e9b187c45c71d083d +size 66790690 diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.cpp b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.cpp index 2aa44fa2..459321d3 100644 --- a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.cpp +++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.cpp @@ -3,6 +3,7 @@ #include "VisionLink.h" +#include "Kismet/KismetMathLibrary.h" #include "Camera/CameraComponent.h" #include "VisionLinkEnemyLOSTest.h" #include "GameFramework/Character.h" @@ -42,17 +43,60 @@ void AVisionLink::SendOutPingPulse() UpdatePulsesRemaining(NumOfPingPulsesLeftInThisCycle); if (NumOfPingPulsesLeftInThisCycle < 0) return; - FActorSpawnParameters SpawnParams; - SpawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn; - UCameraComponent* PlayerCamComp = Cast(GetWorld()->GetFirstPlayerController()->GetCharacter()->GetComponentByClass(UCameraComponent::StaticClass())); - //FVector SpawnLoc = PlayerCamComp->GetSocketLocation(NAME_None) + PlayerCamComp->GetForwardVector() * EnemyLOSTestActor->GetDefaultObject() + // FActorSpawnParameters SpawnParams; + // SpawnParams.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::AlwaysSpawn; - - //AActor* LOSTestActor = GetWorld()->SpawnActor(EnemyLOSTestActor, SpawnLoc, GetActorRotation(), SpawnParams); - //TArray EmptyIDArray; - //Cast(LOSTestActor)->TestLOS(EmptyIDArray, this); + // FVector SpawnLoc = PlayerCamComp->GetComponentLocation() + PlayerCamComp->GetForwardVector() * EnemyLOSTestActor->GetDefaultObject()->SpawnOffset; + // + // + // AActor* LOSTestActor = GetWorld()->SpawnActor(EnemyLOSTestActor, SpawnLoc, PlayerCamComp->GetComponentRotation(), SpawnParams); + // TArray EmptyIDArray; + // Cast(LOSTestActor)->TestLOS(EmptyIDArray, this); UE_LOG(LogTemp, Warning, TEXT("Ping Pulse!")); GetWorld()->GetTimerManager().SetTimer(PulseHandle, this, &AVisionLink::SendOutPingPulse, TimeInbetweenPingPulses, false); PlayPingPulseAnim(TimeInbetweenPingPulses); + + UCameraComponent* PlayerCamComp = Cast(GetWorld()->GetFirstPlayerController()->GetCharacter()->GetComponentByClass(UCameraComponent::StaticClass())); + TArray ActorsToIgnore; + ActorsToIgnore.Add(GetWorld()->GetFirstPlayerController()->GetCharacter()); + TestLOS(PlayerCamComp->GetComponentTransform(), ActorsToIgnore); } + +void AVisionLink::TestLOS(FTransform StartingPos, TArray &ActorsToIgnore) +{ + float H_DegreeIncrement = (float)H_FOV / (float)LT_Horizontal_Density; + float V_DegreeIncrement = (float)V_FOV / (float)LT_Vertical_Density; + float H_StartingRot = StartingPos.GetRotation().Rotator().Yaw - ((float)H_FOV / 2.0); + float V_StartingRot = StartingPos.GetRotation().Rotator().Pitch - ((float)V_FOV / 2.0); + + for (int H_Increment = 1; H_Increment <= LT_Horizontal_Density; H_Increment++) + { + for (int V_Increment = 1; V_Increment <= LT_Vertical_Density; V_Increment++) + { + FHitResult outHit; + FCollisionQueryParams QueryParams = FCollisionQueryParams::DefaultQueryParam; + QueryParams.bTraceComplex = true; + QueryParams.AddIgnoredActors(ActorsToIgnore); + + FRotator LT_Rot = FRotator(V_StartingRot + (V_Increment * V_DegreeIncrement), H_StartingRot + (H_Increment * H_DegreeIncrement), StartingPos.GetRotation().Rotator().Roll); + FVector LT_EndPoint = StartingPos.GetLocation() + UKismetMathLibrary::GetForwardVector(LT_Rot) * LT_Distance; + + if (!GetWorld()->LineTraceSingleByChannel(outHit, StartingPos.GetLocation(), LT_EndPoint, ECC_Camera, QueryParams)) continue; + + // Only consider enemies which we haven't seen before + AActor* HitActor = outHit.GetActor(); + if (!HitActor->ActorHasTag(FName("Enemy"))) continue; //|| EnemiesInLink.Contains(HitActor->GetUniqueID())) continue; + + DrawDebugLine(GetWorld(), outHit.TraceStart, outHit.ImpactPoint, FColor::Blue, false, 3, 0, 3); + ActorsToIgnore.Add(HitActor); + UE_LOG(LogTemp, Warning, TEXT("I've Seen an Enemy called: %s"), *HitActor->GetName()); + TestLOS(HitActor->GetTransform(), ActorsToIgnore); + + + + } + } + +} + diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.h b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.h index fa5ac3e9..a8097ed2 100644 --- a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.h +++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLink.h @@ -21,6 +21,8 @@ class ENDLESSVENDETTA_API AVisionLink : public AReconGadget FTimerHandle PulseHandle; + void TestLOS(FTransform StartingPos, TArray &ActorsToIgnore); + void SendOutPingPulse(); virtual void BeginPlay() override; @@ -34,7 +36,24 @@ protected: int NumberOfPingPulses = 1; UPROPERTY(EditDefaultsOnly, Category = "Vision Link") - TSubclassOf EnemyLOSTestActor; + int LT_Horizontal_Density = 80; + + UPROPERTY(EditDefaultsOnly, Category = "Vision Link") + int LT_Vertical_Density = 25; + + UPROPERTY(EditDefaultsOnly, Category = "Vision Link") + float LT_Distance = 4000; + + UPROPERTY(EditDefaultsOnly, Category = "Vision Link") + float H_FOV = 75; + + UPROPERTY(EditDefaultsOnly, Category = "Vision Link") + float V_FOV = 25; + + + + // 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 index bb08e273..52c807f9 100644 --- a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLinkEnemyLOSTest.cpp +++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLinkEnemyLOSTest.cpp @@ -48,7 +48,11 @@ void AVisionLinkEnemyLOSTest::TestLOS(TArray EnemiesInLink, AActor* LOSA 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]->GetUniqueID())) OverlappingEnemies.RemoveAt(i); + if (!OverlappingEnemies[i]->ActorHasTag(FName("Enemy")) || EnemiesInLink.Contains(OverlappingEnemies[i]->GetUniqueID())) + { + UE_LOG(LogTemp, Warning, TEXT("enemy name: %s"), *OverlappingEnemies[i]->GetName()); + OverlappingEnemies.RemoveAt(i); + } } if (OverlappingEnemies.IsEmpty()) { @@ -58,12 +62,12 @@ void AVisionLinkEnemyLOSTest::TestLOS(TArray EnemiesInLink, AActor* LOSA for (AActor* Enemy : OverlappingEnemies) { - if (!IsValid(LOSActor)) UE_LOG(LogTemp, Fatal, TEXT("im an idiot")); FRotator LookAtRotation = UKismetMathLibrary::FindLookAtRotation(LOSActor->GetActorLocation(), Enemy->GetActorLocation()); UE_LOG(LogTemp, Warning, TEXT("Look at Rotation: %f"), LookAtRotation.Yaw); + UE_LOG(LogTemp, Warning, TEXT("enemy name: %s"), *Enemy->GetName()); } - //Destroy(); + Destroy(); } diff --git a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLinkEnemyLOSTest.h b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLinkEnemyLOSTest.h index 30475038..add35b97 100644 --- a/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLinkEnemyLOSTest.h +++ b/EndlessVendetta/Source/EndlessVendetta/GadgetSystem/GadgetClasses/Recon/VisionLink/VisionLinkEnemyLOSTest.h @@ -18,7 +18,7 @@ protected: public: UPROPERTY(EditDefaultsOnly, Category = "Vision Link") - FVector SpawnOffset = FVector(0, 0, 0 ); + float SpawnOffset = 0; // Sets default values for this actor's properties AVisionLinkEnemyLOSTest();