diff --git a/spine-cocos2dx/example/proj.win32/spine-cocos2d-x.VC.VC.opendb b/spine-cocos2dx/example/proj.win32/spine-cocos2d-x.VC.VC.opendb deleted file mode 100644 index c99263c75..000000000 Binary files a/spine-cocos2dx/example/proj.win32/spine-cocos2d-x.VC.VC.opendb and /dev/null differ diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineAtlasImportFactory.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineAtlasImportFactory.cpp index e1959eb18..947d2acf0 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineAtlasImportFactory.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/Private/SpineAtlasImportFactory.cpp @@ -51,7 +51,7 @@ USpineAtlasAssetFactory::USpineAtlasAssetFactory (const FObjectInitializer& obje bEditorImport = true; SupportedClass = USpineAtlasAsset::StaticClass(); - Formats.Add(TEXT("atlas;Spine atlas file")); + Formats.Add(TEXT("atlas;Spine Atlas file")); } FText USpineAtlasAssetFactory::GetToolTip () const { diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/SpineEditorPlugin.Build.cs b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/SpineEditorPlugin.Build.cs index 5065f068d..7ac952c63 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/SpineEditorPlugin.Build.cs +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpineEditorPlugin/SpineEditorPlugin.Build.cs @@ -6,9 +6,11 @@ namespace UnrealBuildTool.Rules { public SpineEditorPlugin(ReadOnlyTargetRules Target) : base(Target) { - PublicIncludePaths.AddRange(new string[] { "SpineEditorPlugin/Public", "SpinePlugin/Public/spine-cpp/include" }); - - PrivateIncludePaths.AddRange(new string[] { "SpineEditorPlugin/Private", "SpinePlugin/Public/spine-cpp/include" }); + PublicIncludePaths.Add(Path.Combine(ModuleDirectory, "Public")); + PublicIncludePaths.Add(Path.Combine(ModuleDirectory, "../SpinePlugin/Public/spine-cpp/include")); + + PrivateIncludePaths.Add(Path.Combine(ModuleDirectory, "Public")); + PrivateIncludePaths.Add(Path.Combine(ModuleDirectory, "../SpinePlugin/Public/spine-cpp/include")); PublicDependencyModuleNames.AddRange(new string[] { "Core", @@ -17,12 +19,12 @@ namespace UnrealBuildTool.Rules "UnrealEd", "SpinePlugin" }); - + PublicIncludePathModuleNames.AddRange(new string[] { "AssetTools", "AssetRegistry" }); - + DynamicallyLoadedModuleNames.AddRange(new string[] { "AssetTools", "AssetRegistry" diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineAtlasAsset.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineAtlasAsset.cpp index d94b59a8c..75de6dba7 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineAtlasAsset.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineAtlasAsset.cpp @@ -111,7 +111,7 @@ Atlas* USpineAtlasAsset::GetAtlas (bool ForceReload) { page->setRendererObject(atlasPages[j++]); } } - return this->atlas; + return this->atlas; } #undef LOCTEXT_NAMESPACE diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonAnimationComponent.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonAnimationComponent.cpp index ffd48fa34..8085930cd 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonAnimationComponent.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonAnimationComponent.cpp @@ -104,11 +104,27 @@ void USpineSkeletonAnimationComponent::InternalTick(float DeltaTime, bool CallDe } void USpineSkeletonAnimationComponent::CheckState () { - if (lastAtlas != Atlas || lastData != SkeletonData) { + bool needsUpdate = lastAtlas != Atlas || lastData != SkeletonData; + + if (!needsUpdate) { + // Are we doing a re-import? Then check if the underlying spine-cpp data + // has changed. + if (lastAtlas && lastAtlas == Atlas && lastData && lastData == SkeletonData) { + spine::Atlas* atlas = Atlas->GetAtlas(false); + if (lastSpineAtlas != atlas) { + needsUpdate = true; + } + if (skeleton && skeleton->getData() != SkeletonData->GetSkeletonData(atlas)) { + needsUpdate = true; + } + } + } + + if (needsUpdate) { DisposeState(); if (Atlas && SkeletonData) { - spine::SkeletonData *data = SkeletonData->GetSkeletonData(Atlas->GetAtlas(false), false); + spine::SkeletonData *data = SkeletonData->GetSkeletonData(Atlas->GetAtlas(false), true); if (data) { skeleton = new (__FILE__, __LINE__) Skeleton(data); AnimationStateData* stateData = SkeletonData->GetAnimationStateData(Atlas->GetAtlas(false)); @@ -120,6 +136,7 @@ void USpineSkeletonAnimationComponent::CheckState () { } lastAtlas = Atlas; + lastSpineAtlas = Atlas ? Atlas->GetAtlas(false) : nullptr; lastData = SkeletonData; } } diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonComponent.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonComponent.cpp index 9ac6df3c7..ab5962905 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonComponent.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonComponent.cpp @@ -200,7 +200,23 @@ void USpineSkeletonComponent::InternalTick(float DeltaTime, bool CallDelegates) } void USpineSkeletonComponent::CheckState () { - if (lastAtlas != Atlas || lastData != SkeletonData) { + bool needsUpdate = lastAtlas != Atlas || lastData != SkeletonData; + + if (!needsUpdate) { + // Are we doing a re-import? Then check if the underlying spine-cpp data + // has changed. + if (lastAtlas && lastAtlas == Atlas && lastData && lastData == SkeletonData) { + spine::Atlas* atlas = Atlas->GetAtlas(false); + if (lastSpineAtlas != atlas) { + needsUpdate = true; + } + if (skeleton && skeleton->getData() != SkeletonData->GetSkeletonData(atlas)) { + needsUpdate = true; + } + } + } + + if (needsUpdate) { DisposeState(); if (Atlas && SkeletonData) { @@ -209,6 +225,7 @@ void USpineSkeletonComponent::CheckState () { } lastAtlas = Atlas; + lastSpineAtlas = Atlas ? Atlas->GetAtlas(false) : nullptr; lastData = SkeletonData; } } diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonDataAsset.cpp b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonDataAsset.cpp index 51178d256..3dcdfbafa 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonDataAsset.cpp +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Private/SpineSkeletonDataAsset.cpp @@ -97,7 +97,7 @@ void USpineSkeletonDataAsset::BeginDestroy () { } SkeletonData* USpineSkeletonDataAsset::GetSkeletonData (Atlas* Atlas, bool ForceReload) { - if (!skeletonData || ForceReload) { + if (!skeletonData || lastAtlas != Atlas || ForceReload) { if (skeletonData) { delete skeletonData; skeletonData = nullptr; @@ -126,6 +126,7 @@ SkeletonData* USpineSkeletonDataAsset::GetSkeletonData (Atlas* Atlas, bool Force } if (animationStateData) { delete animationStateData; + animationStateData = nullptr; GetAnimationStateData(Atlas); } lastAtlas = Atlas; diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonComponent.h b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonComponent.h index 5735ef0b0..45a494579 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonComponent.h +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/Public/SpineSkeletonComponent.h @@ -114,5 +114,6 @@ protected: spine::Skeleton* skeleton; USpineAtlasAsset* lastAtlas = nullptr; + spine::Atlas* lastSpineAtlas = nullptr; USpineSkeletonDataAsset* lastData = nullptr; }; diff --git a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/SpinePlugin.Build.cs b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/SpinePlugin.Build.cs index 3ccb0fb47..f2d125558 100644 --- a/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/SpinePlugin.Build.cs +++ b/spine-ue4/Plugins/SpinePlugin/Source/SpinePlugin/SpinePlugin.Build.cs @@ -1,17 +1,26 @@ // Copyright 1998-2016 Epic Games, Inc. All Rights Reserved. +using System; +using System.IO; + namespace UnrealBuildTool.Rules { public class SpinePlugin : ModuleRules { public SpinePlugin(ReadOnlyTargetRules Target) : base(Target) { - PublicIncludePaths.AddRange(new string[] { "SpinePlugin/Public", "SpinePlugin/Public/spine-cpp/include" }); - PrivateIncludePaths.AddRange(new string[] { "SpinePlugin/Private", "SpinePlugin/Public/spine-cpp/include" }); + PublicIncludePaths.Add(Path.Combine(ModuleDirectory, "Public")); + PublicIncludePaths.Add(Path.Combine(ModuleDirectory, "Public/spine-cpp/include")); + + PrivateIncludePaths.Add(Path.Combine(ModuleDirectory, "Public")); + PrivateIncludePaths.Add(Path.Combine(ModuleDirectory, "Public/spine-cpp/include")); + PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "RHI", "RenderCore", "ShaderCore", "ProceduralMeshComponent", "UMG", "Slate", "SlateCore" }); - Definitions.Add("SPINE_UE4"); - // In Unreal 4.20+, comment the above line, uncomment the below line - // PublicDefinitions.Add("SPINE_UE4"); + PublicDefinitions.Add("SPINE_UE4"); + + // For UE 4.19 and below comment the line above and uncomment the line + // below. + // Definitions.Add("SPINE_UE4"); } } } diff --git a/spine-ue4/SpineUE4.uproject b/spine-ue4/SpineUE4.uproject index 2c459516f..df2d5b601 100644 --- a/spine-ue4/SpineUE4.uproject +++ b/spine-ue4/SpineUE4.uproject @@ -1,6 +1,6 @@ { "FileVersion": 3, - "EngineAssociation": "4.18", + "EngineAssociation": "4.20", "Category": "", "Description": "", "Modules": [