Minor refactor to Projectile class

This commit is contained in:
baz 2025-07-25 23:45:12 +01:00
parent 31c3c4c981
commit 375ed69817
7 changed files with 42 additions and 44 deletions

Binary file not shown.

View File

@ -64,23 +64,23 @@ void AProjectile::SetActorHiddenInGame(bool bNewHidden)
} }
} }
void AProjectile::SetTargetDirection_Implementation(FVector direction) void AProjectile::SetTargetDirection_Implementation(FVector Direction)
{ {
SetActorLocation(UGameplayStatics::GetPlayerController(GetWorld(), 0)->GetCharacter()->GetActorLocation()); SetActorLocation(UGameplayStatics::GetPlayerController(GetWorld(), 0)->GetCharacter()->GetActorLocation());
SetActorRotation(FRotator(0, 0, 0)); SetActorRotation(FRotator(0, 0, 0));
TargetDirection = direction; TargetDirection = Direction;
ProjectileMovement->SetVelocityInLocalSpace(TargetDirection * ProjectileSpeed); ProjectileMovement->SetVelocityInLocalSpace(TargetDirection * ProjectileSpeed);
} }
void AProjectile::LoadDataFromDataAsset_Implementation(UProjectileDataAsset* projectileDataAsset) void AProjectile::LoadDataFromDataAsset_Implementation(UProjectileDataAsset* ProjectileDataAsset)
{ {
ProjectileSpeed = projectileDataAsset->ProjectileSpeed; ProjectileSpeed = ProjectileDataAsset->ProjectileSpeed;
StaticMeshComponent->SetStaticMesh(projectileDataAsset->StaticMesh); StaticMeshComponent->SetStaticMesh(ProjectileDataAsset->StaticMesh);
ProjectileSpeed = projectileDataAsset->ProjectileSpeed; ProjectileSpeed = ProjectileDataAsset->ProjectileSpeed;
ProjectileMovement->InitialSpeed = ProjectileSpeed; ProjectileMovement->InitialSpeed = ProjectileSpeed;
ProjectileMovement->MaxSpeed = ProjectileSpeed; ProjectileMovement->MaxSpeed = ProjectileSpeed;
RemainingDamagableEnemies = projectileDataAsset->DamagableEnemies; RemainingDamageableEnemies = ProjectileDataAsset->DamageableEnemies;
NiagaraRibbonComponent->SetAsset(projectileDataAsset->NiagaraRibbonSystem); NiagaraRibbonComponent->SetAsset(ProjectileDataAsset->NiagaraRibbonSystem);
NiagaraRibbonComponent->ActivateSystem(); NiagaraRibbonComponent->ActivateSystem();
} }
@ -88,7 +88,7 @@ void AProjectile::ResetData_Implementation()
{ {
ProjectileSpeed = NULL; ProjectileSpeed = NULL;
StaticMeshComponent->SetStaticMesh(nullptr); StaticMeshComponent->SetStaticMesh(nullptr);
RemainingDamagableEnemies = 1; RemainingDamageableEnemies = 1;
NiagaraRibbonComponent->DeactivateImmediate(); NiagaraRibbonComponent->DeactivateImmediate();
NiagaraRibbonComponent->SetAsset(nullptr); NiagaraRibbonComponent->SetAsset(nullptr);
} }
@ -112,9 +112,9 @@ void AProjectile::OnProjectileBeginOverlap(UPrimitiveComponent* OverlappedCompon
AProjectileWeapon* ownerWeapon = Cast<AProjectileWeapon>(GetOwner()); AProjectileWeapon* ownerWeapon = Cast<AProjectileWeapon>(GetOwner());
EnemyHealthComponent->TakeDamage(Enemy, ownerWeapon->GetDamage(), nullptr, ownerController, this); EnemyHealthComponent->TakeDamage(Enemy, ownerWeapon->GetDamage(), nullptr, ownerController, this);
RemainingDamagableEnemies--; RemainingDamageableEnemies--;
if (RemainingDamagableEnemies == 0) if (RemainingDamageableEnemies == 0)
{ {
ReturnProjectileToPool(); ReturnProjectileToPool();
} }

View File

@ -17,33 +17,31 @@ class VAMPIRES_API AProjectile : public AActor, public IProjectilable
{ {
GENERATED_BODY() GENERATED_BODY()
public: UPROPERTY(EditDefaultsOnly)
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite)
TObjectPtr<USphereComponent> SphereComponent = nullptr; TObjectPtr<USphereComponent> SphereComponent = nullptr;
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite) UPROPERTY(EditDefaultsOnly)
TObjectPtr<UProjectileMovementComponent> ProjectileMovement = nullptr; TObjectPtr<UProjectileMovementComponent> ProjectileMovement = nullptr;
UPROPERTY(EditDefaultsOnly)
TObjectPtr<UStaticMeshComponent> StaticMeshComponent = nullptr;
UPROPERTY(EditDefaultsOnly)
TObjectPtr<UNiagaraComponent> NiagaraRibbonComponent = nullptr;
UPROPERTY(EditDefaultsOnly)
float ProjectileSpeed = 500.0f;
UPROPERTY(EditDefaultsOnly)
int RemainingDamageableEnemies = 1;
UPROPERTY(EditDefaultsOnly)
float ProjectileLifespan = 15.0f;
FTimerHandle ProjectileLifetimeTimerHandle;
FVector TargetDirection = FVector::ZeroVector; FVector TargetDirection = FVector::ZeroVector;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
float ProjectileSpeed = 500.0f;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
TObjectPtr<UStaticMeshComponent> StaticMeshComponent = nullptr;
UPROPERTY(EditAnywhere, BlueprintReadWrite)
int RemainingDamagableEnemies = 1;
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite)
TObjectPtr<UNiagaraComponent> NiagaraRibbonComponent = nullptr;
UPROPERTY(EditDefaultsOnly, BlueprintReadWrite)
float ProjectileLifespan = 15.0f;
private:
FTimerHandle ProjectileLifetimeTimerHandle;
// Sets default values for this actor's properties // Sets default values for this actor's properties
AProjectile(); AProjectile();
@ -54,9 +52,9 @@ protected:
public: public:
virtual void SetActorHiddenInGame(bool bNewHidden) override; virtual void SetActorHiddenInGame(bool bNewHidden) override;
virtual void SetTargetDirection_Implementation(FVector direction) override; virtual void SetTargetDirection_Implementation(FVector Direction) override;
virtual void LoadDataFromDataAsset_Implementation(UProjectileDataAsset* projectileDataAsset) override; virtual void LoadDataFromDataAsset_Implementation(UProjectileDataAsset* ProjectileDataAsset) override;
virtual void ResetData_Implementation() override; virtual void ResetData_Implementation() override;

View File

@ -23,7 +23,7 @@ public:
TObjectPtr<UStaticMesh> StaticMesh; TObjectPtr<UStaticMesh> StaticMesh;
UPROPERTY(EditAnywhere) UPROPERTY(EditAnywhere)
int DamagableEnemies = 1; int DamageableEnemies = 1;
UPROPERTY(EditAnywhere) UPROPERTY(EditAnywhere)
TObjectPtr<UNiagaraSystem> NiagaraRibbonSystem = nullptr; TObjectPtr<UNiagaraSystem> NiagaraRibbonSystem = nullptr;

View File

@ -37,7 +37,7 @@ bool AGunWeapon::UpgradeWeapon_Implementation()
ProjectilesPerActivation++; ProjectilesPerActivation++;
break; break;
case 2: case 2:
ProjectileTemplate->DamagableEnemies += 2; ProjectileTemplate->DamageableEnemies += 2;
break; break;
case 3: case 3:
ProjectilesPerActivation++; ProjectilesPerActivation++;
@ -46,14 +46,14 @@ bool AGunWeapon::UpgradeWeapon_Implementation()
Damage += 5.0f; Damage += 5.0f;
break; break;
case 5: case 5:
ProjectileTemplate->DamagableEnemies += 2; ProjectileTemplate->DamageableEnemies += 2;
break; break;
case 6: case 6:
Damage += 5.0f; Damage += 5.0f;
ProjectileTemplate->ProjectileSpeed *= 1.50f; ProjectileTemplate->ProjectileSpeed *= 1.50f;
break; break;
case 7: case 7:
ProjectileTemplate->DamagableEnemies += 2; ProjectileTemplate->DamageableEnemies += 2;
break; break;
default: default:
return false; return false;
@ -65,7 +65,7 @@ bool AGunWeapon::UpgradeWeapon_Implementation()
void AGunWeapon::FireProjectile() void AGunWeapon::FireProjectile()
{ {
if (ProjectileTemplate && OverlappedEnemies.Num() > 0) if (ProjectileTemplate && OverlappedEnemies.Num() > 0)
{ {
AGameModeBase* gamemode = UGameplayStatics::GetGameMode(GetWorld()); AGameModeBase* gamemode = UGameplayStatics::GetGameMode(GetWorld());

View File

@ -42,7 +42,7 @@ bool AKnifeWeapon::UpgradeWeapon_Implementation()
ProjectilesPerActivation++; ProjectilesPerActivation++;
break; break;
case 4: case 4:
ProjectileTemplate->DamagableEnemies++; ProjectileTemplate->DamageableEnemies++;
break; break;
case 5: case 5:
ProjectilesPerActivation++; ProjectilesPerActivation++;
@ -52,7 +52,7 @@ bool AKnifeWeapon::UpgradeWeapon_Implementation()
Damage += 5.0f; Damage += 5.0f;
break; break;
case 7: case 7:
ProjectileTemplate->DamagableEnemies++; ProjectileTemplate->DamageableEnemies++;
break; break;
default: default:
return false; return false;

View File

@ -47,7 +47,7 @@ bool AMagicWandWeapon::UpgradeWeapon_Implementation()
ProjectilesPerActivation++; ProjectilesPerActivation++;
break; break;
case 6: case 6:
ProjectileTemplate->DamagableEnemies++; ProjectileTemplate->DamageableEnemies++;
break; break;
case 7: case 7:
Damage += 10; Damage += 10;