October3d55/M/LGUI/Source/LTween/Private/Tweener/LTweenerFrame.h

77 lines
1.8 KiB
C
Raw Normal View History

2025-03-10 09:43:27 +08:00
// Copyright 2019-Present LexLiu. All Rights Reserved.
#pragma once
#include "LTweener.h"
#include "LTween.h"
#include "Engine/World.h"
#include "LTweenerFrame.generated.h"
UCLASS(NotBlueprintType)
class LTWEEN_API ULTweenerFrame:public ULTweener
{
GENERATED_BODY()
public:
uint32 startFrameNumber = 0;//b
uint32 endFrameNumber = 0;//c
void SetInitialValue(int newEndValue)
{
this->startFrameNumber = GFrameNumber;
this->endFrameNumber = GFrameNumber + newEndValue;
}
protected:
virtual void OnStartGetValue() override
{
}
virtual bool ToNext(float deltaTime, float unscaledDeltaTime) override
{
if (auto world = GetWorld())
{
if (world->IsPaused() && affectByGamePause)return true;
}
if (isMarkedToKill)return false;
if (isMarkedPause)return true;//no need to tick time if pause
if (!startToTween)
{
startToTween = true;
onStartCpp.ExecuteIfBound();
}
if (GFrameNumber >= endFrameNumber)
{
onUpdateCpp.ExecuteIfBound(1.0f);
onCompleteCpp.ExecuteIfBound();
return false;
}
else
{
onUpdateCpp.ExecuteIfBound((float)(GFrameNumber - startFrameNumber) / (endFrameNumber - startFrameNumber));
return true;
}
}
virtual void TweenAndApplyValue(float currentTime) override
{
}
virtual ULTweener* SetDelay(float newDelay)override
{
UE_LOG(LTween, Error, TEXT("[LTweenerFrame::SetDelay]LTweenerFrame does not support delay!"));
return this;
}
virtual ULTweener* SetLoop(ELTweenLoop newLoopType, int32 newLoopCount)override
{
UE_LOG(LTween, Error, TEXT("[LTweenerFrame::SetLoop]LTweenerFrame does not support loop!"));
return this;
}
virtual void SetValueForIncremental() override
{
}
virtual void SetOriginValueForRestart() override
{
auto changeValue = endFrameNumber - startFrameNumber;
startFrameNumber = GFrameNumber;
endFrameNumber = GFrameNumber + changeValue;
}
};