mirror of
https://github.com/EsotericSoftware/spine-runtimes.git
synced 2026-03-26 22:49:01 +08:00
[ue4] Fix crash related to multi-cast delegates. Re-used the event callback for SkeletonAnimationComponent. That cast the rendering object to that class, when the class is really SpineWidget. Lead to various mystery crashes.
This commit is contained in:
parent
8ca8012804
commit
bf0999e202
@ -7,9 +7,15 @@ DefaultGraphicsPerformance=Maximum
|
|||||||
AppliedDefaultGraphicsPerformance=Maximum
|
AppliedDefaultGraphicsPerformance=Maximum
|
||||||
|
|
||||||
[/Script/EngineSettings.GameMapsSettings]
|
[/Script/EngineSettings.GameMapsSettings]
|
||||||
GameDefaultMap=/Game/Test/Test.Test
|
GameDefaultMap=/Game/Test/NewWorld.NewWorld
|
||||||
GlobalDefaultGameMode=/Game/Test/Blueprints/TouchClick.TouchClick_C
|
GlobalDefaultGameMode=/Game/Test/Blueprints/TouchClick.TouchClick_C
|
||||||
|
|
||||||
|
[/Script/IOSRuntimeSettings.IOSRuntimeSettings]
|
||||||
|
bSupportsPortraitOrientation=False
|
||||||
|
bSupportsUpsideDownOrientation=False
|
||||||
|
bSupportsLandscapeLeftOrientation=True
|
||||||
|
PreferredLandscapeOrientation=LandscapeLeft
|
||||||
|
|
||||||
[/Script/Engine.PhysicsSettings]
|
[/Script/Engine.PhysicsSettings]
|
||||||
DefaultGravityZ=-980.000000
|
DefaultGravityZ=-980.000000
|
||||||
DefaultTerminalVelocity=4000.000000
|
DefaultTerminalVelocity=4000.000000
|
||||||
@ -17,12 +23,12 @@ DefaultFluidFriction=0.300000
|
|||||||
SimulateScratchMemorySize=262144
|
SimulateScratchMemorySize=262144
|
||||||
RagdollAggregateThreshold=4
|
RagdollAggregateThreshold=4
|
||||||
TriangleMeshTriangleMinAreaThreshold=5.000000
|
TriangleMeshTriangleMinAreaThreshold=5.000000
|
||||||
bEnableAsyncScene=False
|
|
||||||
bEnableShapeSharing=False
|
bEnableShapeSharing=False
|
||||||
bEnablePCM=True
|
bEnablePCM=True
|
||||||
bEnableStabilization=False
|
bEnableStabilization=False
|
||||||
bWarnMissingLocks=True
|
bWarnMissingLocks=True
|
||||||
bEnable2DPhysics=False
|
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
|
LockedAxis=Invalid
|
||||||
DefaultDegreesOfFreedom=Full3D
|
DefaultDegreesOfFreedom=Full3D
|
||||||
BounceThresholdVelocity=200.000000
|
BounceThresholdVelocity=200.000000
|
||||||
@ -39,6 +45,8 @@ bDefaultHasComplexCollision=True
|
|||||||
bSuppressFaceRemapTable=False
|
bSuppressFaceRemapTable=False
|
||||||
bSupportUVFromHitResults=False
|
bSupportUVFromHitResults=False
|
||||||
bDisableActiveActors=False
|
bDisableActiveActors=False
|
||||||
|
bDisableKinematicStaticPairs=False
|
||||||
|
bDisableKinematicKinematicPairs=False
|
||||||
bDisableCCD=False
|
bDisableCCD=False
|
||||||
bEnableEnhancedDeterminism=False
|
bEnableEnhancedDeterminism=False
|
||||||
MaxPhysicsDeltaTime=0.033333
|
MaxPhysicsDeltaTime=0.033333
|
||||||
@ -47,16 +55,7 @@ bSubsteppingAsync=False
|
|||||||
MaxSubstepDeltaTime=0.016667
|
MaxSubstepDeltaTime=0.016667
|
||||||
MaxSubsteps=6
|
MaxSubsteps=6
|
||||||
SyncSceneSmoothingFactor=0.000000
|
SyncSceneSmoothingFactor=0.000000
|
||||||
AsyncSceneSmoothingFactor=0.990000
|
|
||||||
InitialAverageFrameRate=0.016667
|
InitialAverageFrameRate=0.016667
|
||||||
PhysXTreeRebuildRate=10
|
PhysXTreeRebuildRate=10
|
||||||
|
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)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[/Script/IOSRuntimeSettings.IOSRuntimeSettings]
|
|
||||||
bSupportsPortraitOrientation=False
|
|
||||||
bSupportsUpsideDownOrientation=False
|
|
||||||
bSupportsLandscapeLeftOrientation=True
|
|
||||||
PreferredLandscapeOrientation=LandscapeLeft
|
|
||||||
|
|
||||||
|
|||||||
Binary file not shown.
@ -38,7 +38,41 @@
|
|||||||
|
|
||||||
using namespace spine;
|
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) {
|
USpineWidget::USpineWidget(const FObjectInitializer& ObjectInitializer): Super(ObjectInitializer) {
|
||||||
static ConstructorHelpers::FObjectFinder<UMaterialInterface> NormalMaterialRef(TEXT("/SpinePlugin/UI_SpineUnlitNormalMaterial"));
|
static ConstructorHelpers::FObjectFinder<UMaterialInterface> NormalMaterialRef(TEXT("/SpinePlugin/UI_SpineUnlitNormalMaterial"));
|
||||||
@ -130,7 +164,7 @@ void USpineWidget::CheckState() {
|
|||||||
AnimationStateData* stateData = SkeletonData->GetAnimationStateData(Atlas->GetAtlas());
|
AnimationStateData* stateData = SkeletonData->GetAnimationStateData(Atlas->GetAtlas());
|
||||||
state = new (__FILE__, __LINE__) AnimationState(stateData);
|
state = new (__FILE__, __LINE__) AnimationState(stateData);
|
||||||
state->setRendererObject((void*)this);
|
state->setRendererObject((void*)this);
|
||||||
state->setListener(callback);
|
state->setListener(callbackWidget);
|
||||||
trackEntries.Empty();
|
trackEntries.Empty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -355,7 +389,8 @@ UTrackEntry* USpineWidget::SetAnimation(int trackIndex, FString animationName, b
|
|||||||
trackEntries.Add(uEntry);
|
trackEntries.Add(uEntry);
|
||||||
return uEntry;
|
return uEntry;
|
||||||
}
|
}
|
||||||
else return NewObject<UTrackEntry>();
|
else
|
||||||
|
return NewObject<UTrackEntry>();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -370,7 +405,8 @@ UTrackEntry* USpineWidget::AddAnimation(int trackIndex, FString animationName, b
|
|||||||
trackEntries.Add(uEntry);
|
trackEntries.Add(uEntry);
|
||||||
return uEntry;
|
return uEntry;
|
||||||
}
|
}
|
||||||
else return NewObject<UTrackEntry>();
|
else
|
||||||
|
return NewObject<UTrackEntry>();
|
||||||
}
|
}
|
||||||
|
|
||||||
UTrackEntry* USpineWidget::SetEmptyAnimation(int trackIndex, float mixDuration) {
|
UTrackEntry* USpineWidget::SetEmptyAnimation(int trackIndex, float mixDuration) {
|
||||||
@ -382,7 +418,8 @@ UTrackEntry* USpineWidget::SetEmptyAnimation(int trackIndex, float mixDuration)
|
|||||||
trackEntries.Add(uEntry);
|
trackEntries.Add(uEntry);
|
||||||
return uEntry;
|
return uEntry;
|
||||||
}
|
}
|
||||||
else return NewObject<UTrackEntry>();
|
else
|
||||||
|
return NewObject<UTrackEntry>();
|
||||||
}
|
}
|
||||||
|
|
||||||
UTrackEntry* USpineWidget::AddEmptyAnimation(int trackIndex, float mixDuration, float delay) {
|
UTrackEntry* USpineWidget::AddEmptyAnimation(int trackIndex, float mixDuration, float delay) {
|
||||||
@ -394,7 +431,8 @@ UTrackEntry* USpineWidget::AddEmptyAnimation(int trackIndex, float mixDuration,
|
|||||||
trackEntries.Add(uEntry);
|
trackEntries.Add(uEntry);
|
||||||
return uEntry;
|
return uEntry;
|
||||||
}
|
}
|
||||||
else return NewObject<UTrackEntry>();
|
else
|
||||||
|
return NewObject<UTrackEntry>();
|
||||||
}
|
}
|
||||||
|
|
||||||
UTrackEntry* USpineWidget::GetCurrent(int trackIndex) {
|
UTrackEntry* USpineWidget::GetCurrent(int trackIndex) {
|
||||||
@ -411,7 +449,8 @@ UTrackEntry* USpineWidget::GetCurrent(int trackIndex) {
|
|||||||
return uEntry;
|
return uEntry;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else return NewObject<UTrackEntry>();
|
else
|
||||||
|
return NewObject<UTrackEntry>();
|
||||||
}
|
}
|
||||||
|
|
||||||
void USpineWidget::ClearTracks() {
|
void USpineWidget::ClearTracks() {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user