From fc1676c5925bbc2d24b362c42ab3d8da912949e5 Mon Sep 17 00:00:00 2001 From: badlogic Date: Thu, 1 Dec 2016 16:51:13 +0100 Subject: [PATCH] [ue4] First few steps with blueprints. --- spine-ue4/Content/Maps/example.umap | Bin 828309 -> 828319 bytes spine-ue4/Content/Raptor_Blueprint.uasset | Bin 0 -> 205085 bytes .../Private/SpineSkeletonComponent.cpp | 63 ++++++++++++------ .../Public/SpineSkeletonComponent.h | 31 ++++++--- 4 files changed, 64 insertions(+), 30 deletions(-) create mode 100644 spine-ue4/Content/Raptor_Blueprint.uasset diff --git a/spine-ue4/Content/Maps/example.umap b/spine-ue4/Content/Maps/example.umap index 11ad79945afe360e415cf000ab6fa1ce0255dafb..6b180c935a3ff51d74021a611aa0c4135adff1e8 100644 GIT binary patch delta 114315 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 @$(2ZQIfm&M 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 +} + USpineSkeletonComponent::USpineSkeletonComponent () { bWantsBeginPlay = true; PrimaryComponentTick.bCanEverTick = true; @@ -16,25 +20,29 @@ void USpineSkeletonComponent::BeginPlay() { void USpineSkeletonComponent::TickComponent (float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) { Super::TickComponent(DeltaTime, TickType, ThisTickFunction); + CheckState(); + + if (state) { + spAnimationState_update(state, DeltaTime); + spAnimationState_apply(state, skeleton); + spSkeleton_updateWorldTransform(skeleton); + } +} + +void USpineSkeletonComponent::CheckState () { if (lastAtlas != Atlas || lastData != SkeletonData) { DisposeState(); - + if (Atlas && SkeletonData) { spSkeletonData* data = SkeletonData->GetSkeletonData(Atlas->GetAtlas(false), false); skeleton = spSkeleton_create(data); stateData = spAnimationStateData_create(data); state = spAnimationState_create(stateData); } - + lastAtlas = Atlas; lastData = SkeletonData; } - - if (state) { - spAnimationState_update(state, DeltaTime); - spAnimationState_apply(state, skeleton); - spSkeleton_updateWorldTransform(skeleton); - } } void USpineSkeletonComponent::DisposeState () { @@ -59,37 +67,48 @@ void USpineSkeletonComponent::FinishDestroy () { Super::FinishDestroy(); } -void USpineSkeletonComponent::SetAnimation (int trackIndex, FString animationName, bool loop) { - if (state) { - spAnimationState_setAnimationByName(state, trackIndex, TCHAR_TO_UTF8(*animationName), loop ? 1 : 0); - } +FTrackEntry USpineSkeletonComponent::SetAnimation (int trackIndex, FString animationName, bool loop) { + CheckState(); + if (state && spSkeletonData_findAnimation(skeleton->data, TCHAR_TO_UTF8(*animationName))) { + spTrackEntry* entry = spAnimationState_setAnimationByName(state, trackIndex, TCHAR_TO_UTF8(*animationName), loop ? 1 : 0); + return FTrackEntry(entry); + } else return FTrackEntry(); + } -void USpineSkeletonComponent::AddAnimation (int trackIndex, FString animationName, bool loop, float delay) { - if (state) { - spAnimationState_addAnimationByName(state, trackIndex, TCHAR_TO_UTF8(*animationName), loop ? 1 : 0, delay); - } +FTrackEntry USpineSkeletonComponent::AddAnimation (int trackIndex, FString animationName, bool loop, float delay) { + CheckState(); + if (state && spSkeletonData_findAnimation(skeleton->data, TCHAR_TO_UTF8(*animationName))) { + spTrackEntry* entry = spAnimationState_addAnimationByName(state, trackIndex, TCHAR_TO_UTF8(*animationName), loop ? 1 : 0, delay); + return FTrackEntry(entry); + } else return FTrackEntry(); } -void USpineSkeletonComponent::SetEmptyAnimation (int trackIndex, float mixDuration) { +FTrackEntry USpineSkeletonComponent::SetEmptyAnimation (int trackIndex, float mixDuration) { + CheckState(); if (state) { - spAnimationState_setEmptyAnimation(state, trackIndex, mixDuration); - } + spTrackEntry* entry = spAnimationState_setEmptyAnimation(state, trackIndex, mixDuration); + return FTrackEntry(entry); + } else return FTrackEntry(); } -void USpineSkeletonComponent::AddEmptyAnimation (int trackIndex, float mixDuration, float delay) { +FTrackEntry USpineSkeletonComponent::AddEmptyAnimation (int trackIndex, float mixDuration, float delay) { + CheckState(); if (state) { - spAnimationState_addAnimationByName(state, trackIndex, mixDuration, delay); - } + spTrackEntry* entry = spAnimationState_addEmptyAnimation(state, trackIndex, mixDuration, delay); + return FTrackEntry(entry); + } else return FTrackEntry(); } void USpineSkeletonComponent::ClearTracks () { + CheckState(); if (state) { spAnimationState_clearTracks(state); } } void USpineSkeletonComponent::ClearTrack (int trackIndex) { + CheckState(); if (state) { spAnimationState_clearTrack(state, trackIndex); } diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonComponent.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonComponent.h index d15024e64..831206ff4 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonComponent.h +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonComponent.h @@ -3,12 +3,23 @@ #pragma once #include "Components/ActorComponent.h" +#include "spine/spine.h" #include "SpineSkeletonComponent.generated.h" +USTRUCT(BlueprintType) +struct SPINEPLUGIN_API FTrackEntry { + GENERATED_BODY (); + + FTrackEntry (): entry(0) { } + + FTrackEntry (spTrackEntry* entry) { this->entry = entry; } + + spTrackEntry* entry; +}; + class USpineAtlasAsset; -UCLASS( ClassGroup=(Spine), meta=(BlueprintSpawnableComponent) ) -class SPINEPLUGIN_API USpineSkeletonComponent : public UActorComponent -{ +UCLASS(ClassGroup=(Spine), meta=(BlueprintSpawnableComponent)) +class SPINEPLUGIN_API USpineSkeletonComponent: public UActorComponent { GENERATED_BODY() public: @@ -34,16 +45,16 @@ public: // Blueprint functions UFUNCTION(BlueprintCallable, Category="Components|Spine") - void SetAnimation (int trackIndex, FString animationName, bool loop); + FTrackEntry SetAnimation (int trackIndex, FString animationName, bool loop); UFUNCTION(BlueprintCallable, Category="Components|Spine") - void AddAnimation (int trackIndex, FString animationName, bool loop, float delay); + FTrackEntry AddAnimation (int trackIndex, FString animationName, bool loop, float delay); UFUNCTION(BlueprintCallable, Category="Components|Spine") - void SetEmptyAnimation (int trackIndex, float mixDuration); + FTrackEntry SetEmptyAnimation (int trackIndex, float mixDuration); UFUNCTION(BlueprintCallable, Category="Components|Spine") - void AddEmptyAnimation (int trackIndex, float mixDuration, float delay); + FTrackEntry AddEmptyAnimation (int trackIndex, float mixDuration, float delay); UFUNCTION(BlueprintCallable, Category="Components|Spine") void ClearTracks (); @@ -51,8 +62,12 @@ public: UFUNCTION(BlueprintCallable, Category="Components|Spine") void ClearTrack (int trackIndex); + UFUNCTION(BlueprintImplentableEvent, category = "Components|Spine") + void AnimationEvent(int trackIndex, ); + protected: - void DisposeState(); + void CheckState (); + void DisposeState (); spAnimationStateData* stateData; spAnimationState* state;