Compare commits
	
		
			2 Commits
		
	
	
		
			f3f4ad0409
			...
			7497f8edce
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 7497f8edce | |||
| a05a24dc62 | 
							
								
								
									
										
											BIN
										
									
								
								Content/Weapons/LightningRing/BP_LightningRingWeapon.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Content/Weapons/LightningRing/BP_LightningRingWeapon.uasset
									 (Stored with Git LFS)
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							@ -3,6 +3,8 @@
 | 
			
		||||
 | 
			
		||||
#include "LightningRingWeapon.h"
 | 
			
		||||
#include "Components/SphereComponent.h"
 | 
			
		||||
#include "Kismet/GameplayStatics.h"
 | 
			
		||||
#include "Kismet/KismetSystemLibrary.h"
 | 
			
		||||
#include "vampires/EnemyCharacter.h"
 | 
			
		||||
#include "vampires/HealthComponent.h"
 | 
			
		||||
 | 
			
		||||
@ -27,23 +29,75 @@ void ALightningRingWeapon::FireWeaponAction_Implementation()
 | 
			
		||||
{
 | 
			
		||||
	Super::FireWeaponAction_Implementation();
 | 
			
		||||
 | 
			
		||||
	if (OverlappedEnemies.Num() > 0)
 | 
			
		||||
	TArray<AEnemyCharacter*> targetableEnemies = OverlappedEnemies;
 | 
			
		||||
 | 
			
		||||
	for (int i  = 0; i < LightningBolts && targetableEnemies.Num() > 0; i++)
 | 
			
		||||
	{
 | 
			
		||||
		AEnemyCharacter* target = OverlappedEnemies[FMath::RandRange(0, OverlappedEnemies.Num() - 1)];
 | 
			
		||||
		UHealthComponent* EnemyHealthComponent = target->GetHealthComponent();
 | 
			
		||||
		AEnemyCharacter* target = targetableEnemies[FMath::RandRange(0, targetableEnemies.Num() - 1)];
 | 
			
		||||
 | 
			
		||||
		TArray<TEnumAsByte<EObjectTypeQuery>> traceObjectTypes;
 | 
			
		||||
		traceObjectTypes.Add(UEngineTypes::ConvertToObjectType(ECC_Pawn));
 | 
			
		||||
		
 | 
			
		||||
		AController* ownerController = nullptr;
 | 
			
		||||
		if (AVampireCharacter* character = Cast<AVampireCharacter>(GetOwner()))
 | 
			
		||||
		{
 | 
			
		||||
			ownerController = character->GetController();
 | 
			
		||||
		TArray<AActor*> actorsToIgnore = TArray<AActor*>({ GetOwner() });
 | 
			
		||||
 | 
			
		||||
		TArray<AActor*> hitResults;
 | 
			
		||||
		
 | 
			
		||||
		UKismetSystemLibrary::SphereOverlapActors(GetWorld(),
 | 
			
		||||
			target->GetActorLocation(),
 | 
			
		||||
			LightingBoltRadius,
 | 
			
		||||
			traceObjectTypes,
 | 
			
		||||
			AEnemyCharacter::StaticClass(),
 | 
			
		||||
			actorsToIgnore,
 | 
			
		||||
			hitResults);
 | 
			
		||||
 | 
			
		||||
		for (AActor* EnemyHitResult : hitResults)
 | 
			
		||||
		{			
 | 
			
		||||
			UGameplayStatics::ApplyDamage(EnemyHitResult, Damage, nullptr, this, nullptr);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		EnemyHealthComponent->TakeDamage(target, Damage, nullptr, ownerController, this);
 | 
			
		||||
 | 
			
		||||
		targetableEnemies.Remove(target);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool ALightningRingWeapon::UpgradeWeapon_Implementation()
 | 
			
		||||
{
 | 
			
		||||
	if (!Super::UpgradeWeapon_Implementation()) return false;
 | 
			
		||||
 | 
			
		||||
	switch (CurrentLevel)
 | 
			
		||||
	{
 | 
			
		||||
		case 1:
 | 
			
		||||
			LightningBolts++;
 | 
			
		||||
			break;
 | 
			
		||||
		case 2:
 | 
			
		||||
			LightingBoltRadius += LightingBoltRadius;
 | 
			
		||||
			Damage += 10;
 | 
			
		||||
			break;
 | 
			
		||||
		case 3:
 | 
			
		||||
			LightningBolts++;
 | 
			
		||||
			break;
 | 
			
		||||
		case 4:
 | 
			
		||||
			LightingBoltRadius += LightingBoltRadius;
 | 
			
		||||
			Damage += 20;
 | 
			
		||||
			break;
 | 
			
		||||
		case 5:
 | 
			
		||||
			LightningBolts++;
 | 
			
		||||
			break;
 | 
			
		||||
		case 6:
 | 
			
		||||
			LightingBoltRadius += LightingBoltRadius;
 | 
			
		||||
			Damage += 20;
 | 
			
		||||
			break;
 | 
			
		||||
		case 7:
 | 
			
		||||
			LightningBolts++;
 | 
			
		||||
			break;
 | 
			
		||||
		default:
 | 
			
		||||
			return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void ALightningRingWeapon::OnBeginOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor,
 | 
			
		||||
	UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
 | 
			
		||||
                                          UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep, const FHitResult& SweepResult)
 | 
			
		||||
{
 | 
			
		||||
	if (AEnemyCharacter* Enemy = Cast<AEnemyCharacter>(OtherActor))
 | 
			
		||||
	{
 | 
			
		||||
 | 
			
		||||
@ -20,6 +20,14 @@ class VAMPIRES_API ALightningRingWeapon : public AWeapon
 | 
			
		||||
 | 
			
		||||
	TArray<AEnemyCharacter*> OverlappedEnemies;
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
 | 
			
		||||
	int LightningBolts = 1;
 | 
			
		||||
 | 
			
		||||
	UPROPERTY(EditAnywhere, BlueprintReadWrite)
 | 
			
		||||
	float LightingBoltRadius = 200.0f;
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
	ALightningRingWeapon();
 | 
			
		||||
 | 
			
		||||
@ -29,6 +37,8 @@ protected:
 | 
			
		||||
public:
 | 
			
		||||
	virtual void FireWeaponAction_Implementation() override;
 | 
			
		||||
 | 
			
		||||
	virtual bool UpgradeWeapon_Implementation() override;
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
	UFUNCTION()
 | 
			
		||||
	void OnBeginOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor,
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user