// Fill out your copyright notice in the Description page of Project Settings. #include "MyExplosion.h" #include "Trooper.h" #include "Components/SphereComponent.h" #include "Net/UnrealNetwork.h" #include "Particles/ParticleSystemComponent.h" AMyExplosion::AMyExplosion() { // if (!CollisionComponent) { // CollisionComponent = CreateDefaultSubobject( // TEXT("SphereComponent")); // RootComponent = CollisionComponent; // } if (!ParticleSystemComponent) { ParticleSystemComponent = CreateDefaultSubobject< UParticleSystemComponent>( TEXT("ParticleSystemComponent")); RootComponent = ParticleSystemComponent; } InitialLifeSpan = 1.0f; } void AMyExplosion::Initialize(float damage, float splashRadius, uint8 playerIndex) { Damage = damage; PlayerIndex = playerIndex; float Scale = splashRadius / 50; // CollisionComponent->SetWorldScale3D({Scale, Scale, Scale}); if (ParticleSystemComponent && ParticleSystemComponent->IsValidLowLevel()) { ParticleSystemComponent->SetWorldScale3D({Scale, Scale, Scale}); } } void AMyExplosion::BeginPlay() { Super::BeginPlay(); } void AMyExplosion::NotifyActorBeginOverlap(AActor *OtherActor) { Super::NotifyActorBeginOverlap(OtherActor); ATrooper *OtherTrooper = Cast(OtherActor); if (OtherTrooper) { UE_LOG(LogTemp, Warning, TEXT( "Begin explosion overlap: id: %d, index: %d, damage: %f, my index: %d" ), OtherTrooper->GetId(), OtherTrooper->GetPlayerIndex(), Damage, PlayerIndex); if (PlayerIndex != -1 && PlayerIndex != OtherTrooper-> GetPlayerIndex()) { OtherTrooper->TakeDamage(Damage); } } else { UE_LOG(LogTemp, Warning, TEXT("Overlapped not a trooper")); } } void AMyExplosion::GetLifetimeReplicatedProps( TArray &OutLifetimeProps) const { Super::GetLifetimeReplicatedProps(OutLifetimeProps); DOREPLIFETIME(AMyExplosion, Damage); DOREPLIFETIME(AMyExplosion, PlayerIndex); // DOREPLIFETIME(AMyExplosion, CollisionComponent); DOREPLIFETIME(AMyExplosion, ParticleSystemComponent); }