77 lines
1.8 KiB
C
77 lines
1.8 KiB
C
|
|
// 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;
|
|||
|
|
}
|
|||
|
|
};
|