Upgrade to 5.8
This commit is contained in:
6
.idea/.idea.Faye.dir/.idea/vcs.xml
generated
Normal file
6
.idea/.idea.Faye.dir/.idea/vcs.xml
generated
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="VcsDirectoryMappings">
|
||||||
|
<mapping directory="" vcs="Git" />
|
||||||
|
</component>
|
||||||
|
</project>
|
||||||
65
Automation_Faye.slnx
Normal file
65
Automation_Faye.slnx
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
<Solution>
|
||||||
|
<Configurations>
|
||||||
|
<BuildType Name="Analyze" />
|
||||||
|
<BuildType Name="Debug" />
|
||||||
|
<BuildType Name="Development" />
|
||||||
|
<BuildType Name="Release" />
|
||||||
|
</Configurations>
|
||||||
|
<Folder Name="/Dependencies/">
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Analytics.Telemetry/EpicGames.Analytics.Telemetry.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Build/EpicGames.Build.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.BuildGraph/EpicGames.BuildGraph.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Core/EpicGames.Core.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Horde/EpicGames.Horde.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.IoHash/EpicGames.IoHash.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.LogMatchers/EpicGames.LogMatchers.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.MsBuild/EpicGames.MsBuild.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.OIDC/EpicGames.OIDC.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Oodle/EpicGames.Oodle.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Perforce.Fixture/EpicGames.Perforce.Fixture.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Perforce.Managed/EpicGames.Perforce.Managed.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Perforce/EpicGames.Perforce.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.ProjectStore/EpicGames.ProjectStore.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Serialization/EpicGames.Serialization.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.UBA/EpicGames.UBA.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.UHT/EpicGames.UHT.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/UnrealBuildTool/UnrealBuildTool.csproj" />
|
||||||
|
</Folder>
|
||||||
|
<Folder Name="/Tests/">
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Build.Tests/EpicGames.Build.Tests.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.BuildGraph.Tests/EpicGames.BuildGraph.Tests.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Core.Tests/EpicGames.Core.Tests.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Horde.Tests/EpicGames.Horde.Tests.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.IoHash.Tests/EpicGames.IoHash.Tests.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.LogMatchers.Tests/EpicGames.LogMatchers.Tests.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Perforce.Managed.Tests/EpicGames.Perforce.Managed.Tests.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Perforce.Tests/EpicGames.Perforce.Tests.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Serialization.Tests/EpicGames.Serialization.Tests.csproj" />
|
||||||
|
</Folder>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Platforms/VisionOS/Source/Programs/AutomationTool/VisionOS.Automation.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/Android/Android.Automation.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/Apple/Apple.Automation.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/AutomationTool.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/AutomationUtils/AutomationUtils.Automation.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/BuildGraph/BuildGraph.Automation.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/CookedEditor/CookedEditor.Automation.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/CrowdinLocalization/CrowdinLocalization.Automation.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/Gauntlet/Gauntlet.Automation.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/Insights/Insights.Automation.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/IOS/IOS.Automation.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/Linux/Linux.Automation.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/LiveLinkHub/LiveLinkHub.Automation.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/Localization/Localization.Automation.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/LowLevelTests/LowLevelTests.Automation.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/Mac/Mac.Automation.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/Microsoft/Microsoft.Automation.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/Mutable/Mutable.Automation.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/OneSkyLocalization/OneSkyLocalization.Automation.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/Scripts/AutomationScripts.Automation.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/SmartlingLocalization/SmartlingLocalization.Automation.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/SteamDeck/SteamDeck.Automation.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/Turnkey/Turnkey.Automation.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/TVOS/TVOS.Automation.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/Win/Win.Automation.csproj" />
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/XLocLocalization/XLocLocalization.Automation.csproj" />
|
||||||
|
</Solution>
|
||||||
@@ -13,7 +13,6 @@ r.Mobile.SupportGPUScene=True
|
|||||||
r.Mobile.AntiAliasing=1
|
r.Mobile.AntiAliasing=1
|
||||||
r.Mobile.FloatPrecisionMode=0
|
r.Mobile.FloatPrecisionMode=0
|
||||||
r.Mobile.AllowDitheredLODTransition=False
|
r.Mobile.AllowDitheredLODTransition=False
|
||||||
r.Mobile.VirtualTextures=False
|
|
||||||
r.DiscardUnusedQuality=False
|
r.DiscardUnusedQuality=False
|
||||||
r.AllowOcclusionQueries=True
|
r.AllowOcclusionQueries=True
|
||||||
r.MinScreenRadiusForLights=0.030000
|
r.MinScreenRadiusForLights=0.030000
|
||||||
|
|||||||
228
Faye.slnx
Normal file
228
Faye.slnx
Normal file
@@ -0,0 +1,228 @@
|
|||||||
|
<Solution>
|
||||||
|
<Configurations>
|
||||||
|
<BuildType Name="DebugGame" />
|
||||||
|
<BuildType Name="DebugGame Editor" />
|
||||||
|
<BuildType Name="Development" />
|
||||||
|
<BuildType Name="Development Editor" />
|
||||||
|
<BuildType Name="Shipping" />
|
||||||
|
<Platform Name="Win64" />
|
||||||
|
<Platform Name="Win64-arm64" />
|
||||||
|
<Platform Name="Win64-arm64ec" />
|
||||||
|
</Configurations>
|
||||||
|
<Folder Name="/Engine/">
|
||||||
|
<Project Path="Intermediate/ProjectFiles/UE5.vcxproj" Id="ebb77bbd-b45c-3ad9-9073-7e326b1bce47">
|
||||||
|
<BuildType Project="BuiltWithUnrealBuildTool" />
|
||||||
|
<Platform Project="Win64" />
|
||||||
|
<Build Project="false" />
|
||||||
|
</Project>
|
||||||
|
</Folder>
|
||||||
|
<Folder Name="/Games/">
|
||||||
|
<Project Path="Intermediate/ProjectFiles/Faye.vcxproj" Id="a9b8f0e9-1878-3d5b-9bb2-b338786b894c">
|
||||||
|
<BuildType Solution="DebugGame Editor|Win64" Project="DebugGame_Editor" />
|
||||||
|
<BuildType Solution="DebugGame Editor|Win64-arm64" Project="Win64_arm64_DebugGame_Editor" />
|
||||||
|
<BuildType Solution="DebugGame Editor|Win64-arm64ec" Project="Win64_arm64ec_DebugGame_Editor" />
|
||||||
|
<BuildType Solution="DebugGame|Win64-arm64" Project="Win64_arm64_DebugGame" />
|
||||||
|
<BuildType Solution="DebugGame|Win64-arm64ec" Project="Win64_arm64ec_DebugGame" />
|
||||||
|
<BuildType Solution="Development Editor|Win64" Project="Development_Editor" />
|
||||||
|
<BuildType Solution="Development Editor|Win64-arm64" Project="Win64_arm64_Development_Editor" />
|
||||||
|
<BuildType Solution="Development Editor|Win64-arm64ec" Project="Win64_arm64ec_Development_Editor" />
|
||||||
|
<BuildType Solution="Development|Win64-arm64" Project="Win64_arm64_Development" />
|
||||||
|
<BuildType Solution="Development|Win64-arm64ec" Project="Win64_arm64ec_Development" />
|
||||||
|
<BuildType Solution="Shipping|Win64-arm64" Project="Win64_arm64_Shipping" />
|
||||||
|
<BuildType Solution="Shipping|Win64-arm64ec" Project="Win64_arm64ec_Shipping" />
|
||||||
|
<Platform Project="x64" />
|
||||||
|
</Project>
|
||||||
|
</Folder>
|
||||||
|
<Folder Name="/Programs/">
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/AutomationTool.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/UnrealBuildTool/UnrealBuildTool.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
</Folder>
|
||||||
|
<Folder Name="/Programs/Automation/">
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Platforms/VisionOS/Source/Programs/AutomationTool/VisionOS.Automation.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/Android/Android.Automation.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/Apple/Apple.Automation.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/AutomationUtils/AutomationUtils.Automation.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/BuildGraph/BuildGraph.Automation.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/CookedEditor/CookedEditor.Automation.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/CrowdinLocalization/CrowdinLocalization.Automation.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/Gauntlet/Gauntlet.Automation.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/Insights/Insights.Automation.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/IOS/IOS.Automation.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/Linux/Linux.Automation.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/LiveLinkHub/LiveLinkHub.Automation.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/Localization/Localization.Automation.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/LowLevelTests/LowLevelTests.Automation.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/Mac/Mac.Automation.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/Microsoft/Microsoft.Automation.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/Mutable/Mutable.Automation.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/OneSkyLocalization/OneSkyLocalization.Automation.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/Scripts/AutomationScripts.Automation.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/SmartlingLocalization/SmartlingLocalization.Automation.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/SteamDeck/SteamDeck.Automation.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/Turnkey/Turnkey.Automation.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/TVOS/TVOS.Automation.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/Win/Win.Automation.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/AutomationTool/XLocLocalization/XLocLocalization.Automation.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
</Folder>
|
||||||
|
<Folder Name="/Programs/Shared/">
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Analytics.Generators/EpicGames.Analytics.Generators.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Analytics.PerformanceTrends/EpicGames.Analytics.PerformanceTrends.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Analytics.Telemetry/EpicGames.Analytics.Telemetry.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.AspNet/EpicGames.AspNet.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Benchmarks/EpicGames.Benchmarks.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Build/EpicGames.Build.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.BuildGraph/EpicGames.BuildGraph.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Core/EpicGames.Core.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Horde/EpicGames.Horde.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.IoHash/EpicGames.IoHash.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.LogMatchers/EpicGames.LogMatchers.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.MongoDB/EpicGames.MongoDB.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.MsBuild/EpicGames.MsBuild.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.OIDC/EpicGames.OIDC.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Oodle/EpicGames.Oodle.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Perforce.Fixture/EpicGames.Perforce.Fixture.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Perforce.Managed/EpicGames.Perforce.Managed.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Perforce/EpicGames.Perforce.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.ProjectStore/EpicGames.ProjectStore.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Redis/EpicGames.Redis.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.ScriptBuild/EpicGames.ScriptBuild.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Serialization/EpicGames.Serialization.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Slack/EpicGames.Slack.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.Tracing/EpicGames.Tracing.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.UBA/EpicGames.UBA.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Source/Programs/Shared/EpicGames.UHT/EpicGames.UHT.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
</Folder>
|
||||||
|
<Folder Name="/Programs/UnrealBuildTool.Plugins/">
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Plugins/ScriptPlugin/Source/ScriptGeneratorUbtPlugin/ScriptGeneratorUbtPlugin.ubtplugin.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
</Folder>
|
||||||
|
<Folder Name="/Rules/">
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Intermediate/Build/BuildRulesProjects/MarketplaceRules/MarketplaceRules.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Intermediate/Build/BuildRulesProjects/UE5ProgramRules/UE5ProgramRules.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Intermediate/Build/BuildRulesProjects/UE5Rules/UE5Rules.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
<Project Path="Intermediate/Build/BuildRulesProjects/FayeModuleRules/FayeModuleRules.csproj">
|
||||||
|
<BuildType Project="Development" />
|
||||||
|
</Project>
|
||||||
|
</Folder>
|
||||||
|
<Folder Name="/Visualizers/">
|
||||||
|
<File Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Extras/VisualStudioDebugging/Unreal.natjmc" />
|
||||||
|
<File Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Extras/VisualStudioDebugging/Unreal.natstepfilter" />
|
||||||
|
<File Path="../../../../../Program Files/Epic Games/UE_5.8/Engine/Extras/VisualStudioDebugging/Unreal.natvis" />
|
||||||
|
</Folder>
|
||||||
|
<Properties Name="ddbf523f-7eb6-4887-bd51-85a714ff87eb">
|
||||||
|
<Property Name="AvailablePlatforms" Value="Win64" />
|
||||||
|
</Properties>
|
||||||
|
</Solution>
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"FileVersion": 3,
|
"FileVersion": 3,
|
||||||
"EngineAssociation": "5.7",
|
"EngineAssociation": "5.8",
|
||||||
"Category": "",
|
"Category": "",
|
||||||
"Description": "",
|
"Description": "",
|
||||||
"Modules": [
|
"Modules": [
|
||||||
@@ -106,27 +106,9 @@
|
|||||||
"Name": "CameraShakePreviewer",
|
"Name": "CameraShakePreviewer",
|
||||||
"Enabled": false
|
"Enabled": false
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"Name": "GameplayCameras",
|
|
||||||
"Enabled": false
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"Name": "StructUtils",
|
"Name": "StructUtils",
|
||||||
"Enabled": true
|
"Enabled": true
|
||||||
},
|
|
||||||
{
|
|
||||||
"Name": "Rive",
|
|
||||||
"Enabled": true
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Name": "Diversion",
|
|
||||||
"Enabled": true,
|
|
||||||
"MarketplaceURL": "com.epicgames.launcher://ue/marketplace/product/7c8abd783acd4d66a5290a12a5d67523"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Name": "LTween",
|
|
||||||
"Enabled": true,
|
|
||||||
"MarketplaceURL": "com.epicgames.launcher://ue/marketplace/product/efa1b6e762974e48847e029c8ac6c602"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
"DocsURL": "https://github.com/RLoris/ArrayHelperDoc/blob/master/README.md",
|
"DocsURL": "https://github.com/RLoris/ArrayHelperDoc/blob/master/README.md",
|
||||||
"MarketplaceURL": "com.epicgames.launcher://ue/marketplace/product/813e339b92ad4cf587a4cef56bec7020",
|
"MarketplaceURL": "com.epicgames.launcher://ue/marketplace/product/813e339b92ad4cf587a4cef56bec7020",
|
||||||
"SupportURL": "https://forms.gle/CpekZfTewGZrUVen7",
|
"SupportURL": "https://forms.gle/CpekZfTewGZrUVen7",
|
||||||
"EngineVersion": "5.7.0",
|
"EngineVersion": "5.8.0",
|
||||||
"CanContainContent": true,
|
"CanContainContent": true,
|
||||||
"Installed": true,
|
"Installed": true,
|
||||||
"Modules": [
|
"Modules": [
|
||||||
|
|||||||
30
Plugins/LTween/LTween.uplugin
Normal file
30
Plugins/LTween/LTween.uplugin
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
{
|
||||||
|
"FileVersion": 3,
|
||||||
|
"Version": 1,
|
||||||
|
"VersionName": "1.3",
|
||||||
|
"FriendlyName": "LTween",
|
||||||
|
"Description": "LTween (Lex-Tween) is a tween animation library",
|
||||||
|
"Category": "LexPlugin",
|
||||||
|
"CreatedBy": "LexLiu",
|
||||||
|
"CreatedByURL": "",
|
||||||
|
"DocsURL": "https://liufei2008.github.io/LTweenDoc/GetStarted/",
|
||||||
|
"MarketplaceURL": "com.epicgames.launcher://ue/marketplace/product/efa1b6e762974e48847e029c8ac6c602",
|
||||||
|
"SupportURL": "707908214@qq.com",
|
||||||
|
"EngineVersion": "5.8.0",
|
||||||
|
"CanContainContent": true,
|
||||||
|
"Installed": true,
|
||||||
|
"Modules": [
|
||||||
|
{
|
||||||
|
"Name": "LTween",
|
||||||
|
"Type": "Runtime",
|
||||||
|
"LoadingPhase": "Default",
|
||||||
|
"PlatformAllowList": [
|
||||||
|
"Win64",
|
||||||
|
"Mac",
|
||||||
|
"Linux",
|
||||||
|
"IOS",
|
||||||
|
"Android"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
BIN
Plugins/LTween/Resources/Icon128.png
LFS
Normal file
BIN
Plugins/LTween/Resources/Icon128.png
LFS
Normal file
Binary file not shown.
40
Plugins/LTween/Source/LTween/LTween.Build.cs
Normal file
40
Plugins/LTween/Source/LTween/LTween.Build.cs
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
using UnrealBuildTool;
|
||||||
|
|
||||||
|
public class LTween : ModuleRules
|
||||||
|
{
|
||||||
|
public LTween(ReadOnlyTargetRules Target) : base(Target)
|
||||||
|
{
|
||||||
|
PCHUsage = ModuleRules.PCHUsageMode.UseExplicitOrSharedPCHs;
|
||||||
|
PublicDependencyModuleNames.AddRange(
|
||||||
|
new string[]
|
||||||
|
{
|
||||||
|
"Core",
|
||||||
|
"Engine",
|
||||||
|
|
||||||
|
// ... add other public dependencies that you statically link with here ...
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
PrivateDependencyModuleNames.AddRange(
|
||||||
|
new string[]
|
||||||
|
{
|
||||||
|
"CoreUObject",
|
||||||
|
"UMG",
|
||||||
|
"SlateCore",
|
||||||
|
// ... add private dependencies that you statically link with here ...
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
DynamicallyLoadedModuleNames.AddRange(
|
||||||
|
new string[]
|
||||||
|
{
|
||||||
|
// ... add any modules that your module loads dynamically here ...
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
21
Plugins/LTween/Source/LTween/Private/LTween.cpp
Normal file
21
Plugins/LTween/Source/LTween/Private/LTween.cpp
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#include "LTween.h"
|
||||||
|
#include "Modules/ModuleManager.h"
|
||||||
|
|
||||||
|
DEFINE_LOG_CATEGORY(LTween);
|
||||||
|
|
||||||
|
void FLTweenModule::StartupModule()
|
||||||
|
{
|
||||||
|
// This code will execute after your module is loaded into memory; the exact timing is specified in the .uplugin file per-module
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void FLTweenModule::ShutdownModule()
|
||||||
|
{
|
||||||
|
// This function may be called during shutdown to clean up your module. For modules that support dynamic reloading,
|
||||||
|
// we call this function before unloading the module.
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
IMPLEMENT_MODULE(FLTweenModule, LTween)//if second param is wrong, an error like "EmptyLinkFunctionForStaticInitialization(XXX)" will occor when package project
|
||||||
1222
Plugins/LTween/Source/LTween/Private/LTweenBPLibrary.cpp
Normal file
1222
Plugins/LTween/Source/LTween/Private/LTweenBPLibrary.cpp
Normal file
File diff suppressed because it is too large
Load Diff
493
Plugins/LTween/Source/LTween/Private/LTweenManager.cpp
Normal file
493
Plugins/LTween/Source/LTween/Private/LTweenManager.cpp
Normal file
@@ -0,0 +1,493 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#include "LTweenManager.h"
|
||||||
|
#include "Tweener/LTweenerFloat.h"
|
||||||
|
#include "Tweener/LTweenerDouble.h"
|
||||||
|
#include "Tweener/LTweenerInteger.h"
|
||||||
|
#include "Tweener/LTweenerVector.h"
|
||||||
|
#include "Tweener/LTweenerColor.h"
|
||||||
|
#include "Tweener/LTweenerLinearColor.h"
|
||||||
|
#include "Tweener/LTweenerVector2D.h"
|
||||||
|
#include "Tweener/LTweenerVector4.h"
|
||||||
|
#include "Tweener/LTweenerPosition.h"
|
||||||
|
#include "Tweener/LTweenerQuaternion.h"
|
||||||
|
#include "Tweener/LTweenerRotator.h"
|
||||||
|
#include "Tweener/LTweenerRotationEuler.h"
|
||||||
|
#include "Tweener/LTweenerRotationQuat.h"
|
||||||
|
#include "Tweener/LTweenerMaterialScalar.h"
|
||||||
|
#include "Tweener/LTweenerMaterialVector.h"
|
||||||
|
|
||||||
|
#include "Tweener/LTweenerFrame.h"
|
||||||
|
#include "Tweener/LTweenerVirtual.h"
|
||||||
|
#include "Tweener/LTweenerUpdate.h"
|
||||||
|
|
||||||
|
#include "LTweenerSequence.h"
|
||||||
|
|
||||||
|
#include "Engine/World.h"
|
||||||
|
#include "Engine/Engine.h"
|
||||||
|
|
||||||
|
ULTweenTickHelperComponent::ULTweenTickHelperComponent()
|
||||||
|
{
|
||||||
|
PrimaryComponentTick.bCanEverTick = true;
|
||||||
|
PrimaryComponentTick.bStartWithTickEnabled = true;
|
||||||
|
PrimaryComponentTick.TickGroup = ETickingGroup::TG_DuringPhysics;
|
||||||
|
PrimaryComponentTick.bTickEvenWhenPaused = true;
|
||||||
|
}
|
||||||
|
void ULTweenTickHelperComponent::BeginPlay()
|
||||||
|
{
|
||||||
|
Super::BeginPlay();
|
||||||
|
}
|
||||||
|
void ULTweenTickHelperComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
|
||||||
|
{
|
||||||
|
Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
|
||||||
|
if (Target.IsValid())
|
||||||
|
{
|
||||||
|
Target->Tick((ELTweenTickType)((uint8)PrimaryComponentTick.TickGroup), DeltaTime);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void ULTweenTickHelperComponent::EndPlay(const EEndPlayReason::Type EndPlayReason)
|
||||||
|
{
|
||||||
|
Super::EndPlay(EndPlayReason);
|
||||||
|
}
|
||||||
|
|
||||||
|
ALTweenTickHelperActor::ALTweenTickHelperActor()
|
||||||
|
{
|
||||||
|
PrimaryActorTick.bCanEverTick = true;
|
||||||
|
PrimaryActorTick.bStartWithTickEnabled = true;
|
||||||
|
PrimaryActorTick.TickGroup = ETickingGroup::TG_DuringPhysics;
|
||||||
|
PrimaryActorTick.bTickEvenWhenPaused = true;
|
||||||
|
|
||||||
|
SpawnCollisionHandlingMethod = ESpawnActorCollisionHandlingMethod::AlwaysSpawn;
|
||||||
|
}
|
||||||
|
void ALTweenTickHelperActor::BeginPlay()
|
||||||
|
{
|
||||||
|
Super::BeginPlay();
|
||||||
|
if (auto LTweenManager = ULTweenManager::GetLTweenInstance(this))
|
||||||
|
{
|
||||||
|
SetupTick(LTweenManager);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//If GameInstance subsystem not created yet, then register a event to wait it create
|
||||||
|
OnLTweenManagerCreatedDelegateHandle = ULTweenManager::OnLTweenManagerCreated.AddUObject(this, &ALTweenTickHelperActor::OnLTweenManagerCreated);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void ALTweenTickHelperActor::Tick(float DeltaSeconds)
|
||||||
|
{
|
||||||
|
Super::Tick(DeltaSeconds);
|
||||||
|
if (Target.IsValid())
|
||||||
|
{
|
||||||
|
Target->Tick(ELTweenTickType::DuringPhysics, DeltaSeconds);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void ALTweenTickHelperActor::EndPlay(EEndPlayReason::Type EndPlayReason)
|
||||||
|
{
|
||||||
|
Super::EndPlay(EndPlayReason);
|
||||||
|
if (OnLTweenManagerCreatedDelegateHandle.IsValid())
|
||||||
|
{
|
||||||
|
ULTweenManager::OnLTweenManagerCreated.Remove(OnLTweenManagerCreatedDelegateHandle);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void ALTweenTickHelperActor::OnLTweenManagerCreated(ULTweenManager* LTweenManager)
|
||||||
|
{
|
||||||
|
SetupTick(LTweenManager);
|
||||||
|
}
|
||||||
|
void ALTweenTickHelperActor::SetupTick(ULTweenManager* LTweenManager)
|
||||||
|
{
|
||||||
|
auto CreateComp = [LTweenManager, this](ETickingGroup TickingGroup, FName Name) {
|
||||||
|
auto TickComp_DuringPhysics = NewObject<ULTweenTickHelperComponent>(this, Name);
|
||||||
|
TickComp_DuringPhysics->SetTickGroup(TickingGroup);
|
||||||
|
TickComp_DuringPhysics->RegisterComponent();
|
||||||
|
TickComp_DuringPhysics->Target = LTweenManager;
|
||||||
|
this->AddInstanceComponent(TickComp_DuringPhysics);
|
||||||
|
};
|
||||||
|
CreateComp(ETickingGroup::TG_PrePhysics, TEXT("PrePhysics"));
|
||||||
|
CreateComp(ETickingGroup::TG_PostPhysics, TEXT("PostPhysics"));
|
||||||
|
CreateComp(ETickingGroup::TG_PostUpdateWork, TEXT("PostUpdateWork"));
|
||||||
|
this->Target = LTweenManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool ULTweenTickHelperWorldSubsystem::ShouldCreateSubsystem(UObject* Outer) const
|
||||||
|
{
|
||||||
|
if (auto World = Outer->GetWorld())
|
||||||
|
{
|
||||||
|
if (World->IsGameWorld())
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
void ULTweenTickHelperWorldSubsystem::PostInitialize()
|
||||||
|
{
|
||||||
|
Super::PostInitialize();
|
||||||
|
if (auto World = GetWorld())
|
||||||
|
{
|
||||||
|
if (World->IsGameWorld())
|
||||||
|
{
|
||||||
|
World->SpawnActor<ALTweenTickHelperActor>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DECLARE_CYCLE_STAT(TEXT("LTween Update"), STAT_Update, STATGROUP_LTween);
|
||||||
|
|
||||||
|
FLTweenManagerCreated ULTweenManager::OnLTweenManagerCreated;
|
||||||
|
//~USubsystem interface
|
||||||
|
void ULTweenManager::Initialize(FSubsystemCollectionBase& Collection)
|
||||||
|
{
|
||||||
|
const UGameInstance* LocalGameInstance = GetGameInstance();
|
||||||
|
check(LocalGameInstance);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ULTweenManager::Deinitialize()
|
||||||
|
{
|
||||||
|
tweenerList.Empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ULTweenManager::ShouldCreateSubsystem(UObject* Outer) const
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
//~End of USubsystem interface
|
||||||
|
|
||||||
|
void ULTweenManager::Tick(ELTweenTickType TickType, float DeltaTime)
|
||||||
|
{
|
||||||
|
if (bTickPaused)return;
|
||||||
|
if (TickType == ELTweenTickType::Manual)
|
||||||
|
{
|
||||||
|
OnTick(TickType, DeltaTime, DeltaTime);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (auto World = GetWorld())
|
||||||
|
{
|
||||||
|
OnTick(TickType, World->DeltaTimeSeconds, World->DeltaRealTimeSeconds);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
OnTick(TickType, DeltaTime, DeltaTime);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "Kismet/GameplayStatics.h"
|
||||||
|
#include "Engine/GameInstance.h"
|
||||||
|
ULTweenManager* ULTweenManager::GetLTweenInstance(UObject* WorldContextObject)
|
||||||
|
{
|
||||||
|
if (auto GameInstance = UGameplayStatics::GetGameInstance(WorldContextObject))
|
||||||
|
return GameInstance->GetSubsystem<ULTweenManager>();
|
||||||
|
else
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ULTweenManager::OnTick(ELTweenTickType TickType, float DeltaTime, float UnscaledDeltaTime)
|
||||||
|
{
|
||||||
|
SCOPE_CYCLE_COUNTER(STAT_Update);
|
||||||
|
|
||||||
|
auto count = tweenerList.Num();
|
||||||
|
for (int32 i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
auto tweener = tweenerList[i];
|
||||||
|
if (!IsValid(tweener))
|
||||||
|
{
|
||||||
|
tweenerList.RemoveAt(i);
|
||||||
|
i--;
|
||||||
|
count--;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (tweener->GetTickType() != TickType)continue;
|
||||||
|
if (tweener->ToNext(DeltaTime, UnscaledDeltaTime) == false)
|
||||||
|
{
|
||||||
|
tweenerList.RemoveAt(i);
|
||||||
|
tweener->ConditionalBeginDestroy();
|
||||||
|
i--;
|
||||||
|
count--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (TickType == ELTweenTickType::DuringPhysics)
|
||||||
|
{
|
||||||
|
if (updateEvent.IsBound())
|
||||||
|
updateEvent.Broadcast(DeltaTime);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ULTweenManager::CustomTick(float DeltaTime)
|
||||||
|
{
|
||||||
|
OnTick(ELTweenTickType::DuringPhysics, DeltaTime, DeltaTime);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ULTweenManager::DisableTick()
|
||||||
|
{
|
||||||
|
bTickPaused = true;
|
||||||
|
}
|
||||||
|
void ULTweenManager::EnableTick()
|
||||||
|
{
|
||||||
|
bTickPaused = false;
|
||||||
|
}
|
||||||
|
void ULTweenManager::ManualTick(float DeltaTime)
|
||||||
|
{
|
||||||
|
Tick(ELTweenTickType::Manual, DeltaTime);
|
||||||
|
}
|
||||||
|
void ULTweenManager::KillAllTweens(bool callComplete)
|
||||||
|
{
|
||||||
|
for (auto item : tweenerList)
|
||||||
|
{
|
||||||
|
if (IsValid(item))
|
||||||
|
{
|
||||||
|
item->Kill(callComplete);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tweenerList.Reset();
|
||||||
|
}
|
||||||
|
bool ULTweenManager::IsTweening(UObject* WorldContextObject, ULTweener* item)
|
||||||
|
{
|
||||||
|
if (!IsValid(item))return false;
|
||||||
|
|
||||||
|
auto Instance = GetLTweenInstance(WorldContextObject);
|
||||||
|
if (!IsValid(Instance))return false;
|
||||||
|
|
||||||
|
return Instance->tweenerList.Contains(item);
|
||||||
|
}
|
||||||
|
void ULTweenManager::KillIfIsTweening(UObject* WorldContextObject, ULTweener* item, bool callComplete)
|
||||||
|
{
|
||||||
|
if (IsTweening(WorldContextObject, item))
|
||||||
|
{
|
||||||
|
item->Kill(callComplete);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
void ULTweenManager::RemoveTweener(UObject* WorldContextObject, ULTweener* item)
|
||||||
|
{
|
||||||
|
if (!IsValid(item))return;
|
||||||
|
|
||||||
|
auto Instance = GetLTweenInstance(WorldContextObject);
|
||||||
|
if (!IsValid(Instance))return;
|
||||||
|
Instance->tweenerList.Remove(item);
|
||||||
|
}
|
||||||
|
//float
|
||||||
|
ULTweener* ULTweenManager::To(UObject* WorldContextObject, const FLTweenFloatGetterFunction& getter, const FLTweenFloatSetterFunction& setter, float endValue, float duration)
|
||||||
|
{
|
||||||
|
auto Instance = GetLTweenInstance(WorldContextObject);
|
||||||
|
if (!IsValid(Instance))return nullptr;
|
||||||
|
|
||||||
|
auto tweener = NewObject<ULTweenerFloat>(WorldContextObject);
|
||||||
|
tweener->SetInitialValue(getter, setter, endValue, duration);
|
||||||
|
Instance->tweenerList.Add(tweener);
|
||||||
|
return tweener;
|
||||||
|
}
|
||||||
|
//float
|
||||||
|
ULTweener* ULTweenManager::To(UObject* WorldContextObject, const FLTweenDoubleGetterFunction& getter, const FLTweenDoubleSetterFunction& setter, double endValue, float duration)
|
||||||
|
{
|
||||||
|
auto Instance = GetLTweenInstance(WorldContextObject);
|
||||||
|
if (!IsValid(Instance))return nullptr;
|
||||||
|
|
||||||
|
auto tweener = NewObject<ULTweenerDouble>(WorldContextObject);
|
||||||
|
tweener->SetInitialValue(getter, setter, endValue, duration);
|
||||||
|
Instance->tweenerList.Add(tweener);
|
||||||
|
return tweener;
|
||||||
|
}
|
||||||
|
//interger
|
||||||
|
ULTweener* ULTweenManager::To(UObject* WorldContextObject, const FLTweenIntGetterFunction& getter, const FLTweenIntSetterFunction& setter, int endValue, float duration)
|
||||||
|
{
|
||||||
|
auto Instance = GetLTweenInstance(WorldContextObject);
|
||||||
|
if (!IsValid(Instance))return nullptr;
|
||||||
|
|
||||||
|
auto tweener = NewObject<ULTweenerInteger>(WorldContextObject);
|
||||||
|
tweener->SetInitialValue(getter, setter, endValue, duration);
|
||||||
|
Instance->tweenerList.Add(tweener);
|
||||||
|
return tweener;
|
||||||
|
}
|
||||||
|
//position
|
||||||
|
ULTweener* ULTweenManager::To(UObject* WorldContextObject, const FLTweenPositionGetterFunction& getter, const FLTweenPositionSetterFunction& setter, const FVector& endValue, float duration, bool sweep, FHitResult* sweepHitResult, ETeleportType teleportType)
|
||||||
|
{
|
||||||
|
auto Instance = GetLTweenInstance(WorldContextObject);
|
||||||
|
if (!IsValid(Instance))return nullptr;
|
||||||
|
|
||||||
|
auto tweener = NewObject<ULTweenerPosition>(WorldContextObject);
|
||||||
|
tweener->SetInitialValue(getter, setter, endValue, duration, sweep, sweepHitResult, teleportType);
|
||||||
|
Instance->tweenerList.Add(tweener);
|
||||||
|
return tweener;
|
||||||
|
}
|
||||||
|
//vector
|
||||||
|
ULTweener* ULTweenManager::To(UObject* WorldContextObject, const FLTweenVectorGetterFunction& getter, const FLTweenVectorSetterFunction& setter, const FVector& endValue, float duration)
|
||||||
|
{
|
||||||
|
auto Instance = GetLTweenInstance(WorldContextObject);
|
||||||
|
if (!IsValid(Instance))return nullptr;
|
||||||
|
|
||||||
|
auto tweener = NewObject<ULTweenerVector>(WorldContextObject);
|
||||||
|
tweener->SetInitialValue(getter, setter, endValue, duration);
|
||||||
|
Instance->tweenerList.Add(tweener);
|
||||||
|
return tweener;
|
||||||
|
}
|
||||||
|
//color
|
||||||
|
ULTweener* ULTweenManager::To(UObject* WorldContextObject, const FLTweenColorGetterFunction& getter, const FLTweenColorSetterFunction& setter, const FColor& endValue, float duration)
|
||||||
|
{
|
||||||
|
auto Instance = GetLTweenInstance(WorldContextObject);
|
||||||
|
if (!IsValid(Instance))return nullptr;
|
||||||
|
|
||||||
|
auto tweener = NewObject<ULTweenerColor>(WorldContextObject);
|
||||||
|
tweener->SetInitialValue(getter, setter, endValue, duration);
|
||||||
|
Instance->tweenerList.Add(tweener);
|
||||||
|
return tweener;
|
||||||
|
}
|
||||||
|
//linearcolor
|
||||||
|
ULTweener* ULTweenManager::To(UObject* WorldContextObject, const FLTweenLinearColorGetterFunction& getter, const FLTweenLinearColorSetterFunction& setter, const FLinearColor& endValue, float duration)
|
||||||
|
{
|
||||||
|
auto Instance = GetLTweenInstance(WorldContextObject);
|
||||||
|
if (!IsValid(Instance))return nullptr;
|
||||||
|
|
||||||
|
auto tweener = NewObject<ULTweenerLinearColor>(WorldContextObject);
|
||||||
|
tweener->SetInitialValue(getter, setter, endValue, duration);
|
||||||
|
Instance->tweenerList.Add(tweener);
|
||||||
|
return tweener;
|
||||||
|
}
|
||||||
|
//vector2d
|
||||||
|
ULTweener* ULTweenManager::To(UObject* WorldContextObject, const FLTweenVector2DGetterFunction& getter, const FLTweenVector2DSetterFunction& setter, const FVector2D& endValue, float duration)
|
||||||
|
{
|
||||||
|
auto Instance = GetLTweenInstance(WorldContextObject);
|
||||||
|
if (!IsValid(Instance))return nullptr;
|
||||||
|
|
||||||
|
auto tweener = NewObject<ULTweenerVector2D>(WorldContextObject);
|
||||||
|
tweener->SetInitialValue(getter, setter, endValue, duration);
|
||||||
|
Instance->tweenerList.Add(tweener);
|
||||||
|
return tweener;
|
||||||
|
}
|
||||||
|
//vector4
|
||||||
|
ULTweener* ULTweenManager::To(UObject* WorldContextObject, const FLTweenVector4GetterFunction& getter, const FLTweenVector4SetterFunction& setter, const FVector4& endValue, float duration)
|
||||||
|
{
|
||||||
|
auto Instance = GetLTweenInstance(WorldContextObject);
|
||||||
|
if (!IsValid(Instance))return nullptr;
|
||||||
|
|
||||||
|
auto tweener = NewObject<ULTweenerVector4>(WorldContextObject);
|
||||||
|
tweener->SetInitialValue(getter, setter, endValue, duration);
|
||||||
|
Instance->tweenerList.Add(tweener);
|
||||||
|
return tweener;
|
||||||
|
}
|
||||||
|
//quaternion
|
||||||
|
ULTweener* ULTweenManager::To(UObject* WorldContextObject, const FLTweenQuaternionGetterFunction& getter, const FLTweenQuaternionSetterFunction& setter, const FQuat& endValue, float duration)
|
||||||
|
{
|
||||||
|
auto Instance = GetLTweenInstance(WorldContextObject);
|
||||||
|
if (!IsValid(Instance))return nullptr;
|
||||||
|
|
||||||
|
auto tweener = NewObject<ULTweenerQuaternion>(WorldContextObject);
|
||||||
|
tweener->SetInitialValue(getter, setter, endValue, duration);
|
||||||
|
Instance->tweenerList.Add(tweener);
|
||||||
|
return tweener;
|
||||||
|
}
|
||||||
|
//rotator
|
||||||
|
ULTweener* ULTweenManager::To(UObject* WorldContextObject, const FLTweenRotatorGetterFunction& getter, const FLTweenRotatorSetterFunction& setter, const FRotator& endValue, float duration)
|
||||||
|
{
|
||||||
|
auto Instance = GetLTweenInstance(WorldContextObject);
|
||||||
|
if (!IsValid(Instance))return nullptr;
|
||||||
|
|
||||||
|
auto tweener = NewObject<ULTweenerRotator>(WorldContextObject);
|
||||||
|
tweener->SetInitialValue(getter, setter, endValue, duration);
|
||||||
|
Instance->tweenerList.Add(tweener);
|
||||||
|
return tweener;
|
||||||
|
}
|
||||||
|
//rotation euler
|
||||||
|
ULTweener* ULTweenManager::To(UObject* WorldContextObject, const FLTweenRotationQuatGetterFunction& getter, const FLTweenRotationQuatSetterFunction& setter, const FVector& eulerAngle, float duration, bool sweep, FHitResult* sweepHitResult, ETeleportType teleportType)
|
||||||
|
{
|
||||||
|
auto Instance = GetLTweenInstance(WorldContextObject);
|
||||||
|
if (!IsValid(Instance))return nullptr;
|
||||||
|
|
||||||
|
auto tweener = NewObject<ULTweenerRotationEuler>(WorldContextObject);
|
||||||
|
tweener->SetInitialValue(getter, setter, eulerAngle, duration, sweep, sweepHitResult, teleportType);
|
||||||
|
Instance->tweenerList.Add(tweener);
|
||||||
|
return tweener;
|
||||||
|
}
|
||||||
|
//rotation quat
|
||||||
|
ULTweener* ULTweenManager::To(UObject* WorldContextObject, const FLTweenRotationQuatGetterFunction& getter, const FLTweenRotationQuatSetterFunction& setter, const FQuat& endValue, float duration, bool sweep, FHitResult* sweepHitResult, ETeleportType teleportType)
|
||||||
|
{
|
||||||
|
auto Instance = GetLTweenInstance(WorldContextObject);
|
||||||
|
if (!IsValid(Instance))return nullptr;
|
||||||
|
|
||||||
|
auto tweener = NewObject<ULTweenerRotationQuat>(WorldContextObject);
|
||||||
|
tweener->SetInitialValue(getter, setter, endValue, duration, sweep, sweepHitResult, teleportType);
|
||||||
|
Instance->tweenerList.Add(tweener);
|
||||||
|
return tweener;
|
||||||
|
}
|
||||||
|
//material scalar
|
||||||
|
ULTweener* ULTweenManager::To(UObject* WorldContextObject, const FLTweenMaterialScalarGetterFunction& getter, const FLTweenMaterialScalarSetterFunction& setter, float endValue, float duration, int32 parameterIndex)
|
||||||
|
{
|
||||||
|
auto Instance = GetLTweenInstance(WorldContextObject);
|
||||||
|
if (!IsValid(Instance))return nullptr;
|
||||||
|
|
||||||
|
auto tweener = NewObject<ULTweenerMaterialScalar>(WorldContextObject);
|
||||||
|
tweener->SetInitialValue(getter, setter, endValue, duration, parameterIndex);
|
||||||
|
Instance->tweenerList.Add(tweener);
|
||||||
|
return tweener;
|
||||||
|
}
|
||||||
|
//material vector
|
||||||
|
ULTweener* ULTweenManager::To(UObject* WorldContextObject, const FLTweenMaterialVectorGetterFunction& getter, const FLTweenMaterialVectorSetterFunction& setter, const FLinearColor& endValue, float duration, int32 parameterIndex)
|
||||||
|
{
|
||||||
|
auto Instance = GetLTweenInstance(WorldContextObject);
|
||||||
|
if (!IsValid(Instance))return nullptr;
|
||||||
|
|
||||||
|
auto tweener = NewObject<ULTweenerMaterialVector>(WorldContextObject);
|
||||||
|
tweener->SetInitialValue(getter, setter, endValue, duration, parameterIndex);
|
||||||
|
Instance->tweenerList.Add(tweener);
|
||||||
|
return tweener;
|
||||||
|
}
|
||||||
|
|
||||||
|
ULTweener* ULTweenManager::VirtualTo(UObject* WorldContextObject, float duration)
|
||||||
|
{
|
||||||
|
auto Instance = GetLTweenInstance(WorldContextObject);
|
||||||
|
if (!IsValid(Instance))return nullptr;
|
||||||
|
|
||||||
|
auto tweener = NewObject<ULTweenerVirtual>(WorldContextObject);
|
||||||
|
tweener->SetInitialValue(duration);
|
||||||
|
Instance->tweenerList.Add(tweener);
|
||||||
|
return tweener;
|
||||||
|
}
|
||||||
|
|
||||||
|
ULTweener* ULTweenManager::DelayFrameCall(UObject* WorldContextObject, int delayFrame)
|
||||||
|
{
|
||||||
|
auto Instance = GetLTweenInstance(WorldContextObject);
|
||||||
|
if (!IsValid(Instance))return nullptr;
|
||||||
|
|
||||||
|
auto tweener = NewObject<ULTweenerFrame>(WorldContextObject);
|
||||||
|
tweener->SetInitialValue(delayFrame);
|
||||||
|
Instance->tweenerList.Add(tweener);
|
||||||
|
return tweener;
|
||||||
|
}
|
||||||
|
|
||||||
|
ULTweener* ULTweenManager::UpdateCall(UObject* WorldContextObject)
|
||||||
|
{
|
||||||
|
auto Instance = GetLTweenInstance(WorldContextObject);
|
||||||
|
if (!IsValid(Instance))return nullptr;
|
||||||
|
|
||||||
|
auto tweener = NewObject<ULTweenerUpdate>(WorldContextObject);
|
||||||
|
Instance->tweenerList.Add(tweener);
|
||||||
|
return tweener;
|
||||||
|
}
|
||||||
|
|
||||||
|
ULTweenerSequence* ULTweenManager::CreateSequence(UObject* WorldContextObject)
|
||||||
|
{
|
||||||
|
auto Instance = GetLTweenInstance(WorldContextObject);
|
||||||
|
if (!IsValid(Instance))return nullptr;
|
||||||
|
|
||||||
|
auto tweener = NewObject<ULTweenerSequence>(WorldContextObject);
|
||||||
|
Instance->tweenerList.Add(tweener);
|
||||||
|
return tweener;
|
||||||
|
}
|
||||||
|
|
||||||
|
FDelegateHandle ULTweenManager::RegisterUpdateEvent(UObject* WorldContextObject, const FLTweenUpdateDelegate& update)
|
||||||
|
{
|
||||||
|
auto Instance = GetLTweenInstance(WorldContextObject);
|
||||||
|
if (!IsValid(Instance))return FDelegateHandle();
|
||||||
|
|
||||||
|
return Instance->updateEvent.Add(update);
|
||||||
|
}
|
||||||
|
void ULTweenManager::UnregisterUpdateEvent(UObject* WorldContextObject, const FDelegateHandle& delegateHandle)
|
||||||
|
{
|
||||||
|
auto Instance = GetLTweenInstance(WorldContextObject);
|
||||||
|
if (!IsValid(Instance))return;
|
||||||
|
|
||||||
|
Instance->updateEvent.Remove(delegateHandle);
|
||||||
|
}
|
||||||
338
Plugins/LTween/Source/LTween/Private/LTweener.cpp
Normal file
338
Plugins/LTween/Source/LTween/Private/LTweener.cpp
Normal file
@@ -0,0 +1,338 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#include "LTweener.h"
|
||||||
|
#include "Curves/CurveFloat.h"
|
||||||
|
#include "LTween.h"
|
||||||
|
#include "Engine/World.h"
|
||||||
|
|
||||||
|
ULTweener::ULTweener()
|
||||||
|
{
|
||||||
|
tweenFunc.BindStatic(&ULTweener::OutCubic);//OutCubic default animation curve function
|
||||||
|
}
|
||||||
|
ULTweener* ULTweener::SetEase(ELTweenEase easetype)
|
||||||
|
{
|
||||||
|
if (elapseTime > 0 || startToTween)return this;
|
||||||
|
switch (easetype)
|
||||||
|
{
|
||||||
|
case ELTweenEase::Linear:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::Linear);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::InQuad:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::InQuad);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::OutQuad:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::OutQuad);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::InOutQuad:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::InOutQuad);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::InCubic:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::InCubic);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::OutCubic:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::OutCubic);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::InOutCubic:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::InOutCubic);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::InQuart:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::InQuart);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::OutQuart:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::OutQuart);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::InOutQuart:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::InOutQuart);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::InSine:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::InSine);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::OutSine:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::OutSine);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::InOutSine:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::InOutSine);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::InExpo:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::InExpo);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::OutExpo:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::OutExpo);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::InOutExpo:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::InOutExpo);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::InCirc:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::InCirc);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::OutCirc:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::OutCirc);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::InOutCirc:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::InOutCirc);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::InElastic:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::InElastic);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::OutElastic:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::OutElastic);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::InOutElastic:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::InOutElastic);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::InBack:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::InBack);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::OutBack:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::OutBack);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::InOutBack:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::InOutBack);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::InBounce:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::InBounce);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::OutBounce:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::OutBounce);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::InOutBounce:
|
||||||
|
tweenFunc.BindStatic(&ULTweener::InOutBounce);
|
||||||
|
break;
|
||||||
|
case ELTweenEase::CurveFloat:
|
||||||
|
tweenFunc.BindUObject(this, &ULTweener::CurveFloat);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
ULTweener* ULTweener::SetDelay(float newDelay)
|
||||||
|
{
|
||||||
|
if (elapseTime > 0 || startToTween)return this;
|
||||||
|
this->delay = newDelay;
|
||||||
|
if (this->delay < 0)
|
||||||
|
{
|
||||||
|
this->delay = 0;
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
ULTweener* ULTweener::SetLoop(ELTweenLoop newLoopType, int32 newLoopCount)
|
||||||
|
{
|
||||||
|
if (elapseTime > 0 || startToTween)return this;
|
||||||
|
this->loopType = newLoopType;
|
||||||
|
this->maxLoopCount = newLoopCount;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
ULTweener* ULTweener::SetEaseCurve(UCurveFloat* newCurve)
|
||||||
|
{
|
||||||
|
if (IsValid(newCurve))
|
||||||
|
{
|
||||||
|
SetEase(ELTweenEase::CurveFloat);
|
||||||
|
curveFloat = newCurve;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UE_LOG(LTween, Error, TEXT("[ULTweener::SetEaseCurve]newCurve is not valid!"));
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
ULTweener* ULTweener::SetCurveFloat(UCurveFloat* newCurveFloat)
|
||||||
|
{
|
||||||
|
if (elapseTime > 0 || startToTween)return this;
|
||||||
|
curveFloat = newCurveFloat;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
ULTweener* ULTweener::SetAffectByGamePause(bool value)
|
||||||
|
{
|
||||||
|
affectByGamePause = value;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
ULTweener* ULTweener::SetAffectByTimeDilation(bool value)
|
||||||
|
{
|
||||||
|
affectByTimeDilation = value;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ULTweener::ToNext(float deltaTime, float unscaledDeltaTime)
|
||||||
|
{
|
||||||
|
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
|
||||||
|
return this->ToNextWithElapsedTime(elapseTime + (affectByTimeDilation ? deltaTime : unscaledDeltaTime));
|
||||||
|
}
|
||||||
|
bool ULTweener::ToNextWithElapsedTime(float InElapseTime)
|
||||||
|
{
|
||||||
|
this->elapseTime = InElapseTime;
|
||||||
|
if (elapseTime > delay)//if elapseTime bigger than delay, do animation
|
||||||
|
{
|
||||||
|
if (!startToTween)
|
||||||
|
{
|
||||||
|
startToTween = true;
|
||||||
|
//set initialize value
|
||||||
|
OnStartGetValue();
|
||||||
|
//execute callback
|
||||||
|
onCycleStartCpp.ExecuteIfBound();
|
||||||
|
onStartCpp.ExecuteIfBound();
|
||||||
|
}
|
||||||
|
|
||||||
|
float elapseTimeWithoutDelay = elapseTime - delay;
|
||||||
|
float currentTime = elapseTimeWithoutDelay - duration * loopCycleCount;
|
||||||
|
if (currentTime >= duration)
|
||||||
|
{
|
||||||
|
bool returnValue = true;
|
||||||
|
loopCycleCount++;
|
||||||
|
|
||||||
|
TweenAndApplyValue(reverseTween ? 0 : duration);
|
||||||
|
onUpdateCpp.ExecuteIfBound(1.0f);
|
||||||
|
onCycleCompleteCpp.ExecuteIfBound();
|
||||||
|
if (loopType == ELTweenLoop::Once)
|
||||||
|
{
|
||||||
|
onCompleteCpp.ExecuteIfBound();
|
||||||
|
returnValue = false;
|
||||||
|
}
|
||||||
|
else if (maxLoopCount <= -1)//infinite loop
|
||||||
|
{
|
||||||
|
onCycleStartCpp.ExecuteIfBound();//start new cycle callback
|
||||||
|
returnValue = true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (loopCycleCount >= maxLoopCount)//reach end cycle
|
||||||
|
{
|
||||||
|
onCompleteCpp.ExecuteIfBound();
|
||||||
|
returnValue = false;
|
||||||
|
}
|
||||||
|
else//not reach end cycle
|
||||||
|
{
|
||||||
|
onCycleStartCpp.ExecuteIfBound();//start new cycle callback
|
||||||
|
returnValue = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
switch (loopType)
|
||||||
|
{
|
||||||
|
case ELTweenLoop::Restart:
|
||||||
|
{
|
||||||
|
SetValueForRestart();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ELTweenLoop::Yoyo:
|
||||||
|
{
|
||||||
|
reverseTween = !reverseTween;
|
||||||
|
SetValueForYoyo();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case ELTweenLoop::Incremental:
|
||||||
|
{
|
||||||
|
SetValueForIncremental();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return returnValue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (reverseTween)
|
||||||
|
{
|
||||||
|
currentTime = duration - currentTime;
|
||||||
|
}
|
||||||
|
TweenAndApplyValue(currentTime);
|
||||||
|
onUpdateCpp.ExecuteIfBound(currentTime / duration);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return true;//waiting delay
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ULTweener::Kill(bool callComplete)
|
||||||
|
{
|
||||||
|
if (callComplete)
|
||||||
|
{
|
||||||
|
onCompleteCpp.ExecuteIfBound();
|
||||||
|
}
|
||||||
|
isMarkedToKill = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ULTweener::ForceComplete()
|
||||||
|
{
|
||||||
|
isMarkedToKill = true;
|
||||||
|
elapseTime = delay + duration;
|
||||||
|
TweenAndApplyValue(duration);
|
||||||
|
onUpdateCpp.ExecuteIfBound(1.0f);
|
||||||
|
onCompleteCpp.ExecuteIfBound();
|
||||||
|
}
|
||||||
|
|
||||||
|
void ULTweener::Restart()
|
||||||
|
{
|
||||||
|
if (elapseTime == 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
isMarkedPause = false;//incase it is paused.
|
||||||
|
//reset parameter to initial
|
||||||
|
loopCycleCount = 0;
|
||||||
|
reverseTween = false;
|
||||||
|
SetOriginValueForRestart();
|
||||||
|
|
||||||
|
this->ToNextWithElapsedTime(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ULTweener::Goto(float timePoint)
|
||||||
|
{
|
||||||
|
timePoint = FMath::Clamp(timePoint, 0.0f, duration);
|
||||||
|
//reset parameter to initial
|
||||||
|
loopCycleCount = 0;
|
||||||
|
reverseTween = false;
|
||||||
|
|
||||||
|
this->ToNextWithElapsedTime(timePoint);
|
||||||
|
}
|
||||||
|
|
||||||
|
float ULTweener::GetProgress()const
|
||||||
|
{
|
||||||
|
if (elapseTime > delay)
|
||||||
|
{
|
||||||
|
float elapseTimeWithoutDelay = elapseTime - delay;
|
||||||
|
float currentTime = elapseTimeWithoutDelay - duration * loopCycleCount;
|
||||||
|
if (currentTime >= duration)
|
||||||
|
{
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (reverseTween)
|
||||||
|
{
|
||||||
|
currentTime = duration - currentTime;
|
||||||
|
}
|
||||||
|
return currentTime / duration;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ULTweener* ULTweener::SetTickType(ELTweenTickType value)
|
||||||
|
{
|
||||||
|
if (elapseTime > 0 || startToTween)return this;
|
||||||
|
this->tickType = value;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
float ULTweener::CurveFloat(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
if (curveFloat.IsValid())
|
||||||
|
{
|
||||||
|
return curveFloat->GetFloatValue(t / d) * c + b;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UE_LOG(LTween, Warning, TEXT("[ULTweener::CurveFloat]CurveFloat not valid! Fallback to linear. You should always call SetCurveFloat(and pass a valid curve) if set Easetype to CurveFloat."));
|
||||||
|
return Linear(c, b, t, d);
|
||||||
|
}
|
||||||
|
}
|
||||||
326
Plugins/LTween/Source/LTween/Private/LTweenerSequence.cpp
Normal file
326
Plugins/LTween/Source/LTween/Private/LTweenerSequence.cpp
Normal file
@@ -0,0 +1,326 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#include "LTweenerSequence.h"
|
||||||
|
#include "LTween.h"
|
||||||
|
#include "LTweenManager.h"
|
||||||
|
#include "Tweener/LTweenerFrame.h"
|
||||||
|
#include "Tweener/LTweenerVirtual.h"
|
||||||
|
|
||||||
|
ULTweenerSequence* ULTweenerSequence::Append(UObject* WorldContextObject, ULTweener* tweener)
|
||||||
|
{
|
||||||
|
return this->Insert(WorldContextObject, duration, tweener);
|
||||||
|
}
|
||||||
|
ULTweenerSequence* ULTweenerSequence::AppendInterval(UObject* WorldContextObject, float interval)
|
||||||
|
{
|
||||||
|
if (elapseTime > 0 || startToTween)
|
||||||
|
{
|
||||||
|
UE_LOG(LTween, Error, TEXT("[%s].%d can't do this because this tween already started"), ANSI_TO_TCHAR(__FUNCTION__), __LINE__);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
duration += interval;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
ULTweenerSequence* ULTweenerSequence::Insert(UObject* WorldContextObject, float timePosition, ULTweener* tweener)
|
||||||
|
{
|
||||||
|
if (!IsValid(tweener))
|
||||||
|
{
|
||||||
|
UE_LOG(LTween, Error, TEXT("[%s].%d tweener is null"), ANSI_TO_TCHAR(__FUNCTION__), __LINE__);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
if (tweener->IsA<ULTweenerFrame>() || tweener->IsA<ULTweenerVirtual>())
|
||||||
|
{
|
||||||
|
UE_LOG(LTween, Error, TEXT("[%s].%d sequence not support this tweener type: %s"), ANSI_TO_TCHAR(__FUNCTION__), __LINE__, *(tweener->GetClass()->GetName()));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
if (elapseTime > 0 || startToTween)
|
||||||
|
{
|
||||||
|
UE_LOG(LTween, Error, TEXT("[%s].%d can't do this because this tween already started"), ANSI_TO_TCHAR(__FUNCTION__), __LINE__);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
if (tweenerList.Contains(tweener))
|
||||||
|
{
|
||||||
|
UE_LOG(LTween, Error, TEXT("[%s].%d tweener already contains in the list"), ANSI_TO_TCHAR(__FUNCTION__), __LINE__);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
if (tweener->loopType != ELTweenLoop::Once && tweener->maxLoopCount == -1)
|
||||||
|
{
|
||||||
|
UE_LOG(LTween, Error, TEXT("[%s].%d infinite tweener is not supported in sequence, will convert to 1"), ANSI_TO_TCHAR(__FUNCTION__), __LINE__);
|
||||||
|
tweener->maxLoopCount = 1;
|
||||||
|
}
|
||||||
|
ULTweenManager::RemoveTweener(WorldContextObject, tweener);
|
||||||
|
int loopCount = tweener->loopType == ELTweenLoop::Once ? 1 : tweener->maxLoopCount;
|
||||||
|
float tweenerTime = tweener->delay + tweener->duration * loopCount;
|
||||||
|
tweener->SetDelay(tweener->delay + timePosition);
|
||||||
|
tweenerList.Add(tweener);
|
||||||
|
lastTweenStartTime = timePosition;
|
||||||
|
float inputDuration = tweenerTime + timePosition;
|
||||||
|
if (duration < inputDuration)
|
||||||
|
{
|
||||||
|
duration = inputDuration;
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
ULTweenerSequence* ULTweenerSequence::Prepend(UObject* WorldContextObject, ULTweener* tweener)
|
||||||
|
{
|
||||||
|
if (!IsValid(tweener))
|
||||||
|
{
|
||||||
|
UE_LOG(LTween, Error, TEXT("[%s].%d tweener is null"), ANSI_TO_TCHAR(__FUNCTION__), __LINE__);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
if (tweener->IsA<ULTweenerFrame>() || tweener->IsA<ULTweenerVirtual>())
|
||||||
|
{
|
||||||
|
UE_LOG(LTween, Error, TEXT("[%s].%d sequence not support this tweener type: %s"), ANSI_TO_TCHAR(__FUNCTION__), __LINE__, *(tweener->GetClass()->GetName()));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
if (elapseTime > 0 || startToTween)
|
||||||
|
{
|
||||||
|
UE_LOG(LTween, Error, TEXT("[%s].%d can't do this because this tween already started"), ANSI_TO_TCHAR(__FUNCTION__), __LINE__);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
if (tweenerList.Contains(tweener))
|
||||||
|
{
|
||||||
|
UE_LOG(LTween, Error, TEXT("[%s].%d tweener already contains in the list"), ANSI_TO_TCHAR(__FUNCTION__), __LINE__);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
if (tweener->loopType != ELTweenLoop::Once && tweener->maxLoopCount == -1)
|
||||||
|
{
|
||||||
|
UE_LOG(LTween, Error, TEXT("[%s].%d infinite tweener is not supported in sequence, will convert to 1"), ANSI_TO_TCHAR(__FUNCTION__), __LINE__);
|
||||||
|
tweener->maxLoopCount = 1;
|
||||||
|
}
|
||||||
|
ULTweenManager::RemoveTweener(WorldContextObject, tweener);
|
||||||
|
int loopCount = tweener->loopType == ELTweenLoop::Once ? 1 : tweener->maxLoopCount;
|
||||||
|
float inputDuration = tweener->delay + tweener->duration * loopCount;
|
||||||
|
//offset others
|
||||||
|
for (auto& item : tweenerList)
|
||||||
|
{
|
||||||
|
item->SetDelay(item->delay + inputDuration);
|
||||||
|
}
|
||||||
|
tweenerList.Insert(tweener, 0);
|
||||||
|
duration += inputDuration;
|
||||||
|
lastTweenStartTime = 0;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
ULTweenerSequence* ULTweenerSequence::PrependInterval(UObject* WorldContextObject, float interval)
|
||||||
|
{
|
||||||
|
if (elapseTime > 0 || startToTween)
|
||||||
|
{
|
||||||
|
UE_LOG(LTween, Error, TEXT("[%s].%d can't do this because this tween already started"), ANSI_TO_TCHAR(__FUNCTION__), __LINE__);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
//offset others
|
||||||
|
for (auto& item : tweenerList)
|
||||||
|
{
|
||||||
|
item->SetDelay(item->delay + interval);
|
||||||
|
}
|
||||||
|
duration += interval;
|
||||||
|
lastTweenStartTime += interval;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
ULTweenerSequence* ULTweenerSequence::Join(UObject* WorldContextObject, ULTweener* tweener)
|
||||||
|
{
|
||||||
|
if (!IsValid(tweener))
|
||||||
|
{
|
||||||
|
UE_LOG(LTween, Error, TEXT("[%s].%d tweener is null"), ANSI_TO_TCHAR(__FUNCTION__), __LINE__);
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
if (tweener->IsA<ULTweenerFrame>() || tweener->IsA<ULTweenerVirtual>())
|
||||||
|
{
|
||||||
|
UE_LOG(LTween, Error, TEXT("[%s].%d sequence not support this tweener type: %s"), ANSI_TO_TCHAR(__FUNCTION__), __LINE__, *(tweener->GetClass()->GetName()));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
if (tweenerList.Num() == 0)return this;
|
||||||
|
return this->Insert(WorldContextObject, lastTweenStartTime, tweener);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ULTweenerSequence::TweenAndApplyValue(float currentTime)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < tweenerList.Num(); i++)
|
||||||
|
{
|
||||||
|
auto& item = tweenerList[i];
|
||||||
|
if (!item->ToNextWithElapsedTime(currentTime))
|
||||||
|
{
|
||||||
|
finishedTweenerList.Add(item);
|
||||||
|
tweenerList.RemoveAt(i);
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ULTweenerSequence::SetOriginValueForRestart()
|
||||||
|
{
|
||||||
|
for (auto& item : finishedTweenerList)
|
||||||
|
{
|
||||||
|
//add tweener to tweenerList
|
||||||
|
tweenerList.Add(item);
|
||||||
|
}
|
||||||
|
finishedTweenerList.Reset();
|
||||||
|
|
||||||
|
for (auto& item : tweenerList)
|
||||||
|
{
|
||||||
|
if (item->elapseTime > 0 || item->startToTween)
|
||||||
|
{
|
||||||
|
item->SetOriginValueForRestart();//if tween already start, then we can call "SetOriginValueForRestart"
|
||||||
|
item->TweenAndApplyValue(0);
|
||||||
|
}
|
||||||
|
//set parameter to initial
|
||||||
|
item->elapseTime = 0;
|
||||||
|
item->loopCycleCount = 0;
|
||||||
|
item->reverseTween = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void ULTweenerSequence::SetValueForIncremental()
|
||||||
|
{
|
||||||
|
for (auto& item : finishedTweenerList)
|
||||||
|
{
|
||||||
|
item->SetValueForIncremental();
|
||||||
|
//set parameter to initial
|
||||||
|
item->elapseTime = 0;
|
||||||
|
item->loopCycleCount = 0;
|
||||||
|
item->reverseTween = false;
|
||||||
|
item->TweenAndApplyValue(0);
|
||||||
|
|
||||||
|
//add tweener to tweenerList
|
||||||
|
tweenerList.Add(item);
|
||||||
|
}
|
||||||
|
finishedTweenerList.Reset();
|
||||||
|
}
|
||||||
|
void ULTweenerSequence::SetValueForYoyo()
|
||||||
|
{
|
||||||
|
this->reverseTween = !this->reverseTween;//reverse it again, so it will keep value false, because we only need to reverse tweenerList
|
||||||
|
for (auto& item : finishedTweenerList)
|
||||||
|
{
|
||||||
|
if (item->loopType != ELTweenLoop::Yoyo)//if it is already yoyo, then we no need to change reverseTween for it
|
||||||
|
{
|
||||||
|
item->reverseTween = !item->reverseTween;
|
||||||
|
}
|
||||||
|
|
||||||
|
//set parameter to initial
|
||||||
|
item->elapseTime = 0;
|
||||||
|
item->loopCycleCount = 0;
|
||||||
|
//flip tweener
|
||||||
|
int loopCount = item->loopType == ELTweenLoop::Once ? 1 : item->maxLoopCount;
|
||||||
|
float tweenerDelay = duration - (item->delay + item->duration * loopCount);
|
||||||
|
item->delay = tweenerDelay;
|
||||||
|
|
||||||
|
//add tweener to tweenerList
|
||||||
|
tweenerList.Add(item);
|
||||||
|
}
|
||||||
|
finishedTweenerList.Reset();
|
||||||
|
}
|
||||||
|
void ULTweenerSequence::SetValueForRestart()
|
||||||
|
{
|
||||||
|
for (auto& item : finishedTweenerList)
|
||||||
|
{
|
||||||
|
//set parameter to initial
|
||||||
|
item->elapseTime = 0;
|
||||||
|
item->loopCycleCount = 0;
|
||||||
|
item->reverseTween = false;
|
||||||
|
item->TweenAndApplyValue(0);
|
||||||
|
|
||||||
|
//add tweener to tweenerList
|
||||||
|
tweenerList.Add(item);
|
||||||
|
}
|
||||||
|
finishedTweenerList.Reset();
|
||||||
|
}
|
||||||
|
void ULTweenerSequence::Restart()
|
||||||
|
{
|
||||||
|
if (elapseTime == 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this->isMarkedPause = false;//incase it is paused.
|
||||||
|
|
||||||
|
//reset parameter and value to start
|
||||||
|
{
|
||||||
|
//reset parameter to initial
|
||||||
|
if (this->loopType == ELTweenLoop::Yoyo)
|
||||||
|
{
|
||||||
|
if (loopCycleCount % 2 != 0)//this means current is yoyo back, then we should reverse it
|
||||||
|
{
|
||||||
|
this->reverseTween = true;
|
||||||
|
for (auto& item : tweenerList)
|
||||||
|
{
|
||||||
|
finishedTweenerList.Add(item);
|
||||||
|
}
|
||||||
|
tweenerList.Reset();
|
||||||
|
this->SetValueForYoyo();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (auto& item : finishedTweenerList)
|
||||||
|
{
|
||||||
|
tweenerList.Add(item);
|
||||||
|
}
|
||||||
|
finishedTweenerList.Reset();
|
||||||
|
this->loopCycleCount = 0;
|
||||||
|
|
||||||
|
//sort it, so later tweener can do "SetOriginValueForRestart" ealier, so ealier tweener will get correct start state
|
||||||
|
tweenerList.Sort([=](const ULTweener& A, const ULTweener& B) {
|
||||||
|
return A.delay > B.delay;
|
||||||
|
});
|
||||||
|
for (int i = 0; i < tweenerList.Num(); i++)
|
||||||
|
{
|
||||||
|
auto& item = tweenerList[i];
|
||||||
|
if (item->startToTween)
|
||||||
|
{
|
||||||
|
item->SetOriginValueForRestart();
|
||||||
|
item->TweenAndApplyValue(0);
|
||||||
|
}
|
||||||
|
//set parameter to initial
|
||||||
|
item->elapseTime = 0;
|
||||||
|
item->loopCycleCount = 0;
|
||||||
|
item->reverseTween = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this->ToNextWithElapsedTime(0);
|
||||||
|
}
|
||||||
|
void ULTweenerSequence::Goto(float timePoint)
|
||||||
|
{
|
||||||
|
timePoint = FMath::Clamp(timePoint, 0.0f, duration);
|
||||||
|
|
||||||
|
//reset parameter to start, then goto timepoint. these line should be same as lines in "Restart"
|
||||||
|
{
|
||||||
|
//reset parameter to initial
|
||||||
|
if (this->loopType == ELTweenLoop::Yoyo)
|
||||||
|
{
|
||||||
|
if (loopCycleCount % 2 != 0)//mean current is yoyo back, should reverse it
|
||||||
|
{
|
||||||
|
this->reverseTween = true;
|
||||||
|
for (auto& item : tweenerList)
|
||||||
|
{
|
||||||
|
finishedTweenerList.Add(item);
|
||||||
|
}
|
||||||
|
tweenerList.Reset();
|
||||||
|
this->SetValueForYoyo();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (auto& item : finishedTweenerList)
|
||||||
|
{
|
||||||
|
tweenerList.Add(item);
|
||||||
|
}
|
||||||
|
finishedTweenerList.Reset();
|
||||||
|
this->loopCycleCount = 0;
|
||||||
|
|
||||||
|
//sort it, so later tweener can do "SetOriginValueForRestart" ealier, so ealier tweener will get correct start state
|
||||||
|
tweenerList.Sort([=](const ULTweener& A, const ULTweener& B) {
|
||||||
|
return A.delay > B.delay;
|
||||||
|
});
|
||||||
|
for (int i = 0; i < tweenerList.Num(); i++)
|
||||||
|
{
|
||||||
|
auto& item = tweenerList[i];
|
||||||
|
if (item->startToTween)
|
||||||
|
{
|
||||||
|
item->SetOriginValueForRestart();
|
||||||
|
item->TweenAndApplyValue(0);
|
||||||
|
}
|
||||||
|
//set parameter to initial
|
||||||
|
item->elapseTime = 0;
|
||||||
|
item->loopCycleCount = 0;
|
||||||
|
item->reverseTween = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this->ToNextWithElapsedTime(timePoint);
|
||||||
|
}
|
||||||
|
|
||||||
66
Plugins/LTween/Source/LTween/Private/Tweener/LTweenerColor.h
Normal file
66
Plugins/LTween/Source/LTween/Private/Tweener/LTweenerColor.h
Normal file
@@ -0,0 +1,66 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "LTweener.h"
|
||||||
|
#include "LTweenerColor.generated.h"
|
||||||
|
|
||||||
|
UCLASS(NotBlueprintType)
|
||||||
|
class LTWEEN_API ULTweenerColor :public ULTweener
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
public:
|
||||||
|
float startFloat = 0.0f;//b
|
||||||
|
float changeFloat = 1.0f;//c
|
||||||
|
FColor startValue;
|
||||||
|
FColor endValue;
|
||||||
|
|
||||||
|
FLTweenColorGetterFunction getter;
|
||||||
|
FLTweenColorSetterFunction setter;
|
||||||
|
|
||||||
|
FColor originStartValue;
|
||||||
|
FColor originEndValue;
|
||||||
|
|
||||||
|
void SetInitialValue(const FLTweenColorGetterFunction& newGetter, const FLTweenColorSetterFunction& newSetter, const FColor& newEndValue, float newDuration)
|
||||||
|
{
|
||||||
|
this->duration = newDuration;
|
||||||
|
this->getter = newGetter;
|
||||||
|
this->setter = newSetter;
|
||||||
|
this->endValue = newEndValue;
|
||||||
|
|
||||||
|
this->startFloat = 0.0f;
|
||||||
|
this->changeFloat = 1.0f;
|
||||||
|
}
|
||||||
|
protected:
|
||||||
|
virtual void OnStartGetValue() override
|
||||||
|
{
|
||||||
|
if (getter.IsBound())
|
||||||
|
this->startValue = getter.Execute();
|
||||||
|
this->originStartValue = this->startValue;
|
||||||
|
this->originEndValue = this->endValue;
|
||||||
|
}
|
||||||
|
virtual void TweenAndApplyValue(float currentTime) override
|
||||||
|
{
|
||||||
|
float lerpValue = tweenFunc.Execute(changeFloat, startFloat, currentTime, duration);
|
||||||
|
FColor value;
|
||||||
|
value.R = FMath::Lerp(startValue.R, endValue.R, lerpValue);
|
||||||
|
value.G = FMath::Lerp(startValue.G, endValue.G, lerpValue);
|
||||||
|
value.B = FMath::Lerp(startValue.B, endValue.B, lerpValue);
|
||||||
|
value.A = FMath::Lerp(startValue.A, endValue.A, lerpValue);
|
||||||
|
setter.ExecuteIfBound(value);
|
||||||
|
}
|
||||||
|
virtual void SetValueForIncremental() override
|
||||||
|
{
|
||||||
|
FColor diffValue;
|
||||||
|
diffValue.R = endValue.R - startValue.R;
|
||||||
|
diffValue.G = endValue.G - startValue.G;
|
||||||
|
diffValue.B = endValue.B - startValue.B;
|
||||||
|
diffValue.A = endValue.A - startValue.A;
|
||||||
|
startValue = endValue;
|
||||||
|
endValue += diffValue;
|
||||||
|
}
|
||||||
|
virtual void SetOriginValueForRestart() override
|
||||||
|
{
|
||||||
|
startValue = originStartValue;
|
||||||
|
endValue = originEndValue;
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "LTweener.h"
|
||||||
|
#include "LTweenerDouble.generated.h"
|
||||||
|
|
||||||
|
UCLASS(NotBlueprintType)
|
||||||
|
class LTWEEN_API ULTweenerDouble:public ULTweener
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
public:
|
||||||
|
float startFloat = 0.0f;//b
|
||||||
|
float changeFloat = 1.0f;//c
|
||||||
|
double startValue;
|
||||||
|
double endValue;
|
||||||
|
|
||||||
|
FLTweenDoubleGetterFunction getter;
|
||||||
|
FLTweenDoubleSetterFunction setter;
|
||||||
|
|
||||||
|
double originStartValue;
|
||||||
|
|
||||||
|
void SetInitialValue(const FLTweenDoubleGetterFunction& newGetter, const FLTweenDoubleSetterFunction& newSetter, const double& newEndValue, float newDuration)
|
||||||
|
{
|
||||||
|
this->duration = newDuration;
|
||||||
|
this->getter = newGetter;
|
||||||
|
this->setter = newSetter;
|
||||||
|
this->endValue = newEndValue;
|
||||||
|
|
||||||
|
this->startFloat = 0.0f;
|
||||||
|
this->changeFloat = 1.0f;
|
||||||
|
}
|
||||||
|
protected:
|
||||||
|
virtual void OnStartGetValue() override
|
||||||
|
{
|
||||||
|
if (getter.IsBound())
|
||||||
|
this->startValue = getter.Execute();
|
||||||
|
this->originStartValue = this->startValue;
|
||||||
|
}
|
||||||
|
virtual void TweenAndApplyValue(float currentTime) override
|
||||||
|
{
|
||||||
|
float lerpValue = tweenFunc.Execute(changeFloat, startFloat, currentTime, duration);
|
||||||
|
auto value = FMath::Lerp(startValue, endValue, lerpValue);
|
||||||
|
setter.ExecuteIfBound(value);
|
||||||
|
}
|
||||||
|
virtual void SetValueForIncremental() override
|
||||||
|
{
|
||||||
|
auto diffValue = endValue - startValue;
|
||||||
|
startValue = endValue;
|
||||||
|
endValue += diffValue;
|
||||||
|
}
|
||||||
|
virtual void SetOriginValueForRestart() override
|
||||||
|
{
|
||||||
|
auto diffValue = endValue - startValue;
|
||||||
|
startValue = originStartValue;
|
||||||
|
endValue = originStartValue + diffValue;
|
||||||
|
}
|
||||||
|
};
|
||||||
51
Plugins/LTween/Source/LTween/Private/Tweener/LTweenerFloat.h
Normal file
51
Plugins/LTween/Source/LTween/Private/Tweener/LTweenerFloat.h
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "LTweener.h"
|
||||||
|
#include "LTweenerFloat.generated.h"
|
||||||
|
|
||||||
|
UCLASS(NotBlueprintType)
|
||||||
|
class LTWEEN_API ULTweenerFloat:public ULTweener
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
public:
|
||||||
|
float startValue = 0.0f;//b
|
||||||
|
float changeValue = 0.0f;//c
|
||||||
|
float endValue = 0.0f;
|
||||||
|
|
||||||
|
FLTweenFloatGetterFunction getter;
|
||||||
|
FLTweenFloatSetterFunction setter;
|
||||||
|
|
||||||
|
float originStartValue = 0.0f;
|
||||||
|
|
||||||
|
void SetInitialValue(const FLTweenFloatGetterFunction& newGetter, const FLTweenFloatSetterFunction& newSetter, float newEndValue, float newDuration)
|
||||||
|
{
|
||||||
|
this->duration = newDuration;
|
||||||
|
this->endValue = newEndValue;
|
||||||
|
this->getter = newGetter;
|
||||||
|
this->setter = newSetter;
|
||||||
|
}
|
||||||
|
protected:
|
||||||
|
virtual void OnStartGetValue() override
|
||||||
|
{
|
||||||
|
if (getter.IsBound())
|
||||||
|
this->startValue = getter.Execute();
|
||||||
|
this->originStartValue = this->startValue;
|
||||||
|
this->changeValue = endValue - startValue;
|
||||||
|
}
|
||||||
|
virtual void TweenAndApplyValue(float currentTime) override
|
||||||
|
{
|
||||||
|
auto value = tweenFunc.Execute(changeValue, startValue, currentTime, duration);
|
||||||
|
setter.ExecuteIfBound(value);
|
||||||
|
}
|
||||||
|
virtual void SetValueForIncremental() override
|
||||||
|
{
|
||||||
|
startValue = endValue;
|
||||||
|
endValue += changeValue;
|
||||||
|
}
|
||||||
|
virtual void SetOriginValueForRestart() override
|
||||||
|
{
|
||||||
|
startValue = originStartValue;
|
||||||
|
endValue = startValue + changeValue;
|
||||||
|
}
|
||||||
|
};
|
||||||
77
Plugins/LTween/Source/LTween/Private/Tweener/LTweenerFrame.h
Normal file
77
Plugins/LTween/Source/LTween/Private/Tweener/LTweenerFrame.h
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
// 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;
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "LTweener.h"
|
||||||
|
#include "LTweenerInteger.generated.h"
|
||||||
|
|
||||||
|
UCLASS(NotBlueprintType)
|
||||||
|
class LTWEEN_API ULTweenerInteger :public ULTweener
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
public:
|
||||||
|
float startFloat = 0.0f;//b
|
||||||
|
float changeFloat = 1.0f;//c
|
||||||
|
int startValue;
|
||||||
|
int endValue;
|
||||||
|
|
||||||
|
FLTweenIntGetterFunction getter;
|
||||||
|
FLTweenIntSetterFunction setter;
|
||||||
|
|
||||||
|
int originStartValue = 0;
|
||||||
|
|
||||||
|
void SetInitialValue(const FLTweenIntGetterFunction& newGetter, const FLTweenIntSetterFunction& newSetter, int newEndValue, float newDuration)
|
||||||
|
{
|
||||||
|
this->duration = newDuration;
|
||||||
|
this->getter = newGetter;
|
||||||
|
this->setter = newSetter;
|
||||||
|
this->endValue = newEndValue;
|
||||||
|
}
|
||||||
|
protected:
|
||||||
|
virtual void OnStartGetValue() override
|
||||||
|
{
|
||||||
|
if (getter.IsBound())
|
||||||
|
this->startValue = getter.Execute();
|
||||||
|
this->originStartValue = this->startValue;
|
||||||
|
}
|
||||||
|
virtual void TweenAndApplyValue(float currentTime) override
|
||||||
|
{
|
||||||
|
auto lerpValue = tweenFunc.Execute(changeFloat, startFloat, currentTime, duration);
|
||||||
|
setter.ExecuteIfBound(FMath::Lerp(startValue, endValue, lerpValue));
|
||||||
|
}
|
||||||
|
virtual void SetValueForIncremental() override
|
||||||
|
{
|
||||||
|
auto diffValue = endValue - startValue;
|
||||||
|
startValue = endValue;
|
||||||
|
endValue += diffValue;
|
||||||
|
}
|
||||||
|
virtual void SetOriginValueForRestart() override
|
||||||
|
{
|
||||||
|
auto diffValue = endValue - startValue;
|
||||||
|
startValue = GFrameNumber;
|
||||||
|
endValue = GFrameNumber + diffValue;
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "LTweener.h"
|
||||||
|
#include "LTweenerLinearColor.generated.h"
|
||||||
|
|
||||||
|
UCLASS(NotBlueprintType)
|
||||||
|
class LTWEEN_API ULTweenerLinearColor :public ULTweener
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
public:
|
||||||
|
float startFloat = 0.0f;//b
|
||||||
|
float changeFloat = 1.0f;//c
|
||||||
|
FLinearColor startValue;
|
||||||
|
FLinearColor endValue;
|
||||||
|
|
||||||
|
FLTweenLinearColorGetterFunction getter;
|
||||||
|
FLTweenLinearColorSetterFunction setter;
|
||||||
|
|
||||||
|
FLinearColor originStartValue;
|
||||||
|
|
||||||
|
void SetInitialValue(const FLTweenLinearColorGetterFunction& newGetter, const FLTweenLinearColorSetterFunction& newSetter, const FLinearColor& newEndValue, float newDuration)
|
||||||
|
{
|
||||||
|
this->duration = newDuration;
|
||||||
|
this->getter = newGetter;
|
||||||
|
this->setter = newSetter;
|
||||||
|
this->endValue = newEndValue;
|
||||||
|
|
||||||
|
this->startFloat = 0.0f;
|
||||||
|
this->changeFloat = 1.0f;
|
||||||
|
}
|
||||||
|
protected:
|
||||||
|
virtual void OnStartGetValue() override
|
||||||
|
{
|
||||||
|
if (getter.IsBound())
|
||||||
|
this->startValue = getter.Execute();
|
||||||
|
this->originStartValue = this->startValue;
|
||||||
|
}
|
||||||
|
virtual void TweenAndApplyValue(float currentTime) override
|
||||||
|
{
|
||||||
|
float lerpValue = tweenFunc.Execute(changeFloat, startFloat, currentTime, duration);
|
||||||
|
FLinearColor value;
|
||||||
|
value.R = FMath::Lerp(startValue.R, endValue.R, lerpValue);
|
||||||
|
value.G = FMath::Lerp(startValue.G, endValue.G, lerpValue);
|
||||||
|
value.B = FMath::Lerp(startValue.B, endValue.B, lerpValue);
|
||||||
|
value.A = FMath::Lerp(startValue.A, endValue.A, lerpValue);
|
||||||
|
setter.ExecuteIfBound(value);
|
||||||
|
}
|
||||||
|
virtual void SetValueForIncremental() override
|
||||||
|
{
|
||||||
|
auto diffValue = endValue - startValue;
|
||||||
|
startValue = endValue;
|
||||||
|
endValue += diffValue;
|
||||||
|
}
|
||||||
|
virtual void SetOriginValueForRestart() override
|
||||||
|
{
|
||||||
|
auto diffValue = endValue - startValue;
|
||||||
|
startValue = originStartValue;
|
||||||
|
endValue = originStartValue + diffValue;
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,64 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "LTweener.h"
|
||||||
|
#include "LTween.h"
|
||||||
|
#include "LTweenerMaterialScalar.generated.h"
|
||||||
|
|
||||||
|
UCLASS(NotBlueprintType)
|
||||||
|
class LTWEEN_API ULTweenerMaterialScalar:public ULTweener
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
public:
|
||||||
|
float startValue = 0.0f;//b
|
||||||
|
float changeValue = 0.0f;//c
|
||||||
|
int32 parameterIndex;
|
||||||
|
float endValue = 0.0f;
|
||||||
|
FLTweenMaterialScalarGetterFunction getter;
|
||||||
|
FLTweenMaterialScalarSetterFunction setter;
|
||||||
|
|
||||||
|
float originStartValue = 0.0f;
|
||||||
|
|
||||||
|
void SetInitialValue(const FLTweenMaterialScalarGetterFunction& newGetter, const FLTweenMaterialScalarSetterFunction& newSetter, float newEndValue, float newDuration, int32 newParameterIndex)
|
||||||
|
{
|
||||||
|
this->duration = newDuration;
|
||||||
|
this->getter = newGetter;
|
||||||
|
this->setter = newSetter;
|
||||||
|
this->endValue = newEndValue;
|
||||||
|
this->parameterIndex = newParameterIndex;
|
||||||
|
}
|
||||||
|
protected:
|
||||||
|
virtual void OnStartGetValue() override
|
||||||
|
{
|
||||||
|
if (getter.IsBound())
|
||||||
|
{
|
||||||
|
if (getter.Execute(startValue))
|
||||||
|
{
|
||||||
|
this->changeValue = endValue - startValue;
|
||||||
|
this->originStartValue = this->changeValue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UE_LOG(LTween, Error, TEXT("[ULTweenerMaterialScalar/OnStartGetValue]Get paramter value error!"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
virtual void TweenAndApplyValue(float currentTime) override
|
||||||
|
{
|
||||||
|
auto value = tweenFunc.Execute(changeValue, startValue, currentTime, duration);
|
||||||
|
if (setter.Execute(parameterIndex, value) == false)
|
||||||
|
{
|
||||||
|
UE_LOG(LTween, Warning, TEXT("[ULTweenerMaterialScalar/TweenAndApplyValue]Set paramter value error!"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
virtual void SetValueForIncremental() override
|
||||||
|
{
|
||||||
|
startValue = endValue;
|
||||||
|
endValue += changeValue;
|
||||||
|
}
|
||||||
|
virtual void SetOriginValueForRestart() override
|
||||||
|
{
|
||||||
|
startValue = originStartValue;
|
||||||
|
endValue = originStartValue + changeValue;
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,76 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "LTweener.h"
|
||||||
|
#include "LTween.h"
|
||||||
|
#include "LTweenerMaterialVector.generated.h"
|
||||||
|
|
||||||
|
UCLASS(NotBlueprintType)
|
||||||
|
class LTWEEN_API ULTweenerMaterialVector :public ULTweener
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
public:
|
||||||
|
float startFloat = 0.0f;//b
|
||||||
|
float changeFloat = 1.0f;//c
|
||||||
|
FLinearColor startValue;
|
||||||
|
FLinearColor endValue;
|
||||||
|
int32 parameterIndex;
|
||||||
|
|
||||||
|
FLTweenMaterialVectorGetterFunction getter;
|
||||||
|
FLTweenMaterialVectorSetterFunction setter;
|
||||||
|
|
||||||
|
FLinearColor originStartValue;
|
||||||
|
|
||||||
|
void SetInitialValue(const FLTweenMaterialVectorGetterFunction& newGetter, const FLTweenMaterialVectorSetterFunction& newSetter, const FLinearColor& newEndValue, float newDuration, int32 newParameterIndex)
|
||||||
|
{
|
||||||
|
this->duration = newDuration;
|
||||||
|
this->getter = newGetter;
|
||||||
|
this->setter = newSetter;
|
||||||
|
this->parameterIndex = newParameterIndex;
|
||||||
|
this->endValue = newEndValue;
|
||||||
|
|
||||||
|
this->startFloat = 0.0f;
|
||||||
|
this->changeFloat = 1.0f;
|
||||||
|
}
|
||||||
|
protected:
|
||||||
|
virtual void OnStartGetValue() override
|
||||||
|
{
|
||||||
|
if (getter.IsBound())
|
||||||
|
{
|
||||||
|
if (getter.Execute(startValue))
|
||||||
|
{
|
||||||
|
this->originStartValue = startValue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
UE_LOG(LTween, Error, TEXT("[ULTweenerMaterialVector/OnStartGetValue]Get paramter value error!"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
virtual void TweenAndApplyValue(float currentTime) override
|
||||||
|
{
|
||||||
|
float lerpValue = tweenFunc.Execute(changeFloat, startFloat, currentTime, duration);
|
||||||
|
FLinearColor value;
|
||||||
|
value.R = FMath::Lerp(startValue.R, endValue.R, lerpValue);
|
||||||
|
value.G = FMath::Lerp(startValue.G, endValue.G, lerpValue);
|
||||||
|
value.B = FMath::Lerp(startValue.B, endValue.B, lerpValue);
|
||||||
|
value.A = FMath::Lerp(startValue.A, endValue.A, lerpValue);
|
||||||
|
if (setter.IsBound())
|
||||||
|
if (setter.Execute(parameterIndex, value) == false)
|
||||||
|
{
|
||||||
|
UE_LOG(LTween, Warning, TEXT("[ULTweenerMaterialScalar/TweenAndApplyValue]Set paramter value error!"));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
virtual void SetValueForIncremental() override
|
||||||
|
{
|
||||||
|
auto diffValue = endValue - startValue;
|
||||||
|
startValue = endValue;
|
||||||
|
endValue += diffValue;
|
||||||
|
}
|
||||||
|
virtual void SetOriginValueForRestart() override
|
||||||
|
{
|
||||||
|
auto diffValue = endValue - startValue;
|
||||||
|
startValue = originStartValue;
|
||||||
|
endValue = originStartValue + diffValue;
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "LTweener.h"
|
||||||
|
#include "LTweenerPosition.generated.h"
|
||||||
|
|
||||||
|
UCLASS(NotBlueprintType)
|
||||||
|
class LTWEEN_API ULTweenerPosition :public ULTweener
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
public:
|
||||||
|
float startFloat = 0.0f;//b
|
||||||
|
float changeFloat = 1.0f;//c
|
||||||
|
FVector startValue;
|
||||||
|
FVector endValue;
|
||||||
|
|
||||||
|
bool sweep = false;
|
||||||
|
FHitResult* sweepHitResult = nullptr;
|
||||||
|
ETeleportType teleportType = ETeleportType::None;
|
||||||
|
|
||||||
|
FLTweenPositionGetterFunction getter;
|
||||||
|
FLTweenPositionSetterFunction setter;
|
||||||
|
|
||||||
|
FVector originStartValue;
|
||||||
|
|
||||||
|
void SetInitialValue(const FLTweenPositionGetterFunction& newGetter, const FLTweenPositionSetterFunction& newSetter, const FVector& newEndValue, float newDuration, bool newSweep = false, FHitResult* newSweepHitResult = nullptr, ETeleportType newTeleportType = ETeleportType::None)
|
||||||
|
{
|
||||||
|
this->duration = newDuration;
|
||||||
|
this->getter = newGetter;
|
||||||
|
this->setter = newSetter;
|
||||||
|
this->endValue = newEndValue;
|
||||||
|
|
||||||
|
this->startFloat = 0.0f;
|
||||||
|
this->changeFloat = 1.0f;
|
||||||
|
|
||||||
|
this->sweep = newSweep;
|
||||||
|
this->sweepHitResult = newSweepHitResult;
|
||||||
|
this->teleportType = newTeleportType;
|
||||||
|
}
|
||||||
|
protected:
|
||||||
|
virtual void OnStartGetValue() override
|
||||||
|
{
|
||||||
|
if (getter.IsBound())
|
||||||
|
this->startValue = getter.Execute();
|
||||||
|
this->originStartValue = this->startValue;
|
||||||
|
}
|
||||||
|
virtual void TweenAndApplyValue(float currentTime) override
|
||||||
|
{
|
||||||
|
float lerpValue = tweenFunc.Execute(changeFloat, startFloat, currentTime, duration);
|
||||||
|
FVector value = FMath::Lerp(startValue, endValue, lerpValue);
|
||||||
|
setter.ExecuteIfBound(value, sweep, sweepHitResult, teleportType);
|
||||||
|
}
|
||||||
|
virtual void SetValueForIncremental() override
|
||||||
|
{
|
||||||
|
auto diffValue = endValue - startValue;
|
||||||
|
startValue = endValue;
|
||||||
|
endValue += diffValue;
|
||||||
|
}
|
||||||
|
virtual void SetOriginValueForRestart() override
|
||||||
|
{
|
||||||
|
auto diffValue = endValue - startValue;
|
||||||
|
startValue = originStartValue;
|
||||||
|
endValue = originStartValue + diffValue;
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "LTweener.h"
|
||||||
|
#include "LTweenerQuaternion.generated.h"
|
||||||
|
|
||||||
|
UCLASS(NotBlueprintType)
|
||||||
|
class LTWEEN_API ULTweenerQuaternion :public ULTweener
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
public:
|
||||||
|
float startFloat = 0.0f;//b
|
||||||
|
float changeFloat = 1.0f;//c
|
||||||
|
FQuat startValue;
|
||||||
|
FQuat endValue;
|
||||||
|
|
||||||
|
FLTweenQuaternionGetterFunction getter;
|
||||||
|
FLTweenQuaternionSetterFunction setter;
|
||||||
|
|
||||||
|
FQuat originStartValue;
|
||||||
|
|
||||||
|
void SetInitialValue(const FLTweenQuaternionGetterFunction& newGetter, const FLTweenQuaternionSetterFunction& newSetter, const FQuat& newEndValue, float newDuration)
|
||||||
|
{
|
||||||
|
this->duration = newDuration;
|
||||||
|
this->getter = newGetter;
|
||||||
|
this->setter = newSetter;
|
||||||
|
this->endValue = newEndValue;
|
||||||
|
|
||||||
|
this->startFloat = 0.0f;
|
||||||
|
this->changeFloat = 1.0f;
|
||||||
|
}
|
||||||
|
protected:
|
||||||
|
virtual void OnStartGetValue() override
|
||||||
|
{
|
||||||
|
if (getter.IsBound())
|
||||||
|
this->startValue = getter.Execute();
|
||||||
|
this->originStartValue = this->startValue;
|
||||||
|
}
|
||||||
|
virtual void TweenAndApplyValue(float currentTime) override
|
||||||
|
{
|
||||||
|
float lerpValue = tweenFunc.Execute(changeFloat, startFloat, currentTime, duration);
|
||||||
|
FQuat value = FQuat::Slerp(startValue, endValue, lerpValue);
|
||||||
|
setter.ExecuteIfBound(value);
|
||||||
|
}
|
||||||
|
virtual void SetValueForIncremental() override
|
||||||
|
{
|
||||||
|
auto diffValue = endValue - startValue;
|
||||||
|
startValue = endValue;
|
||||||
|
endValue += diffValue;
|
||||||
|
}
|
||||||
|
virtual void SetOriginValueForRestart() override
|
||||||
|
{
|
||||||
|
auto diffValue = endValue - startValue;
|
||||||
|
startValue = originStartValue;
|
||||||
|
endValue = originStartValue + diffValue;
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "LTweener.h"
|
||||||
|
#include "LTweenerRotationEuler.generated.h"
|
||||||
|
|
||||||
|
UCLASS(NotBlueprintType)
|
||||||
|
class LTWEEN_API ULTweenerRotationEuler :public ULTweener
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
public:
|
||||||
|
float startFloat = 0.0f;//b
|
||||||
|
float changeFloat = 1.0f;//c
|
||||||
|
FQuat startValue;
|
||||||
|
FVector eulerAngle;
|
||||||
|
|
||||||
|
bool sweep = false;
|
||||||
|
FHitResult* sweepHitResult = nullptr;
|
||||||
|
ETeleportType teleportType = ETeleportType::None;
|
||||||
|
|
||||||
|
FLTweenRotationQuatGetterFunction getter;
|
||||||
|
FLTweenRotationQuatSetterFunction setter;
|
||||||
|
|
||||||
|
FQuat originStartValue;
|
||||||
|
|
||||||
|
void SetInitialValue(const FLTweenRotationQuatGetterFunction& newGetter, const FLTweenRotationQuatSetterFunction& newSetter, const FVector& newEulerAngle, float newDuration, bool newSweep = false, FHitResult* newSweepHitResult = nullptr, ETeleportType newTeleportType = ETeleportType::None)
|
||||||
|
{
|
||||||
|
this->duration = newDuration;
|
||||||
|
this->getter = newGetter;
|
||||||
|
this->setter = newSetter;
|
||||||
|
this->eulerAngle = newEulerAngle;
|
||||||
|
|
||||||
|
this->startFloat = 0.0f;
|
||||||
|
this->changeFloat = 1.0f;
|
||||||
|
|
||||||
|
this->sweep = newSweep;
|
||||||
|
this->sweepHitResult = newSweepHitResult;
|
||||||
|
this->teleportType = newTeleportType;
|
||||||
|
}
|
||||||
|
protected:
|
||||||
|
virtual void OnStartGetValue() override
|
||||||
|
{
|
||||||
|
if (getter.IsBound())
|
||||||
|
this->startValue = getter.Execute();
|
||||||
|
this->originStartValue = this->startValue;
|
||||||
|
}
|
||||||
|
virtual void TweenAndApplyValue(float currentTime) override
|
||||||
|
{
|
||||||
|
float lerpValue = tweenFunc.Execute(changeFloat, startFloat, currentTime, duration);
|
||||||
|
auto value = startValue * FQuat::MakeFromEuler(eulerAngle * lerpValue);
|
||||||
|
setter.ExecuteIfBound(value, sweep, sweepHitResult, teleportType);
|
||||||
|
}
|
||||||
|
virtual void SetValueForIncremental() override
|
||||||
|
{
|
||||||
|
startValue = startValue * FQuat::MakeFromEuler(eulerAngle);
|
||||||
|
}
|
||||||
|
virtual void SetOriginValueForRestart() override
|
||||||
|
{
|
||||||
|
startValue = originStartValue;
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,65 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "LTweener.h"
|
||||||
|
#include "LTweenerRotationQuat.generated.h"
|
||||||
|
|
||||||
|
UCLASS(NotBlueprintType)
|
||||||
|
class LTWEEN_API ULTweenerRotationQuat :public ULTweener
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
public:
|
||||||
|
float startFloat = 0.0f;//b
|
||||||
|
float changeFloat = 1.0f;//c
|
||||||
|
FQuat startValue;
|
||||||
|
FQuat endValue;
|
||||||
|
|
||||||
|
bool sweep = false;
|
||||||
|
FHitResult* sweepHitResult = nullptr;
|
||||||
|
ETeleportType teleportType = ETeleportType::None;
|
||||||
|
|
||||||
|
FLTweenRotationQuatGetterFunction getter;
|
||||||
|
FLTweenRotationQuatSetterFunction setter;
|
||||||
|
|
||||||
|
FQuat originStartValue;
|
||||||
|
|
||||||
|
void SetInitialValue(const FLTweenRotationQuatGetterFunction& newGetter, const FLTweenRotationQuatSetterFunction& newSetter, const FQuat& newEndValue, float newDuration, bool newSweep = false, FHitResult* newSweepHitResult = nullptr, ETeleportType newTeleportType = ETeleportType::None)
|
||||||
|
{
|
||||||
|
this->duration = newDuration;
|
||||||
|
this->getter = newGetter;
|
||||||
|
this->setter = newSetter;
|
||||||
|
this->endValue = newEndValue;
|
||||||
|
|
||||||
|
this->startFloat = 0.0f;
|
||||||
|
this->changeFloat = 1.0f;
|
||||||
|
|
||||||
|
this->sweep = newSweep;
|
||||||
|
this->sweepHitResult = newSweepHitResult;
|
||||||
|
this->teleportType = newTeleportType;
|
||||||
|
}
|
||||||
|
protected:
|
||||||
|
virtual void OnStartGetValue() override
|
||||||
|
{
|
||||||
|
if (getter.IsBound())
|
||||||
|
this->startValue = getter.Execute();
|
||||||
|
this->originStartValue = this->startValue;
|
||||||
|
}
|
||||||
|
virtual void TweenAndApplyValue(float currentTime) override
|
||||||
|
{
|
||||||
|
float lerpValue = tweenFunc.Execute(changeFloat, startFloat, currentTime, duration);
|
||||||
|
auto value = FQuat::Slerp(startValue, endValue, lerpValue);
|
||||||
|
setter.ExecuteIfBound(value, sweep, sweepHitResult, teleportType);
|
||||||
|
}
|
||||||
|
virtual void SetValueForIncremental() override
|
||||||
|
{
|
||||||
|
auto diffValue = endValue * startValue.Inverse();
|
||||||
|
startValue = endValue;
|
||||||
|
endValue = endValue * diffValue;
|
||||||
|
}
|
||||||
|
virtual void SetOriginValueForRestart() override
|
||||||
|
{
|
||||||
|
auto diffValue = endValue - startValue;
|
||||||
|
startValue = originStartValue;
|
||||||
|
endValue = originStartValue + diffValue;
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,58 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "LTweener.h"
|
||||||
|
#include "LTweenerRotator.generated.h"
|
||||||
|
|
||||||
|
UCLASS(NotBlueprintType)
|
||||||
|
class LTWEEN_API ULTweenerRotator :public ULTweener
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
public:
|
||||||
|
float startFloat = 0.0f;//b
|
||||||
|
float changeFloat = 1.0f;//c
|
||||||
|
FRotator startValue;
|
||||||
|
FRotator endValue;
|
||||||
|
|
||||||
|
FLTweenRotatorGetterFunction getter;
|
||||||
|
FLTweenRotatorSetterFunction setter;
|
||||||
|
|
||||||
|
FRotator originStartValue;
|
||||||
|
|
||||||
|
void SetInitialValue(const FLTweenRotatorGetterFunction& newGetter, const FLTweenRotatorSetterFunction& newSetter, const FRotator& newEndValue, float newDuration)
|
||||||
|
{
|
||||||
|
this->duration = newDuration;
|
||||||
|
this->getter = newGetter;
|
||||||
|
this->setter = newSetter;
|
||||||
|
this->endValue = newEndValue;
|
||||||
|
|
||||||
|
this->startFloat = 0.0f;
|
||||||
|
this->changeFloat = 1.0f;
|
||||||
|
}
|
||||||
|
protected:
|
||||||
|
virtual void OnStartGetValue() override
|
||||||
|
{
|
||||||
|
if (getter.IsBound())
|
||||||
|
this->startValue = getter.Execute();
|
||||||
|
this->originStartValue = this->startValue;
|
||||||
|
}
|
||||||
|
virtual void TweenAndApplyValue(float currentTime) override
|
||||||
|
{
|
||||||
|
float lerpValue = tweenFunc.Execute(changeFloat, startFloat, currentTime, duration);
|
||||||
|
FRotator value;
|
||||||
|
value = startValue + lerpValue * (endValue - startValue);
|
||||||
|
setter.ExecuteIfBound(value);
|
||||||
|
}
|
||||||
|
virtual void SetValueForIncremental() override
|
||||||
|
{
|
||||||
|
auto diffValue = endValue - startValue;
|
||||||
|
startValue = endValue;
|
||||||
|
endValue += diffValue;
|
||||||
|
}
|
||||||
|
virtual void SetOriginValueForRestart() override
|
||||||
|
{
|
||||||
|
auto diffValue = endValue - startValue;
|
||||||
|
startValue = originStartValue;
|
||||||
|
endValue = originStartValue + diffValue;
|
||||||
|
}
|
||||||
|
};
|
||||||
57
Plugins/LTween/Source/LTween/Private/Tweener/LTweenerScale.h
Normal file
57
Plugins/LTween/Source/LTween/Private/Tweener/LTweenerScale.h
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "LTweener.h"
|
||||||
|
#include "LTweenerScale.generated.h"
|
||||||
|
|
||||||
|
UCLASS(NotBlueprintType)
|
||||||
|
class LTWEEN_API ULTweenerScale :public ULTweener
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
public:
|
||||||
|
float startFloat = 0.0f;//b
|
||||||
|
float changeFloat = 1.0f;//c
|
||||||
|
FVector startValue;
|
||||||
|
FVector endValue;
|
||||||
|
|
||||||
|
FLTweenVectorGetterFunction getter;
|
||||||
|
FLTweenVectorSetterFunction setter;
|
||||||
|
|
||||||
|
FVector originStartValue;
|
||||||
|
|
||||||
|
void SetInitialValue(const FLTweenVectorGetterFunction& newGetter, const FLTweenVectorSetterFunction& newSetter, const FVector& newEndValue, float newDuration)
|
||||||
|
{
|
||||||
|
this->duration = newDuration;
|
||||||
|
this->getter = newGetter;
|
||||||
|
this->setter = newSetter;
|
||||||
|
this->endValue = newEndValue;
|
||||||
|
|
||||||
|
this->startFloat = 0.0f;
|
||||||
|
this->changeFloat = 1.0f;
|
||||||
|
}
|
||||||
|
protected:
|
||||||
|
virtual void OnStartGetValue() override
|
||||||
|
{
|
||||||
|
if (getter.IsBound())
|
||||||
|
this->startValue = getter.Execute();
|
||||||
|
this->originStartValue = this->startValue;
|
||||||
|
}
|
||||||
|
virtual void TweenAndApplyValue(float currentTime) override
|
||||||
|
{
|
||||||
|
float lerpValue = tweenFunc.Execute(changeFloat, startFloat, currentTime, duration);
|
||||||
|
auto value = FMath::Lerp(startValue, endValue, lerpValue);
|
||||||
|
setter.ExecuteIfBound(value);
|
||||||
|
}
|
||||||
|
virtual void SetValueForIncremental() override
|
||||||
|
{
|
||||||
|
auto diffValue = endValue - startValue;
|
||||||
|
startValue = endValue;
|
||||||
|
endValue += diffValue;
|
||||||
|
}
|
||||||
|
virtual void SetOriginValueForRestart() override
|
||||||
|
{
|
||||||
|
auto diffValue = endValue - startValue;
|
||||||
|
startValue = originStartValue;
|
||||||
|
endValue = originStartValue + diffValue;
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,56 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "LTweener.h"
|
||||||
|
#include "LTween.h"
|
||||||
|
#include "Engine/World.h"
|
||||||
|
#include "LTweenerUpdate.generated.h"
|
||||||
|
|
||||||
|
UCLASS(NotBlueprintType)
|
||||||
|
class LTWEEN_API ULTweenerUpdate :public ULTweener
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
public:
|
||||||
|
void SetInitialValue(int 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
|
||||||
|
onUpdateCpp.ExecuteIfBound(affectByTimeDilation ? deltaTime : unscaledDeltaTime);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
virtual void TweenAndApplyValue(float currentTime) override
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
virtual ULTweener* SetDelay(float newDelay)override
|
||||||
|
{
|
||||||
|
UE_LOG(LTween, Error, TEXT("[LTweenerFrame::SetDelay]LTweenerUpdate does not support delay!"));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
virtual ULTweener* SetLoop(ELTweenLoop newLoopType, int32 newLoopCount)override
|
||||||
|
{
|
||||||
|
UE_LOG(LTween, Error, TEXT("[LTweenerFrame::SetLoop]LTweenerUpdate does not support loop!"));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
virtual void SetValueForIncremental() override
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
virtual void SetOriginValueForRestart() override
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "LTweener.h"
|
||||||
|
#include "LTweenerVector.generated.h"
|
||||||
|
|
||||||
|
UCLASS(NotBlueprintType)
|
||||||
|
class LTWEEN_API ULTweenerVector :public ULTweener
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
public:
|
||||||
|
float startFloat = 0.0f;//b
|
||||||
|
float changeFloat = 1.0f;//c
|
||||||
|
FVector startValue;
|
||||||
|
FVector endValue;
|
||||||
|
|
||||||
|
FLTweenVectorGetterFunction getter;
|
||||||
|
FLTweenVectorSetterFunction setter;
|
||||||
|
|
||||||
|
FVector originStartValue;
|
||||||
|
|
||||||
|
void SetInitialValue(const FLTweenVectorGetterFunction& newGetter, const FLTweenVectorSetterFunction& newSetter, const FVector& newEndValue, float newDuration)
|
||||||
|
{
|
||||||
|
this->duration = newDuration;
|
||||||
|
this->getter = newGetter;
|
||||||
|
this->setter = newSetter;
|
||||||
|
this->endValue = newEndValue;
|
||||||
|
|
||||||
|
this->startFloat = 0.0f;
|
||||||
|
this->changeFloat = 1.0f;
|
||||||
|
}
|
||||||
|
protected:
|
||||||
|
virtual void OnStartGetValue() override
|
||||||
|
{
|
||||||
|
if (getter.IsBound())
|
||||||
|
this->startValue = getter.Execute();
|
||||||
|
this->originStartValue = this->startValue;
|
||||||
|
}
|
||||||
|
virtual void TweenAndApplyValue(float currentTime) override
|
||||||
|
{
|
||||||
|
float lerpValue = tweenFunc.Execute(changeFloat, startFloat, currentTime, duration);
|
||||||
|
auto value = FMath::Lerp(startValue, endValue, lerpValue);
|
||||||
|
setter.ExecuteIfBound(value);
|
||||||
|
}
|
||||||
|
virtual void SetValueForIncremental() override
|
||||||
|
{
|
||||||
|
auto diffValue = endValue - startValue;
|
||||||
|
startValue = endValue;
|
||||||
|
endValue += diffValue;
|
||||||
|
}
|
||||||
|
virtual void SetOriginValueForRestart() override
|
||||||
|
{
|
||||||
|
auto diffValue = endValue - startValue;
|
||||||
|
startValue = originStartValue;
|
||||||
|
endValue = originStartValue + diffValue;
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "LTweener.h"
|
||||||
|
#include "LTweenerVector2D.generated.h"
|
||||||
|
|
||||||
|
UCLASS(NotBlueprintType)
|
||||||
|
class LTWEEN_API ULTweenerVector2D :public ULTweener
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
public:
|
||||||
|
float startFloat = 0.0f;//b
|
||||||
|
float changeFloat = 1.0f;//c
|
||||||
|
FVector2D startValue;
|
||||||
|
FVector2D endValue;
|
||||||
|
|
||||||
|
FLTweenVector2DGetterFunction getter;
|
||||||
|
FLTweenVector2DSetterFunction setter;
|
||||||
|
|
||||||
|
FVector2D originStartValue;
|
||||||
|
|
||||||
|
void SetInitialValue(const FLTweenVector2DGetterFunction& newGetter, const FLTweenVector2DSetterFunction& newSetter, const FVector2D& newEndValue, float newDuration)
|
||||||
|
{
|
||||||
|
this->duration = newDuration;
|
||||||
|
this->getter = newGetter;
|
||||||
|
this->setter = newSetter;
|
||||||
|
this->endValue = newEndValue;
|
||||||
|
|
||||||
|
this->startFloat = 0.0f;
|
||||||
|
this->changeFloat = 1.0f;
|
||||||
|
}
|
||||||
|
protected:
|
||||||
|
virtual void OnStartGetValue() override
|
||||||
|
{
|
||||||
|
if (getter.IsBound())
|
||||||
|
this->startValue = getter.Execute();
|
||||||
|
this->originStartValue = this->startValue;
|
||||||
|
}
|
||||||
|
virtual void TweenAndApplyValue(float currentTime) override
|
||||||
|
{
|
||||||
|
float lerpValue = tweenFunc.Execute(changeFloat, startFloat, currentTime, duration);
|
||||||
|
auto value = FMath::Lerp(startValue, endValue, lerpValue);
|
||||||
|
setter.ExecuteIfBound(value);
|
||||||
|
}
|
||||||
|
virtual void SetValueForIncremental() override
|
||||||
|
{
|
||||||
|
auto diffValue = endValue - startValue;
|
||||||
|
startValue = endValue;
|
||||||
|
endValue += diffValue;
|
||||||
|
}
|
||||||
|
virtual void SetOriginValueForRestart() override
|
||||||
|
{
|
||||||
|
auto diffValue = endValue - startValue;
|
||||||
|
startValue = originStartValue;
|
||||||
|
endValue = originStartValue + diffValue;
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,57 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "LTweener.h"
|
||||||
|
#include "LTweenerVector4.generated.h"
|
||||||
|
|
||||||
|
UCLASS(NotBlueprintType)
|
||||||
|
class LTWEEN_API ULTweenerVector4 :public ULTweener
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
public:
|
||||||
|
float startFloat = 0.0f;//b
|
||||||
|
float changeFloat = 1.0f;//c
|
||||||
|
FVector4 startValue;
|
||||||
|
FVector4 endValue;
|
||||||
|
|
||||||
|
FLTweenVector4GetterFunction getter;
|
||||||
|
FLTweenVector4SetterFunction setter;
|
||||||
|
|
||||||
|
FVector4 originStartValue;
|
||||||
|
|
||||||
|
void SetInitialValue(const FLTweenVector4GetterFunction& newGetter, const FLTweenVector4SetterFunction& newSetter, const FVector4& newEndValue, float newDuration)
|
||||||
|
{
|
||||||
|
this->duration = newDuration;
|
||||||
|
this->getter = newGetter;
|
||||||
|
this->setter = newSetter;
|
||||||
|
this->endValue = newEndValue;
|
||||||
|
|
||||||
|
this->startFloat = 0.0f;
|
||||||
|
this->changeFloat = 1.0f;
|
||||||
|
}
|
||||||
|
protected:
|
||||||
|
virtual void OnStartGetValue() override
|
||||||
|
{
|
||||||
|
if (getter.IsBound())
|
||||||
|
this->startValue = getter.Execute();
|
||||||
|
this->originStartValue = this->startValue;
|
||||||
|
}
|
||||||
|
virtual void TweenAndApplyValue(float currentTime) override
|
||||||
|
{
|
||||||
|
float lerpValue = tweenFunc.Execute(changeFloat, startFloat, currentTime, duration);
|
||||||
|
auto value = FMath::Lerp(startValue, endValue, lerpValue);
|
||||||
|
setter.ExecuteIfBound(value);
|
||||||
|
}
|
||||||
|
virtual void SetValueForIncremental() override
|
||||||
|
{
|
||||||
|
auto diffValue = endValue - startValue;
|
||||||
|
startValue = endValue;
|
||||||
|
endValue += diffValue;
|
||||||
|
}
|
||||||
|
virtual void SetOriginValueForRestart() override
|
||||||
|
{
|
||||||
|
auto diffValue = endValue - startValue;
|
||||||
|
startValue = originStartValue;
|
||||||
|
endValue = originStartValue + diffValue;
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "LTweener.h"
|
||||||
|
#include "LTweenerVirtual.generated.h"
|
||||||
|
|
||||||
|
UCLASS(NotBlueprintType)
|
||||||
|
class LTWEEN_API ULTweenerVirtual:public ULTweener
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
public:
|
||||||
|
|
||||||
|
void SetInitialValue(float newDuration)
|
||||||
|
{
|
||||||
|
this->duration = newDuration;
|
||||||
|
}
|
||||||
|
protected:
|
||||||
|
virtual void OnStartGetValue() override
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
virtual void TweenAndApplyValue(float currentTime) override
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
virtual void SetValueForIncremental() override
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
virtual void SetOriginValueForRestart() override
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
};
|
||||||
15
Plugins/LTween/Source/LTween/Public/LTween.h
Normal file
15
Plugins/LTween/Source/LTween/Public/LTween.h
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "Stats/Stats.h"
|
||||||
|
#include "Modules/ModuleInterface.h"
|
||||||
|
DECLARE_LOG_CATEGORY_EXTERN(LTween, Log, All);
|
||||||
|
DECLARE_STATS_GROUP(TEXT("LTween"), STATGROUP_LTween, STATCAT_Advanced);
|
||||||
|
class FLTweenModule : public IModuleInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
/** IModuleInterface implementation */
|
||||||
|
virtual void StartupModule() override;
|
||||||
|
virtual void ShutdownModule() override;
|
||||||
|
};
|
||||||
428
Plugins/LTween/Source/LTween/Public/LTweenBPLibrary.h
Normal file
428
Plugins/LTween/Source/LTween/Public/LTweenBPLibrary.h
Normal file
@@ -0,0 +1,428 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "LTweenManager.h"
|
||||||
|
#include "Kismet/BlueprintFunctionLibrary.h"
|
||||||
|
#include "LTweenDelegateHandleWrapper.h"
|
||||||
|
#include "LTweenBPLibrary.generated.h"
|
||||||
|
|
||||||
|
DECLARE_DYNAMIC_DELEGATE_OneParam(FLTweenFloatSetterDynamic, float, value);
|
||||||
|
DECLARE_DYNAMIC_DELEGATE_OneParam(FLTweenDoubleSetterDynamic, double, value);
|
||||||
|
DECLARE_DYNAMIC_DELEGATE_OneParam(FLTweenIntSetterDynamic, int, value);
|
||||||
|
DECLARE_DYNAMIC_DELEGATE_OneParam(FLTweenVector2SetterDynamic, const FVector2D&, value);
|
||||||
|
DECLARE_DYNAMIC_DELEGATE_OneParam(FLTweenVector3SetterDynamic, const FVector&, value);
|
||||||
|
DECLARE_DYNAMIC_DELEGATE_OneParam(FLTweenVector4SetterDynamic, const FVector4&, value);
|
||||||
|
DECLARE_DYNAMIC_DELEGATE_OneParam(FLTweenColorSetterDynamic, const FColor&, value);
|
||||||
|
DECLARE_DYNAMIC_DELEGATE_OneParam(FLTweenLinearColorSetterDynamic, const FLinearColor&, value);
|
||||||
|
DECLARE_DYNAMIC_DELEGATE_OneParam(FLTweenQuaternionSetterDynamic, const FQuat&, value);
|
||||||
|
DECLARE_DYNAMIC_DELEGATE_OneParam(FLTweenRotatorSetterDynamic, const FRotator&, value);
|
||||||
|
|
||||||
|
UCLASS()
|
||||||
|
class LTWEEN_API ULTweenBPLibrary : public UBlueprintFunctionLibrary
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
UFUNCTION(BlueprintCallable, Category = LTween, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = "LTween")
|
||||||
|
static ULTweener* FloatTo(UObject* WorldContextObject, const FLTweenFloatSetterDynamic& setter, float startValue = 0.0f, float endValue = 1.0f, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, Category = LTween, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = "LTween")
|
||||||
|
static ULTweener* DoubleTo(UObject* WorldContextObject, const FLTweenDoubleSetterDynamic& setter, double startValue = 0.0f, double endValue = 1.0f, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, Category = LTween, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = "LTween")
|
||||||
|
static ULTweener* IntTo(UObject* WorldContextObject, const FLTweenIntSetterDynamic& setter, int startValue, int endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, Category = LTween, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = "LTween")
|
||||||
|
static ULTweener* Vector2To(UObject* WorldContextObject, const FLTweenVector2SetterDynamic& setter, FVector2D startValue, FVector2D endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, Category = LTween, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = "LTween")
|
||||||
|
static ULTweener* Vector3To(UObject* WorldContextObject, const FLTweenVector3SetterDynamic& setter, FVector startValue, FVector endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, Category = LTween, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = "LTween")
|
||||||
|
static ULTweener* Vector4To(UObject* WorldContextObject, const FLTweenVector4SetterDynamic& setter, FVector4 startValue, FVector4 endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, Category = LTween, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = "LTween")
|
||||||
|
static ULTweener* ColorTo(UObject* WorldContextObject, const FLTweenColorSetterDynamic& setter, FColor startValue, FColor endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, Category = LTween, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = "LTween")
|
||||||
|
static ULTweener* LinearColorTo(UObject* WorldContextObject, const FLTweenLinearColorSetterDynamic& setter, FLinearColor startValue, FLinearColor endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, Category = LTween, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = "LTween")
|
||||||
|
static ULTweener* QuaternionTo(UObject* WorldContextObject, const FLTweenQuaternionSetterDynamic& setter, FQuat startValue, FQuat endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, Category = LTween, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = "LTween")
|
||||||
|
static ULTweener* RotatorTo(UObject* WorldContextObject, const FLTweenRotatorSetterDynamic& setter, FRotator startValue, FRotator endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
#pragma region PositionXYZ
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", DisplayName = "Local Position X To"), Category = "LTween")
|
||||||
|
static ULTweener* LocalPositionXTo(USceneComponent* target, double endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", DisplayName = "Local Position Y To"), Category = "LTween")
|
||||||
|
static ULTweener* LocalPositionYTo(USceneComponent* target, double endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", DisplayName = "Local Position Z To"), Category = "LTween")
|
||||||
|
static ULTweener* LocalPositionZTo(USceneComponent* target, double endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", DisplayName = "Local Position X To (Sweep)"), Category = LTween)
|
||||||
|
static ULTweener* LocalPositionXTo_Sweep(USceneComponent* target, double endValue, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", DisplayName = "Local Position Y To (Sweep)"), Category = LTween)
|
||||||
|
static ULTweener* LocalPositionYTo_Sweep(USceneComponent* target, double endValue, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", DisplayName = "Local Position Z To (Sweep)"), Category = LTween)
|
||||||
|
static ULTweener* LocalPositionZTo_Sweep(USceneComponent* target, double endValue, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", DisplayName = "World Position X To"), Category = "LTween")
|
||||||
|
static ULTweener* WorldPositionXTo(USceneComponent* target, double endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", DisplayName = "World Position Y To"), Category = "LTween")
|
||||||
|
static ULTweener* WorldPositionYTo(USceneComponent* target, double endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", DisplayName = "World Position Z To"), Category = "LTween")
|
||||||
|
static ULTweener* WorldPositionZTo(USceneComponent* target, double endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", DisplayName = "World Position X To (Sweep)"), Category = LTween)
|
||||||
|
static ULTweener* WorldPositionXTo_Sweep(USceneComponent* target, double endValue, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", DisplayName = "World Position Y To (Sweep)"), Category = LTween)
|
||||||
|
static ULTweener* WorldPositionYTo_Sweep(USceneComponent* target, double endValue, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", DisplayName = "World Position Z To (Sweep)"), Category = LTween)
|
||||||
|
static ULTweener* WorldPositionZTo_Sweep(USceneComponent* target, double endValue, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
#pragma endregion
|
||||||
|
|
||||||
|
|
||||||
|
#pragma region Position
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease"), Category = "LTween")
|
||||||
|
static ULTweener* LocalPositionTo(USceneComponent* target, FVector endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", DisplayName = "Local Position To (Sweep)"), Category = LTween)
|
||||||
|
static ULTweener* LocalPositionTo_Sweep(USceneComponent* target, FVector endValue, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease"), Category = "LTween")
|
||||||
|
static ULTweener* WorldPositionTo(USceneComponent* target, FVector endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", DisplayName = "World Position To (Sweep)"), Category = LTween)
|
||||||
|
static ULTweener* WorldPositionTo_Sweep(USceneComponent* target, FVector endValue, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
#pragma endregion Position
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease"), Category = LTween)
|
||||||
|
static ULTweener* LocalScaleTo(USceneComponent* target, FVector endValue = FVector(1.0f, 1.0f, 1.0f), float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
|
||||||
|
#pragma region Rotation
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", ToolTip = "Rotate eulerAngle relative to current rotation value"), Category = "LTween")
|
||||||
|
static ULTweener* LocalRotateEulerAngleTo(USceneComponent* target, FVector eulerAngle, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", ToolTip = "Rotate absolute quaternion rotation value"), Category = "LTween")
|
||||||
|
static ULTweener* LocalRotationQuaternionTo(USceneComponent* target, const FQuat& endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", ToolTip = "Rotate absolute rotator value"), Category = "LTween")
|
||||||
|
static ULTweener* LocalRotatorTo(USceneComponent* target, FRotator endValue, bool shortestPath, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", DisplayName = "Local Rotate Euler Angle To (Sweep)", ToolTip = "Rotate eulerAngle relative to current rotation value"), Category = "LTween")
|
||||||
|
static ULTweener* LocalRotateEulerAngleTo_Sweep(USceneComponent* target, FVector eulerAngle, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", DisplayName = "Local Rotation Quaternion To (Sweep)", ToolTip = "Rotate absolute quaternion rotation value"), Category = "LTween")
|
||||||
|
static ULTweener* LocalRotationQuaternionTo_Sweep(USceneComponent* target, const FQuat& endValue, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", DisplayName = "Local Rotator To (Sweep)", ToolTip = "Rotate absolute rotator value"), Category = "LTween")
|
||||||
|
static ULTweener* LocalRotatorTo_Sweep(USceneComponent* target, FRotator endValue, bool shortestPath, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", ToolTip = "Rotate eulerAngle relative to current rotation value"), Category = "LTween")
|
||||||
|
static ULTweener* WorldRotateEulerAngleTo(USceneComponent* target, FVector eulerAngle, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", ToolTip = "Rotate absolute quaternion rotation value"), Category = "LTween")
|
||||||
|
static ULTweener* WorldRotationQuaternionTo(USceneComponent* target, const FQuat& endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", ToolTip = "Rotate absolute rotator value"), Category = "LTween")
|
||||||
|
static ULTweener* WorldRotatorTo(USceneComponent* target, FRotator endValue, bool shortestPath, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", DisplayName = "World Rotate Euler Angle To (Sweep)", ToolTip = "Rotate eulerAngle relative to current rotation value"), Category = "LTween")
|
||||||
|
static ULTweener* WorldRotateEulerAngleTo_Sweep(USceneComponent* target, FVector eulerAngle, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", DisplayName = "World Rotation Quaternion To (Sweep)", ToolTip = "Rotate absolute quaternion rotation value"), Category = "LTween")
|
||||||
|
static ULTweener* WorldRotationQuaternionTo_Sweep(USceneComponent* target, const FQuat& endValue, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", DisplayName = "World Rotator To (Sweep)", ToolTip = "Rotate absolute rotator value"), Category = "LTween")
|
||||||
|
static ULTweener* WorldRotatorTo_Sweep(USceneComponent* target, FRotator endValue, bool shortestPath, FHitResult& sweepHitResult, bool sweep, bool teleport, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
#pragma endregion Rotation
|
||||||
|
|
||||||
|
#pragma region Material
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
static ULTweener* MaterialScalarParameterTo(UObject* WorldContextObject, class UMaterialInstanceDynamic* target, FName parameterName, float endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
static ULTweener* MaterialVectorParameterTo(UObject* WorldContextObject, class UMaterialInstanceDynamic* target, FName parameterName, FLinearColor endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease"), Category = LTween)
|
||||||
|
static ULTweener* MeshMaterialScalarParameterTo(class UPrimitiveComponent* target, int materialIndex, FName parameterName, float endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease"), Category = LTween)
|
||||||
|
static ULTweener* MeshMaterialVectorParameterTo(class UPrimitiveComponent* target, int materialIndex, FName parameterName, FLinearColor endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
#pragma endregion
|
||||||
|
|
||||||
|
#pragma region UMG
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
static ULTweener* UMG_CanvasPanelSlot_PositionTo(UObject* WorldContextObject, class UCanvasPanelSlot* target, const FVector2D& endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
static ULTweener* UMG_CanvasPanelSlot_SizeTo(UObject* WorldContextObject, class UCanvasPanelSlot* target, const FVector2D& endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
static ULTweener* UMG_HorizontalBoxSlot_PaddingTo(UObject* WorldContextObject, class UHorizontalBoxSlot* target, const FMargin& endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
static ULTweener* UMG_VerticalBoxSlot_PaddingTo(UObject* WorldContextObject, class UVerticalBoxSlot* target, const FMargin& endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
static ULTweener* UMG_OverlaySlot_PaddingTo(UObject* WorldContextObject, class UOverlaySlot* target, const FMargin& endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
static ULTweener* UMG_ButtonSlot_PaddingTo(UObject* WorldContextObject, class UButtonSlot* target, const FMargin& endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
static ULTweener* UMG_BorderSlot_PaddingTo(UObject* WorldContextObject, class UBorderSlot* target, const FMargin& endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
static ULTweener* UMG_RenderTransform_TranslationTo(UObject* WorldContextObject, class UWidget* target, const FVector2D& endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
static ULTweener* UMG_RenderTransform_AngleTo(UObject* WorldContextObject, class UWidget* target, float endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
static ULTweener* UMG_RenderTransform_ScaleTo(UObject* WorldContextObject, class UWidget* target, const FVector2D& endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
static ULTweener* UMG_RenderTransform_ShearTo(UObject* WorldContextObject, class UWidget* target, const FVector2D& endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
static ULTweener* UMG_RenderOpacityTo(UObject* WorldContextObject, class UWidget* target, float endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
static ULTweener* UMG_UserWidget_ColorAndOpacityTo(UObject* WorldContextObject, class UUserWidget* target, const FLinearColor& endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
static ULTweener* UMG_Image_ColorAndOpacityTo(UObject* WorldContextObject, class UImage* target, const FLinearColor& endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
static ULTweener* UMG_Button_ColorAndOpacityTo(UObject* WorldContextObject, class UButton* target, const FLinearColor& endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "delay,ease", WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
static ULTweener* UMG_Border_ContentColorAndOpacityTo(UObject* WorldContextObject, class UBorder* target, const FLinearColor& endValue, float duration = 0.5f, float delay = 0.0f, ELTweenEase ease = ELTweenEase::OutCubic);
|
||||||
|
#pragma endregion
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (ToolTip = "Assign start or update or omplete functions", WorldContext = "WorldContextObject", AutoCreateRefTerm="start,update,complete"), Category = LTween)
|
||||||
|
static ULTweener* VirtualCall(UObject* WorldContextObject, float duration, float delay, const FLTweenerSimpleDynamicDelegate& start, const FLTweenerFloatDynamicDelegate& update, const FLTweenerSimpleDynamicDelegate& complete)
|
||||||
|
{
|
||||||
|
auto Tweener = ULTweenManager::VirtualTo(WorldContextObject, duration);
|
||||||
|
if (Tweener)
|
||||||
|
{
|
||||||
|
Tweener->SetDelay(delay)->OnStart(start)->OnUpdate(update)->OnComplete(complete);
|
||||||
|
}
|
||||||
|
return Tweener;
|
||||||
|
}
|
||||||
|
static ULTweener* VirtualCall(UObject* WorldContextObject, float duration, float delay, FSimpleDelegate start, FLTweenUpdateDelegate update, FSimpleDelegate complete)
|
||||||
|
{
|
||||||
|
auto Tweener = ULTweenManager::VirtualTo(WorldContextObject, duration);
|
||||||
|
if (Tweener)
|
||||||
|
{
|
||||||
|
Tweener->SetDelay(delay)->OnStart(start)->OnUpdate(update)->OnComplete(complete);
|
||||||
|
};
|
||||||
|
return Tweener;
|
||||||
|
}
|
||||||
|
static ULTweener* VirtualCall(UObject* WorldContextObject, float duration, float delay, const TFunction<void()>& start, const TFunction<void(float)>& update, const TFunction<void()>& complete)
|
||||||
|
{
|
||||||
|
auto Tweener = ULTweenManager::VirtualTo(WorldContextObject, duration);
|
||||||
|
if (Tweener)
|
||||||
|
{
|
||||||
|
Tweener->SetDelay(delay)->OnStart(start)->OnUpdate(update)->OnComplete(complete);
|
||||||
|
}
|
||||||
|
return Tweener;
|
||||||
|
}
|
||||||
|
static ULTweener* VirtualCall(UObject* WorldContextObject, float duration)
|
||||||
|
{
|
||||||
|
return ULTweenManager::VirtualTo(WorldContextObject, duration);
|
||||||
|
}
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (ToolTip = "MainThread delay call function, Assign delayComplete to call", WorldContext = "WorldContextObject", AdvancedDisplay="affectByGamePause,affectByTimeDilation"), Category = LTween)
|
||||||
|
static ULTweener* DelayCall(UObject* WorldContextObject, float delayTime, const FLTweenerSimpleDynamicDelegate& delayComplete, bool affectByGamePause = true, bool affectByTimeDilation = true)
|
||||||
|
{
|
||||||
|
auto Tweener = ULTweenManager::VirtualTo(WorldContextObject, delayTime);
|
||||||
|
if (Tweener)
|
||||||
|
{
|
||||||
|
Tweener->OnComplete(delayComplete)->SetAffectByGamePause(affectByGamePause)->SetAffectByTimeDilation(affectByTimeDilation);
|
||||||
|
}
|
||||||
|
return Tweener;
|
||||||
|
}
|
||||||
|
static ULTweener* DelayCall(UObject* WorldContextObject, float delayTime, FSimpleDelegate delayComplete, bool affectByGamePause = true, bool affectByTimeDilation = true)
|
||||||
|
{
|
||||||
|
auto Tweener = ULTweenManager::VirtualTo(WorldContextObject, delayTime);
|
||||||
|
if (Tweener)
|
||||||
|
{
|
||||||
|
Tweener->OnComplete(delayComplete)->SetAffectByGamePause(affectByGamePause)->SetAffectByTimeDilation(affectByTimeDilation);
|
||||||
|
}
|
||||||
|
return Tweener;
|
||||||
|
}
|
||||||
|
static ULTweener* DelayCall(UObject* WorldContextObject, float delayTime, const TFunction<void()>& delayComplete, bool affectByGamePause = true, bool affectByTimeDilation = true)
|
||||||
|
{
|
||||||
|
auto Tweener = ULTweenManager::VirtualTo(WorldContextObject, delayTime);
|
||||||
|
if (Tweener)
|
||||||
|
{
|
||||||
|
Tweener->OnComplete(delayComplete)->SetAffectByGamePause(affectByGamePause)->SetAffectByTimeDilation(affectByTimeDilation);
|
||||||
|
}
|
||||||
|
return Tweener;
|
||||||
|
}
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (ToolTip = "MainThread delay frame call function, Assign delayComplete to call", WorldContext = "WorldContextObject", AdvancedDisplay = "affectByGamePause"), Category = LTween)
|
||||||
|
static ULTweener* DelayFrameCall(UObject* WorldContextObject, int frameCount, const FLTweenerSimpleDynamicDelegate& delayComplete, bool affectByGamePause = true)
|
||||||
|
{
|
||||||
|
auto Tweener = ULTweenManager::DelayFrameCall(WorldContextObject, frameCount);
|
||||||
|
if (Tweener)
|
||||||
|
{
|
||||||
|
Tweener->OnComplete(delayComplete)->SetAffectByGamePause(affectByGamePause);
|
||||||
|
}
|
||||||
|
return Tweener;
|
||||||
|
}
|
||||||
|
static ULTweener* DelayFrameCall(UObject* WorldContextObject, int frameCount, FSimpleDelegate delayComplete, bool affectByGamePause = true)
|
||||||
|
{
|
||||||
|
auto Tweener = ULTweenManager::DelayFrameCall(WorldContextObject, frameCount);
|
||||||
|
if (Tweener)
|
||||||
|
{
|
||||||
|
Tweener->OnComplete(delayComplete)->SetAffectByGamePause(affectByGamePause);
|
||||||
|
}
|
||||||
|
return Tweener;
|
||||||
|
}
|
||||||
|
static ULTweener* DelayFrameCall(UObject* WorldContextObject, int frameCount, const TFunction<void()>& delayComplete, bool affectByGamePause = true)
|
||||||
|
{
|
||||||
|
auto Tweener = ULTweenManager::DelayFrameCall(WorldContextObject, frameCount);
|
||||||
|
if (Tweener)
|
||||||
|
{
|
||||||
|
Tweener->OnComplete(delayComplete)->SetAffectByGamePause(affectByGamePause);
|
||||||
|
}
|
||||||
|
return Tweener;
|
||||||
|
}
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (ToolTip = "Assign start or update or omplete functions", WorldContext = "WorldContextObject", AutoCreateRefTerm = "start,update,complete"), Category = LTween)
|
||||||
|
static ULTweener* UpdateCall(UObject* WorldContextObject, const FLTweenerFloatDynamicDelegate& update)
|
||||||
|
{
|
||||||
|
auto Tweener = ULTweenManager::UpdateCall(WorldContextObject);
|
||||||
|
if (Tweener)
|
||||||
|
{
|
||||||
|
Tweener->OnUpdate(update);
|
||||||
|
}
|
||||||
|
return Tweener;
|
||||||
|
}
|
||||||
|
static ULTweener* UpdateCall(UObject* WorldContextObject, FLTweenUpdateDelegate update)
|
||||||
|
{
|
||||||
|
auto Tweener = ULTweenManager::UpdateCall(WorldContextObject);
|
||||||
|
if (Tweener)
|
||||||
|
{
|
||||||
|
Tweener->OnUpdate(update);
|
||||||
|
};
|
||||||
|
return Tweener;
|
||||||
|
}
|
||||||
|
static ULTweener* UpdateCall(UObject* WorldContextObject, const TFunction<void(float)>& update)
|
||||||
|
{
|
||||||
|
auto Tweener = ULTweenManager::UpdateCall(WorldContextObject);
|
||||||
|
if (Tweener)
|
||||||
|
{
|
||||||
|
Tweener->OnUpdate(update);
|
||||||
|
}
|
||||||
|
return Tweener;
|
||||||
|
}
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintPure, Category = LTween, meta = (WorldContext = "WorldContextObject"))
|
||||||
|
static bool IsTweening(UObject* WorldContextObject, ULTweener* inTweener)
|
||||||
|
{
|
||||||
|
return ULTweenManager::IsTweening(WorldContextObject, inTweener);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Force stop this animation. if callComplete = true, OnComplete will call after stop.
|
||||||
|
* This method will check if the tweener is valid.
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (AdvancedDisplay = "callComplete", WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
static void KillIfIsTweening(UObject* WorldContextObject, ULTweener* inTweener, bool callComplete = false)
|
||||||
|
{
|
||||||
|
ULTweenManager::KillIfIsTweening(WorldContextObject, inTweener, callComplete);
|
||||||
|
}
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (DisplayName = "Kill If Is Tweening (Array)", AdvancedDisplay = "callComplete", WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
static void ArrayKillIfIsTweening(UObject* WorldContextObject, const TArray<ULTweener*>& inTweenerArray, bool callComplete = false)
|
||||||
|
{
|
||||||
|
auto Instance = ULTweenManager::GetLTweenInstance(WorldContextObject);
|
||||||
|
if (!IsValid(Instance))return;
|
||||||
|
|
||||||
|
for (auto tweener : inTweenerArray)
|
||||||
|
{
|
||||||
|
Instance->KillIfIsTweening(WorldContextObject, tweener, callComplete);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
UE_DEPRECATED(5.2, "Use UpdateCall instead.")
|
||||||
|
static FDelegateHandle RegisterUpdateEvent(UObject* WorldContextObject, const FLTweenUpdateDelegate& update)
|
||||||
|
{
|
||||||
|
// Disable deprecation warnings so we can call the deprecated function to support this function (which is also deprecated)
|
||||||
|
PRAGMA_DISABLE_DEPRECATION_WARNINGS
|
||||||
|
auto delegateHandle = ULTweenManager::RegisterUpdateEvent(WorldContextObject, update);
|
||||||
|
PRAGMA_ENABLE_DEPRECATION_WARNINGS
|
||||||
|
return delegateHandle;
|
||||||
|
}
|
||||||
|
UE_DEPRECATED(5.2, "Use UpdateCall instead.")
|
||||||
|
static FDelegateHandle RegisterUpdateEvent(UObject* WorldContextObject, const TFunction<void(float)>& update)
|
||||||
|
{
|
||||||
|
FLTweenUpdateDelegate updateDelegate = FLTweenUpdateDelegate::CreateLambda(update);
|
||||||
|
// Disable deprecation warnings so we can call the deprecated function to support this function (which is also deprecated)
|
||||||
|
PRAGMA_DISABLE_DEPRECATION_WARNINGS
|
||||||
|
ULTweenManager::RegisterUpdateEvent(WorldContextObject, updateDelegate);
|
||||||
|
PRAGMA_ENABLE_DEPRECATION_WARNINGS
|
||||||
|
return updateDelegate.GetHandle();
|
||||||
|
}
|
||||||
|
UE_DEPRECATED(5.2, "Use UpdateCall instead.")
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (ToolTip = "Registerred update function will be called every frame from mainthread.", WorldContext = "WorldContextObject", DeprecatedFunction, DeprecationMessage = "Use UpdateCall instead."), Category = LTween)
|
||||||
|
static FLTweenDelegateHandleWrapper RegisterUpdateEvent(UObject* WorldContextObject, const FLTweenerFloatDynamicDelegate& update)
|
||||||
|
{
|
||||||
|
FLTweenUpdateDelegate updateDelegate = FLTweenUpdateDelegate::CreateLambda([update](float deltaTime) {update.ExecuteIfBound(deltaTime); });
|
||||||
|
FLTweenDelegateHandleWrapper delegateHandle(updateDelegate.GetHandle());
|
||||||
|
// Disable deprecation warnings so we can call the deprecated function to support this function (which is also deprecated)
|
||||||
|
PRAGMA_DISABLE_DEPRECATION_WARNINGS
|
||||||
|
ULTweenManager::RegisterUpdateEvent(WorldContextObject, updateDelegate);
|
||||||
|
PRAGMA_ENABLE_DEPRECATION_WARNINGS
|
||||||
|
return delegateHandle;
|
||||||
|
}
|
||||||
|
UE_DEPRECATED(5.2, "Use UpdateCall instead of RegisterUpdateEvent, and KillIfIsTweening for returned tweener instead of this UnregisterUpdateEvent.")
|
||||||
|
static void UnregisterUpdateEvent(UObject* WorldContextObject, const FDelegateHandle& handle)
|
||||||
|
{
|
||||||
|
// Disable deprecation warnings so we can call the deprecated function to support this function (which is also deprecated)
|
||||||
|
PRAGMA_DISABLE_DEPRECATION_WARNINGS
|
||||||
|
ULTweenManager::UnregisterUpdateEvent(WorldContextObject, handle);
|
||||||
|
PRAGMA_ENABLE_DEPRECATION_WARNINGS
|
||||||
|
}
|
||||||
|
UE_DEPRECATED(5.2, "Use UpdateCall instead of RegisterUpdateEvent, and KillIfIsTweening for returned tweener instead of this UnregisterUpdateEvent.")
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (ToolTip = "Unregister the update function. \"delegateHandle\" is the return value when use RegisterUpdateEvent.", WorldContext = "WorldContextObject", DeprecatedFunction, DeprecationMessage = "Use UpdateCall instead of RegisterUpdateEvent, and KillIfIsTweening for returned tweener instead of this UnregisterUpdateEvent."), Category = LTween)
|
||||||
|
static void UnregisterUpdateEvent(UObject* WorldContextObject, const FLTweenDelegateHandleWrapper& delegateHandle)
|
||||||
|
{
|
||||||
|
// Disable deprecation warnings so we can call the deprecated function to support this function (which is also deprecated)
|
||||||
|
PRAGMA_DISABLE_DEPRECATION_WARNINGS
|
||||||
|
ULTweenManager::UnregisterUpdateEvent(WorldContextObject, delegateHandle.DelegateHandle);
|
||||||
|
PRAGMA_ENABLE_DEPRECATION_WARNINGS
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Repeatedly call function.
|
||||||
|
* @param delayTime delay time before the first call
|
||||||
|
* @param interval interval time between every call
|
||||||
|
* @param repeatCount repeat count, -1 means infinite
|
||||||
|
* @return tweener
|
||||||
|
*/
|
||||||
|
static ULTweener* RepeatCall(UObject* WorldContextObject, const TFunction<void()>& callFunction, float delayTime, float interval, int repeatCount = 1)
|
||||||
|
{
|
||||||
|
auto Tweener = ULTweenManager::VirtualTo(WorldContextObject, interval);
|
||||||
|
if (Tweener)
|
||||||
|
{
|
||||||
|
Tweener
|
||||||
|
->SetDelay(delayTime)
|
||||||
|
->SetLoop(repeatCount == 1 || repeatCount == 0 ? ELTweenLoop::Once : ELTweenLoop::Restart, repeatCount)
|
||||||
|
->OnCycleStart(callFunction)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
return Tweener;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Repeatedly call function.
|
||||||
|
* @param delayTime delay time before the first call
|
||||||
|
* @param interval interval time between every call
|
||||||
|
* @param repeatCount repeat count, -1 means infinite
|
||||||
|
* \return tweener
|
||||||
|
*/
|
||||||
|
static ULTweener* RepeatCall(UObject* WorldContextObject, const FSimpleDelegate& callFunction, float delayTime, float interval, int repeatCount = 1)
|
||||||
|
{
|
||||||
|
auto Tweener = ULTweenManager::VirtualTo(WorldContextObject, interval);
|
||||||
|
if (Tweener)
|
||||||
|
{
|
||||||
|
Tweener
|
||||||
|
->SetDelay(delayTime)
|
||||||
|
->SetLoop(repeatCount == 1 || repeatCount == 0 ? ELTweenLoop::Once : ELTweenLoop::Restart, repeatCount)
|
||||||
|
->OnCycleStart(callFunction)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
return Tweener;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Repeatedly call function.
|
||||||
|
* @param delayTime delay time before the first call
|
||||||
|
* @param interval interval time between every call
|
||||||
|
* @param repeatCount repeat count, -1 means infinite
|
||||||
|
* @return tweener
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
static ULTweener* RepeatCall(UObject* WorldContextObject, FLTweenerSimpleDynamicDelegate callFunction, float delayTime, float interval = 1.0f, int repeatCount = 1)
|
||||||
|
{
|
||||||
|
auto Tweener = ULTweenManager::VirtualTo(WorldContextObject, interval);
|
||||||
|
if (Tweener)
|
||||||
|
{
|
||||||
|
Tweener
|
||||||
|
->SetDelay(delayTime)
|
||||||
|
->SetLoop(repeatCount == 1 || repeatCount == 0 ? ELTweenLoop::Once : ELTweenLoop::Restart, repeatCount)
|
||||||
|
->OnCycleStart(callFunction)
|
||||||
|
;
|
||||||
|
}
|
||||||
|
return Tweener;
|
||||||
|
}
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
static class ULTweenerSequence* CreateSequence(UObject* WorldContextObject)
|
||||||
|
{
|
||||||
|
return ULTweenManager::CreateSequence(WorldContextObject);
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "LTweenDelegateHandleWrapper.generated.h"
|
||||||
|
|
||||||
|
/** Just a wrapper for blueprint to store a delegate handle */
|
||||||
|
USTRUCT(BlueprintType)
|
||||||
|
struct LTWEEN_API FLTweenDelegateHandleWrapper
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
public:
|
||||||
|
FLTweenDelegateHandleWrapper() {}
|
||||||
|
FLTweenDelegateHandleWrapper(FDelegateHandle InDelegateHandle)
|
||||||
|
{
|
||||||
|
DelegateHandle = InDelegateHandle;
|
||||||
|
}
|
||||||
|
FDelegateHandle DelegateHandle;
|
||||||
|
};
|
||||||
7
Plugins/LTween/Source/LTween/Public/LTweenHeaders.h
Normal file
7
Plugins/LTween/Source/LTween/Public/LTweenHeaders.h
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "LTweenManager.h"
|
||||||
|
#include "LTweenBPLibrary.h"
|
||||||
|
#include "LTweenerSequence.h"
|
||||||
154
Plugins/LTween/Source/LTween/Public/LTweenManager.h
Normal file
154
Plugins/LTween/Source/LTween/Public/LTweenManager.h
Normal file
@@ -0,0 +1,154 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "GameFramework/Actor.h"
|
||||||
|
#include "Components/ActorComponent.h"
|
||||||
|
#include "Subsystems/GameInstanceSubsystem.h"
|
||||||
|
#include "Subsystems/WorldSubsystem.h"
|
||||||
|
#include "LTweener.h"
|
||||||
|
#include "LTweenManager.generated.h"
|
||||||
|
|
||||||
|
UCLASS(NotBlueprintable, NotBlueprintType, Transient)
|
||||||
|
class LTWEEN_API ULTweenTickHelperComponent : public UActorComponent
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
ULTweenTickHelperComponent();
|
||||||
|
UPROPERTY() TWeakObjectPtr<class ULTweenManager> Target = nullptr;
|
||||||
|
protected:
|
||||||
|
virtual void BeginPlay() override;
|
||||||
|
virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
|
||||||
|
virtual void EndPlay(const EEndPlayReason::Type EndPlayReason)override;
|
||||||
|
};
|
||||||
|
|
||||||
|
UCLASS(NotBlueprintable, NotBlueprintType, Transient, NotPlaceable)
|
||||||
|
class LTWEEN_API ALTweenTickHelperActor : public AActor
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
ALTweenTickHelperActor();
|
||||||
|
virtual void BeginPlay()override;
|
||||||
|
virtual void Tick(float DeltaSeconds)override;
|
||||||
|
virtual void EndPlay(EEndPlayReason::Type EndPlayReason)override;
|
||||||
|
UPROPERTY() TWeakObjectPtr<class ULTweenManager> Target = nullptr;
|
||||||
|
private:
|
||||||
|
void OnLTweenManagerCreated(class ULTweenManager* LTweenManager);
|
||||||
|
FDelegateHandle OnLTweenManagerCreatedDelegateHandle;
|
||||||
|
|
||||||
|
void SetupTick(ULTweenManager* LTweenManager);
|
||||||
|
};
|
||||||
|
|
||||||
|
// This class is only for spawn ALTweenTickHelperActor for game world
|
||||||
|
UCLASS(NotBlueprintable, NotBlueprintType, Transient)
|
||||||
|
class LTWEEN_API ULTweenTickHelperWorldSubsystem : public UWorldSubsystem
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
public:
|
||||||
|
virtual bool ShouldCreateSubsystem(UObject* Outer) const override;
|
||||||
|
virtual void PostInitialize()override;
|
||||||
|
};
|
||||||
|
|
||||||
|
DECLARE_EVENT_OneParam(ULTweenManager, FLTweenManagerCreated, class ULTweenManager*);
|
||||||
|
|
||||||
|
UCLASS(NotBlueprintable, BlueprintType, Transient)
|
||||||
|
class LTWEEN_API ULTweenManager : public UGameInstanceSubsystem
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
//~USubsystem interface
|
||||||
|
virtual void Initialize(FSubsystemCollectionBase& Collection) override;
|
||||||
|
virtual void Deinitialize() override;
|
||||||
|
virtual bool ShouldCreateSubsystem(UObject* Outer) const override;
|
||||||
|
//~End of USubsystem interface
|
||||||
|
|
||||||
|
//~FTickableObjectBase interface
|
||||||
|
void Tick(ELTweenTickType TickType, float DeltaTime);
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintPure, Category = LTween, meta = (WorldContext = "WorldContextObject", DisplayName = "Get LTween Instance"))
|
||||||
|
static ULTweenManager* GetLTweenInstance(UObject* WorldContextObject);
|
||||||
|
static FLTweenManagerCreated OnLTweenManagerCreated;
|
||||||
|
private:
|
||||||
|
/** current active tweener collection*/
|
||||||
|
UPROPERTY(VisibleAnywhere, Category=LTween)TArray<TObjectPtr<ULTweener>> tweenerList;
|
||||||
|
void OnTick(ELTweenTickType TickType, float DeltaTime, float UnscaledDeltaTime);
|
||||||
|
FLTweenUpdateMulticastDelegate updateEvent;
|
||||||
|
bool bTickPaused = false;
|
||||||
|
public:
|
||||||
|
UE_DEPRECATED(5.1, "Use Tweener->SetTickType(ELTweenTickType::Manual) then call this->ManualTick.")
|
||||||
|
/** Use "CustomTick" instead of UE4's default Tick to control your tween animations. Call "DisableTick" function to disable UE4's default Tick function, then call this CustomTick function.*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = LTween, meta=(DeprecatedFunction, DeprecationMessage = "Use Tweener->SetTickType(ELTweenTickType::Manual) then call this->ManualTick."))
|
||||||
|
void CustomTick(float DeltaTime);
|
||||||
|
UE_DEPRECATED(5.1, "Use Tweener->SetTickType(ELTweenTickType::Manual) then call this->ManualTick.")
|
||||||
|
/**
|
||||||
|
* Disable default Tick function, so you can pause all tween or use CustomTick to do your own tick and use your own DeltaTime.
|
||||||
|
* This will only pause the tick with current LTweenManager instance, so after load a new level, default Tick will work again, and you need to call DisableTick again if you want to disable tick.
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = LTween, meta = (DeprecatedFunction, DeprecationMessage = "Use Tweener->SetTickType(ELTweenTickType::Manual) then call this->ManualTick."))
|
||||||
|
void DisableTick();
|
||||||
|
UE_DEPRECATED(5.1, "Use Tweener->SetTickType(ELTweenTickType::Manual) then call this->ManualTick.")
|
||||||
|
/**
|
||||||
|
* Enable default Tick if it is disabled.
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = LTween, meta = (DeprecatedFunction, DeprecationMessage = "Use Tweener->SetTickType(ELTweenTickType::Manual) then call this->ManualTick."))
|
||||||
|
void EnableTick();
|
||||||
|
|
||||||
|
|
||||||
|
UFUNCTION(BlueprintCallable, Category = LTween)
|
||||||
|
void ManualTick(float DeltaTime);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Kill all tweens
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = LTween)
|
||||||
|
void KillAllTweens(bool callComplete = false);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is the tweener is currently tweening?
|
||||||
|
* @param item tweener item
|
||||||
|
*/
|
||||||
|
static bool IsTweening(UObject* WorldContextObject, ULTweener* item);
|
||||||
|
/**
|
||||||
|
* Kill the tweener if it is tweening.
|
||||||
|
* @param item tweener item
|
||||||
|
* @param callComplete true-execute onComplete event.
|
||||||
|
*/
|
||||||
|
static void KillIfIsTweening(UObject* WorldContextObject, ULTweener* item, bool callComplete);
|
||||||
|
/**
|
||||||
|
* Remove tweener from list, so the tweener will not be managed by this LTweenManager.
|
||||||
|
* @param item tweener item
|
||||||
|
*/
|
||||||
|
static void RemoveTweener(UObject* WorldContextObject, ULTweener* item);
|
||||||
|
|
||||||
|
static ULTweener* To(UObject* WorldContextObject, const FLTweenFloatGetterFunction& getter, const FLTweenFloatSetterFunction& setter, float endValue, float duration);
|
||||||
|
static ULTweener* To(UObject* WorldContextObject, const FLTweenDoubleGetterFunction& getter, const FLTweenDoubleSetterFunction& setter, double endValue, float duration);
|
||||||
|
static ULTweener* To(UObject* WorldContextObject, const FLTweenIntGetterFunction& getter, const FLTweenIntSetterFunction& setter, int endValue, float duration);
|
||||||
|
static ULTweener* To(UObject* WorldContextObject, const FLTweenPositionGetterFunction& getter, const FLTweenPositionSetterFunction& setter, const FVector& endValue, float duration, bool sweep = false, FHitResult* sweepHitResult = nullptr, ETeleportType teleportType = ETeleportType::None);
|
||||||
|
static ULTweener* To(UObject* WorldContextObject, const FLTweenVectorGetterFunction& getter, const FLTweenVectorSetterFunction& setter, const FVector& endValue, float duration);
|
||||||
|
static ULTweener* To(UObject* WorldContextObject, const FLTweenColorGetterFunction& getter, const FLTweenColorSetterFunction& setter, const FColor& endValue, float duration);
|
||||||
|
static ULTweener* To(UObject* WorldContextObject, const FLTweenLinearColorGetterFunction& getter, const FLTweenLinearColorSetterFunction& setter, const FLinearColor& endValue, float duration);
|
||||||
|
static ULTweener* To(UObject* WorldContextObject, const FLTweenVector2DGetterFunction& getter, const FLTweenVector2DSetterFunction& setter, const FVector2D& endValue, float duration);
|
||||||
|
static ULTweener* To(UObject* WorldContextObject, const FLTweenVector4GetterFunction& getter, const FLTweenVector4SetterFunction& setter, const FVector4& endValue, float duration);
|
||||||
|
static ULTweener* To(UObject* WorldContextObject, const FLTweenQuaternionGetterFunction& getter, const FLTweenQuaternionSetterFunction& setter, const FQuat& endValue, float duration);
|
||||||
|
static ULTweener* To(UObject* WorldContextObject, const FLTweenRotatorGetterFunction& getter, const FLTweenRotatorSetterFunction& setter, const FRotator& endValue, float duration);
|
||||||
|
static ULTweener* To(UObject* WorldContextObject, const FLTweenRotationQuatGetterFunction& getter, const FLTweenRotationQuatSetterFunction& setter, const FVector& eulerAngle, float duration, bool sweep = false, FHitResult* sweepHitResult = nullptr, ETeleportType teleportType = ETeleportType::None);
|
||||||
|
static ULTweener* To(UObject* WorldContextObject, const FLTweenRotationQuatGetterFunction& getter, const FLTweenRotationQuatSetterFunction& setter, const FQuat& endValue, float duration, bool sweep = false, FHitResult* sweepHitResult = nullptr, ETeleportType teleportType = ETeleportType::None);
|
||||||
|
static ULTweener* To(UObject* WorldContextObject, const FLTweenMaterialScalarGetterFunction& getter, const FLTweenMaterialScalarSetterFunction& setter, float endValue, float duration, int32 parameterIndex);
|
||||||
|
static ULTweener* To(UObject* WorldContextObject, const FLTweenMaterialVectorGetterFunction& getter, const FLTweenMaterialVectorSetterFunction& setter, const FLinearColor& endValue, float duration, int32 parameterIndex);
|
||||||
|
|
||||||
|
static ULTweener* VirtualTo(UObject* WorldContextObject, float duration);
|
||||||
|
static ULTweener* DelayFrameCall(UObject* WorldContextObject, int delayFrame);
|
||||||
|
static ULTweener* UpdateCall(UObject* WorldContextObject);
|
||||||
|
|
||||||
|
static class ULTweenerSequence* CreateSequence(UObject* WorldContextObject);
|
||||||
|
|
||||||
|
UE_DEPRECATED(5.2, "Use LTweenBPLibrary.UpdateCall instead.")
|
||||||
|
static FDelegateHandle RegisterUpdateEvent(UObject* WorldContextObject, const FLTweenUpdateDelegate& update);
|
||||||
|
UE_DEPRECATED(5.2, "Use LTweenBPLibrary.UpdateCall instead of RegisterUpdateEvent, and KillIfIsTweening for returned tweener instead of this UnregisterUpdateEvent.")
|
||||||
|
static void UnregisterUpdateEvent(UObject* WorldContextObject, const FDelegateHandle& delegateHandle);
|
||||||
|
};
|
||||||
701
Plugins/LTween/Source/LTween/Public/LTweener.h
Normal file
701
Plugins/LTween/Source/LTween/Public/LTweener.h
Normal file
@@ -0,0 +1,701 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "CoreMinimal.h"
|
||||||
|
#include "Engine/EngineTypes.h"
|
||||||
|
#include "Engine/EngineBaseTypes.h"
|
||||||
|
#include "Engine/HitResult.h"
|
||||||
|
#include "LTweener.generated.h"
|
||||||
|
|
||||||
|
DECLARE_DELEGATE_RetVal_FourParams(float, FLTweenFunction, float, float, float, float);
|
||||||
|
|
||||||
|
DECLARE_DELEGATE_OneParam(FLTweenUpdateDelegate, float);
|
||||||
|
DECLARE_MULTICAST_DELEGATE_OneParam(FLTweenUpdateMulticastDelegate, float);
|
||||||
|
|
||||||
|
#ifndef LTweenUpdateDelegate
|
||||||
|
#define LTweenUpdateDelegate UE_DEPRECATED_MACRO(5.0, "LTweenUpdateDelegate has been renamed to FLTweenUpdateDelegate") FLTweenUpdateDelegate
|
||||||
|
#endif
|
||||||
|
#ifndef LTweenUpdateMulticastDelegate
|
||||||
|
#define LTweenUpdateMulticastDelegate UE_DEPRECATED_MACRO(5.0, "LTweenUpdateMulticastDelegate has been renamed to FLTweenUpdateMulticastDelegate") FLTweenUpdateMulticastDelegate
|
||||||
|
#endif
|
||||||
|
|
||||||
|
DECLARE_DELEGATE_RetVal(float, FLTweenFloatGetterFunction);
|
||||||
|
DECLARE_DELEGATE_OneParam(FLTweenFloatSetterFunction, float);
|
||||||
|
|
||||||
|
DECLARE_DELEGATE_RetVal(double, FLTweenDoubleGetterFunction);
|
||||||
|
DECLARE_DELEGATE_OneParam(FLTweenDoubleSetterFunction, double);
|
||||||
|
|
||||||
|
DECLARE_DELEGATE_RetVal(int, FLTweenIntGetterFunction);
|
||||||
|
DECLARE_DELEGATE_OneParam(FLTweenIntSetterFunction, int);
|
||||||
|
|
||||||
|
DECLARE_DELEGATE_RetVal(FVector, FLTweenVectorGetterFunction);
|
||||||
|
DECLARE_DELEGATE_OneParam(FLTweenVectorSetterFunction, FVector);
|
||||||
|
|
||||||
|
DECLARE_DELEGATE_RetVal(FColor, FLTweenColorGetterFunction);
|
||||||
|
DECLARE_DELEGATE_OneParam(FLTweenColorSetterFunction, FColor);
|
||||||
|
|
||||||
|
DECLARE_DELEGATE_RetVal(FLinearColor, FLTweenLinearColorGetterFunction);
|
||||||
|
DECLARE_DELEGATE_OneParam(FLTweenLinearColorSetterFunction, FLinearColor);
|
||||||
|
|
||||||
|
DECLARE_DELEGATE_RetVal(FVector2D, FLTweenVector2DGetterFunction);
|
||||||
|
DECLARE_DELEGATE_OneParam(FLTweenVector2DSetterFunction, FVector2D);
|
||||||
|
|
||||||
|
DECLARE_DELEGATE_RetVal(FVector4, FLTweenVector4GetterFunction);
|
||||||
|
DECLARE_DELEGATE_OneParam(FLTweenVector4SetterFunction, FVector4);
|
||||||
|
|
||||||
|
DECLARE_DELEGATE_RetVal(FQuat, FLTweenQuaternionGetterFunction);
|
||||||
|
DECLARE_DELEGATE_OneParam(FLTweenQuaternionSetterFunction, const FQuat&);
|
||||||
|
|
||||||
|
DECLARE_DELEGATE_RetVal(FRotator, FLTweenRotatorGetterFunction);
|
||||||
|
DECLARE_DELEGATE_OneParam(FLTweenRotatorSetterFunction, FRotator);
|
||||||
|
|
||||||
|
DECLARE_DELEGATE_RetVal(FVector, FLTweenPositionGetterFunction);
|
||||||
|
DECLARE_DELEGATE_FourParams(FLTweenPositionSetterFunction, FVector, bool, FHitResult*, ETeleportType);
|
||||||
|
|
||||||
|
DECLARE_DELEGATE_RetVal(FQuat, FLTweenRotationQuatGetterFunction);
|
||||||
|
DECLARE_DELEGATE_FourParams(FLTweenRotationQuatSetterFunction, const FQuat&, bool, FHitResult*, ETeleportType);
|
||||||
|
|
||||||
|
DECLARE_DELEGATE_RetVal_OneParam(bool, FLTweenMaterialScalarGetterFunction, float&);
|
||||||
|
DECLARE_DELEGATE_RetVal_TwoParams(bool, FLTweenMaterialScalarSetterFunction, int32, float);
|
||||||
|
|
||||||
|
DECLARE_DELEGATE_RetVal_OneParam(bool, FLTweenMaterialVectorGetterFunction, FLinearColor&);
|
||||||
|
DECLARE_DELEGATE_RetVal_TwoParams(bool, FLTweenMaterialVectorSetterFunction, int32, const FLinearColor&);
|
||||||
|
|
||||||
|
/** simple delegate */
|
||||||
|
DECLARE_DYNAMIC_DELEGATE(FLTweenerSimpleDynamicDelegate);
|
||||||
|
/** @param InProgress Progress of this tween, from 0 to 1 */
|
||||||
|
DECLARE_DYNAMIC_DELEGATE_OneParam(FLTweenerFloatDynamicDelegate, float, InProgress);
|
||||||
|
|
||||||
|
/** */
|
||||||
|
UENUM(BlueprintType, Category = LTween)
|
||||||
|
enum class ELTweenTickType:uint8
|
||||||
|
{
|
||||||
|
PrePhysics = ETickingGroup::TG_PrePhysics UMETA(DisplayName = "Pre Physics"),
|
||||||
|
DuringPhysics = ETickingGroup::TG_DuringPhysics UMETA(DisplayName = "During Physics"),
|
||||||
|
PostPhysics = ETickingGroup::TG_PostPhysics UMETA(DisplayName = "Post Physics"),
|
||||||
|
PostUpdateWork = ETickingGroup::TG_PostUpdateWork UMETA(DisplayName = "Post Update Work"),
|
||||||
|
/** This tween will use manual tick. You need to call LTweenManager::ManualTick to make it work. */
|
||||||
|
Manual,
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Animation curve type
|
||||||
|
*/
|
||||||
|
UENUM(BlueprintType, Category = LTween)
|
||||||
|
enum class ELTweenEase :uint8
|
||||||
|
{
|
||||||
|
Linear,
|
||||||
|
InQuad,
|
||||||
|
OutQuad,
|
||||||
|
InOutQuad,
|
||||||
|
InCubic,
|
||||||
|
OutCubic,
|
||||||
|
InOutCubic,
|
||||||
|
InQuart,
|
||||||
|
OutQuart,
|
||||||
|
InOutQuart,
|
||||||
|
InSine,
|
||||||
|
OutSine,
|
||||||
|
InOutSine,
|
||||||
|
InExpo,
|
||||||
|
OutExpo,
|
||||||
|
InOutExpo,
|
||||||
|
InCirc,
|
||||||
|
OutCirc,
|
||||||
|
InOutCirc,
|
||||||
|
InElastic,
|
||||||
|
OutElastic,
|
||||||
|
InOutElastic,
|
||||||
|
InBack,
|
||||||
|
OutBack,
|
||||||
|
InOutBack,
|
||||||
|
InBounce,
|
||||||
|
OutBounce,
|
||||||
|
InOutBounce,
|
||||||
|
/** Use CurveFloat to animate, only range 0-1 is valid. If use this you must assign curveFloat, or fallback to Linear. */
|
||||||
|
CurveFloat,
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifndef LTweenEase
|
||||||
|
#define LTweenEase UE_DEPRECATED_MACRO(5.0, "LTweenEase has been renamed to ELTweenEase") ELTweenEase
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loop type
|
||||||
|
*/
|
||||||
|
UENUM(BlueprintType, Category = LGUI)
|
||||||
|
enum class ELTweenLoop :uint8
|
||||||
|
{
|
||||||
|
/** Play once, not loop */
|
||||||
|
Once,
|
||||||
|
/** Each loop cycle restarts from beginning */
|
||||||
|
Restart,
|
||||||
|
/** The tween move forward and backward at alternate cycles */
|
||||||
|
Yoyo,
|
||||||
|
/** Continuously increments the tween at the end of each loop cycle (A to B, B to B+(A-B), and so on). */
|
||||||
|
Incremental,
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifndef LTweenLoop
|
||||||
|
#define LTweenLoop UE_DEPRECATED_MACRO(5.0, "LTweenLoop has been renamed to ELTweenLoop") ELTweenLoop
|
||||||
|
#endif
|
||||||
|
|
||||||
|
class UCurveFloat;
|
||||||
|
|
||||||
|
/** Class for manage single tween */
|
||||||
|
UCLASS(BlueprintType, Abstract)
|
||||||
|
class LTWEEN_API ULTweener : public UObject
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
|
||||||
|
public:
|
||||||
|
ULTweener();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
friend class ULTweenerSequence;
|
||||||
|
/** animation duration */
|
||||||
|
float duration = 0.0f;
|
||||||
|
/** delay time before animation start */
|
||||||
|
float delay = 0.0f;
|
||||||
|
/** total elapse time, include delay */
|
||||||
|
float elapseTime = 0.0f;
|
||||||
|
/** use CurveFloat as animation function,horizontal is time (0-1),vertical is value (0-1) */
|
||||||
|
TWeakObjectPtr<UCurveFloat> curveFloat = nullptr;
|
||||||
|
/** loop type */
|
||||||
|
ELTweenLoop loopType = ELTweenLoop::Once;
|
||||||
|
/** max loop count when loop type is Restart/Yoyo/Incremental */
|
||||||
|
int32 maxLoopCount = 0;
|
||||||
|
/** current completed cycle count */
|
||||||
|
int32 loopCycleCount = 0;
|
||||||
|
/** how this tween update */
|
||||||
|
ELTweenTickType tickType = ELTweenTickType::DuringPhysics;
|
||||||
|
|
||||||
|
/** reverse animation */
|
||||||
|
bool reverseTween = false;
|
||||||
|
/** if animation start play */
|
||||||
|
bool startToTween = false;
|
||||||
|
/** mark this tween for kill, so when the next update came, the tween will be killed */
|
||||||
|
bool isMarkedToKill = false;
|
||||||
|
/** mark this tween as pause, it will keep pause until call Resume() */
|
||||||
|
bool isMarkedPause = false;
|
||||||
|
/** will this tween be affected when GamePause? usually set to false for UI */
|
||||||
|
bool affectByGamePause = true;
|
||||||
|
/** will this tween use dilation-time or real-time? */
|
||||||
|
bool affectByTimeDilation = true;
|
||||||
|
|
||||||
|
/** tween function */
|
||||||
|
FLTweenFunction tweenFunc;
|
||||||
|
|
||||||
|
/** call once after animation complete */
|
||||||
|
FSimpleDelegate onCompleteCpp;
|
||||||
|
/** if use loop, this will call every time when begin tween in every cycle */
|
||||||
|
FSimpleDelegate onCycleStartCpp;
|
||||||
|
/** if use loop, this will call every time after tween complete in every cycle */
|
||||||
|
FSimpleDelegate onCycleCompleteCpp;
|
||||||
|
/** call every frame after animation starts */
|
||||||
|
FLTweenUpdateDelegate onUpdateCpp;
|
||||||
|
/** call once when animation starts */
|
||||||
|
FSimpleDelegate onStartCpp;
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Set animation curve type.
|
||||||
|
* Has no effect if the Tween has already started.
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween")
|
||||||
|
ULTweener* SetEase(ELTweenEase easetype);
|
||||||
|
/** set ease to CurveFloat and use CurveFloat as animation function, horizontal is time (0-1),vertical is value (0-1) */
|
||||||
|
UE_DEPRECATED(4.23, "SetEaseCurve is not valid anymore, use SetEase and SetCurveFloat instead.")
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween", meta = (DeprecatedFunction, DeprecationMessage = "SetEaseCurve is not valid anymore, use SetEase and SetCurveFloat instead."))
|
||||||
|
ULTweener* SetEaseCurve(UCurveFloat* newCurve);
|
||||||
|
/**
|
||||||
|
* Set delay time before start animation.
|
||||||
|
* Has no effect if the Tween has already started.
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween")
|
||||||
|
virtual ULTweener* SetDelay(float newDelay);
|
||||||
|
UE_DEPRECATED(4.23, "SetLoopType not valid anymore, use SetLoop instead.")
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween", meta = (DeprecatedFunction, DeprecationMessage = "SetLoopType not valid anymore, use SetLoop instead."))
|
||||||
|
virtual ULTweener* SetLoopType(ELTweenLoop newLoopType)
|
||||||
|
{
|
||||||
|
return SetLoop(newLoopType, -1);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Set loop of tween.
|
||||||
|
* Has no effect if the Tween has already started.
|
||||||
|
* @param newLoopType loop type
|
||||||
|
* @param newLoopCount number of cycles to play (-1 for infinite)
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween")
|
||||||
|
virtual ULTweener* SetLoop(ELTweenLoop newLoopType, int32 newLoopCount = 1);
|
||||||
|
UE_DEPRECATED(4.23, "GetLoopCount not valid anymore, use GetLoopCycleCount instead.")
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween", meta = (DeprecatedFunction, DeprecationMessage = "GetLoopCount not valid anymore, use GetLoopCycleCount instead."))
|
||||||
|
int32 GetLoopCount() { return loopCycleCount; }
|
||||||
|
/** curently completed loop cycle count */
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween")
|
||||||
|
int32 GetLoopCycleCount()const { return loopCycleCount; }
|
||||||
|
|
||||||
|
/** execute when animation complete */
|
||||||
|
ULTweener* OnComplete(const FSimpleDelegate& newComplete)
|
||||||
|
{
|
||||||
|
this->onCompleteCpp = newComplete;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/** execute when animation complete */
|
||||||
|
ULTweener* OnComplete(const TFunction<void()>& newComplete)
|
||||||
|
{
|
||||||
|
if (newComplete != nullptr)
|
||||||
|
{
|
||||||
|
this->onCompleteCpp.BindLambda(newComplete);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/** execute when animation complete */
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween")
|
||||||
|
ULTweener* OnComplete(const FLTweenerSimpleDynamicDelegate& newComplete)
|
||||||
|
{
|
||||||
|
this->onCompleteCpp.BindLambda([newComplete] {
|
||||||
|
newComplete.ExecuteIfBound();
|
||||||
|
});
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** if use loop, this will call every time after tween complete in every cycle */
|
||||||
|
ULTweener* OnCycleComplete(const FSimpleDelegate& newCycleComplete)
|
||||||
|
{
|
||||||
|
this->onCycleCompleteCpp = newCycleComplete;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/** if use loop, this will call every time after tween complete in every cycle */
|
||||||
|
ULTweener* OnCycleComplete(const TFunction<void()>& newCycleComplete)
|
||||||
|
{
|
||||||
|
if (newCycleComplete != nullptr)
|
||||||
|
{
|
||||||
|
this->onCycleCompleteCpp.BindLambda(newCycleComplete);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/** if use loop, this will call every time after tween complete in every cycle */
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween")
|
||||||
|
ULTweener* OnCycleComplete(const FLTweenerSimpleDynamicDelegate& newCycleComplete)
|
||||||
|
{
|
||||||
|
this->onCycleCompleteCpp.BindLambda([newCycleComplete] {
|
||||||
|
newCycleComplete.ExecuteIfBound();
|
||||||
|
});
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** if use loop, this will call every time when begin tween in every cycle */
|
||||||
|
ULTweener* OnCycleStart(const FSimpleDelegate& newCycleStart)
|
||||||
|
{
|
||||||
|
this->onCycleStartCpp = newCycleStart;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/** if use loop, this will call every time when begin tween in every cycle */
|
||||||
|
ULTweener* OnCycleStart(const TFunction<void()>& newCycleStart)
|
||||||
|
{
|
||||||
|
if (newCycleStart != nullptr)
|
||||||
|
{
|
||||||
|
this->onCycleStartCpp.BindLambda(newCycleStart);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/** if use loop, this will call every time when begin tween in every cycle */
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween")
|
||||||
|
ULTweener* OnCycleStart(const FLTweenerSimpleDynamicDelegate& newCycleStart)
|
||||||
|
{
|
||||||
|
this->onCycleStartCpp.BindLambda([newCycleStart] {
|
||||||
|
newCycleStart.ExecuteIfBound();
|
||||||
|
});
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** execute every frame if animation is playing */
|
||||||
|
ULTweener* OnUpdate(const FLTweenUpdateDelegate& newUpdate)
|
||||||
|
{
|
||||||
|
this->onUpdateCpp = newUpdate;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/** execute every frame if animation is playing */
|
||||||
|
ULTweener* OnUpdate(const TFunction<void(float)>& newUpdate)
|
||||||
|
{
|
||||||
|
if (newUpdate != nullptr)
|
||||||
|
{
|
||||||
|
this->onUpdateCpp.BindLambda(newUpdate);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/** execute every frame if animation is playing */
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween")
|
||||||
|
ULTweener* OnUpdate(const FLTweenerFloatDynamicDelegate& newUpdate)
|
||||||
|
{
|
||||||
|
this->onUpdateCpp.BindLambda([newUpdate](float progress) {
|
||||||
|
newUpdate.ExecuteIfBound(progress);
|
||||||
|
});
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** execute when animation start*/
|
||||||
|
ULTweener* OnStart(const FSimpleDelegate& newStart)
|
||||||
|
{
|
||||||
|
this->onStartCpp = newStart;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/** execute when animation start, blueprint version*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween")
|
||||||
|
ULTweener* OnStart(const FLTweenerSimpleDynamicDelegate& newStart)
|
||||||
|
{
|
||||||
|
this->onStartCpp.BindLambda([newStart] {
|
||||||
|
newStart.ExecuteIfBound();
|
||||||
|
});
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/** execute when animation start, lambda version*/
|
||||||
|
ULTweener* OnStart(const TFunction<void()>& newStart)
|
||||||
|
{
|
||||||
|
if (newStart != nullptr)
|
||||||
|
{
|
||||||
|
this->onStartCpp.BindLambda(newStart);
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Set CurveFloat as animation curve. Make sure ease type is CurveFloat. (Call SetEase function to set ease type)
|
||||||
|
* Has no effect if the Tween has already started.
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween")
|
||||||
|
ULTweener* SetCurveFloat(UCurveFloat* newCurveFloat);
|
||||||
|
/**
|
||||||
|
* @return false: the tween is complete and need to be killed. true: the tween is still processing.
|
||||||
|
*/
|
||||||
|
virtual bool ToNext(float deltaTime, float unscaledDeltaTime);
|
||||||
|
/**
|
||||||
|
* @return false: the tween is complete and need to be killed. true: the tween is still processing.
|
||||||
|
*/
|
||||||
|
bool ToNextWithElapsedTime(float InElapseTime);
|
||||||
|
/** Force stop this animation. if callComplete = true, will call OnComplete after stop*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween")
|
||||||
|
virtual void Kill(bool callComplete = false);
|
||||||
|
/** Force stop this animation at this frame, set value to end, call OnComplete. */
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween")
|
||||||
|
virtual void ForceComplete();
|
||||||
|
/** Pause this animation. */
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween")
|
||||||
|
void Pause()
|
||||||
|
{
|
||||||
|
isMarkedPause = true;
|
||||||
|
}
|
||||||
|
/** Continue play animation if is paused. */
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween")
|
||||||
|
void Resume()
|
||||||
|
{
|
||||||
|
isMarkedPause = false;
|
||||||
|
}
|
||||||
|
/** Will this tween be affected when GamePause? Default is true, usually set to false for UI. */
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween")
|
||||||
|
bool GetAffectByGamePause()const { return affectByGamePause; }
|
||||||
|
/** Will this tween be affected when GamePause? Default is true, usually set to false for UI. */
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween")
|
||||||
|
ULTweener* SetAffectByGamePause(bool value);
|
||||||
|
/** will this tween use dilated-time or real-time? */
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween")
|
||||||
|
bool GetAffectByTimeDilation()const { return affectByTimeDilation; }
|
||||||
|
/** will this tween use dilated-time or real-time? */
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween")
|
||||||
|
ULTweener* SetAffectByTimeDilation(bool value);
|
||||||
|
/**
|
||||||
|
* Restart animation.
|
||||||
|
* Has no effect if the Tween is not started.
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween")
|
||||||
|
virtual void Restart();
|
||||||
|
/**
|
||||||
|
* Send the tween to the given position in time.
|
||||||
|
* @param timePoint Time position to reach (if higher than the whole tween duration the tween will simply reach its end).
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween")
|
||||||
|
virtual void Goto(float timePoint);
|
||||||
|
/** Return progress 0-1 */
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween")
|
||||||
|
virtual float GetProgress()const;
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween")
|
||||||
|
float GetElapsedTime()const { return elapseTime; }
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween")
|
||||||
|
float GetDuration()const { return duration; }
|
||||||
|
|
||||||
|
/** Return tickType of this tween, default is DuringPhysics. */
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween")
|
||||||
|
ELTweenTickType GetTickType()const { return tickType; }
|
||||||
|
/**
|
||||||
|
* Set TickType of this tween.
|
||||||
|
* Has no effect if the Tween has already started.
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, Category = "LTween")
|
||||||
|
ULTweener* SetTickType(ELTweenTickType value = ELTweenTickType::DuringPhysics);
|
||||||
|
protected:
|
||||||
|
/** get value when start. child class must override this, check LTweenerFloat for reference */
|
||||||
|
virtual void OnStartGetValue() PURE_VIRTUAL(ULTweener::OnStartGetValue, );
|
||||||
|
/** set value when tweening. child class must override this, check LTweenerFloat for reference */
|
||||||
|
virtual void TweenAndApplyValue(float currentTime) PURE_VIRTUAL(ULTweener::TweenAndApplyValue, );
|
||||||
|
/** set start and end value if looptype is Incremental. */
|
||||||
|
virtual void SetValueForIncremental() PURE_VIRTUAL(ULTweener::SetValueForIncremental, );
|
||||||
|
/** set start and end value before the animation wan't to restart */
|
||||||
|
virtual void SetOriginValueForRestart() PURE_VIRTUAL(ULTweener::SetOriginValueForRestart, );
|
||||||
|
virtual void SetValueForYoyo() {};
|
||||||
|
virtual void SetValueForRestart() {};
|
||||||
|
#pragma region tweenFunctions
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* @param c Change needed in value.
|
||||||
|
* @param b Starting value.
|
||||||
|
* @param t Current time (in frames or seconds).
|
||||||
|
* @param d Expected eaSing duration (in frames or seconds).
|
||||||
|
* @return The correct value.
|
||||||
|
*/
|
||||||
|
static float Linear(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
return c*t / d + b;
|
||||||
|
}
|
||||||
|
static float InQuad(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
t /= d;
|
||||||
|
return c*t*t + b;
|
||||||
|
}
|
||||||
|
static float OutQuad(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
t /= d;
|
||||||
|
return -c*t*(t - 2) + b;
|
||||||
|
}
|
||||||
|
static float InOutQuad(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
t /= d * 0.5f;
|
||||||
|
if (t < 1)
|
||||||
|
{
|
||||||
|
return c * 0.5f * t*t + b;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
--t;
|
||||||
|
return -c * 0.5f * (t*(t - 2) - 1) + b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static float InCubic(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
t /= d;
|
||||||
|
return c*t*t*t + b;
|
||||||
|
}
|
||||||
|
static float OutCubic(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
t = t / d - 1.0f;
|
||||||
|
return c*(t*t*t + 1) + b;
|
||||||
|
}
|
||||||
|
static float InOutCubic(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
t /= d * 0.5f;
|
||||||
|
if (t < 1)
|
||||||
|
{
|
||||||
|
return c * 0.5f * t*t*t + b;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
t -= 2;
|
||||||
|
return c * 0.5f * (t*t*t + 2) + b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static float InQuart(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
t /= d;
|
||||||
|
return c*t*t*t*t + b;
|
||||||
|
}
|
||||||
|
static float OutQuart(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
t = t / d - 1.0f;
|
||||||
|
return -c * (t*t*t*t - 1) + b;
|
||||||
|
}
|
||||||
|
static float InOutQuart(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
t /= d * 0.5f;
|
||||||
|
if (t < 1)
|
||||||
|
{
|
||||||
|
return c * 0.5f * t*t*t*t + b;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
t -= 2;
|
||||||
|
return -c * 0.5f * (t*t*t*t - 2) + b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static float InSine(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
return -c * FMath::Cos(t / d * HALF_PI) + c + b;
|
||||||
|
}
|
||||||
|
static float OutSine(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
return c * FMath::Sin(t / d * HALF_PI) + b;
|
||||||
|
}
|
||||||
|
static float InOutSine(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
return -c * 0.5f * (FMath::Cos(PI * t / d) - 1) + b;
|
||||||
|
}
|
||||||
|
static float InExpo(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
return (t == 0.0f) ? b : c * FMath::Pow(2.0f, 10.0f * (t / d - 1.0f)) + b - c * 0.001f;
|
||||||
|
}
|
||||||
|
static float OutExpo(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
return (t == d) ? b + c : c * 1.001f * (-FMath::Pow(2.0f, -10.0f * t / d) + 1.0f) + b;
|
||||||
|
}
|
||||||
|
static float InOutExpo(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
if (t == 0) return b;
|
||||||
|
if (t == d) return b + c;
|
||||||
|
t /= d * 0.5f;
|
||||||
|
if (t < 1.0f)
|
||||||
|
{
|
||||||
|
return c * 0.5f * FMath::Pow(2.0f, 10.0f * (t - 1.0f)) + b - c * 0.0005f;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return c * 0.5f * 1.0005f * (-FMath::Pow(2.0f, -10.0f * (t - 1.0f)) + 2.0f) + b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static float InCirc(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
t /= d;
|
||||||
|
return -c * (FMath::Sqrt(1.0f - t*t) - 1.0f) + b;
|
||||||
|
}
|
||||||
|
static float OutCirc(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
t = t / d - 1.0f;
|
||||||
|
return c * FMath::Sqrt(1.0f - t*t) + b;
|
||||||
|
}
|
||||||
|
static float InOutCirc(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
t /= d * 0.5f;
|
||||||
|
if (t < 1)
|
||||||
|
{
|
||||||
|
return -c * 0.5f * (FMath::Sqrt(1 - t * t) - 1) + b;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
t -= 2.0f;
|
||||||
|
return c * 0.5f * (FMath::Sqrt(1.0f - t*t) + 1.0f) + b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static float InElastic(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
if (t == 0) return b;
|
||||||
|
t /= d;
|
||||||
|
if (t == 1) return b + c;
|
||||||
|
float p = d*0.3f;
|
||||||
|
float s = p / 4;
|
||||||
|
float a = c;
|
||||||
|
t -= 1.0f;
|
||||||
|
return -(a*FMath::Pow(2.0f, 10.0f * t) * FMath::Sin((t*d - s)*(2.0f * PI) / p)) + b;
|
||||||
|
}
|
||||||
|
static float OutElastic(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
if (t == 0) return b;
|
||||||
|
t /= d;
|
||||||
|
if (t == 1) return b + c;
|
||||||
|
float p = d*0.3f;
|
||||||
|
float s = p / 4;
|
||||||
|
float a = c;
|
||||||
|
return (a*FMath::Pow(2.0f, -10.0f * t) * FMath::Sin((t*d - s)*(2.0f * PI) / p) + c + b);
|
||||||
|
}
|
||||||
|
static float InOutElastic(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
if (t == 0) return b;
|
||||||
|
t /= d * 0.5f;
|
||||||
|
if (t == 2) return b + c;
|
||||||
|
float p = d*0.3f;
|
||||||
|
float s = p / 4;
|
||||||
|
float a = c;
|
||||||
|
if (t < 1.0f)
|
||||||
|
{
|
||||||
|
t -= 1.0f;
|
||||||
|
return -0.5f*(a*FMath::Pow(2.0f, 10.0f * t) * FMath::Sin((t*d - s)*(2.0f * PI) / p)) + b;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
t -= 1.0f;
|
||||||
|
return a * FMath::Pow(2.0f, -10.0f * t) * FMath::Sin((t*d - s)*(2.0f * PI) / p)*0.5f + c + b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static float InBack(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
static float s = 1.70158f;
|
||||||
|
t /= d;
|
||||||
|
return c*t*t*((s + 1)*t - s) + b;
|
||||||
|
}
|
||||||
|
static float OutBack(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
static float s = 1.70158f;
|
||||||
|
t = t / d - 1;
|
||||||
|
return c*(t*t*((s + 1)*t + s) + 1) + b;
|
||||||
|
}
|
||||||
|
static float InOutBack(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
if (t < d * 0.5f) return InBack(c, 0, t * 2, d) * .5f + b;
|
||||||
|
else return OutBack(c, 0, t * 2 - d, d) * .5f + c * .5f + b;
|
||||||
|
}
|
||||||
|
|
||||||
|
static float OutBounce(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
t /= d;
|
||||||
|
if (t < (1.0f / 2.75f)) {
|
||||||
|
return c*(7.5625f*t*t) + b;
|
||||||
|
}
|
||||||
|
else if (t < (2.0f / 2.75f)) {
|
||||||
|
t -= (1.5f / 2.75f);
|
||||||
|
return c*(7.5625f*t*t + .75f) + b;
|
||||||
|
}
|
||||||
|
else if (t < (2.5f / 2.75f)) {
|
||||||
|
t -= (2.25f / 2.75f);
|
||||||
|
return c*(7.5625f*t*t + .9375f) + b;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
t -= (2.625f / 2.75f);
|
||||||
|
return c*(7.5625f*t*t + .984375f) + b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
static float InBounce(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
return c - OutBounce(c, 0, d - t, d) + b;
|
||||||
|
}
|
||||||
|
static float InOutBounce(float c, float b, float t, float d)
|
||||||
|
{
|
||||||
|
if (d < KINDA_SMALL_NUMBER)return c + b;
|
||||||
|
if (t < d * 0.5f) return InBounce(c, 0, t * 2, d) * .5f + b;
|
||||||
|
else return OutBounce(c, 0, t * 2 - d, d) * .5f + c * .5f + b;
|
||||||
|
}
|
||||||
|
/** Tween use CurveFloat, in range of 0-1. if curveFloat is null, fallback to Linear */
|
||||||
|
float CurveFloat(float c, float b, float t, float d);
|
||||||
|
#pragma endregion
|
||||||
|
};
|
||||||
71
Plugins/LTween/Source/LTween/Public/LTweenerSequence.h
Normal file
71
Plugins/LTween/Source/LTween/Public/LTweenerSequence.h
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
// Copyright 2019-Present LexLiu. All Rights Reserved.
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
#include "LTweener.h"
|
||||||
|
#include "LTweenerSequence.generated.h"
|
||||||
|
|
||||||
|
UCLASS(BlueprintType)
|
||||||
|
class LTWEEN_API ULTweenerSequence:public ULTweener
|
||||||
|
{
|
||||||
|
GENERATED_BODY()
|
||||||
|
private:
|
||||||
|
UPROPERTY(VisibleAnywhere, Category = LTween)TArray<TObjectPtr<ULTweener>> tweenerList;
|
||||||
|
UPROPERTY(VisibleAnywhere, Category = LTween)TArray<TObjectPtr<ULTweener>> finishedTweenerList;
|
||||||
|
float lastTweenStartTime = 0;
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* Adds the given tween to the end of the Sequence.
|
||||||
|
* Not support Tweener type: Delay/ DelayFrame/ Virtual.
|
||||||
|
* Has no effect if the Sequence has already started.
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
ULTweenerSequence* Append(UObject* WorldContextObject, ULTweener* tweener);
|
||||||
|
/**
|
||||||
|
* Adds the given interval to the end of the Sequence.
|
||||||
|
* Has no effect if the Sequence has already started.
|
||||||
|
* @param interval The interval duration
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
ULTweenerSequence* AppendInterval(UObject* WorldContextObject, float interval);
|
||||||
|
/**
|
||||||
|
* Inserts the given tween at the given time position in the Sequence, automatically adding an interval if needed.
|
||||||
|
* Not support Tweener type: Delay/ DelayFrame/ Virtual.
|
||||||
|
* Has no effect if the Sequence has already started.
|
||||||
|
* @param timePosition The time position where the tween will be placed
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
ULTweenerSequence* Insert(UObject* WorldContextObject, float timePosition, ULTweener* tweener);
|
||||||
|
/**
|
||||||
|
* Adds the given tween to the beginning of the Sequence, pushing forward the other nested content.
|
||||||
|
* Not support Tweener type: Delay/ DelayFrame/ Virtual.
|
||||||
|
* Has no effect if the Sequence has already started.
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
ULTweenerSequence* Prepend(UObject* WorldContextObject, ULTweener* tweener);
|
||||||
|
/**
|
||||||
|
* Adds the given interval to the beginning of the Sequence, pushing forward the other nested content.
|
||||||
|
* Has no effect if the Sequence has already started.
|
||||||
|
* @param interval The interval duration
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
ULTweenerSequence* PrependInterval(UObject* WorldContextObject, float interval);
|
||||||
|
/**
|
||||||
|
* Inserts the given tween at the same time position of the last tween added to the Sequence.
|
||||||
|
* Note that, in case of a Join after an interval, the insertion time will be the time where the interval starts, not where it finishes.
|
||||||
|
* Not support Tweener type: Delay/ DelayFrame/ Virtual.
|
||||||
|
* Has no effect if the Sequence has already started.
|
||||||
|
*/
|
||||||
|
UFUNCTION(BlueprintCallable, meta = (WorldContext = "WorldContextObject"), Category = LTween)
|
||||||
|
ULTweenerSequence* Join(UObject* WorldContextObject, ULTweener* tweener);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void OnStartGetValue() override {};
|
||||||
|
virtual void TweenAndApplyValue(float currentTime) override;
|
||||||
|
virtual void SetValueForIncremental() override;
|
||||||
|
virtual void SetValueForYoyo() override;
|
||||||
|
virtual void SetValueForRestart() override;
|
||||||
|
virtual void SetOriginValueForRestart() override;
|
||||||
|
|
||||||
|
virtual void Restart()override;
|
||||||
|
virtual void Goto(float timePoint)override;
|
||||||
|
};
|
||||||
6
Plugins/SUDS/Extras/PygmentsLexer/.vscode/settings.json
vendored
Normal file
6
Plugins/SUDS/Extras/PygmentsLexer/.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
{
|
||||||
|
"cSpell.words": [
|
||||||
|
"speakerline",
|
||||||
|
"squarebrackets"
|
||||||
|
]
|
||||||
|
}
|
||||||
12
Plugins/SUDS/Extras/PygmentsLexer/setup.py
Normal file
12
Plugins/SUDS/Extras/PygmentsLexer/setup.py
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
from setuptools import setup, find_packages
|
||||||
|
|
||||||
|
setup (
|
||||||
|
name='sudslexer',
|
||||||
|
packages=find_packages(),
|
||||||
|
version="0.4.0",
|
||||||
|
entry_points =
|
||||||
|
"""
|
||||||
|
[pygments.lexers]
|
||||||
|
sudslexer = sudslexer.lexer:SudsLexer
|
||||||
|
""",
|
||||||
|
)
|
||||||
71
Plugins/SUDS/Extras/PygmentsLexer/sudslexer/lexer.py
Normal file
71
Plugins/SUDS/Extras/PygmentsLexer/sudslexer/lexer.py
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
from pygments.lexer import RegexLexer, bygroups
|
||||||
|
from pygments.token import *
|
||||||
|
|
||||||
|
class SudsLexer(RegexLexer):
|
||||||
|
name = 'SUDS'
|
||||||
|
aliases = ['suds']
|
||||||
|
filenames = ['*.sud']
|
||||||
|
|
||||||
|
tokens = {
|
||||||
|
'root': [
|
||||||
|
(r'===\s*\n', Generic.Heading),
|
||||||
|
# Choices
|
||||||
|
(r'\s*\*\-?\s+[^\@\n]+[\@\n]', Generic.Subheading),
|
||||||
|
(r'\s*#.*\n', Comment),
|
||||||
|
# Speaker lines
|
||||||
|
(r'\s*\S+\:', Name.Class, 'speakerline'),
|
||||||
|
# Open brackets for special functions
|
||||||
|
(r'\[', Operator, 'squarebrackets'),
|
||||||
|
|
||||||
|
# Variables
|
||||||
|
(r'(\{)([\w\.]+)(\})', bygroups(Operator, Name.Variable, Operator)),
|
||||||
|
(r'(\|)(plural|gender)(\()(.*?)(\))', bygroups(Operator, Keyword, Operator, Keyword, Operator)),
|
||||||
|
(r'\b([tT]rue|[fF]alse|[mM]asculine|[fF]eminine|[nN]euter)\b', Name.Constant),
|
||||||
|
# Line IDs
|
||||||
|
(r'\@[0-9a-fA-F]+\@', Comment.Special),
|
||||||
|
# Embedded markup
|
||||||
|
(r'\<\w+\>', Name.Decorator),
|
||||||
|
(r'\<\/\>', Name.Decorator),
|
||||||
|
# Goto labels
|
||||||
|
(r'\s*:\S+\n', Name.Label),
|
||||||
|
# Comments
|
||||||
|
(r'\s*\#[\=\+\%]?.*\n', Comment.Special),
|
||||||
|
# Fallback for all other text
|
||||||
|
# Needs an optional \n on the end to finish lines correctly
|
||||||
|
(r'\s+[\n]?', Text),
|
||||||
|
(r'\S+?[\n]?', Text), # non-greedy so we don't consume all non-whitespace
|
||||||
|
|
||||||
|
|
||||||
|
],
|
||||||
|
# While in a speaker line, we ignore everything else except variables & markup
|
||||||
|
'speakerline' : [
|
||||||
|
# Variables
|
||||||
|
(r'(\{)([\w\.]+)(\})', bygroups(Operator, Name.Variable, Operator)),
|
||||||
|
(r'(\|)(plural|gender)(\()(.*?)(\))', bygroups(Operator, Keyword, Operator, Keyword, Operator)),
|
||||||
|
(r'[\@\n]', Text, '#pop'),
|
||||||
|
# Embedded markup
|
||||||
|
(r'\<\w+\>', Name.Decorator),
|
||||||
|
(r'\<\/\>', Name.Decorator),
|
||||||
|
(r'[^\@\n\<\{]+', Text),
|
||||||
|
|
||||||
|
],
|
||||||
|
# While in a [] block, highlight operators etc (don't do it elsewhere)
|
||||||
|
'squarebrackets' : [
|
||||||
|
# Close bracket finishes
|
||||||
|
(r'\]\s*[\n]?', Operator, '#pop'),
|
||||||
|
# Variables
|
||||||
|
(r'(\{)([\w\.]+)(\})', bygroups(Operator, Name.Variable, Operator)),
|
||||||
|
(r'\+\/\-\*\!\%', Operator),
|
||||||
|
(r'\"[^\"]*\"', String.Double),
|
||||||
|
(r'\`[^\`]*\`', String.Escape),
|
||||||
|
(r'\d+(\.\d+)?', Number),
|
||||||
|
(r'\b([tT]rue|[fF]alse|[mM]asculine|[fF]eminine|[nN]euter)\b', Name.Constant),
|
||||||
|
# Set, event commands so we can highlight variable/event differently
|
||||||
|
(r'\s*(set|event)(\s+)([^\]\s]+)', bygroups(Keyword, Text, Name.Variable)),
|
||||||
|
(r'\s*(if|else|elseif|endif|event|return|goto|gosub|go to|go sub|random|endrandom)\b', Keyword),
|
||||||
|
(r'\b(and|or|&&|\|\||not)\b', Operator),
|
||||||
|
(r'[,]', Punctuation),
|
||||||
|
(r'\s+', Text), # whitespace OK
|
||||||
|
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -2,6 +2,9 @@
|
|||||||
// Released under the MIT license https://opensource.org/license/MIT/
|
// Released under the MIT license https://opensource.org/license/MIT/
|
||||||
#include "SUDSValue.h"
|
#include "SUDSValue.h"
|
||||||
|
|
||||||
|
#include "UObject/Class.h"
|
||||||
|
#include "Internationalization/Text.h"
|
||||||
|
|
||||||
FArchive& operator<<(FArchive& Ar, FSUDSValue& Value)
|
FArchive& operator<<(FArchive& Ar, FSUDSValue& Value)
|
||||||
{
|
{
|
||||||
// Custom serialisation since we can't auto-serialise union, TOptional
|
// Custom serialisation since we can't auto-serialise union, TOptional
|
||||||
@@ -62,7 +65,11 @@ FString FSUDSValue::ToString() const
|
|||||||
case ESUDSValueType::Boolean:
|
case ESUDSValueType::Boolean:
|
||||||
return GetBooleanValue() ? "True" : "False";
|
return GetBooleanValue() ? "True" : "False";
|
||||||
case ESUDSValueType::Gender:
|
case ESUDSValueType::Gender:
|
||||||
return StaticEnum<ETextGender>()->GetNameStringByValue((int64)GetGenderValue());
|
#if ENGINE_MAJOR_VERSION ==5 && ENGINE_MINOR_VERSION >= 8
|
||||||
|
return LexToString(GetGenderValue());
|
||||||
|
#else
|
||||||
|
return *StaticEnum<ETextGender>()->GetNameStringByValue((int64)GetGenderValue());
|
||||||
|
#endif
|
||||||
case ESUDSValueType::Name:
|
case ESUDSValueType::Name:
|
||||||
return GetNameValue().ToString();
|
return GetNameValue().ToString();
|
||||||
case ESUDSValueType::Variable:
|
case ESUDSValueType::Variable:
|
||||||
|
|||||||
@@ -706,7 +706,11 @@ void FSUDSEditorToolkit::OnDialogueChoice(USUDSDialogue* D, int ChoiceIndex, int
|
|||||||
|
|
||||||
void FSUDSEditorToolkit::OnDialogueEvent(USUDSDialogue* D, FName EventName, const TArray<FSUDSValue>& Args, int LineNo)
|
void FSUDSEditorToolkit::OnDialogueEvent(USUDSDialogue* D, FName EventName, const TArray<FSUDSValue>& Args, int LineNo)
|
||||||
{
|
{
|
||||||
|
#if ENGINE_MAJOR_VERSION ==5 && ENGINE_MINOR_VERSION >= 8
|
||||||
|
TStringBuilder<256> B;
|
||||||
|
#else
|
||||||
FStringBuilderBase B;
|
FStringBuilderBase B;
|
||||||
|
#endif
|
||||||
if (Args.Num() > 0)
|
if (Args.Num() > 0)
|
||||||
{
|
{
|
||||||
for (auto& Arg : Args)
|
for (auto& Arg : Args)
|
||||||
@@ -1372,6 +1376,24 @@ TSharedRef<SWidget> SSUDSEditorVariableItem::GetGenderMenu()
|
|||||||
{
|
{
|
||||||
FMenuBuilder MenuBuilder(true, NULL);
|
FMenuBuilder MenuBuilder(true, NULL);
|
||||||
|
|
||||||
|
#if ENGINE_MAJOR_VERSION ==5 && ENGINE_MINOR_VERSION >= 8
|
||||||
|
// StaticEnum<ETextGender>() doesn't exist anymore so we have to do this manually
|
||||||
|
const FUIAction Action0(FExecuteAction::CreateSP(this, &SSUDSEditorVariableItem::OnGenderSelected, ETextGender::Feminine));
|
||||||
|
MenuBuilder.AddMenuEntry(FText::FromString(LexToString(ETextGender::Feminine)),
|
||||||
|
FText(),
|
||||||
|
FSlateIcon(),
|
||||||
|
Action0);
|
||||||
|
const FUIAction Action1(FExecuteAction::CreateSP(this, &SSUDSEditorVariableItem::OnGenderSelected, ETextGender::Masculine));
|
||||||
|
MenuBuilder.AddMenuEntry(FText::FromString(LexToString(ETextGender::Masculine)),
|
||||||
|
FText(),
|
||||||
|
FSlateIcon(),
|
||||||
|
Action1);
|
||||||
|
const FUIAction Action2(FExecuteAction::CreateSP(this, &SSUDSEditorVariableItem::OnGenderSelected, ETextGender::Neuter));
|
||||||
|
MenuBuilder.AddMenuEntry(FText::FromString(LexToString(ETextGender::Neuter)),
|
||||||
|
FText(),
|
||||||
|
FSlateIcon(),
|
||||||
|
Action2);
|
||||||
|
#else
|
||||||
// NumEnums() - 1 because the last value is the autogen _MAX value
|
// NumEnums() - 1 because the last value is the autogen _MAX value
|
||||||
for (int i = 0; i < StaticEnum<ETextGender>()->NumEnums() - 1; ++i)
|
for (int i = 0; i < StaticEnum<ETextGender>()->NumEnums() - 1; ++i)
|
||||||
{
|
{
|
||||||
@@ -1383,6 +1405,7 @@ TSharedRef<SWidget> SSUDSEditorVariableItem::GetGenderMenu()
|
|||||||
Action);
|
Action);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return MenuBuilder.MakeWidget();
|
return MenuBuilder.MakeWidget();
|
||||||
|
|
||||||
|
|||||||
@@ -1772,7 +1772,11 @@ FString FSUDSScriptImporter::GetCurrentTreePath(const FSUDSScriptImporter::Parse
|
|||||||
// Do NOT fallthrough to here
|
// Do NOT fallthrough to here
|
||||||
// Fallthrough to here instead (/)
|
// Fallthrough to here instead (/)
|
||||||
|
|
||||||
|
#if ENGINE_MAJOR_VERSION ==5 && ENGINE_MINOR_VERSION >= 8
|
||||||
|
TStringBuilder<256> B;
|
||||||
|
#else
|
||||||
FStringBuilderBase B;
|
FStringBuilderBase B;
|
||||||
|
#endif
|
||||||
for (auto Indent : Tree.IndentLevelStack)
|
for (auto Indent : Tree.IndentLevelStack)
|
||||||
{
|
{
|
||||||
B.Appendf(TEXT("%s%s"), *Indent.PathEntry, *TreePathSeparator);
|
B.Appendf(TEXT("%s%s"), *Indent.PathEntry, *TreePathSeparator);
|
||||||
@@ -1784,7 +1788,11 @@ FString FSUDSScriptImporter::GetCurrentTreeConditionalPath(const FSUDSScriptImpo
|
|||||||
{
|
{
|
||||||
// Like GetCurrentTreePath, but for conditional blocks
|
// Like GetCurrentTreePath, but for conditional blocks
|
||||||
// Cannot fall through to blocks that aren't on the same conditional path
|
// Cannot fall through to blocks that aren't on the same conditional path
|
||||||
|
#if ENGINE_MAJOR_VERSION ==5 && ENGINE_MINOR_VERSION >= 8
|
||||||
|
TStringBuilder<256> B;
|
||||||
|
#else
|
||||||
FStringBuilderBase B;
|
FStringBuilderBase B;
|
||||||
|
#endif
|
||||||
int BlockIdx = Tree.CurrentConditionalBlockIdx;
|
int BlockIdx = Tree.CurrentConditionalBlockIdx;
|
||||||
B.Append(TreePathSeparator);
|
B.Append(TreePathSeparator);
|
||||||
// work backwards, hence prepend
|
// work backwards, hence prepend
|
||||||
@@ -1803,7 +1811,11 @@ FString FSUDSScriptImporter::GetCurrentTreeConditionalPath(const FSUDSScriptImpo
|
|||||||
FString FSUDSScriptImporter::GetTreeConditionalPath(const FSUDSScriptImporter::ParsedTree& Tree, int NodeIndex)
|
FString FSUDSScriptImporter::GetTreeConditionalPath(const FSUDSScriptImporter::ParsedTree& Tree, int NodeIndex)
|
||||||
{
|
{
|
||||||
// Like GetCurrentTreeConditionalPath, but we're not in the block context. Follow the nodes back up
|
// Like GetCurrentTreeConditionalPath, but we're not in the block context. Follow the nodes back up
|
||||||
|
#if ENGINE_MAJOR_VERSION ==5 && ENGINE_MINOR_VERSION >= 8
|
||||||
|
TStringBuilder<256> B;
|
||||||
|
#else
|
||||||
FStringBuilderBase B;
|
FStringBuilderBase B;
|
||||||
|
#endif
|
||||||
B.Append(TreePathSeparator);
|
B.Append(TreePathSeparator);
|
||||||
|
|
||||||
while (Tree.Nodes.IsValidIndex(NodeIndex))
|
while (Tree.Nodes.IsValidIndex(NodeIndex))
|
||||||
@@ -2543,7 +2555,11 @@ void FSUDSScriptImporter::PopulateAssetFromTree(USUDSScript* Asset,
|
|||||||
{
|
{
|
||||||
case ESUDSParsedNodeType::Text:
|
case ESUDSParsedNodeType::Text:
|
||||||
{
|
{
|
||||||
|
#if ENGINE_MAJOR_VERSION ==5 && ENGINE_MINOR_VERSION >= 8
|
||||||
|
StringTable->GetMutableStringTable()->SetSourceString(InNode.TextID, InNode.Text, "");
|
||||||
|
#else
|
||||||
StringTable->GetMutableStringTable()->SetSourceString(InNode.TextID, InNode.Text);
|
StringTable->GetMutableStringTable()->SetSourceString(InNode.TextID, InNode.Text);
|
||||||
|
#endif
|
||||||
// Always include speaker metadata
|
// Always include speaker metadata
|
||||||
StringTable->GetMutableStringTable()->SetMetaData(InNode.TextID, FName("Speaker"), InNode.Identifier);
|
StringTable->GetMutableStringTable()->SetMetaData(InNode.TextID, FName("Speaker"), InNode.Identifier);
|
||||||
// Other metadata
|
// Other metadata
|
||||||
@@ -2579,7 +2595,11 @@ void FSUDSScriptImporter::PopulateAssetFromTree(USUDSScript* Asset,
|
|||||||
FSUDSExpression Expr = InNode.Expression;
|
FSUDSExpression Expr = InNode.Expression;
|
||||||
if (Expr.IsTextLiteral())
|
if (Expr.IsTextLiteral())
|
||||||
{
|
{
|
||||||
|
#if ENGINE_MAJOR_VERSION ==5 && ENGINE_MINOR_VERSION >= 8
|
||||||
|
StringTable->GetMutableStringTable()->SetSourceString(InNode.TextID, Expr.GetTextLiteralValue().ToString(), "");
|
||||||
|
#else
|
||||||
StringTable->GetMutableStringTable()->SetSourceString(InNode.TextID, Expr.GetTextLiteralValue().ToString());
|
StringTable->GetMutableStringTable()->SetSourceString(InNode.TextID, Expr.GetTextLiteralValue().ToString());
|
||||||
|
#endif
|
||||||
Expr.SetTextLiteralValue(FText::FromStringTable (StringTable->GetStringTableId(), InNode.TextID));
|
Expr.SetTextLiteralValue(FText::FromStringTable (StringTable->GetStringTableId(), InNode.TextID));
|
||||||
}
|
}
|
||||||
SetNode->Init(InNode.Identifier, Expr, InNode.SourceLineNo);
|
SetNode->Init(InNode.Identifier, Expr, InNode.SourceLineNo);
|
||||||
@@ -2707,7 +2727,11 @@ void FSUDSScriptImporter::PopulateAssetFromTree(USUDSScript* Asset,
|
|||||||
|
|
||||||
if (!InEdge.TextID.IsEmpty() && !InEdge.Text.IsEmpty())
|
if (!InEdge.TextID.IsEmpty() && !InEdge.Text.IsEmpty())
|
||||||
{
|
{
|
||||||
|
#if ENGINE_MAJOR_VERSION ==5 && ENGINE_MINOR_VERSION >= 8
|
||||||
|
StringTable->GetMutableStringTable()->SetSourceString(InEdge.TextID, InEdge.Text, "");
|
||||||
|
#else
|
||||||
StringTable->GetMutableStringTable()->SetSourceString(InEdge.TextID, InEdge.Text);
|
StringTable->GetMutableStringTable()->SetSourceString(InEdge.TextID, InEdge.Text);
|
||||||
|
#endif
|
||||||
NewEdge.SetText(FText::FromStringTable(StringTable->GetStringTableId(), InEdge.TextID));
|
NewEdge.SetText(FText::FromStringTable(StringTable->GetStringTableId(), InEdge.TextID));
|
||||||
// Always include speaker metadata, always the player in a choice
|
// Always include speaker metadata, always the player in a choice
|
||||||
// Identify that it's a choice so translators know that there may be more limited space
|
// Identify that it's a choice so translators know that there may be more limited space
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "StevesBPL.h"
|
#include "StevesBPL.h"
|
||||||
|
#include "Misc/ConfigCacheIni.h"
|
||||||
#include "StevesUiHelpers.h"
|
#include "StevesUiHelpers.h"
|
||||||
#include "StevesUI/StevesUI.h"
|
#include "StevesUI/StevesUI.h"
|
||||||
#include "ContentStreaming.h"
|
#include "ContentStreaming.h"
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ float UStevesEasings::EaseAlpha(float InAlpha, EStevesEaseFunction Func)
|
|||||||
constexpr float BackC2 = BackC1 * 1.525f;
|
constexpr float BackC2 = BackC1 * 1.525f;
|
||||||
constexpr float BackC3 = BackC1 + 1.f;
|
constexpr float BackC3 = BackC1 + 1.f;
|
||||||
constexpr float ElasticC4 = UE_TWO_PI / 3.f;
|
constexpr float ElasticC4 = UE_TWO_PI / 3.f;
|
||||||
constexpr float ElasticC5 = UE_TWO_PI / 4.5;
|
constexpr float ElasticC5 = UE_TWO_PI / 4.5f;
|
||||||
|
|
||||||
switch(Func)
|
switch(Func)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -110,7 +110,7 @@ void UStevesGameSubsystem::NotifyEnhancedInputMappingsChanged()
|
|||||||
OnEnhancedInputMappingsChanged.Broadcast();
|
OnEnhancedInputMappingsChanged.Broadcast();
|
||||||
};
|
};
|
||||||
FTimerHandle TempHandle;
|
FTimerHandle TempHandle;
|
||||||
GetWorld()->GetTimerManager().SetTimer(TempHandle, FTimerDelegate::CreateLambda(DelayedFunc), 0.05, false);
|
GetWorld()->GetTimerManager().SetTimer(TempHandle, FTimerDelegate::CreateLambda(DelayedFunc), 0.05f, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
TSoftObjectPtr<UInputAction> UStevesGameSubsystem::FindEnhancedInputAction(const FString& Name)
|
TSoftObjectPtr<UInputAction> UStevesGameSubsystem::FindEnhancedInputAction(const FString& Name)
|
||||||
|
|||||||
@@ -262,13 +262,13 @@ public:
|
|||||||
*/
|
*/
|
||||||
uint32 GetCurrentSeed() const
|
uint32 GetCurrentSeed() const
|
||||||
{
|
{
|
||||||
return InitialSeed;
|
return Seed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
FString ToString() const
|
FString ToString() const
|
||||||
{
|
{
|
||||||
return FString::Printf(TEXT("FStevesBalancedRandomStream(InitialSeed=%i, Seed=%u)"), InitialSeed, InitialSeed);
|
return FString::Printf(TEXT("FStevesBalancedRandomStream(InitialSeed=%u, Seed=%u)"), InitialSeed, Seed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -407,13 +407,13 @@ public:
|
|||||||
*/
|
*/
|
||||||
FORCEINLINE uint32 GetCurrentSeed() const
|
FORCEINLINE uint32 GetCurrentSeed() const
|
||||||
{
|
{
|
||||||
return InitialSeed;
|
return Seed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
FString ToString() const
|
FString ToString() const
|
||||||
{
|
{
|
||||||
return FString::Printf(TEXT("FStevesBalancedRandomStream1D(InitialSeed=%i, Seed=%u)"), InitialSeed, InitialSeed);
|
return FString::Printf(TEXT("FStevesBalancedRandomStream1D(InitialSeed=%u, Seed=%u)"), InitialSeed, Seed);
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
@@ -650,13 +650,13 @@ public:
|
|||||||
*/
|
*/
|
||||||
uint32 GetCurrentSeed() const
|
uint32 GetCurrentSeed() const
|
||||||
{
|
{
|
||||||
return InitialSeed;
|
return Base2Seed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
FString ToString() const
|
FString ToString() const
|
||||||
{
|
{
|
||||||
return FString::Printf(TEXT("FStevesBalancedRandomStream2D(InitialSeed=%i, Seed=%u)"), InitialSeed, InitialSeed);
|
return FString::Printf(TEXT("FStevesBalancedRandomStream2D(InitialSeed=%u, Seed=%u)"), InitialSeed, Base2Seed);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -775,7 +775,7 @@ public:
|
|||||||
|
|
||||||
uint32 GetInitialSeed() const
|
uint32 GetInitialSeed() const
|
||||||
{
|
{
|
||||||
return InitialSeed;
|
return Base2Seed;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -922,7 +922,7 @@ public:
|
|||||||
|
|
||||||
FString ToString() const
|
FString ToString() const
|
||||||
{
|
{
|
||||||
return FString::Printf(TEXT("FStevesBalancedRandomStream(InitialSeed=%i, Seed=%u)"), InitialSeed, InitialSeed);
|
return FString::Printf(TEXT("FStevesBalancedRandomStream(InitialSeed=%u, Seed=%u)"), InitialSeed, Base2Seed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -103,7 +103,7 @@ protected:
|
|||||||
const EInputMode DefaultButtonInputMode = EInputMode::Keyboard;
|
const EInputMode DefaultButtonInputMode = EInputMode::Keyboard;
|
||||||
const EInputMode DefaultAxisInputMode = EInputMode::Mouse;
|
const EInputMode DefaultAxisInputMode = EInputMode::Mouse;
|
||||||
const float MouseMoveThreshold = 1;
|
const float MouseMoveThreshold = 1;
|
||||||
const float GamepadAxisThreshold = 0.2;
|
const float GamepadAxisThreshold = 0.2f;
|
||||||
|
|
||||||
bool ShouldProcessInputEvents() const;
|
bool ShouldProcessInputEvents() const;
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -1,40 +1,38 @@
|
|||||||
{
|
{
|
||||||
"FileVersion": 3,
|
"FileVersion": 3,
|
||||||
"Version": 1,
|
"Version": 1,
|
||||||
"VersionName": "1.1.1.0",
|
"VersionName": "1.2.1.0",
|
||||||
"EngineVersion": "",
|
"FriendlyName": "Steve's UE Helpers",
|
||||||
"FriendlyName": "Steve's UE Helpers",
|
"Description": "A set of common helper classes for UE projects by Steve Streeting",
|
||||||
"Description": "A set of common helper classes for UE projects by Steve Streeting",
|
"Category": "Code Utilities",
|
||||||
"Category": "Code Utilities",
|
"CreatedBy": "Steve Streeting",
|
||||||
"CreatedBy": "Steve Streeting",
|
"CreatedByURL": "https://www.stevestreeting.com",
|
||||||
"CreatedByURL": "https://www.stevestreeting.com",
|
"DocsURL": "https://github.com/sinbad/StevesUEHelpers/blob/master/ReadMe.md",
|
||||||
"DocsURL": "https://github.com/sinbad/StevesUEHelpers/blob/master/ReadMe.md",
|
"MarketplaceURL": "com.epicgames.launcher://ue/Fab/product/6a48c58c-1771-42f6-b46f-2b09e31b1699",
|
||||||
"MarketplaceURL": "com.epicgames.launcher://ue/Fab/product/6a48c58c-1771-42f6-b46f-2b09e31b1699",
|
"SupportURL": "https://github.com/sinbad/StevesUEHelpers",
|
||||||
"SupportURL": "https://github.com/sinbad/StevesUEHelpers",
|
"EngineVersion": "5.8.0",
|
||||||
"EnabledByDefault": true,
|
"CanContainContent": false,
|
||||||
"CanContainContent": false,
|
"Installed": true,
|
||||||
"IsBetaVersion": false,
|
"Modules": [
|
||||||
"Installed": false,
|
{
|
||||||
"Modules": [
|
"Name": "StevesUEHelpers",
|
||||||
{
|
"Type": "Runtime",
|
||||||
"Name": "StevesUEHelpers",
|
"LoadingPhase": "PreDefault",
|
||||||
"Type": "Runtime",
|
"PlatformAllowList": [
|
||||||
"LoadingPhase": "PreDefault",
|
"Win64",
|
||||||
"PlatformAllowList": [
|
"Linux",
|
||||||
"Win64",
|
"Mac"
|
||||||
"Linux",
|
]
|
||||||
"Mac"
|
},
|
||||||
]
|
{
|
||||||
},
|
"Name": "StevesUEHelpersEd",
|
||||||
{
|
"Type": "Editor",
|
||||||
"Name": "StevesUEHelpersEd",
|
"LoadingPhase": "PostDefault",
|
||||||
"Type": "Editor",
|
"PlatformAllowList": [
|
||||||
"LoadingPhase": "PostDefault",
|
"Win64",
|
||||||
"PlatformAllowList": [
|
"Linux",
|
||||||
"Win64",
|
"Mac"
|
||||||
"Linux",
|
]
|
||||||
"Mac"
|
}
|
||||||
]
|
]
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
@@ -8,8 +8,8 @@ public class FayeTarget : TargetRules
|
|||||||
public FayeTarget(TargetInfo Target) : base(Target)
|
public FayeTarget(TargetInfo Target) : base(Target)
|
||||||
{
|
{
|
||||||
Type = TargetType.Game;
|
Type = TargetType.Game;
|
||||||
DefaultBuildSettings = BuildSettingsVersion.V6;
|
DefaultBuildSettings = BuildSettingsVersion.V7;
|
||||||
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_7;
|
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_8;
|
||||||
ExtraModuleNames.Add("Faye");
|
ExtraModuleNames.Add("Faye");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ public class FayeEditorTarget : TargetRules
|
|||||||
public FayeEditorTarget( TargetInfo Target) : base(Target)
|
public FayeEditorTarget( TargetInfo Target) : base(Target)
|
||||||
{
|
{
|
||||||
Type = TargetType.Editor;
|
Type = TargetType.Editor;
|
||||||
DefaultBuildSettings = BuildSettingsVersion.V6;
|
DefaultBuildSettings = BuildSettingsVersion.V7;
|
||||||
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_7;
|
IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_8;
|
||||||
ExtraModuleNames.Add("Faye");
|
ExtraModuleNames.Add("Faye");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user