Jelajahi Sumber

AnimationClip foundation

BearishSun 9 tahun lalu
induk
melakukan
a774a03552
26 mengubah file dengan 306 tambahan dan 6 penghapusan
  1. 1 0
      Source/BansheeCore/CMakeSources.cmake
  2. 49 0
      Source/BansheeCore/Include/BsAnimationClip.h
  3. 51 0
      Source/BansheeCore/Include/BsAnimationClipRTTI.h
  4. 3 2
      Source/BansheeCore/Include/BsAudioClip.h
  5. 3 1
      Source/BansheeCore/Include/BsCorePrerequisites.h
  6. 47 0
      Source/BansheeCore/Source/BsAnimationClip.cpp
  7. 0 1
      Source/BansheeCore/Source/BsAudioClip.cpp
  8. 1 0
      Source/BansheeFBXImporter/Include/BsFBXImportData.h
  9. 1 0
      Source/BansheeFBXImporter/Source/BsFBXImporter.cpp
  10. 31 0
      Source/MBansheeEditor/Inspectors/AnimationClipInspector.cs
  11. 1 0
      Source/MBansheeEditor/MBansheeEditor.csproj
  12. 2 0
      Source/MBansheeEditor/Windows/Library/LibraryGUIEntry.cs
  13. 1 1
      Source/MBansheeEditor/Windows/Library/ProjectLibrary.cs
  14. 22 0
      Source/MBansheeEngine/Animation/AnimationClip.cs
  15. 4 0
      Source/MBansheeEngine/Interop/Program.cs
  16. 1 0
      Source/MBansheeEngine/MBansheeEngine.csproj
  17. 2 0
      Source/SBansheeEngine/CMakeSources.cmake
  18. 1 0
      Source/SBansheeEngine/Include/BsManagedSerializableObjectInfo.h
  19. 35 0
      Source/SBansheeEngine/Include/BsScriptAnimationClip.h
  20. 1 1
      Source/SBansheeEngine/Include/BsScriptResource.h
  21. 4 0
      Source/SBansheeEngine/Source/BsManagedSerializableField.cpp
  22. 4 0
      Source/SBansheeEngine/Source/BsManagedSerializableObjectInfo.cpp
  23. 25 0
      Source/SBansheeEngine/Source/BsScriptAnimationClip.cpp
  24. 3 0
      Source/SBansheeEngine/Source/BsScriptAssemblyManager.cpp
  25. 7 0
      Source/SBansheeEngine/Source/BsScriptResource.cpp
  26. 6 0
      Source/SBansheeEngine/Source/BsScriptResourceManager.cpp

+ 1 - 0
Source/BansheeCore/CMakeSources.cmake

@@ -337,6 +337,7 @@ set(BS_BANSHEECORE_INC_RTTI
 	"Include/BsAudioClipRTTI.h"
 	"Include/BsCAudioSourceRTTI.h"
 	"Include/BsCAudioListenerRTTI.h"
+	"Include/BsAnimationClipRTTI.h"
 )
 
 set(BS_BANSHEECORE_SRC_RENDERER

+ 49 - 0
Source/BansheeCore/Include/BsAnimationClip.h

@@ -1 +1,50 @@
+//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
+//**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
 #pragma once
+
+#include "BsCorePrerequisites.h"
+#include "BsResource.h"
+
+namespace BansheeEngine
+{
+	/** @addtogroup Animation
+	 *  @{
+	 */
+
+	class BS_CORE_EXPORT AnimationClip : public Resource
+	{
+	public:
+		virtual ~AnimationClip() { }
+
+		static HAnimationClip create();
+
+	public: // ***** INTERNAL ******
+		/** @name Internal
+		 *  @{
+		 */
+
+		/** Creates a new AnimationClip without initializing it. Use create() for normal use. */
+		static SPtr<AnimationClip> _createPtr();
+
+		/** @} */
+	protected:
+		AnimationClip();
+
+		/************************************************************************/
+		/* 								SERIALIZATION                      		*/
+		/************************************************************************/
+	public:
+		friend class AnimationClipRTTI;
+		static RTTITypeBase* getRTTIStatic();
+		RTTITypeBase* getRTTI() const override;
+
+		/** 
+		 * Creates an AnimationClip with no data. You must populate its data manually followed by a call to initialize().
+		 *
+		 * @note	For serialization use only.
+		 */
+		static SPtr<AnimationClip> createEmpty();
+	};
+
+	/** @} */
+}

+ 51 - 0
Source/BansheeCore/Include/BsAnimationClipRTTI.h

@@ -0,0 +1,51 @@
+//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
+//**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
+#pragma once
+
+#include "BsCorePrerequisites.h"
+#include "BsRTTIType.h"
+#include "BsAnimationClip.h"
+
+namespace BansheeEngine
+{
+	/** @cond RTTI */
+	/** @addtogroup RTTI-Impl-Core
+	 *  @{
+	 */
+
+	class BS_CORE_EXPORT AnimationClipRTTI : public RTTIType <AnimationClip, Resource, AnimationClipRTTI>
+	{
+	private:
+
+	public:
+		AnimationClipRTTI()
+		{
+			
+		}
+
+		void onDeserializationEnded(IReflectable* obj, const UnorderedMap<String, UINT64>& params) override
+		{
+			AnimationClip* clip = static_cast<AnimationClip*>(obj);
+			clip->initialize();
+		}
+
+		const String& getRTTIName() override
+		{
+			static String name = "AnimationClip";
+			return name;
+		}
+
+		UINT32 getRTTIId() override
+		{
+			return TID_AnimationClip;
+		}
+
+		SPtr<IReflectable> newRTTIObject() override
+		{
+			return AnimationClip::createEmpty();
+		}
+	};
+
+	/** @} */
+	/** @endcond */
+}

+ 3 - 2
Source/BansheeCore/Include/BsAudioClip.h

@@ -114,7 +114,8 @@ namespace BansheeEngine
 		 *
 		 * @param[in]	samples		Data streams containing the samples to load. Data will be read starting from the current
 		 *							position in the stream. The samples should be in audio format as specified in the 
-		 *							@p desc parameter.
+		 *							@p desc parameter. Ownership of the data stream is taken by the audio clip and the
+		 *							caller must not close it manually.
 		 * @param[in]	streamSize	Number of bytes to read from the @p samples stream.
 		 * @param[in]	numSamples	Total number of samples (including all channels).
 		 * @param[in]	desc		Descriptor containing meta-data for the provided samples.
@@ -122,7 +123,7 @@ namespace BansheeEngine
 		 * @note	If the provided samples are in PCM format, they should be signed integers of provided bit depth.
 		 */
 		static HAudioClip create(const SPtr<DataStream>& samples, UINT32 streamSize, UINT32 numSamples,
-			const AUDIO_CLIP_DESC& desc); // Note that ownership of stream is taken by the AudioClip
+			const AUDIO_CLIP_DESC& desc);
 
 	public: // ***** INTERNAL ******
 		/** @name Internal

+ 3 - 1
Source/BansheeCore/Include/BsCorePrerequisites.h

@@ -507,7 +507,8 @@ namespace BansheeEngine
 		TID_AudioClip = 1111,
 		TID_AudioClipImportOptions = 1112,
 		TID_CAudioListener = 1113,
-		TID_CAudioSource = 1114
+		TID_CAudioSource = 1114,
+		TID_AnimationClip = 1115
 	};
 }
 
@@ -535,6 +536,7 @@ namespace BansheeEngine
 	typedef ResourceHandle<PhysicsMaterial> HPhysicsMaterial;
 	typedef ResourceHandle<PhysicsMesh> HPhysicsMesh;
 	typedef ResourceHandle<AudioClip> HAudioClip;
+	typedef ResourceHandle<AnimationClip> HAnimationClip;
 
 	/** @} */
 }

+ 47 - 0
Source/BansheeCore/Source/BsAnimationClip.cpp

@@ -0,0 +1,47 @@
+//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
+//**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
+#include "BsAnimationClip.h"
+#include "BsResources.h"
+#include "BsAnimationClipRTTI.h"
+
+namespace BansheeEngine
+{
+	AnimationClip::AnimationClip()
+		: Resource(false)
+	{
+		
+	}
+
+	HAnimationClip AnimationClip::create()
+	{
+		return static_resource_cast<AnimationClip>(gResources()._createResourceHandle(_createPtr()));
+	}
+
+	SPtr<AnimationClip> AnimationClip::_createPtr()
+	{
+		SPtr<AnimationClip> newClip = createEmpty();
+		newClip->initialize();
+
+		return newClip;
+	}
+
+	SPtr<AnimationClip> AnimationClip::createEmpty()
+	{
+		AnimationClip* rawPtr = new (bs_alloc<AnimationClip>()) AnimationClip();
+
+		SPtr<AnimationClip> newClip = bs_core_ptr<AnimationClip>(rawPtr);
+		newClip->_setThisPtr(newClip);
+
+		return newClip;
+	}
+
+	RTTITypeBase* AnimationClip::getRTTIStatic()
+	{
+		return AnimationClipRTTI::instance();
+	}
+
+	RTTITypeBase* AnimationClip::getRTTI() const
+	{
+		return getRTTIStatic();
+	}
+}

+ 0 - 1
Source/BansheeCore/Source/BsAudioClip.cpp

@@ -2,7 +2,6 @@
 //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
 #include "BsAudioClip.h"
 #include "BsResources.h"
-#include "BsAudioClip.h"
 #include "BsAudio.h"
 #include "BsAudioClipRTTI.h"
 

+ 1 - 0
Source/BansheeFBXImporter/Include/BsFBXImportData.h

@@ -35,6 +35,7 @@ namespace BansheeEngine
 
 		Matrix4 localTransform;
 		Matrix4 worldTransform;
+		String name;
 		FbxNode* fbxNode;
 
 		Vector<FBXImportNode*> children;

+ 1 - 0
Source/BansheeFBXImporter/Source/BsFBXImporter.cpp

@@ -364,6 +364,7 @@ namespace BansheeEngine
 		Quaternion rotation((Radian)rotationEuler.x, (Radian)rotationEuler.y, (Radian)rotationEuler.z);
 
 		node->localTransform.setTRS(translation, rotation, scale);
+		node->name = fbxNode->GetNameWithoutNameSpacePrefix().Buffer();
 		node->fbxNode = fbxNode;
 
 		if (parent != nullptr)

+ 31 - 0
Source/MBansheeEditor/Inspectors/AnimationClipInspector.cs

@@ -0,0 +1,31 @@
+//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
+//**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
+using BansheeEngine;
+
+namespace BansheeEditor
+{
+    /** @addtogroup Inspectors
+     *  @{
+     */
+
+    /// <summary>
+    /// Renders an inspector for the <see cref="AnimationClip"/> resource.
+    /// </summary>
+    [CustomInspector(typeof(AnimationClip))]
+    internal class AnimationClipInspector : Inspector
+    {
+        /// <inheritdoc/>
+        protected internal override void Initialize()
+        {
+            // No GUI for physics mesh resource
+        }
+
+        /// <inheritdoc/>
+        protected internal override InspectableState Refresh()
+        {
+            return InspectableState.NotModified;
+        }
+    }
+
+    /** @} */
+}

+ 1 - 0
Source/MBansheeEditor/MBansheeEditor.csproj

@@ -40,6 +40,7 @@
     <Reference Include="System.Xml" />
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Inspectors\AnimationClipInspector.cs" />
     <Compile Include="Inspectors\AudioClipInspector.cs" />
     <Compile Include="Inspectors\AudioListenerInspector.cs" />
     <Compile Include="Inspectors\AudioSourceInspector.cs" />

+ 2 - 0
Source/MBansheeEditor/Windows/Library/LibraryGUIEntry.cs

@@ -486,6 +486,8 @@ namespace BansheeEditor
                         return EditorBuiltin.GetLibraryItemIcon(LibraryItemIcon.PhysicsMesh, size);
                     case ResourceType.AudioClip:
                         return EditorBuiltin.GetLibraryItemIcon(LibraryItemIcon.AudioClip, size);
+                    case ResourceType.AnimationClip:
+                        return EditorBuiltin.GetLibraryItemIcon(LibraryItemIcon.AnimationClip, size);
                 }
             }
 

+ 1 - 1
Source/MBansheeEditor/Windows/Library/ProjectLibrary.cs

@@ -453,7 +453,7 @@ namespace BansheeEditor
     public enum ResourceType // Note: Must match the C++ enum ScriptResourceType
     {
         Texture, SpriteTexture, Mesh, Font, Shader, ShaderInclude, Material, Prefab, PlainText, 
-        ScriptCode, StringTable, GUISkin, PhysicsMaterial, PhysicsMesh, AudioClip, Undefined
+        ScriptCode, StringTable, GUISkin, PhysicsMaterial, PhysicsMesh, AudioClip, AnimationClip, Undefined
     }
 
     /// <summary>

+ 22 - 0
Source/MBansheeEngine/Animation/AnimationClip.cs

@@ -0,0 +1,22 @@
+//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
+//**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
+using System;
+using System.Runtime.CompilerServices;
+
+namespace BansheeEngine
+{
+    /** @addtogroup Animation
+     *  @{
+     */
+     
+    public class AnimationClip : Resource
+    {
+        /// <summary>
+        /// Constructor for internal use by the runtime.
+        /// </summary>
+        private AnimationClip()
+        { }
+    }
+
+    /** @} */
+}

+ 4 - 0
Source/MBansheeEngine/Interop/Program.cs

@@ -23,6 +23,10 @@ namespace BansheeEngine
      *  Audio clips, 3D sound and music reproduction.
      */
 
+    /** @defgroup Animation Animation
+     *	Animation clips, skeletal and blend shape animation, animation playback, blending and other features.
+     */
+
     /** @defgroup Math Math 
      *  Variety of general purpose math functionality.
      */

+ 1 - 0
Source/MBansheeEngine/MBansheeEngine.csproj

@@ -43,6 +43,7 @@
     <Reference Include="System.Xml" />
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Animation\AnimationClip.cs" />
     <Compile Include="Audio\Audio.cs" />
     <Compile Include="Audio\AudioClip.cs" />
     <Compile Include="Audio\AudioListener.cs" />

+ 2 - 0
Source/SBansheeEngine/CMakeSources.cmake

@@ -138,6 +138,7 @@ set(BS_SBANSHEEENGINE_INC_WRAPPERS
 	"Include/BsScriptAudio.h"
 	"Include/BsScriptAudioSource.h"
 	"Include/BsScriptAudioListener.h"
+	"Include/BsScriptAnimationClip.h"
 )
 
 set(BS_SBANSHEEENGINE_INC_WRAPPERS_GUI
@@ -266,6 +267,7 @@ set(BS_SBANSHEEENGINE_SRC_WRAPPERS
 	"Source/BsScriptAudio.cpp"
 	"Source/BsScriptAudioSource.cpp"
 	"Source/BsScriptAudioListener.cpp"
+	"Source/BsScriptAnimationClip.cpp"
 )
 
 set(BS_SBANSHEEENGINE_INC_SERIALIZATION

+ 1 - 0
Source/SBansheeEngine/Include/BsManagedSerializableObjectInfo.h

@@ -53,6 +53,7 @@ namespace BansheeEngine
 		PhysicsMaterial,
 		PhysicsMesh,
 		AudioClip,
+		AnimationClip,
 		ManagedComponent,
 		Resource,
 		Count // Keep at end

+ 35 - 0
Source/SBansheeEngine/Include/BsScriptAnimationClip.h

@@ -0,0 +1,35 @@
+//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
+//**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
+#pragma once
+
+#include "BsScriptEnginePrerequisites.h"
+#include "BsScriptResource.h"
+#include "BsAnimationClip.h"
+
+namespace BansheeEngine
+{
+	/** @addtogroup ScriptInteropEngine
+	 *  @{
+	 */
+
+	/**	Interop class between C++ & CLR for AnimationClip. */
+	class BS_SCR_BE_EXPORT ScriptAnimationClip : public TScriptResource<ScriptAnimationClip, AnimationClip>
+	{
+	public:
+		SCRIPT_OBJ(ENGINE_ASSEMBLY, "BansheeEngine", "AnimationClip")
+
+		/**	Creates an empty, uninitialized managed instance of the resource interop object. */
+		static MonoObject* createInstance();
+
+	private:
+		friend class ScriptResourceManager;
+
+		ScriptAnimationClip(MonoObject* instance, const HAnimationClip& animationClip);
+
+		/************************************************************************/
+		/* 								CLR HOOKS						   		*/
+		/************************************************************************/
+	};
+
+	/** @} */
+}

+ 1 - 1
Source/SBansheeEngine/Include/BsScriptResource.h

@@ -16,7 +16,7 @@ namespace BansheeEngine
 	enum class ScriptResourceType // Note: Must be the same as C# enum ResourceType
 	{
 		Texture, SpriteTexture, Mesh, Font, Shader, ShaderInclude, Material, Prefab, 
-		PlainText, ScriptCode, StringTable, GUISkin, PhysicsMaterial, PhysicsMesh, AudioClip, Undefined
+		PlainText, ScriptCode, StringTable, GUISkin, PhysicsMaterial, PhysicsMesh, AudioClip, AnimationClip, Undefined
 	};
 
 	/**	Base class for all resource interop objects. */

+ 4 - 0
Source/SBansheeEngine/Source/BsManagedSerializableField.cpp

@@ -25,6 +25,7 @@
 #include "BsScriptPhysicsMaterial.h"
 #include "BsScriptPhysicsMesh.h"
 #include "BsScriptAudioClip.h"
+#include "BsScriptAnimationClip.h"
 #include "BsScriptSceneObject.h"
 #include "BsScriptComponent.h"
 #include "BsManagedSerializableObject.h"
@@ -183,6 +184,9 @@ namespace BansheeEngine
 			lookup[(int)ScriptReferenceType::AudioClip] =
 				{ &getScriptResource<AudioClip, ScriptAudioClip>, &setScriptResource<ScriptAudioClip> };
 
+			lookup[(int)ScriptReferenceType::AnimationClip] =
+			{ &getScriptResource<AnimationClip, ScriptAnimationClip>, &setScriptResource<ScriptAnimationClip> };
+
 			lookup[(int)ScriptReferenceType::ManagedResource] =
 				{ &getScriptResource<ManagedResource, ScriptManagedResource>, &setScriptResource<ScriptManagedResource> };
 

+ 4 - 0
Source/SBansheeEngine/Source/BsManagedSerializableObjectInfo.cpp

@@ -22,6 +22,7 @@
 #include "BsScriptPhysicsMaterial.h"
 #include "BsScriptPhysicsMesh.h"
 #include "BsScriptAudioClip.h"
+#include "BsScriptAnimationClip.h"
 #include "BsScriptPrefab.h"
 #include "BsScriptManagedResource.h"
 
@@ -208,6 +209,7 @@ namespace BansheeEngine
 		case ScriptReferenceType::PhysicsMaterial:
 		case ScriptReferenceType::PhysicsMesh:
 		case ScriptReferenceType::AudioClip:
+		case ScriptReferenceType::AnimationClip:
 		case ScriptReferenceType::SceneObject:
 		case ScriptReferenceType::Component:
 			return true;
@@ -258,6 +260,8 @@ namespace BansheeEngine
 			return ScriptPhysicsMesh::getMetaData()->scriptClass->_getInternalClass();
 		case ScriptReferenceType::AudioClip:
 			return ScriptAudioClip::getMetaData()->scriptClass->_getInternalClass();
+		case ScriptReferenceType::AnimationClip:
+			return ScriptAnimationClip::getMetaData()->scriptClass->_getInternalClass();
 		case ScriptReferenceType::SceneObject:
 			return ScriptAssemblyManager::instance().getSceneObjectClass()->_getInternalClass();
 		case ScriptReferenceType::Component:

+ 25 - 0
Source/SBansheeEngine/Source/BsScriptAnimationClip.cpp

@@ -0,0 +1,25 @@
+//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
+//**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
+#include "BsScriptAnimationClip.h"
+#include "BsScriptResourceManager.h"
+#include "BsScriptMeta.h"
+#include "BsMonoClass.h"
+
+namespace BansheeEngine
+{
+	ScriptAnimationClip::ScriptAnimationClip(MonoObject* instance, const HAnimationClip& animationClip)
+		:TScriptResource(instance, animationClip)
+	{
+
+	}
+
+	void ScriptAnimationClip::initRuntimeData()
+	{
+		
+	}
+	
+	MonoObject* ScriptAnimationClip::createInstance()
+	{
+		return metaData.scriptClass->createInstance();
+	}
+}

+ 3 - 0
Source/SBansheeEngine/Source/BsScriptAssemblyManager.cpp

@@ -26,6 +26,7 @@
 #include "BsScriptPhysicsMesh.h"
 #include "BsScriptAudioClip.h"
 #include "BsScriptPrefab.h"
+#include "BsScriptAnimationClip.h"
 
 namespace BansheeEngine
 {
@@ -308,6 +309,8 @@ namespace BansheeEngine
 					typeInfo->mType = ScriptReferenceType::PhysicsMesh;
 				else if (monoClass->isSubClassOf(ScriptAudioClip::getMetaData()->scriptClass))
 					typeInfo->mType = ScriptReferenceType::AudioClip;
+				else if (monoClass->isSubClassOf(ScriptAnimationClip::getMetaData()->scriptClass))
+					typeInfo->mType = ScriptReferenceType::AnimationClip;
 				else
 				{
 					assert(false && "Unrecognized resource type");

+ 7 - 0
Source/SBansheeEngine/Source/BsScriptResource.cpp

@@ -21,6 +21,7 @@
 #include "BsScriptPhysicsMaterial.h"
 #include "BsScriptAudioClip.h"
 #include "BsScriptPrefab.h"
+#include "BsScriptAnimationClip.h"
 
 namespace BansheeEngine
 {
@@ -92,6 +93,8 @@ namespace BansheeEngine
 			return ScriptPhysicsMesh::getMetaData()->scriptClass;
 		case TID_AudioClip:
 			return ScriptAudioClip::getMetaData()->scriptClass;
+		case TID_AnimationClip:
+			return ScriptAnimationClip::getMetaData()->scriptClass;
 		}
 
 		return nullptr;
@@ -131,6 +134,8 @@ namespace BansheeEngine
 			return ScriptResourceType::PhysicsMesh;
 		case TID_AudioClip:
 			return ScriptResourceType::AudioClip;
+		case TID_AnimationClip:
+			return ScriptResourceType::AnimationClip;
 		}
 
 		return ScriptResourceType::Undefined;
@@ -170,6 +175,8 @@ namespace BansheeEngine
 			return TID_PhysicsMesh;
 		case ScriptResourceType::AudioClip:
 			return TID_AudioClip;
+		case ScriptResourceType::AnimationClip:
+			return TID_AnimationClip;
 		default:
 			break;
 		}

+ 6 - 0
Source/SBansheeEngine/Source/BsScriptResourceManager.cpp

@@ -22,6 +22,7 @@
 #include "BsScriptPhysicsMaterial.h"
 #include "BsScriptPhysicsMesh.h"
 #include "BsScriptAudioClip.h"
+#include "BsScriptAnimationClip.h"
 #include "BsScriptManagedResource.h"
 #include "BsScriptAssemblyManager.h"
 
@@ -155,6 +156,8 @@ namespace BansheeEngine
 				return ScriptResourceManager_createScriptResource(thisPtr, static_resource_cast<PhysicsMesh>(resourceHandle), (ScriptPhysicsMesh**)out);
 			case TID_AudioClip:
 				return ScriptResourceManager_createScriptResource(thisPtr, static_resource_cast<AudioClip>(resourceHandle), (ScriptAudioClip**)out);
+			case TID_AnimationClip:
+				return ScriptResourceManager_createScriptResource(thisPtr, static_resource_cast<AnimationClip>(resourceHandle), (ScriptAnimationClip**)out);
 			case TID_ManagedResource:
 				BS_EXCEPT(InternalErrorException, "Managed resources must have a managed instance by default, this call is invalid.")
 					break;
@@ -182,6 +185,7 @@ namespace BansheeEngine
 		template void ScriptResourceManager_createScriptResource(ScriptResourceManager* thisPtr, const ResourceHandle<PhysicsMesh>&, ScriptPhysicsMesh**);
 		template void ScriptResourceManager_createScriptResource(ScriptResourceManager* thisPtr, const ResourceHandle<PhysicsMaterial>&, ScriptPhysicsMaterial**);
 		template void ScriptResourceManager_createScriptResource(ScriptResourceManager* thisPtr, const ResourceHandle<AudioClip>&, ScriptAudioClip**);
+		template void ScriptResourceManager_createScriptResource(ScriptResourceManager* thisPtr, const ResourceHandle<AnimationClip>&, ScriptAnimationClip**);
 	}
 
 	template BS_SCR_BE_EXPORT void ScriptResourceManager::createScriptResource(MonoObject*, const ResourceHandle<Texture>&, ScriptTexture2D**);
@@ -201,6 +205,7 @@ namespace BansheeEngine
 	template BS_SCR_BE_EXPORT void ScriptResourceManager::createScriptResource(MonoObject*, const ResourceHandle<PhysicsMesh>&, ScriptPhysicsMesh**);
 	template BS_SCR_BE_EXPORT void ScriptResourceManager::createScriptResource(MonoObject*, const ResourceHandle<PhysicsMaterial>&, ScriptPhysicsMaterial**);
 	template BS_SCR_BE_EXPORT void ScriptResourceManager::createScriptResource(MonoObject*, const ResourceHandle<AudioClip>&, ScriptAudioClip**);
+	template BS_SCR_BE_EXPORT void ScriptResourceManager::createScriptResource(MonoObject*, const ResourceHandle<AnimationClip>&, ScriptAnimationClip**);
 	template BS_SCR_BE_EXPORT void ScriptResourceManager::createScriptResource(MonoObject*, const ResourceHandle<ManagedResource>&, ScriptManagedResource**);
 
 	template BS_SCR_BE_EXPORT void ScriptResourceManager::getScriptResource(const ResourceHandle<Texture>& resourceHandle, ScriptTexture2D** out, bool create);
@@ -221,6 +226,7 @@ namespace BansheeEngine
 	template BS_SCR_BE_EXPORT void ScriptResourceManager::getScriptResource(const ResourceHandle<PhysicsMesh>& resourceHandle, ScriptPhysicsMesh** out, bool create);
 	template BS_SCR_BE_EXPORT void ScriptResourceManager::getScriptResource(const ResourceHandle<PhysicsMaterial>& resourceHandle, ScriptPhysicsMaterial** out, bool create);
 	template BS_SCR_BE_EXPORT void ScriptResourceManager::getScriptResource(const ResourceHandle<AudioClip>& resourceHandle, ScriptAudioClip** out, bool create);
+	template BS_SCR_BE_EXPORT void ScriptResourceManager::getScriptResource(const ResourceHandle<AnimationClip>& resourceHandle, ScriptAnimationClip** out, bool create);
 	template BS_SCR_BE_EXPORT void ScriptResourceManager::getScriptResource(const ResourceHandle<ManagedResource>& resourceHandle, ScriptManagedResource** out, bool create);
 	template BS_SCR_BE_EXPORT void ScriptResourceManager::getScriptResource(const ResourceHandle<Resource>& resourceHandle, ScriptResourceBase** out, bool create);