diff --git a/Content/Levels/Level.umap b/Content/Levels/Level.umap index 0b9d575..0553c99 100644 --- a/Content/Levels/Level.umap +++ b/Content/Levels/Level.umap @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:83ab36e022ed686a8db44c1cde65155b360c82892a49d0635554bddeb4808de4 -size 83328 +oid sha256:5f9c6521e1981055cef7d98b21d1ac5fdd897a1e1dda6172bab851ef54161795 +size 84079 diff --git a/Content/Player/BP_PlayerCharacter.uasset b/Content/Player/BP_PlayerCharacter.uasset index d35bf2b..8d361ec 100644 --- a/Content/Player/BP_PlayerCharacter.uasset +++ b/Content/Player/BP_PlayerCharacter.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:2b9e34f16c2ea0c5fe30c23513aa68da450762ae85729caa5a7be4c3fa83c212 -size 57110 +oid sha256:16fca7e0707027115a6bd0a4c4145828955ae8fc1d42b9a73d63ee28f14e5a2f +size 56951 diff --git a/Content/Weapons/FireWand/BP_FireWandWeapon.uasset b/Content/Weapons/FireWand/BP_FireWandWeapon.uasset index 56ed658..529de15 100644 --- a/Content/Weapons/FireWand/BP_FireWandWeapon.uasset +++ b/Content/Weapons/FireWand/BP_FireWandWeapon.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:ee6edc2f3232d01834fc70ff0be929575411feaad03899d383ae0a9ef34224ed -size 24507 +oid sha256:897afecfd1083e6c656896742629b1c1e765712f7c7a1756d3ef8c6e137faaa3 +size 24553 diff --git a/Content/Weapons/Knife/BP_KnifeWeapon.uasset b/Content/Weapons/Knife/BP_KnifeWeapon.uasset index c8fee5c..8d6f349 100644 --- a/Content/Weapons/Knife/BP_KnifeWeapon.uasset +++ b/Content/Weapons/Knife/BP_KnifeWeapon.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:215476c241283d46a09a19aff80758c052b4211040ade798c53ab4d03d656eb9 -size 24563 +oid sha256:e9452ea95fec8a8bc464277f9bb908764a4055eec1d41ca4e7b64e869378a792 +size 24548 diff --git a/Content/Weapons/LightningRing/BP_LightningRingWeapon.uasset b/Content/Weapons/LightningRing/BP_LightningRingWeapon.uasset index 863083c..372442f 100644 --- a/Content/Weapons/LightningRing/BP_LightningRingWeapon.uasset +++ b/Content/Weapons/LightningRing/BP_LightningRingWeapon.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:9d0e9de42c67cb59e1334045bed97f283b3946583a0e85e1c95b8279ca734d7e -size 24112 +oid sha256:f246ea13ea0b27e2bd796b151e1f75d8abd64fe546852d983b59df5f4e11fd26 +size 24862 diff --git a/Content/Weapons/MagicWand/BP_MagicWandWeapon.uasset b/Content/Weapons/MagicWand/BP_MagicWandWeapon.uasset index 72714c6..3403a75 100644 --- a/Content/Weapons/MagicWand/BP_MagicWandWeapon.uasset +++ b/Content/Weapons/MagicWand/BP_MagicWandWeapon.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0beec90c119efb444445476989b86bdf0745979d0d5e5c286e556372d5396d28 -size 24583 +oid sha256:7ad79c63c4e3d63e8484dfbae7a664af266ab88df982f1627648fa4fe5df4fae +size 24629 diff --git a/Content/Weapons/Pentagram/BP_PentagramWeapon.uasset b/Content/Weapons/Pentagram/BP_PentagramWeapon.uasset index e4b9ae2..1d7edff 100644 --- a/Content/Weapons/Pentagram/BP_PentagramWeapon.uasset +++ b/Content/Weapons/Pentagram/BP_PentagramWeapon.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0ba766498c0277dfec28e1933e6384d375b5710986a886aff7f666919940ff34 -size 24248 +oid sha256:0e71ada3d3902a5bb20096dfd874c155fdc3a1f9505795f6e3d2e32ac2cfa7d9 +size 24294 diff --git a/Content/Weapons/PhieraDerTuphello/BP_PhieraDerTuphelloWeapon.uasset b/Content/Weapons/PhieraDerTuphello/BP_PhieraDerTuphelloWeapon.uasset index 36dc940..08ce4a4 100644 --- a/Content/Weapons/PhieraDerTuphello/BP_PhieraDerTuphelloWeapon.uasset +++ b/Content/Weapons/PhieraDerTuphello/BP_PhieraDerTuphelloWeapon.uasset @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b5f6968aefb94201d23109df13b4ebe9221a377afb4df7dcc0113ade1c809de2 -size 24748 +oid sha256:9eb8807426d8d7073ebd6ba9846e55488238e4eccf8a034be6557f0c324f2195 +size 24794 diff --git a/Source/vampires/Weapon.cpp b/Source/vampires/Weapon.cpp index d14353d..f0a8cb1 100644 --- a/Source/vampires/Weapon.cpp +++ b/Source/vampires/Weapon.cpp @@ -3,7 +3,10 @@ #include "Weapon.h" -#include "EXPComponent.h" +#include "EnemyCharacter.h" +#include "PlayerCharacter.h" +#include "VampirePlayerController.h" +#include "Components/BoxComponent.h" #include "Kismet/GameplayStatics.h" // Sets default values @@ -11,6 +14,10 @@ AWeapon::AWeapon() { // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = false; + + BoxComponent = CreateDefaultSubobject(TEXT("Box Component")); + BoxComponent->SetupAttachment(RootComponent); + BoxComponent->SetCollisionProfileName(TEXT("Weapon")); } // Called when the game starts or when spawned @@ -18,6 +25,13 @@ void AWeapon::BeginPlay() { Super::BeginPlay(); + BoxComponent->OnComponentBeginOverlap.AddDynamic(this, &AWeapon::OnWeaponBeginOverlap); + BoxComponent->OnComponentEndOverlap.AddDynamic(this, &AWeapon::OnWeaponEndOverlap); + + FViewport::ViewportResizedEvent.AddUObject(this, &AWeapon::ResizeBoxComponent); + + ResizeBoxComponent(GEngine->GameViewport->Viewport, -1); + GetWorldTimerManager().SetTimer(WeaponTimerHandle, this, &AWeapon::FireWeaponAction, WeaponCooldown, true); } @@ -47,3 +61,45 @@ bool AWeapon::UpgradeWeapon_Implementation() return false; } + +void AWeapon::OnWeaponBeginOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, + UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult) +{ + if (AEnemyCharacter* Enemy = Cast(OtherActor)) + { + OverlappedEnemies.Add(Enemy); + } +} + +void AWeapon::OnWeaponEndOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, + UPrimitiveComponent* OtherComp, int32 OtherBodyIndex) +{ + if (AEnemyCharacter* Enemy = Cast(OtherActor)) + { + OverlappedEnemies.Remove(Enemy); + } +} + +void AWeapon::ResizeBoxComponent(FViewport* Viewport, uint32 unused) +{ + FVector TopLeft, TopLeftDir; + FVector TopRight, TopRightDir; + FVector BottomLeft, BottomLeftDir; + FVector BottomRight, BottomRightDir; + + FVector2d ViewportSize; + GEngine->GameViewport->GetViewportSize(ViewportSize); + + APlayerCharacter* PlayerCharacter = Cast(UGameplayStatics::GetPlayerCharacter(GetWorld(), 0)); + AVampirePlayerController* PlayerController = Cast( + UGameplayStatics::GetPlayerController(PlayerCharacter, 0)); + + PlayerController->DeprojectScreenPositionToWorld(0, 0, TopLeft, TopLeftDir); + PlayerController->DeprojectScreenPositionToWorld(ViewportSize.X, 0, TopRight, TopRightDir); + PlayerController->DeprojectScreenPositionToWorld(0, ViewportSize.Y, BottomLeft, BottomLeftDir); + PlayerController->DeprojectScreenPositionToWorld(ViewportSize.X, ViewportSize.Y, BottomRight, BottomRightDir); + + float width = FVector::Dist(TopLeft, TopRight) * 120; + float height = FVector::Dist(TopLeft, BottomLeft) * 120; + BoxComponent->SetBoxExtent(FVector(height, width, 200.0f)); +} diff --git a/Source/vampires/Weapon.h b/Source/vampires/Weapon.h index 7fcf8aa..9195d79 100644 --- a/Source/vampires/Weapon.h +++ b/Source/vampires/Weapon.h @@ -4,8 +4,10 @@ #include "CoreMinimal.h" #include "GameFramework/Actor.h" +#include "UnrealClient.h" #include "Weapon.generated.h" +class UBoxComponent; class UPaperSprite; class UWeaponDataAsset; @@ -41,9 +43,18 @@ public: int CurrentLevel = 0; + UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "Weapon Properties") + bool FollowPlayer = true; + UPROPERTY(EditDefaultsOnly, BlueprintReadOnly) int MaxLevel = 0; +protected: + UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) + UBoxComponent* BoxComponent = nullptr; + + TArray OverlappedEnemies = TArray(); + private: FTimerHandle WeaponTimerHandle; @@ -66,4 +77,17 @@ public: UFUNCTION(BlueprintNativeEvent) bool UpgradeWeapon(); virtual bool UpgradeWeapon_Implementation(); + + UFUNCTION() + virtual void OnWeaponBeginOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, + UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, + const FHitResult& SweepResult); + + UFUNCTION() + virtual void OnWeaponEndOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, + int32 OtherBodyIndex); + +private: + + void ResizeBoxComponent(FViewport* Viewport, uint32 unused); }; diff --git a/Source/vampires/WeaponInventoryComponent.cpp b/Source/vampires/WeaponInventoryComponent.cpp index 6bbc33e..22cf316 100644 --- a/Source/vampires/WeaponInventoryComponent.cpp +++ b/Source/vampires/WeaponInventoryComponent.cpp @@ -39,7 +39,16 @@ void UWeaponInventoryComponent::AddWeaponToInventory(TSubclassOf Weapon SpawnParameters.Owner = GetOwner(); AWeapon* weapon = GetWorld()->SpawnActor(Weapon, GetOwner()->GetTransform(), SpawnParameters); - weapon->AttachToActor(GetOwner(), FAttachmentTransformRules::KeepRelativeTransform); + + if (weapon->FollowPlayer) + { + weapon->AttachToActor(GetOwner(), FAttachmentTransformRules::KeepRelativeTransform); + } + else + { + weapon->SetActorLocation(FVector::ZeroVector); + } + inventory.Add(weapon); } diff --git a/Source/vampires/Weapons/GarlicWeapon.cpp b/Source/vampires/Weapons/GarlicWeapon.cpp index 58e741d..f372538 100644 --- a/Source/vampires/Weapons/GarlicWeapon.cpp +++ b/Source/vampires/Weapons/GarlicWeapon.cpp @@ -42,7 +42,7 @@ void AGarlicWeapon::OnBeginOverlap(UPrimitiveComponent* OverlappedComponent, AAc overlappedEnemy), WeaponCooldown, true); - OverlappedEnemies.Add(overlappedEnemy); + GarlicOverlappedEnemies.Add(overlappedEnemy); } } @@ -51,12 +51,12 @@ void AGarlicWeapon::OnEndOverlap(UPrimitiveComponent* OverlappedComp, AActor* Ot { if (AEnemyCharacter* Enemy = Cast(OtherActor)) { - for (int i = 0; i < OverlappedEnemies.Num(); i++) + for (int i = 0; i < GarlicOverlappedEnemies.Num(); i++) { - if (Enemy == OverlappedEnemies[i].OverlappedEnemyCharacter) + if (Enemy == GarlicOverlappedEnemies[i].OverlappedEnemyCharacter) { - GetWorldTimerManager().ClearTimer(OverlappedEnemies[i].OverlappedTimerHandle); - OverlappedEnemies.RemoveAt(i); + GetWorldTimerManager().ClearTimer(GarlicOverlappedEnemies[i].OverlappedTimerHandle); + GarlicOverlappedEnemies.RemoveAt(i); return; } } diff --git a/Source/vampires/Weapons/GarlicWeapon.h b/Source/vampires/Weapons/GarlicWeapon.h index f9d5aac..05058bd 100644 --- a/Source/vampires/Weapons/GarlicWeapon.h +++ b/Source/vampires/Weapons/GarlicWeapon.h @@ -30,7 +30,7 @@ public: UPROPERTY(VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true")) USphereComponent* SphereComponent; - TArray OverlappedEnemies; + TArray GarlicOverlappedEnemies; private: float Range; diff --git a/Source/vampires/Weapons/LightningRingWeapon.cpp b/Source/vampires/Weapons/LightningRingWeapon.cpp index 0833a38..523b810 100644 --- a/Source/vampires/Weapons/LightningRingWeapon.cpp +++ b/Source/vampires/Weapons/LightningRingWeapon.cpp @@ -10,30 +10,23 @@ ALightningRingWeapon::ALightningRingWeapon() { - SphereComponent = CreateDefaultSubobject(TEXT("Sphere Component")); - SphereComponent->SetupAttachment(RootComponent); - SphereComponent->SetSphereRadius(1000.0f); - SphereComponent->SetCollisionProfileName(TEXT("Weapon")); - Damage = 51.0f; } void ALightningRingWeapon::BeginPlay() { Super::BeginPlay(); - SphereComponent->OnComponentBeginOverlap.AddDynamic(this, &ALightningRingWeapon::OnBeginOverlap); - SphereComponent->OnComponentEndOverlap.AddDynamic(this, &ALightningRingWeapon::OnEndOverlap); } void ALightningRingWeapon::FireWeaponAction_Implementation() { Super::FireWeaponAction_Implementation(); - TArray targetableEnemies = OverlappedEnemies; + TArray targetableEnemies = OverlappedEnemies; for (int i = 0; i < LightningBolts && targetableEnemies.Num() > 0; i++) { - AEnemyCharacter* target = targetableEnemies[FMath::RandRange(0, targetableEnemies.Num() - 1)]; + AActor* target = targetableEnemies[FMath::RandRange(0, targetableEnemies.Num() - 1)]; TArray> traceObjectTypes; traceObjectTypes.Add(UEngineTypes::ConvertToObjectType(ECC_Pawn)); @@ -95,21 +88,3 @@ bool ALightningRingWeapon::UpgradeWeapon_Implementation() return true; } - -void ALightningRingWeapon::OnBeginOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, - UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult) -{ - if (AEnemyCharacter* Enemy = Cast(OtherActor)) - { - OverlappedEnemies.Add(Enemy); - } -} - -void ALightningRingWeapon::OnEndOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, - UPrimitiveComponent* OtherComp, int32 OtherBodyIndex) -{ - if (AEnemyCharacter* Enemy = Cast(OtherActor)) - { - OverlappedEnemies.Remove(Enemy); - } -} diff --git a/Source/vampires/Weapons/LightningRingWeapon.h b/Source/vampires/Weapons/LightningRingWeapon.h index 1b2bd9d..1184937 100644 --- a/Source/vampires/Weapons/LightningRingWeapon.h +++ b/Source/vampires/Weapons/LightningRingWeapon.h @@ -16,10 +16,6 @@ class VAMPIRES_API ALightningRingWeapon : public AWeapon { GENERATED_BODY() - USphereComponent* SphereComponent; - - TArray OverlappedEnemies; - public: UPROPERTY(EditAnywhere, BlueprintReadWrite) @@ -38,14 +34,4 @@ public: virtual void FireWeaponAction_Implementation() override; virtual bool UpgradeWeapon_Implementation() override; - -protected: - UFUNCTION() - void OnBeginOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, - UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, - const FHitResult& SweepResult); - - UFUNCTION() - void OnEndOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, - int32 OtherBodyIndex); }; diff --git a/Source/vampires/Weapons/PentagramWeapon.cpp b/Source/vampires/Weapons/PentagramWeapon.cpp index 3fc33ce..e243eb7 100644 --- a/Source/vampires/Weapons/PentagramWeapon.cpp +++ b/Source/vampires/Weapons/PentagramWeapon.cpp @@ -19,34 +19,6 @@ APentagramWeapon::APentagramWeapon() WeaponCooldown = 90.0f; } -void APentagramWeapon::BeginPlay() -{ - Super::BeginPlay(); - BoxComponent->OnComponentBeginOverlap.AddDynamic(this, &APentagramWeapon::OnBeginOverlap); - BoxComponent->OnComponentEndOverlap.AddDynamic(this, &APentagramWeapon::OnEndOverlap); - - FVector TopLeft, TopLeftDir; - FVector TopRight, TopRightDir; - FVector BottomLeft, BottomLeftDir; - FVector BottomRight, BottomRightDir; - - FVector2d ViewportSize; - GEngine->GameViewport->GetViewportSize(ViewportSize); - - APlayerCharacter* PlayerCharacter = Cast(UGameplayStatics::GetPlayerCharacter(GetWorld(), 0)); - AVampirePlayerController* PlayerController = Cast( - UGameplayStatics::GetPlayerController(PlayerCharacter, 0)); - - PlayerController->DeprojectScreenPositionToWorld(0, 0, TopLeft, TopLeftDir); - PlayerController->DeprojectScreenPositionToWorld(ViewportSize.X, 0, TopRight, TopRightDir); - PlayerController->DeprojectScreenPositionToWorld(0, ViewportSize.Y, BottomLeft, BottomLeftDir); - PlayerController->DeprojectScreenPositionToWorld(ViewportSize.X, ViewportSize.Y, BottomRight, BottomRightDir); - - float width = FVector::Dist(TopLeft, TopRight) * 60; - float height = FVector::Dist(TopLeft, BottomLeft) * 60; - BoxComponent->SetBoxExtent(FVector(height, width, 200.0f)); -} - void APentagramWeapon::FireWeaponAction_Implementation() { Super::FireWeaponAction_Implementation(); @@ -98,29 +70,28 @@ bool APentagramWeapon::UpgradeWeapon_Implementation() return true; } -void APentagramWeapon::OnBeginOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, - UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, - const FHitResult& SweepResult) +void APentagramWeapon::OnWeaponBeginOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, + UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult) { - if (AEnemyCharacter* Enemy = Cast(OtherActor)) - { - OverlappedEnemies.Add(Enemy); - } - else if (APickup* Pickup = Cast(OtherActor)) + if (APickup* Pickup = Cast(OtherActor)) { OverlappedPickups.Add(Pickup); } + else + { + Super::OnWeaponBeginOverlap(OverlappedComponent, OtherActor, OtherComp, OtherBodyIndex, bFromSweep, SweepResult); + } } -void APentagramWeapon::OnEndOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, - UPrimitiveComponent* OtherComp, int32 OtherBodyIndex) +void APentagramWeapon::OnWeaponEndOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, + UPrimitiveComponent* OtherComp, int32 OtherBodyIndex) { - if (AEnemyCharacter* Enemy = Cast(OtherActor)) - { - OverlappedEnemies.Remove(Enemy); - } - else if (APickup* Pickup = Cast(OtherActor)) + if (APickup* Pickup = Cast(OtherActor)) { OverlappedPickups.Remove(Pickup); } + else + { + Super::OnWeaponEndOverlap(OverlappedComp, OtherActor, OtherComp, OtherBodyIndex); + } } diff --git a/Source/vampires/Weapons/PentagramWeapon.h b/Source/vampires/Weapons/PentagramWeapon.h index 5ff2b89..5f273e5 100644 --- a/Source/vampires/Weapons/PentagramWeapon.h +++ b/Source/vampires/Weapons/PentagramWeapon.h @@ -17,33 +17,19 @@ class VAMPIRES_API APentagramWeapon : public AWeapon { GENERATED_BODY() -public: - UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) - UBoxComponent* BoxComponent = nullptr; - private: - TArray OverlappedEnemies = TArray(); - TArray OverlappedPickups = TArray(); public: APentagramWeapon(); - -protected: - virtual void BeginPlay() override; - -public: + virtual void FireWeaponAction_Implementation() override; bool UpgradeWeapon_Implementation() override; - -protected: - UFUNCTION() - void OnBeginOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, - UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, - const FHitResult& SweepResult); - - UFUNCTION() - void OnEndOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, - int32 OtherBodyIndex); + + virtual void OnWeaponBeginOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, + UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult) override; + + virtual void OnWeaponEndOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, + UPrimitiveComponent* OtherComp, int32 OtherBodyIndex) override; }; diff --git a/Source/vampires/Weapons/ProjectileWeapon.cpp b/Source/vampires/Weapons/ProjectileWeapon.cpp index 1bf91d2..c069caa 100644 --- a/Source/vampires/Weapons/ProjectileWeapon.cpp +++ b/Source/vampires/Weapons/ProjectileWeapon.cpp @@ -3,66 +3,7 @@ #include "ProjectileWeapon.h" -#include "Kismet/GameplayStatics.h" -#include "vampires/EnemyCharacter.h" -#include "vampires/PlayerCharacter.h" -#include "vampires/VampirePlayerController.h" #include "../Weapon.h" -#include "Components/BoxComponent.h" - -AProjectileWeapon::AProjectileWeapon() -{ - BoxComponent = CreateDefaultSubobject(TEXT("Box Component")); - BoxComponent->SetupAttachment(RootComponent); - BoxComponent->SetCollisionProfileName(TEXT("Weapon")); -} - -void AProjectileWeapon::BeginPlay() -{ - Super::BeginPlay(); - BoxComponent->OnComponentBeginOverlap.AddDynamic(this, &AProjectileWeapon::OnWeaponBeginOverlap); - BoxComponent->OnComponentEndOverlap.AddDynamic(this, &AProjectileWeapon::OnWeaponEndOverlap); - - FVector TopLeft, TopLeftDir; - FVector TopRight, TopRightDir; - FVector BottomLeft, BottomLeftDir; - FVector BottomRight, BottomRightDir; - - FVector2d ViewportSize; - GEngine->GameViewport->GetViewportSize(ViewportSize); - - APlayerCharacter* PlayerCharacter = Cast(UGameplayStatics::GetPlayerCharacter(GetWorld(), 0)); - AVampirePlayerController* PlayerController = Cast( - UGameplayStatics::GetPlayerController(PlayerCharacter, 0)); - - PlayerController->DeprojectScreenPositionToWorld(0, 0, TopLeft, TopLeftDir); - PlayerController->DeprojectScreenPositionToWorld(ViewportSize.X, 0, TopRight, TopRightDir); - PlayerController->DeprojectScreenPositionToWorld(0, ViewportSize.Y, BottomLeft, BottomLeftDir); - PlayerController->DeprojectScreenPositionToWorld(ViewportSize.X, ViewportSize.Y, BottomRight, BottomRightDir); - - float width = FVector::Dist(TopLeft, TopRight) * 60; - float height = FVector::Dist(TopLeft, BottomLeft) * 60; - BoxComponent->SetBoxExtent(FVector(height, width, 200.0f)); -} - -void AProjectileWeapon::OnWeaponBeginOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, - UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, - const FHitResult& SweepResult) -{ - if (AEnemyCharacter* Enemy = Cast(OtherActor)) - { - OverlappedEnemies.Add(Enemy); - } -} - -void AProjectileWeapon::OnWeaponEndOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, - UPrimitiveComponent* OtherComp, int32 OtherBodyIndex) -{ - if (AEnemyCharacter* Enemy = Cast(OtherActor)) - { - OverlappedEnemies.Remove(Enemy); - } -} void AProjectileWeapon::FireWeaponAction_Implementation() { diff --git a/Source/vampires/Weapons/ProjectileWeapon.h b/Source/vampires/Weapons/ProjectileWeapon.h index e2b7127..55ec964 100644 --- a/Source/vampires/Weapons/ProjectileWeapon.h +++ b/Source/vampires/Weapons/ProjectileWeapon.h @@ -8,7 +8,6 @@ class UProjectileDataAsset; class AProjectile; -class UBoxComponent; /** * @@ -19,9 +18,6 @@ class VAMPIRES_API AProjectileWeapon : public AWeapon GENERATED_BODY() public: - UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) - UBoxComponent* BoxComponent = nullptr; - UPROPERTY(EditAnywhere, Category = "Weapon Properties") TObjectPtr ProjectileTemplate = nullptr; @@ -32,29 +28,12 @@ public: float ProjectileSpawningDelay = 0.25f; protected: - TArray OverlappedEnemies = TArray(); - FTimerHandle FireProjectileTimerHandler; private: int remainingProjectilesToSpawn = 0; public: - AProjectileWeapon(); - -protected: - virtual void BeginPlay() override; - -public: - UFUNCTION() - void OnWeaponBeginOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, - UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, - const FHitResult& SweepResult); - - UFUNCTION() - void OnWeaponEndOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor, UPrimitiveComponent* OtherComp, - int32 OtherBodyIndex); - virtual void FireWeaponAction_Implementation() override; protected: