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())) if (UKismetSystemLibrary::DoesImplementInterface(pickup, UPickupable::StaticClass()))
{ {
IPickupable::Execute_LoadDataFromDataAsset(pickup, PickupTemplate);
pickup->SetActorLocation(GetActorLocation()); 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++) 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); SetObjectStatus(false, object);
ObjectPool.Add(object); ObjectPool.Add(object);
} }

View File

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