void UAblSetShaderParameterTask::OnTaskTick(const TWeakObjectPtr<const UAblAbilityContext>& Context, float deltaTime) const { Super::OnTaskTick(Context, deltaTime); UAblSetShaderParameterTaskScratchPad* ScratchPad = Cast<UAblSetShaderParameterTaskScratchPad>(Context->GetScratchPadForTask(this)); check(ScratchPad); if (!ScratchPad->BlendIn.IsComplete()) { ScratchPad->BlendIn.Update(deltaTime); verify(ScratchPad->DynamicMaterials.Num() == ScratchPad->PreviousValues.Num()); for (int32 i = 0; i < ScratchPad->DynamicMaterials.Num(); ++i) { InternalSetShaderValue(ScratchPad->DynamicMaterials[i].Get(), m_Value, ScratchPad->PreviousValues[i].Get(), ScratchPad->BlendIn.GetBlendedValue()); } } else if (m_RestoreValueOnEnd && !ScratchPad->BlendOut.IsComplete()) { // If we're within range to start blending out, go ahead and start that process. if (GetEndTime() - Context->GetCurrentTime() < ScratchPad->BlendOut.GetBlendTime()) { ScratchPad->BlendOut.Update(deltaTime); verify(ScratchPad->DynamicMaterials.Num() == ScratchPad->PreviousValues.Num()); for (int32 i = 0; i < ScratchPad->DynamicMaterials.Num(); ++i) { InternalSetShaderValue(ScratchPad->DynamicMaterials[i].Get(), ScratchPad->PreviousValues[i].Get(), m_Value, ScratchPad->BlendOut.GetBlendedValue()); } } } }