Compare commits
2 Commits
78ebf0624f
...
488387767b
Author | SHA1 | Date | |
---|---|---|---|
488387767b | |||
43dad6b126 |
BIN
Content/Weapons/MagicWand/BP_MagicWandWeapon.uasset
(Stored with Git LFS)
BIN
Content/Weapons/MagicWand/BP_MagicWandWeapon.uasset
(Stored with Git LFS)
Binary file not shown.
BIN
Content/Weapons/TestProjectileDataAsset.uasset
(Stored with Git LFS)
BIN
Content/Weapons/TestProjectileDataAsset.uasset
(Stored with Git LFS)
Binary file not shown.
@ -23,33 +23,6 @@ void AFireWandWeapon::BeginPlay()
|
||||
void AFireWandWeapon::FireWeaponAction_Implementation()
|
||||
{
|
||||
Super::FireWeaponAction_Implementation();
|
||||
|
||||
if (ProjectileTemplate && OverlappedEnemies.Num() > 0)
|
||||
{
|
||||
AGameModeBase* gamemode = UGameplayStatics::GetGameMode(GetWorld());
|
||||
|
||||
if (UKismetSystemLibrary::DoesImplementInterface(gamemode, UPools::StaticClass()))
|
||||
{
|
||||
if (AObjectPoolManager* objectPoolManager = IPools::Execute_GetProjectileObjectPoolManager(gamemode))
|
||||
{
|
||||
AActor* projectile = objectPoolManager->GetObject();
|
||||
|
||||
if (UKismetSystemLibrary::DoesImplementInterface(projectile, UProjectilable::StaticClass()))
|
||||
{
|
||||
IProjectilable::Execute_LoadDataFromDataAsset(projectile, ProjectileTemplate);
|
||||
projectile->SetOwner(this);
|
||||
|
||||
AActor* target = OverlappedEnemies[FMath::RandRange(0, OverlappedEnemies.Num() - 1)];
|
||||
FVector direction = UKismetMathLibrary::GetDirectionUnitVector(
|
||||
GetActorLocation(), target->GetActorLocation());
|
||||
direction.Z = 0.0;
|
||||
direction.Normalize();
|
||||
|
||||
IProjectilable::Execute_SetTargetDirection(projectile, direction);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool AFireWandWeapon::UpgradeWeapon_Implementation()
|
||||
@ -89,3 +62,35 @@ bool AFireWandWeapon::UpgradeWeapon_Implementation()
|
||||
ResetWeaponTimer();
|
||||
return true;
|
||||
}
|
||||
|
||||
void AFireWandWeapon::FireProjectile()
|
||||
{
|
||||
if (ProjectileTemplate && OverlappedEnemies.Num() > 0)
|
||||
{
|
||||
AGameModeBase* gamemode = UGameplayStatics::GetGameMode(GetWorld());
|
||||
|
||||
if (UKismetSystemLibrary::DoesImplementInterface(gamemode, UPools::StaticClass()))
|
||||
{
|
||||
if (AObjectPoolManager* objectPoolManager = IPools::Execute_GetProjectileObjectPoolManager(gamemode))
|
||||
{
|
||||
AActor* projectile = objectPoolManager->GetObject();
|
||||
|
||||
if (UKismetSystemLibrary::DoesImplementInterface(projectile, UProjectilable::StaticClass()))
|
||||
{
|
||||
IProjectilable::Execute_LoadDataFromDataAsset(projectile, ProjectileTemplate);
|
||||
projectile->SetOwner(this);
|
||||
|
||||
AActor* target = OverlappedEnemies[FMath::RandRange(0, OverlappedEnemies.Num() - 1)];
|
||||
FVector direction = UKismetMathLibrary::GetDirectionUnitVector(
|
||||
GetActorLocation(), target->GetActorLocation());
|
||||
direction.Z = 0.0;
|
||||
direction.Normalize();
|
||||
|
||||
IProjectilable::Execute_SetTargetDirection(projectile, direction);
|
||||
}
|
||||
|
||||
Super::FireProjectile();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24,4 +24,7 @@ public:
|
||||
virtual void FireWeaponAction_Implementation() override;
|
||||
|
||||
virtual bool UpgradeWeapon_Implementation() override;
|
||||
|
||||
protected:
|
||||
virtual void FireProjectile() override;
|
||||
};
|
||||
|
@ -8,6 +8,7 @@
|
||||
#include "Kismet/KismetMathLibrary.h"
|
||||
#include "vampires/ObjectPoolManager.h"
|
||||
#include "vampires/Projectile.h"
|
||||
#include "vampires/ProjectileDataAsset.h"
|
||||
#include "vampires/Interfaces/Pools.h"
|
||||
|
||||
AMagicWandWeapon::AMagicWandWeapon()
|
||||
@ -22,7 +23,46 @@ void AMagicWandWeapon::BeginPlay()
|
||||
void AMagicWandWeapon::FireWeaponAction_Implementation()
|
||||
{
|
||||
Super::FireWeaponAction_Implementation();
|
||||
}
|
||||
|
||||
bool AMagicWandWeapon::UpgradeWeapon_Implementation()
|
||||
{
|
||||
if (!Super::UpgradeWeapon_Implementation()) return false;
|
||||
|
||||
switch (CurrentLevel)
|
||||
{
|
||||
case 1:
|
||||
ProjectilesPerActivation++;
|
||||
break;
|
||||
case 2:
|
||||
WeaponCooldown -= 0.2;
|
||||
break;
|
||||
case 3:
|
||||
ProjectilesPerActivation++;
|
||||
break;
|
||||
case 4:
|
||||
Damage += 10;
|
||||
break;
|
||||
case 5:
|
||||
ProjectilesPerActivation++;
|
||||
break;
|
||||
case 6:
|
||||
ProjectileTemplate->DamagableEnemies++;
|
||||
break;
|
||||
case 7:
|
||||
Damage += 10;
|
||||
break;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
ResetWeaponTimer();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void AMagicWandWeapon::FireProjectile()
|
||||
{
|
||||
if (ProjectileTemplate && OverlappedEnemies.Num() > 0)
|
||||
{
|
||||
float distance = 0.0f;
|
||||
@ -50,6 +90,8 @@ void AMagicWandWeapon::FireWeaponAction_Implementation()
|
||||
|
||||
IProjectilable::Execute_SetTargetDirection(projectile, direction);
|
||||
}
|
||||
|
||||
Super::FireProjectile();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -22,4 +22,9 @@ protected:
|
||||
|
||||
public:
|
||||
virtual void FireWeaponAction_Implementation() override;
|
||||
|
||||
virtual bool UpgradeWeapon_Implementation() override;
|
||||
|
||||
protected:
|
||||
virtual void FireProjectile() override;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user