[TL/DR] TFunctionRef parameter becomes null inside a lambda called after a timeline finish
I have two actors. Player and Cannon. When the player fires the cannon he must wait until the timeline of the cannon is finish before he can move again. So i created a functions with a callback to notify the player.
Inside LoadAmmo OnLoadCompletedCallback is not null (checked with breakpoints) but when it is called after the timeline is over, it has null value.
Now, i changed TFunctionRef<void()> for a Delegate (using DECLARE_DELEGATE) and it works ok . References is not becoming null.
So i fixed but i would like to know why this happens.
[Bonus question] it is possible to bind a lambda to FOnTimelineFloat ( AddInterpFloat callback)?
void APlayerCharacter::LoadCannon(ACannon* Cannon)
{
if(carriedAmmo.Num()==0)return;
if(currentAction!=EPlayerActions::MOVE)return;
currentAction = EPlayerActions::LOADING_CANNON;
Cannon->LoadAmmo(carriedAmmo, &]()
{
carriedAmmo.Empty();
currentAction = EPlayerActions::MOVE;
});
}
void ACannon::LoadAmmo(TArray<AAmmunition*> AmmoStack, TFunctionRef<void()> OnLoadCompletedCallback)
{
if (loadCurve == nullptr)return;
FOnTimelineFloat timelineProgress;
FOnTimelineEventStatic onTimeLineFinished;
///OnLoadCompletedCallback is NOT NULL HERE
///AmmoStack is NOT NULL here
timelineProgress.BindUFunction(this, FName("TimelineEvaluateFloat"));
onTimeLineFinished.BindLambda(&, AmmoStack, OnLoadCompletedCallback]()
{
OnLoadCompletedCallback();///OnLoadCompletedCallback es null here?why
for (AAmmunition* ammo : AmmoStack)///AmmoStack is Not NULL here ?why
{
ammo->Destroy();
}
});
loadTimeLine->AddInterpFloat(loadCurve, timelineProgress);
loadTimeLine->SetTimelineFinishedFunc(onTimeLineFinished);
loadTimeLine->SetPlayRate(4);
loadTimeLine->PlayFromStart();
}