From 811ec28e542b99bec58b30a9911bdbc07c4c767d Mon Sep 17 00:00:00 2001 From: Mario Zechner Date: Tue, 14 Jan 2025 14:07:35 +0100 Subject: [PATCH] [ue] Update to UE 5.5, closes #2727 --- .../Private/SpineSkeletonAnimationComponent.cpp | 11 ++++++++++- .../Source/SpinePlugin/Private/SpineWidget.cpp | 14 ++++++++++++-- .../Public/SpineSkeletonAnimationComponent.h | 10 +++++++++- .../Source/SpinePlugin/Public/SpineWidget.h | 7 +++++++ spine-ue/SpineUE.uproject | 2 +- 5 files changed, 39 insertions(+), 5 deletions(-) diff --git a/spine-ue/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonAnimationComponent.cpp b/spine-ue/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonAnimationComponent.cpp index 44b41de32..1c800a871 100644 --- a/spine-ue/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonAnimationComponent.cpp +++ b/spine-ue/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonAnimationComponent.cpp @@ -75,6 +75,7 @@ USpineSkeletonAnimationComponent::USpineSkeletonAnimationComponent() { bTickInEditor = true; bAutoActivate = true; bAutoPlaying = true; + physicsTimeScale = 1; } void USpineSkeletonAnimationComponent::BeginPlay() { @@ -114,7 +115,7 @@ void USpineSkeletonAnimationComponent::InternalTick(float DeltaTime, bool CallDe state->update(DeltaTime); state->apply(*skeleton); if (CallDelegates) BeforeUpdateWorldTransform.Broadcast(this); - skeleton->update(DeltaTime); + skeleton->update(physicsTimeScale * DeltaTime); skeleton->updateWorldTransform(Physics_Update); if (CallDelegates) AfterUpdateWorldTransform.Broadcast(this); } @@ -296,4 +297,12 @@ void USpineSkeletonAnimationComponent::ClearTrack(int trackIndex) { } } +void USpineSkeletonAnimationComponent::SetPhysicsTimeScale(float scale) { + physicsTimeScale = scale; +} + +float USpineSkeletonAnimationComponent::GetPhysicsTimeScale() { + return physicsTimeScale; +} + #undef LOCTEXT_NAMESPACE diff --git a/spine-ue/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineWidget.cpp b/spine-ue/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineWidget.cpp index a6034adf4..4bcc23538 100644 --- a/spine-ue/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineWidget.cpp +++ b/spine-ue/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineWidget.cpp @@ -82,6 +82,7 @@ USpineWidget::USpineWidget(const FObjectInitializer &ObjectInitializer) : Super( TextureParameterName = FName(TEXT("SpriteTexture")); + physicsTimeScale = 1.0f; worldVertices.ensureCapacity(1024 * 2); bAutoPlaying = true; @@ -134,7 +135,7 @@ void USpineWidget::Tick(float DeltaTime, bool CallDelegates) { state->update(DeltaTime); state->apply(*skeleton); if (CallDelegates) BeforeUpdateWorldTransform.Broadcast(this); - skeleton->update(DeltaTime); + skeleton->update(physicsTimeScale * DeltaTime); skeleton->updateWorldTransform(Physics_Update); if (CallDelegates) AfterUpdateWorldTransform.Broadcast(this); } @@ -547,4 +548,13 @@ void USpineWidget::ResetPhysicsConstraints() { constraints[i]->reset(); } } -} \ No newline at end of file +} + +void USpineWidget::SetPhysicsTimeScale(float scale) { + physicsTimeScale = scale; +} + +float USpineWidget::GetPhysicsTimeScale() { + return physicsTimeScale; +} + diff --git a/spine-ue/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonAnimationComponent.h b/spine-ue/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonAnimationComponent.h index 6975b65c5..8715c6224 100644 --- a/spine-ue/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonAnimationComponent.h +++ b/spine-ue/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonAnimationComponent.h @@ -218,7 +218,7 @@ public: UPROPERTY(BlueprintAssignable, Category = "Components|Spine|TrackEntry") FSpineAnimationDisposeDelegate AnimationDispose; - + virtual void BeginDestroy() override; protected: @@ -303,6 +303,12 @@ public: UPROPERTY(EditAnywhere, Category = Spine) FString PreviewSkin; + UFUNCTION(BlueprintCallable, Category = "Components|Spine|Skeleton") + void SetPhysicsTimeScale(float scale); + + UFUNCTION(BlueprintCallable, Category = "Components|Spine|Skeleton") + float GetPhysicsTimeScale(); + // used in C event callback. Needs to be public as we can't call // protected methods from plain old C function. void GCTrackEntry(UTrackEntry *entry) { trackEntries.Remove(entry); } @@ -319,6 +325,8 @@ protected: UPROPERTY() TSet trackEntries; + float physicsTimeScale; + private: /* If the animation should update automatically. */ UPROPERTY() diff --git a/spine-ue/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineWidget.h b/spine-ue/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineWidget.h index 0019a6eea..fb9ed1bea 100644 --- a/spine-ue/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineWidget.h +++ b/spine-ue/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineWidget.h @@ -162,6 +162,12 @@ public: UFUNCTION(BlueprintCallable, Category = "Components|Spine|Skeleton") void ResetPhysicsConstraints(); + UFUNCTION(BlueprintCallable, Category = "Components|Spine|Skeleton") + void SetPhysicsTimeScale(float scale); + + UFUNCTION(BlueprintCallable, Category = "Components|Spine|Skeleton") + float GetPhysicsTimeScale(); + UPROPERTY(BlueprintAssignable, Category = "Components|Spine|Skeleton") FSpineWidgetBeforeUpdateWorldTransformDelegate BeforeUpdateWorldTransform; @@ -246,6 +252,7 @@ protected: spine::Atlas *lastSpineAtlas = nullptr; USpineSkeletonDataAsset *lastData = nullptr; spine::Skin *customSkin = nullptr; + float physicsTimeScale; // Need to hold on to the dynamic instances, or the GC will kill us while updating them UPROPERTY() diff --git a/spine-ue/SpineUE.uproject b/spine-ue/SpineUE.uproject index d9f446124..b3f7b7c31 100644 --- a/spine-ue/SpineUE.uproject +++ b/spine-ue/SpineUE.uproject @@ -1,6 +1,6 @@ { "FileVersion": 3, - "EngineAssociation": "5.4", + "EngineAssociation": "5.5", "Category": "", "Description": "", "Modules": [