Fix mysterious timeline playback issues

This commit is contained in:
baz 2025-03-26 21:31:53 +00:00
parent b42e6d6223
commit f44915e5f0
4 changed files with 11 additions and 6 deletions

BIN
Content/Pickups/C_Pickup.uasset (Stored with Git LFS)

Binary file not shown.

View File

@ -55,8 +55,8 @@ void AEnemyCharacter::OnDeath(FDamageInfo damageInfo)
if (UKismetSystemLibrary::DoesImplementInterface(pickup, UPickupable::StaticClass()))
{
IPickupable::Execute_LoadDataFromDataAsset(pickup, PickupTemplate);
pickup->SetActorLocation(GetActorLocation());
IPickupable::Execute_LoadDataFromDataAsset(pickup, PickupTemplate);
}
}
}

View File

@ -14,7 +14,7 @@ void AObjectPoolManager::InitializeObjectPool(TSubclassOf<AActor> Object, const
{
for (int i = 0; i < InitialObjectPoolSize; i++)
{
AActor* object = GetWorld()->SpawnActor<AActor>(Object);
AActor* object = GetWorld()->SpawnActor<AActor>(Object, FVector(10000.0f, 10000.0f, 0), FRotator(0, 0, 0));
SetObjectStatus(false, object);
ObjectPool.Add(object);
}

View File

@ -66,7 +66,8 @@ void APickup::LoadDataFromDataAsset_Implementation(UPickupDataAsset* PickupDataA
StaticMeshComponent->SetStaticMesh(PickupDataAsset->PickupStaticMesh);
PickupSoundBase = PickupDataAsset->PickupSoundBase;
CurveFloat = PickupDataAsset->CurveFloat;
PickupLocation = GetActorLocation();
if (CurveFloat != nullptr)
{
TimelineComponent->AddInterpFloat(CurveFloat, onTimelineCallback);
@ -107,6 +108,7 @@ void APickup::OnInnerBeginOverlap(UPrimitiveComponent* OverlappedComponent, AAct
{
if (AObjectPoolManager* objectPoolManager = IPools::Execute_GetProjectileObjectPoolManager(gamemode))
{
TimelineComponent->Stop();
ResetData_Implementation();
objectPoolManager->ReturnObject(this);
}
@ -122,7 +124,10 @@ void APickup::OnOuterBeginOverlap(UPrimitiveComponent* OverlappedComponent, AAct
UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep,
const FHitResult& SweepResult)
{
PlayTimeLine();
if (!TimelineComponent->IsPlaying() && UGameplayStatics::GetPlayerCharacter(GetWorld(), 0) == Cast<ACharacter>(OtherActor))
{
PlayTimeLine();
}
}
void APickup::TimelineCallback(float val)