diff --git a/spine-ue4/Config/DefaultEngine.ini b/spine-ue4/Config/DefaultEngine.ini index 380efca92..6c63e6306 100644 --- a/spine-ue4/Config/DefaultEngine.ini +++ b/spine-ue4/Config/DefaultEngine.ini @@ -7,9 +7,15 @@ DefaultGraphicsPerformance=Maximum AppliedDefaultGraphicsPerformance=Maximum [/Script/EngineSettings.GameMapsSettings] -GameDefaultMap=/Game/Test/Test.Test +GameDefaultMap=/Game/Test/NewWorld.NewWorld GlobalDefaultGameMode=/Game/Test/Blueprints/TouchClick.TouchClick_C +[/Script/IOSRuntimeSettings.IOSRuntimeSettings] +bSupportsPortraitOrientation=False +bSupportsUpsideDownOrientation=False +bSupportsLandscapeLeftOrientation=True +PreferredLandscapeOrientation=LandscapeLeft + [/Script/Engine.PhysicsSettings] DefaultGravityZ=-980.000000 DefaultTerminalVelocity=4000.000000 @@ -17,12 +23,12 @@ DefaultFluidFriction=0.300000 SimulateScratchMemorySize=262144 RagdollAggregateThreshold=4 TriangleMeshTriangleMinAreaThreshold=5.000000 -bEnableAsyncScene=False bEnableShapeSharing=False bEnablePCM=True bEnableStabilization=False bWarnMissingLocks=True bEnable2DPhysics=False +PhysicErrorCorrection=(PingExtrapolation=0.100000,PingLimit=100.000000,ErrorPerLinearDifference=1.000000,ErrorPerAngularDifference=1.000000,MaxRestoredStateError=1.000000,MaxLinearHardSnapDistance=400.000000,PositionLerp=0.000000,AngleLerp=0.400000,LinearVelocityCoefficient=100.000000,AngularVelocityCoefficient=10.000000,ErrorAccumulationSeconds=0.500000,ErrorAccumulationDistanceSq=15.000000,ErrorAccumulationSimilarity=100.000000) LockedAxis=Invalid DefaultDegreesOfFreedom=Full3D BounceThresholdVelocity=200.000000 @@ -39,6 +45,8 @@ bDefaultHasComplexCollision=True bSuppressFaceRemapTable=False bSupportUVFromHitResults=False bDisableActiveActors=False +bDisableKinematicStaticPairs=False +bDisableKinematicKinematicPairs=False bDisableCCD=False bEnableEnhancedDeterminism=False MaxPhysicsDeltaTime=0.033333 @@ -47,16 +55,7 @@ bSubsteppingAsync=False MaxSubstepDeltaTime=0.016667 MaxSubsteps=6 SyncSceneSmoothingFactor=0.000000 -AsyncSceneSmoothingFactor=0.990000 InitialAverageFrameRate=0.016667 PhysXTreeRebuildRate=10 - - - - -[/Script/IOSRuntimeSettings.IOSRuntimeSettings] -bSupportsPortraitOrientation=False -bSupportsUpsideDownOrientation=False -bSupportsLandscapeLeftOrientation=True -PreferredLandscapeOrientation=LandscapeLeft +DefaultBroadphaseSettings=(bUseMBPOnClient=False,bUseMBPOnServer=False,MBPBounds=(Min=(X=0.000000,Y=0.000000,Z=0.000000),Max=(X=0.000000,Y=0.000000,Z=0.000000),IsValid=0),MBPNumSubdivs=2) diff --git a/spine-ue4/Content/Test/raptor-widget.uasset b/spine-ue4/Content/Test/raptor-widget.uasset index 04c8fd390..bc990b2e0 100644 Binary files a/spine-ue4/Content/Test/raptor-widget.uasset and b/spine-ue4/Content/Test/raptor-widget.uasset differ diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineWidget.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineWidget.cpp index a7abb9865..94d1a824f 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineWidget.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineWidget.cpp @@ -38,7 +38,41 @@ using namespace spine; -void callback(AnimationState* state, spine::EventType type, TrackEntry* entry, Event* event); +void callbackWidget(AnimationState* state, spine::EventType type, TrackEntry* entry, Event* event) { + USpineWidget* component = (USpineWidget*)state->getRendererObject(); + + if (entry->getRendererObject()) { + UTrackEntry* uEntry = (UTrackEntry*)entry->getRendererObject(); + if (type == EventType_Start) { + component->AnimationStart.Broadcast(uEntry); + uEntry->AnimationStart.Broadcast(uEntry); + } + else if (type == EventType_Interrupt) { + component->AnimationInterrupt.Broadcast(uEntry); + uEntry->AnimationInterrupt.Broadcast(uEntry); + } + else if (type == EventType_Event) { + FSpineEvent evt; + evt.SetEvent(event); + component->AnimationEvent.Broadcast(uEntry, evt); + uEntry->AnimationEvent.Broadcast(uEntry, evt); + } + else if (type == EventType_Complete) { + component->AnimationComplete.Broadcast(uEntry); + uEntry->AnimationComplete.Broadcast(uEntry); + } + else if (type == EventType_End) { + component->AnimationEnd.Broadcast(uEntry); + uEntry->AnimationEnd.Broadcast(uEntry); + } + else if (type == EventType_Dispose) { + component->AnimationDispose.Broadcast(uEntry); + uEntry->AnimationDispose.Broadcast(uEntry); + uEntry->SetTrackEntry(nullptr); + component->GCTrackEntry(uEntry); + } + } +} USpineWidget::USpineWidget(const FObjectInitializer& ObjectInitializer): Super(ObjectInitializer) { static ConstructorHelpers::FObjectFinder NormalMaterialRef(TEXT("/SpinePlugin/UI_SpineUnlitNormalMaterial")); @@ -130,7 +164,7 @@ void USpineWidget::CheckState() { AnimationStateData* stateData = SkeletonData->GetAnimationStateData(Atlas->GetAtlas()); state = new (__FILE__, __LINE__) AnimationState(stateData); state->setRendererObject((void*)this); - state->setListener(callback); + state->setListener(callbackWidget); trackEntries.Empty(); } } @@ -355,7 +389,8 @@ UTrackEntry* USpineWidget::SetAnimation(int trackIndex, FString animationName, b trackEntries.Add(uEntry); return uEntry; } - else return NewObject(); + else + return NewObject(); } @@ -370,7 +405,8 @@ UTrackEntry* USpineWidget::AddAnimation(int trackIndex, FString animationName, b trackEntries.Add(uEntry); return uEntry; } - else return NewObject(); + else + return NewObject(); } UTrackEntry* USpineWidget::SetEmptyAnimation(int trackIndex, float mixDuration) { @@ -382,7 +418,8 @@ UTrackEntry* USpineWidget::SetEmptyAnimation(int trackIndex, float mixDuration) trackEntries.Add(uEntry); return uEntry; } - else return NewObject(); + else + return NewObject(); } UTrackEntry* USpineWidget::AddEmptyAnimation(int trackIndex, float mixDuration, float delay) { @@ -394,7 +431,8 @@ UTrackEntry* USpineWidget::AddEmptyAnimation(int trackIndex, float mixDuration, trackEntries.Add(uEntry); return uEntry; } - else return NewObject(); + else + return NewObject(); } UTrackEntry* USpineWidget::GetCurrent(int trackIndex) { @@ -411,7 +449,8 @@ UTrackEntry* USpineWidget::GetCurrent(int trackIndex) { return uEntry; } } - else return NewObject(); + else + return NewObject(); } void USpineWidget::ClearTracks() {