1223 lines
48 KiB
C++
1223 lines
48 KiB
C++
|
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||
|
|
|
||
|
|
#include "LTweenBPLibrary.h"
|
||
|
|
#include "LTween.h"
|
||
|
|
#include "Components/SceneComponent.h"
|
||
|
|
#include "Materials/MaterialInstanceDynamic.h"
|
||
|
|
#include "Components/MeshComponent.h"
|
||
|
|
|
||
|
|
|
||
|
|
ULTweener* ULTweenBPLibrary::FloatTo(UObject* WorldContextObject, const FLTweenFloatSetterDynamic& setter, float startValue, float endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject, FLTweenFloatGetterFunction::CreateLambda([startValue]
|
||
|
|
{
|
||
|
|
return startValue;
|
||
|
|
}), FLTweenFloatSetterFunction::CreateLambda([setter](float value)
|
||
|
|
{
|
||
|
|
if (setter.IsBound())
|
||
|
|
setter.Execute(value);
|
||
|
|
}), endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::DoubleTo(UObject* WorldContextObject, const FLTweenDoubleSetterDynamic& setter, double startValue, double endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject, FLTweenDoubleGetterFunction::CreateLambda([startValue]
|
||
|
|
{
|
||
|
|
return startValue;
|
||
|
|
}), FLTweenDoubleSetterFunction::CreateLambda([setter](auto value)
|
||
|
|
{
|
||
|
|
if (setter.IsBound())
|
||
|
|
setter.Execute(value);
|
||
|
|
}), endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::IntTo(UObject* WorldContextObject, const FLTweenIntSetterDynamic& setter, int startValue, int endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject, FLTweenIntGetterFunction::CreateLambda([startValue]
|
||
|
|
{
|
||
|
|
return startValue;
|
||
|
|
}), FLTweenIntSetterFunction::CreateLambda([setter](int value)
|
||
|
|
{
|
||
|
|
if (setter.IsBound())
|
||
|
|
setter.Execute(value);
|
||
|
|
}), endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::Vector2To(UObject* WorldContextObject, const FLTweenVector2SetterDynamic& setter, FVector2D startValue, FVector2D endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject, FLTweenVector2DGetterFunction::CreateLambda([startValue]
|
||
|
|
{
|
||
|
|
return startValue;
|
||
|
|
}), FLTweenVector2DSetterFunction::CreateLambda([setter](const FVector2D& value)
|
||
|
|
{
|
||
|
|
if (setter.IsBound())
|
||
|
|
setter.Execute(value);
|
||
|
|
}), endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::Vector3To(UObject* WorldContextObject, const FLTweenVector3SetterDynamic& setter, FVector startValue, FVector endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject, FLTweenVectorGetterFunction::CreateLambda([startValue]
|
||
|
|
{
|
||
|
|
return startValue;
|
||
|
|
}), FLTweenVectorSetterFunction::CreateLambda([setter](const FVector& value)
|
||
|
|
{
|
||
|
|
if (setter.IsBound())
|
||
|
|
setter.Execute(value);
|
||
|
|
}), endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::Vector4To(UObject* WorldContextObject, const FLTweenVector4SetterDynamic& setter, FVector4 startValue, FVector4 endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject, FLTweenVector4GetterFunction::CreateLambda([startValue]
|
||
|
|
{
|
||
|
|
return startValue;
|
||
|
|
}), FLTweenVector4SetterFunction::CreateLambda([setter](const FVector4& value)
|
||
|
|
{
|
||
|
|
if (setter.IsBound())
|
||
|
|
setter.Execute(value);
|
||
|
|
}), endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::ColorTo(UObject* WorldContextObject, const FLTweenColorSetterDynamic& setter, FColor startValue, FColor endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject, FLTweenColorGetterFunction::CreateLambda([startValue]
|
||
|
|
{
|
||
|
|
return startValue;
|
||
|
|
}), FLTweenColorSetterFunction::CreateLambda([setter](const FColor& value)
|
||
|
|
{
|
||
|
|
if (setter.IsBound())
|
||
|
|
setter.Execute(value);
|
||
|
|
}), endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::LinearColorTo(UObject* WorldContextObject, const FLTweenLinearColorSetterDynamic& setter, FLinearColor startValue, FLinearColor endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject, FLTweenLinearColorGetterFunction::CreateLambda([startValue]
|
||
|
|
{
|
||
|
|
return startValue;
|
||
|
|
}), FLTweenLinearColorSetterFunction::CreateLambda([setter](const FLinearColor& value)
|
||
|
|
{
|
||
|
|
if (setter.IsBound())
|
||
|
|
setter.Execute(value);
|
||
|
|
}), endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::QuaternionTo(UObject* WorldContextObject, const FLTweenQuaternionSetterDynamic& setter, FQuat startValue, FQuat endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject, FLTweenQuaternionGetterFunction::CreateLambda([startValue]
|
||
|
|
{
|
||
|
|
return startValue;
|
||
|
|
}), FLTweenQuaternionSetterFunction::CreateLambda([setter](const FQuat& value)
|
||
|
|
{
|
||
|
|
if (setter.IsBound())
|
||
|
|
setter.Execute(value);
|
||
|
|
}), endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::RotatorTo(UObject* WorldContextObject, const FLTweenRotatorSetterDynamic& setter, FRotator startValue, FRotator endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject, FLTweenRotatorGetterFunction::CreateLambda([startValue]
|
||
|
|
{
|
||
|
|
return startValue;
|
||
|
|
}), FLTweenRotatorSetterFunction::CreateLambda([setter](const FRotator& value)
|
||
|
|
{
|
||
|
|
if (setter.IsBound())
|
||
|
|
setter.Execute(value);
|
||
|
|
}), endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
|
||
|
|
#pragma region PositionXYZ
|
||
|
|
ULTweener* ULTweenBPLibrary::LocalPositionXTo(USceneComponent* target, double endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::LocalPositionXTo] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(target, FLTweenDoubleGetterFunction::CreateWeakLambda(target, [target]
|
||
|
|
{
|
||
|
|
return target->GetRelativeLocation().X;
|
||
|
|
}), FLTweenDoubleSetterFunction::CreateWeakLambda(target, [target](auto value) {
|
||
|
|
auto location = target->GetRelativeLocation();
|
||
|
|
location.X = value;
|
||
|
|
target->SetRelativeLocation(location);
|
||
|
|
}), endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::LocalPositionYTo(USceneComponent* target, double endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::LocalPositionYTo] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(target, FLTweenDoubleGetterFunction::CreateWeakLambda(target, [target]
|
||
|
|
{
|
||
|
|
return target->GetRelativeLocation().Y;
|
||
|
|
}), FLTweenDoubleSetterFunction::CreateWeakLambda(target, [target](auto value) {
|
||
|
|
auto location = target->GetRelativeLocation();
|
||
|
|
location.Y = value;
|
||
|
|
target->SetRelativeLocation(location);
|
||
|
|
}), endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::LocalPositionZTo(USceneComponent* target, double endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::LocalPositionZTo] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(target, FLTweenDoubleGetterFunction::CreateWeakLambda(target, [target]
|
||
|
|
{
|
||
|
|
return target->GetRelativeLocation().Z;
|
||
|
|
}), FLTweenDoubleSetterFunction::CreateWeakLambda(target, [=](auto value) {
|
||
|
|
auto location = target->GetRelativeLocation();
|
||
|
|
location.Z = value;
|
||
|
|
target->SetRelativeLocation(location);
|
||
|
|
}), endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::LocalPositionXTo_Sweep(USceneComponent* target, double endValue, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::LocalPositionXTo_Sweep] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(target, FLTweenDoubleGetterFunction::CreateWeakLambda(target, [target]
|
||
|
|
{
|
||
|
|
return target->GetRelativeLocation().X;
|
||
|
|
}), FLTweenDoubleSetterFunction::CreateWeakLambda(target, [target, &sweepHitResult, sweep, teleport](auto value) {
|
||
|
|
auto location = target->GetRelativeLocation();
|
||
|
|
location.X = value;
|
||
|
|
target->SetRelativeLocation(location, teleport, sweep ? &sweepHitResult : nullptr, TeleportFlagToEnum(teleport));
|
||
|
|
}), endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::LocalPositionYTo_Sweep(USceneComponent* target, double endValue, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::LocalPositionYTo_Sweep] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(target, FLTweenDoubleGetterFunction::CreateWeakLambda(target, [target]
|
||
|
|
{
|
||
|
|
return target->GetRelativeLocation().Y;
|
||
|
|
}), FLTweenDoubleSetterFunction::CreateWeakLambda(target, [target, &sweepHitResult, sweep, teleport](auto value) {
|
||
|
|
auto location = target->GetRelativeLocation();
|
||
|
|
location.Y = value;
|
||
|
|
target->SetRelativeLocation(location, teleport, sweep ? &sweepHitResult : nullptr, TeleportFlagToEnum(teleport));
|
||
|
|
}), endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::LocalPositionZTo_Sweep(USceneComponent* target, double endValue, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::LocalPositionZTo_Sweep] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(target, FLTweenDoubleGetterFunction::CreateWeakLambda(target, [target]
|
||
|
|
{
|
||
|
|
return target->GetRelativeLocation().Z;
|
||
|
|
}), FLTweenDoubleSetterFunction::CreateWeakLambda(target, [target, &sweepHitResult, sweep, teleport](auto value) {
|
||
|
|
auto location = target->GetRelativeLocation();
|
||
|
|
location.Z = value;
|
||
|
|
target->SetRelativeLocation(location, teleport, sweep ? &sweepHitResult : nullptr, TeleportFlagToEnum(teleport));
|
||
|
|
}), endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
ULTweener* ULTweenBPLibrary::WorldPositionXTo(USceneComponent* target, double endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::WorldPositionXTo] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(target, FLTweenDoubleGetterFunction::CreateWeakLambda(target, [target]
|
||
|
|
{
|
||
|
|
return target->GetComponentLocation().X;
|
||
|
|
}), FLTweenDoubleSetterFunction::CreateWeakLambda(target, [target](auto value) {
|
||
|
|
auto location = target->GetComponentLocation();
|
||
|
|
location.X = value;
|
||
|
|
target->SetWorldLocation(location);
|
||
|
|
}), endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::WorldPositionYTo(USceneComponent* target, double endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::WorldPositionYTo] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(target, FLTweenDoubleGetterFunction::CreateWeakLambda(target, [target]
|
||
|
|
{
|
||
|
|
return target->GetComponentLocation().Y;
|
||
|
|
}), FLTweenDoubleSetterFunction::CreateWeakLambda(target, [target](auto value) {
|
||
|
|
auto location = target->GetComponentLocation();
|
||
|
|
location.Y = value;
|
||
|
|
target->SetWorldLocation(location);
|
||
|
|
}), endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::WorldPositionZTo(USceneComponent* target, double endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::WorldPositionZTo] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(target, FLTweenDoubleGetterFunction::CreateWeakLambda(target, [target]
|
||
|
|
{
|
||
|
|
return target->GetComponentLocation().Z;
|
||
|
|
}), FLTweenDoubleSetterFunction::CreateWeakLambda(target, [target](auto value) {
|
||
|
|
auto location = target->GetComponentLocation();
|
||
|
|
location.Z = value;
|
||
|
|
target->SetWorldLocation(location);
|
||
|
|
}), endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::WorldPositionXTo_Sweep(USceneComponent* target, double endValue, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::WorldPositionXTo_Sweep] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(target, FLTweenDoubleGetterFunction::CreateWeakLambda(target, [target]
|
||
|
|
{
|
||
|
|
return target->GetComponentLocation().X;
|
||
|
|
}), FLTweenDoubleSetterFunction::CreateWeakLambda(target, [target, &sweepHitResult, sweep, teleport](auto value) {
|
||
|
|
auto location = target->GetComponentLocation();
|
||
|
|
location.X = value;
|
||
|
|
target->SetWorldLocation(location, teleport, sweep ? &sweepHitResult : nullptr, TeleportFlagToEnum(teleport));
|
||
|
|
}), endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::WorldPositionYTo_Sweep(USceneComponent* target, double endValue, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::WorldPositionYTo_Sweep] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(target, FLTweenDoubleGetterFunction::CreateWeakLambda(target, [target]
|
||
|
|
{
|
||
|
|
return target->GetComponentLocation().Y;
|
||
|
|
}), FLTweenDoubleSetterFunction::CreateWeakLambda(target, [target, &sweepHitResult, sweep, teleport](auto value) {
|
||
|
|
auto location = target->GetComponentLocation();
|
||
|
|
location.Y = value;
|
||
|
|
target->SetWorldLocation(location, teleport, sweep ? &sweepHitResult : nullptr, TeleportFlagToEnum(teleport));
|
||
|
|
}), endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::WorldPositionZTo_Sweep(USceneComponent* target, double endValue, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::WorldPositionZTo_Sweep] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(target, FLTweenDoubleGetterFunction::CreateWeakLambda(target, [target]
|
||
|
|
{
|
||
|
|
return target->GetComponentLocation().Z;
|
||
|
|
}), FLTweenDoubleSetterFunction::CreateWeakLambda(target, [target, &sweepHitResult, sweep, teleport](auto value) {
|
||
|
|
auto location = target->GetComponentLocation();
|
||
|
|
location.Z = value;
|
||
|
|
target->SetWorldLocation(location, teleport, sweep ? &sweepHitResult : nullptr, TeleportFlagToEnum(teleport));
|
||
|
|
}), endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
#pragma endregion PositionXYZ
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
#pragma region Position
|
||
|
|
ULTweener* ULTweenBPLibrary::LocalPositionTo(USceneComponent* target, FVector endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::LocalPositionTo] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(target
|
||
|
|
, FLTweenPositionGetterFunction::CreateUObject(target, &USceneComponent::GetRelativeLocation)
|
||
|
|
, FLTweenPositionSetterFunction::CreateUObject(target, &USceneComponent::SetRelativeLocation)
|
||
|
|
, endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::WorldPositionTo(USceneComponent* target, FVector endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::WorldPositionTo] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(target
|
||
|
|
, FLTweenPositionGetterFunction::CreateUObject(target, &USceneComponent::GetComponentLocation)
|
||
|
|
, FLTweenPositionSetterFunction::CreateUObject(target, &USceneComponent::SetWorldLocation)
|
||
|
|
, endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::LocalPositionTo_Sweep(USceneComponent* target, FVector endValue, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::LocalPositionTo_Sweep] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(target
|
||
|
|
, FLTweenVectorGetterFunction::CreateUObject(target, &USceneComponent::GetRelativeLocation)
|
||
|
|
, FLTweenPositionSetterFunction::CreateUObject(target, &USceneComponent::SetRelativeLocation)
|
||
|
|
, endValue, duration, sweep, sweep ? &sweepHitResult : nullptr, TeleportFlagToEnum(teleport));
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::WorldPositionTo_Sweep(USceneComponent* target, FVector endValue, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::WorldPositionTo_Sweep] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(target
|
||
|
|
, FLTweenPositionGetterFunction::CreateUObject(target, &USceneComponent::GetComponentLocation)
|
||
|
|
, FLTweenPositionSetterFunction::CreateUObject(target, &USceneComponent::SetRelativeLocation)
|
||
|
|
, endValue, duration, sweep, sweep ? &sweepHitResult : nullptr, TeleportFlagToEnum(teleport));
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
#pragma endregion Position
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
ULTweener* ULTweenBPLibrary::LocalScaleTo(USceneComponent* target, FVector endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::LocalScaleTo] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(target
|
||
|
|
, FLTweenVectorGetterFunction::CreateUObject(target, &USceneComponent::GetRelativeScale3D)
|
||
|
|
, FLTweenVectorSetterFunction::CreateUObject(target, &USceneComponent::SetRelativeScale3D)
|
||
|
|
, endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
#pragma region Rotation
|
||
|
|
ULTweener* ULTweenBPLibrary::LocalRotateEulerAngleTo(USceneComponent* target, FVector eulerAngle, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::LocalRotateEulerAngleTo] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(target, FLTweenRotationQuatGetterFunction::CreateWeakLambda(target, [target]
|
||
|
|
{
|
||
|
|
return target->GetRelativeRotationCache().GetCachedQuat();
|
||
|
|
}), FLTweenRotationQuatSetterFunction::CreateUObject(target, &USceneComponent::SetRelativeRotation)
|
||
|
|
, eulerAngle, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::LocalRotationQuaternionTo(USceneComponent* target, const FQuat& endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::LocalRotationTo] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(target, FLTweenRotationQuatGetterFunction::CreateWeakLambda(target, [target]
|
||
|
|
{
|
||
|
|
return target->GetRelativeRotationCache().GetCachedQuat();
|
||
|
|
}), FLTweenRotationQuatSetterFunction::CreateUObject(target, &USceneComponent::SetRelativeRotation)
|
||
|
|
, endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::LocalRotateEulerAngleTo_Sweep(USceneComponent* target, FVector eulerAngle, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::LocalRotateEulerAngleTo_Sweep] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(target, FLTweenRotationQuatGetterFunction::CreateWeakLambda(target, [target]
|
||
|
|
{
|
||
|
|
return target->GetRelativeRotationCache().GetCachedQuat();
|
||
|
|
}), FLTweenRotationQuatSetterFunction::CreateUObject(target, &USceneComponent::SetRelativeRotation)
|
||
|
|
, eulerAngle, duration, sweep, sweep ? &sweepHitResult : nullptr, TeleportFlagToEnum(teleport));
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::LocalRotationQuaternionTo_Sweep(USceneComponent* target, const FQuat& endValue, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::LocalRotationTo_Sweep] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(target, FLTweenRotationQuatGetterFunction::CreateWeakLambda(target, [target]
|
||
|
|
{
|
||
|
|
return target->GetRelativeRotationCache().GetCachedQuat();
|
||
|
|
}), FLTweenRotationQuatSetterFunction::CreateUObject(target, &USceneComponent::SetRelativeRotation)
|
||
|
|
, endValue, duration, sweep, sweep ? &sweepHitResult : nullptr, TeleportFlagToEnum(teleport));
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::LocalRotatorTo(USceneComponent* target, FRotator endValue, bool shortestPath, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::LocalRotatorTo] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
if (shortestPath)
|
||
|
|
{
|
||
|
|
return LocalRotationQuaternionTo(target, endValue.Quaternion(), duration, delay, ease);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
auto Tweener = ULTweenManager::To(target
|
||
|
|
, FLTweenRotatorGetterFunction::CreateUObject(target, &USceneComponent::GetRelativeRotation)
|
||
|
|
, FLTweenRotatorSetterFunction::CreateWeakLambda(target, [target] (FRotator value)
|
||
|
|
{
|
||
|
|
target->SetRelativeRotation(value);
|
||
|
|
}), endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::LocalRotatorTo_Sweep(USceneComponent* target, FRotator endValue, bool shortestPath, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::LocalRotatorTo] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
if (shortestPath)
|
||
|
|
{
|
||
|
|
return LocalRotationQuaternionTo_Sweep(target, endValue.Quaternion(), sweepHitResult, sweep, teleport, duration, delay, ease);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
auto Tweener = ULTweenManager::To(target
|
||
|
|
, FLTweenRotatorGetterFunction::CreateUObject(target, &USceneComponent::GetRelativeRotation)
|
||
|
|
, FLTweenRotatorSetterFunction::CreateWeakLambda(target, [target, &sweepHitResult, sweep, teleport](FRotator value)
|
||
|
|
{
|
||
|
|
target->SetRelativeRotation(value, sweep, sweep ? &sweepHitResult : nullptr, TeleportFlagToEnum(teleport));
|
||
|
|
}), endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
ULTweener* ULTweenBPLibrary::WorldRotateEulerAngleTo(USceneComponent* target, FVector eulerAngle, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::WorldRotateEulerAngleTo] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(target, FLTweenRotationQuatGetterFunction::CreateWeakLambda(target, [target]
|
||
|
|
{
|
||
|
|
return target->GetComponentRotation().Quaternion();
|
||
|
|
}), FLTweenRotationQuatSetterFunction::CreateUObject(target, &USceneComponent::SetWorldRotation)
|
||
|
|
, eulerAngle, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::WorldRotationQuaternionTo(USceneComponent* target, const FQuat& endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::WorldRotationTo] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(target, FLTweenRotationQuatGetterFunction::CreateWeakLambda(target, [target]
|
||
|
|
{
|
||
|
|
return target->GetComponentRotation().Quaternion();
|
||
|
|
}), FLTweenRotationQuatSetterFunction::CreateUObject(target, &USceneComponent::SetWorldRotation)
|
||
|
|
, endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::WorldRotateEulerAngleTo_Sweep(USceneComponent* target, FVector eulerAngle, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::WorldRotateEulerAngleTo_Sweep] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(target, FLTweenRotationQuatGetterFunction::CreateWeakLambda(target, [target]
|
||
|
|
{
|
||
|
|
return target->GetComponentRotation().Quaternion();
|
||
|
|
}), FLTweenRotationQuatSetterFunction::CreateUObject(target, &USceneComponent::SetWorldRotation)
|
||
|
|
, eulerAngle, duration, sweep, sweep ? &sweepHitResult : nullptr, TeleportFlagToEnum(teleport));
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::WorldRotationQuaternionTo_Sweep(USceneComponent* target, const FQuat& endValue, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::WorldRotationTo_Sweep] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(target, FLTweenRotationQuatGetterFunction::CreateWeakLambda(target, [target]
|
||
|
|
{
|
||
|
|
return target->GetComponentRotation().Quaternion();
|
||
|
|
}), FLTweenRotationQuatSetterFunction::CreateUObject(target, &USceneComponent::SetWorldRotation)
|
||
|
|
, endValue, duration, sweep, sweep ? &sweepHitResult : nullptr, TeleportFlagToEnum(teleport));
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::WorldRotatorTo(USceneComponent* target, FRotator endValue, bool shortestPath, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::WorldRotatorTo] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
if (shortestPath)
|
||
|
|
{
|
||
|
|
return WorldRotationQuaternionTo(target, endValue.Quaternion(), duration, delay, ease);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
auto Tweener = ULTweenManager::To(target
|
||
|
|
, FLTweenRotatorGetterFunction::CreateUObject(target, &USceneComponent::GetComponentRotation)
|
||
|
|
, FLTweenRotatorSetterFunction::CreateWeakLambda(target, [target](FRotator value)
|
||
|
|
{
|
||
|
|
target->SetWorldRotation(value);
|
||
|
|
}), endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::WorldRotatorTo_Sweep(USceneComponent* target, FRotator endValue, bool shortestPath, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::WorldRotatorTo] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
if (shortestPath)
|
||
|
|
{
|
||
|
|
return WorldRotationQuaternionTo_Sweep(target, endValue.Quaternion(), sweepHitResult, sweep, teleport, duration, delay, ease);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
auto Tweener = ULTweenManager::To(target
|
||
|
|
, FLTweenRotatorGetterFunction::CreateUObject(target, &USceneComponent::GetComponentRotation)
|
||
|
|
, FLTweenRotatorSetterFunction::CreateWeakLambda(target, [target, &sweepHitResult, sweep, teleport](FRotator value)
|
||
|
|
{
|
||
|
|
target->SetWorldRotation(value, sweep, sweep ? &sweepHitResult : nullptr, TeleportFlagToEnum(teleport));
|
||
|
|
}), endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
#pragma endregion Rotation
|
||
|
|
|
||
|
|
|
||
|
|
#pragma region Material
|
||
|
|
ULTweener* ULTweenBPLibrary::MaterialScalarParameterTo(UObject* WorldContextObject, UMaterialInstanceDynamic* target, FName parameterName, float endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(WorldContextObject))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::MaterialScalarParameterTo] WorldContextObject is not valid!"));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::MaterialScalarParameterTo] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
float startValue = 0;
|
||
|
|
int32 parameterIndex = 0;
|
||
|
|
if (target->GetScalarParameterValue(parameterName, startValue))
|
||
|
|
{
|
||
|
|
target->InitializeScalarParameterAndGetIndex(parameterName, startValue, parameterIndex);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Warning, TEXT("[ULTweenBPLibrary::MaterialScalarParameterTo]GetScalarParameterValue:%s error!"), *(parameterName.ToString()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject, FLTweenMaterialScalarGetterFunction::CreateWeakLambda(target, [target, parameterName](float& result)
|
||
|
|
{
|
||
|
|
return target->GetScalarParameterValue(parameterName, result);
|
||
|
|
}), FLTweenMaterialScalarSetterFunction::CreateUObject(target, &UMaterialInstanceDynamic::SetScalarParameterByIndex)
|
||
|
|
, endValue, duration, parameterIndex);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::MaterialVectorParameterTo(UObject* WorldContextObject, UMaterialInstanceDynamic* target, FName parameterName, FLinearColor endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(WorldContextObject))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::MaterialVectorParameterTo] WorldContextObject is not valid!"));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::MaterialVectorParameterTo] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
FLinearColor startValue = FLinearColor();
|
||
|
|
int32 parameterIndex = 0;
|
||
|
|
if (target->GetVectorParameterValue(parameterName, startValue))
|
||
|
|
{
|
||
|
|
target->InitializeVectorParameterAndGetIndex(parameterName, startValue, parameterIndex);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Warning, TEXT("[ULTweenBPLibrary::MaterialVectorParameterTo]GetVectorParameterValue:%s error!"), *(parameterName.ToString()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject, FLTweenMaterialVectorGetterFunction::CreateWeakLambda(target, [target, parameterName](FLinearColor& result)
|
||
|
|
{
|
||
|
|
return target->GetVectorParameterValue(parameterName, result);
|
||
|
|
}), FLTweenMaterialVectorSetterFunction::CreateUObject(target, &UMaterialInstanceDynamic::SetVectorParameterByIndex)
|
||
|
|
, endValue, duration, parameterIndex);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
|
||
|
|
ULTweener* ULTweenBPLibrary::MeshMaterialScalarParameterTo(UPrimitiveComponent* target, int materialIndex, FName parameterName, float endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::MeshMaterialScalarParameterTo] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
float startValue = 0;
|
||
|
|
int32 parameterIndex = 0;
|
||
|
|
auto material = target->CreateAndSetMaterialInstanceDynamic(parameterIndex);
|
||
|
|
if (material->GetScalarParameterValue(parameterName, startValue))
|
||
|
|
{
|
||
|
|
material->InitializeScalarParameterAndGetIndex(parameterName, startValue, parameterIndex);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Warning, TEXT("[ULTweenBPLibrary::MaterialScalarParameterTo]GetScalarParameterValue:%s error!"), *(parameterName.ToString()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(material, FLTweenMaterialScalarGetterFunction::CreateWeakLambda(material, [material, parameterName](float& result)
|
||
|
|
{
|
||
|
|
return material->GetScalarParameterValue(parameterName, result);
|
||
|
|
}), FLTweenMaterialScalarSetterFunction::CreateUObject(material, &UMaterialInstanceDynamic::SetScalarParameterByIndex)
|
||
|
|
, endValue, duration, parameterIndex);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::MeshMaterialVectorParameterTo(UPrimitiveComponent* target, int materialIndex, FName parameterName, FLinearColor endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[ULTweenBPLibrary::MeshMaterialVectorParameterTo] target is not valid:%s"), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
FLinearColor startValue = FLinearColor();
|
||
|
|
int32 parameterIndex = 0;
|
||
|
|
auto material = target->CreateAndSetMaterialInstanceDynamic(parameterIndex);
|
||
|
|
if (material->GetVectorParameterValue(parameterName, startValue))
|
||
|
|
{
|
||
|
|
material->InitializeVectorParameterAndGetIndex(parameterName, startValue, parameterIndex);
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Warning, TEXT("[ULTweenBPLibrary::MaterialVectorParameterTo]GetVectorParameterValue:%s error!"), *(parameterName.ToString()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(material, FLTweenMaterialVectorGetterFunction::CreateWeakLambda(material, [material, parameterName](FLinearColor& result)
|
||
|
|
{
|
||
|
|
return material->GetVectorParameterValue(parameterName, result);
|
||
|
|
}), FLTweenMaterialVectorSetterFunction::CreateUObject(material, &UMaterialInstanceDynamic::SetVectorParameterByIndex)
|
||
|
|
, endValue, duration, parameterIndex);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
#pragma endregion
|
||
|
|
|
||
|
|
#pragma region UMG
|
||
|
|
#include "Components/CanvasPanelSlot.h"
|
||
|
|
ULTweener* ULTweenBPLibrary::UMG_CanvasPanelSlot_PositionTo(UObject* WorldContextObject, UCanvasPanelSlot* target, const FVector2D& endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[%s] target is not valid:%s"), ANSI_TO_TCHAR(__FUNCTION__), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject
|
||
|
|
, FLTweenVector2DGetterFunction::CreateUObject(target, &UCanvasPanelSlot::GetPosition)
|
||
|
|
, FLTweenVector2DSetterFunction::CreateUObject(target, &UCanvasPanelSlot::SetPosition)
|
||
|
|
, endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease)->SetAffectByGamePause(false)->SetAffectByTimeDilation(false);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::UMG_CanvasPanelSlot_SizeTo(UObject* WorldContextObject, class UCanvasPanelSlot* target, const FVector2D& endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[%s] target is not valid:%s"), ANSI_TO_TCHAR(__FUNCTION__), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject
|
||
|
|
, FLTweenVector2DGetterFunction::CreateUObject(target, &UCanvasPanelSlot::GetSize)
|
||
|
|
, FLTweenVector2DSetterFunction::CreateUObject(target, &UCanvasPanelSlot::SetSize)
|
||
|
|
, endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease)->SetAffectByGamePause(false)->SetAffectByTimeDilation(false);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
#include "Components/HorizontalBoxSlot.h"
|
||
|
|
ULTweener* ULTweenBPLibrary::UMG_HorizontalBoxSlot_PaddingTo(UObject* WorldContextObject, UHorizontalBoxSlot* target, const FMargin& endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[%s] target is not valid:%s"), ANSI_TO_TCHAR(__FUNCTION__), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto endValueVector4 = FVector4(endValue.Left, endValue.Top, endValue.Right, endValue.Bottom);
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject, FLTweenVector4GetterFunction::CreateWeakLambda(target, [=]
|
||
|
|
{
|
||
|
|
auto padding = target->GetPadding();
|
||
|
|
return FVector4(padding.Left, padding.Top, padding.Right, padding.Bottom);
|
||
|
|
}), FLTweenVector4SetterFunction::CreateWeakLambda(target, [=](const FVector4& value) {
|
||
|
|
target->SetPadding(FMargin(value.X, value.Y, value.Z, value.W));
|
||
|
|
}), endValueVector4, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease)->SetAffectByGamePause(false)->SetAffectByTimeDilation(false);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
#include "Components/VerticalBoxSlot.h"
|
||
|
|
ULTweener* ULTweenBPLibrary::UMG_VerticalBoxSlot_PaddingTo(UObject* WorldContextObject, UVerticalBoxSlot* target, const FMargin& endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[%s] target is not valid:%s"), ANSI_TO_TCHAR(__FUNCTION__), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto endValueVector4 = FVector4(endValue.Left, endValue.Top, endValue.Right, endValue.Bottom);
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject, FLTweenVector4GetterFunction::CreateWeakLambda(target, [=]
|
||
|
|
{
|
||
|
|
auto padding = target->GetPadding();
|
||
|
|
return FVector4(padding.Left, padding.Top, padding.Right, padding.Bottom);
|
||
|
|
}), FLTweenVector4SetterFunction::CreateWeakLambda(target, [=](const FVector4& value) {
|
||
|
|
target->SetPadding(FMargin(value.X, value.Y, value.Z, value.W));
|
||
|
|
}), endValueVector4, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease)->SetAffectByGamePause(false)->SetAffectByTimeDilation(false);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
#include "Components/OverlaySlot.h"
|
||
|
|
ULTweener* ULTweenBPLibrary::UMG_OverlaySlot_PaddingTo(UObject* WorldContextObject, UOverlaySlot* target, const FMargin& endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[%s] target is not valid:%s"), ANSI_TO_TCHAR(__FUNCTION__), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto endValueVector4 = FVector4(endValue.Left, endValue.Top, endValue.Right, endValue.Bottom);
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject, FLTweenVector4GetterFunction::CreateWeakLambda(target, [=]
|
||
|
|
{
|
||
|
|
auto padding = target->GetPadding();
|
||
|
|
return FVector4(padding.Left, padding.Top, padding.Right, padding.Bottom);
|
||
|
|
}), FLTweenVector4SetterFunction::CreateWeakLambda(target, [=](const FVector4& value) {
|
||
|
|
target->SetPadding(FMargin(value.X, value.Y, value.Z, value.W));
|
||
|
|
}), endValueVector4, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease)->SetAffectByGamePause(false)->SetAffectByTimeDilation(false);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
#include "Components/ButtonSlot.h"
|
||
|
|
ULTweener* ULTweenBPLibrary::UMG_ButtonSlot_PaddingTo(UObject* WorldContextObject, UButtonSlot* target, const FMargin& endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[%s] target is not valid:%s"), ANSI_TO_TCHAR(__FUNCTION__), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto endValueVector4 = FVector4(endValue.Left, endValue.Top, endValue.Right, endValue.Bottom);
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject, FLTweenVector4GetterFunction::CreateWeakLambda(target, [=]
|
||
|
|
{
|
||
|
|
auto padding = target->GetPadding();
|
||
|
|
return FVector4(padding.Left, padding.Top, padding.Right, padding.Bottom);
|
||
|
|
}), FLTweenVector4SetterFunction::CreateWeakLambda(target, [=](const FVector4& value) {
|
||
|
|
target->SetPadding(FMargin(value.X, value.Y, value.Z, value.W));
|
||
|
|
}), endValueVector4, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease)->SetAffectByGamePause(false)->SetAffectByTimeDilation(false);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
#include "Components/BorderSlot.h"
|
||
|
|
ULTweener* ULTweenBPLibrary::UMG_BorderSlot_PaddingTo(UObject* WorldContextObject, UBorderSlot* target, const FMargin& endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[%s] target is not valid:%s"), ANSI_TO_TCHAR(__FUNCTION__), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto endValueVector4 = FVector4(endValue.Left, endValue.Top, endValue.Right, endValue.Bottom);
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject, FLTweenVector4GetterFunction::CreateWeakLambda(target, [=]
|
||
|
|
{
|
||
|
|
auto padding = target->GetPadding();
|
||
|
|
return FVector4(padding.Left, padding.Top, padding.Right, padding.Bottom);
|
||
|
|
}), FLTweenVector4SetterFunction::CreateWeakLambda(target, [=](const FVector4& value) {
|
||
|
|
target->SetPadding(FMargin(value.X, value.Y, value.Z, value.W));
|
||
|
|
}), endValueVector4, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease)->SetAffectByGamePause(false)->SetAffectByTimeDilation(false);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
|
||
|
|
#include "Components/Widget.h"
|
||
|
|
ULTweener* ULTweenBPLibrary::UMG_RenderTransform_TranslationTo(UObject* WorldContextObject, class UWidget* target, const FVector2D& endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[%s] target is not valid:%s"), ANSI_TO_TCHAR(__FUNCTION__), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject, FLTweenVector2DGetterFunction::CreateWeakLambda(target, [=]
|
||
|
|
{
|
||
|
|
return target->GetRenderTransform().Translation;
|
||
|
|
}), FLTweenVector2DSetterFunction::CreateUObject(target, &UWidget::SetRenderTranslation)
|
||
|
|
, endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease)->SetAffectByGamePause(false)->SetAffectByTimeDilation(false);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::UMG_RenderTransform_AngleTo(UObject* WorldContextObject, UWidget* target, float endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[%s] target is not valid:%s"), ANSI_TO_TCHAR(__FUNCTION__), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject
|
||
|
|
, FLTweenFloatGetterFunction::CreateUObject(target, &UWidget::GetRenderTransformAngle)
|
||
|
|
, FLTweenFloatSetterFunction::CreateUObject(target, &UWidget::SetRenderTransformAngle)
|
||
|
|
, endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease)->SetAffectByGamePause(false)->SetAffectByTimeDilation(false);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::UMG_RenderTransform_ScaleTo(UObject* WorldContextObject, UWidget* target, const FVector2D& endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[%s] target is not valid:%s"), ANSI_TO_TCHAR(__FUNCTION__), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject, FLTweenVector2DGetterFunction::CreateWeakLambda(target, [=]
|
||
|
|
{
|
||
|
|
return target->GetRenderTransform().Scale;
|
||
|
|
}), FLTweenVector2DSetterFunction::CreateUObject(target, &UWidget::SetRenderScale)
|
||
|
|
, endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease)->SetAffectByGamePause(false)->SetAffectByTimeDilation(false);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::UMG_RenderTransform_ShearTo(UObject* WorldContextObject, UWidget* target, const FVector2D& endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[%s] target is not valid:%s"), ANSI_TO_TCHAR(__FUNCTION__), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject, FLTweenVector2DGetterFunction::CreateWeakLambda(target, [=]
|
||
|
|
{
|
||
|
|
return target->GetRenderTransform().Shear;
|
||
|
|
}), FLTweenVector2DSetterFunction::CreateUObject(target, &UWidget::SetRenderShear)
|
||
|
|
, endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease)->SetAffectByGamePause(false)->SetAffectByTimeDilation(false);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
ULTweener* ULTweenBPLibrary::UMG_RenderOpacityTo(UObject* WorldContextObject, UWidget* target, float endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[%s] target is not valid:%s"), ANSI_TO_TCHAR(__FUNCTION__), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject
|
||
|
|
, FLTweenFloatGetterFunction::CreateUObject(target, &UWidget::GetRenderOpacity)
|
||
|
|
, FLTweenFloatSetterFunction::CreateUObject(target, &UWidget::SetRenderOpacity)
|
||
|
|
, endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease)->SetAffectByGamePause(false)->SetAffectByTimeDilation(false);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
#include "Blueprint/UserWidget.h"
|
||
|
|
ULTweener* ULTweenBPLibrary::UMG_UserWidget_ColorAndOpacityTo(UObject* WorldContextObject, UUserWidget* target, const FLinearColor& endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[%s] target is not valid:%s"), ANSI_TO_TCHAR(__FUNCTION__), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject, FLTweenLinearColorGetterFunction::CreateWeakLambda(target, [=]
|
||
|
|
{
|
||
|
|
return target->GetColorAndOpacity();
|
||
|
|
}), FLTweenLinearColorSetterFunction::CreateUObject(target, &UUserWidget::SetColorAndOpacity)
|
||
|
|
, endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease)->SetAffectByGamePause(false)->SetAffectByTimeDilation(false);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
#include "Components/Image.h"
|
||
|
|
ULTweener* ULTweenBPLibrary::UMG_Image_ColorAndOpacityTo(UObject* WorldContextObject, UImage* target, const FLinearColor& endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[%s] target is not valid:%s"), ANSI_TO_TCHAR(__FUNCTION__), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject, FLTweenLinearColorGetterFunction::CreateWeakLambda(target, [=]
|
||
|
|
{
|
||
|
|
return target->GetColorAndOpacity();
|
||
|
|
}), FLTweenLinearColorSetterFunction::CreateUObject(target, &UImage::SetColorAndOpacity)
|
||
|
|
, endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease)->SetAffectByGamePause(false)->SetAffectByTimeDilation(false);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
#include "Components/Button.h"
|
||
|
|
ULTweener* ULTweenBPLibrary::UMG_Button_ColorAndOpacityTo(UObject* WorldContextObject, UButton* target, const FLinearColor& endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[%s] target is not valid:%s"), ANSI_TO_TCHAR(__FUNCTION__), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject, FLTweenLinearColorGetterFunction::CreateWeakLambda(target, [=]
|
||
|
|
{
|
||
|
|
return target->GetColorAndOpacity();
|
||
|
|
}), FLTweenLinearColorSetterFunction::CreateUObject(target, &UButton::SetColorAndOpacity)
|
||
|
|
, endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease)->SetAffectByGamePause(false)->SetAffectByTimeDilation(false);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
#include "Components/Border.h"
|
||
|
|
ULTweener* ULTweenBPLibrary::UMG_Border_ContentColorAndOpacityTo(UObject* WorldContextObject, UBorder* target, const FLinearColor& endValue, float duration, float delay, ELTweenEase ease)
|
||
|
|
{
|
||
|
|
if (!IsValid(target))
|
||
|
|
{
|
||
|
|
UE_LOG(LTween, Error, TEXT("[%s] target is not valid:%s"), ANSI_TO_TCHAR(__FUNCTION__), *(target->GetPathName()));
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
auto Tweener = ULTweenManager::To(WorldContextObject
|
||
|
|
, FLTweenLinearColorGetterFunction::CreateUObject(target, &UBorder::GetContentColorAndOpacity)
|
||
|
|
, FLTweenLinearColorSetterFunction::CreateUObject(target, &UBorder::SetContentColorAndOpacity)
|
||
|
|
, endValue, duration);
|
||
|
|
if (Tweener)
|
||
|
|
{
|
||
|
|
Tweener->SetDelay(delay)->SetEase(ease)->SetAffectByGamePause(false)->SetAffectByTimeDilation(false);
|
||
|
|
}
|
||
|
|
return Tweener;
|
||
|
|
}
|
||
|
|
#pragma endregion
|