diff --git a/Source/vampires/Weapons/PentagramWeapon.cpp b/Source/vampires/Weapons/PentagramWeapon.cpp index 04ee8df..01e9976 100644 --- a/Source/vampires/Weapons/PentagramWeapon.cpp +++ b/Source/vampires/Weapons/PentagramWeapon.cpp @@ -31,6 +31,7 @@ void APentagramWeapon::BeginPlay() 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); diff --git a/Source/vampires/Weapons/ProjectileWeapon.cpp b/Source/vampires/Weapons/ProjectileWeapon.cpp index 7d48fff..b25f7d3 100644 --- a/Source/vampires/Weapons/ProjectileWeapon.cpp +++ b/Source/vampires/Weapons/ProjectileWeapon.cpp @@ -3,20 +3,43 @@ #include "ProjectileWeapon.h" +#include "Kismet/GameplayStatics.h" #include "vampires/EnemyCharacter.h" +#include "vampires/PlayerCharacter.h" +#include "vampires/VampirePlayerController.h" AProjectileWeapon::AProjectileWeapon() { - SphereComponent = CreateDefaultSubobject(TEXT("Sphere Component")); - SphereComponent->SetupAttachment(RootComponent); - SphereComponent->SetSphereRadius(1000.0f); + BoxComponent = CreateDefaultSubobject(TEXT("Box Component")); + BoxComponent->SetupAttachment(RootComponent); } void AProjectileWeapon::BeginPlay() { Super::BeginPlay(); - SphereComponent->OnComponentBeginOverlap.AddDynamic(this, &AProjectileWeapon::OnWeaponBeginOverlap); - SphereComponent->OnComponentEndOverlap.AddDynamic(this, &AProjectileWeapon::OnWeaponEndOverlap); + 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, diff --git a/Source/vampires/Weapons/ProjectileWeapon.h b/Source/vampires/Weapons/ProjectileWeapon.h index d2ecf03..bd1497f 100644 --- a/Source/vampires/Weapons/ProjectileWeapon.h +++ b/Source/vampires/Weapons/ProjectileWeapon.h @@ -4,6 +4,7 @@ #include "CoreMinimal.h" #include "../Weapon.h" +#include "Components/BoxComponent.h" #include "vampires/Projectile.h" #include "ProjectileWeapon.generated.h" @@ -16,7 +17,7 @@ class VAMPIRES_API AProjectileWeapon : public AWeapon GENERATED_BODY() public: UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) - USphereComponent* SphereComponent = nullptr; + UBoxComponent* BoxComponent = nullptr; UPROPERTY(EditAnywhere, Category = "Weapon Properties") TSubclassOf ProjectileTemplate = nullptr;