Ver código fonte

Added PhysicsMesh & PhysicsMaterial script interop objects

BearishSun 10 anos atrás
pai
commit
c58dcb4c91

+ 5 - 1
BansheeEditor/Include/BsBuiltinEditorResources.h

@@ -15,7 +15,8 @@ namespace BansheeEngine
 	 */
 	enum class ProjectIcon
 	{
-		Folder, Mesh, Font, Texture, PlainText, ScriptCode, SpriteTexture, Shader, ShaderInclude, Material, Prefab, GUISkin
+		Folder, Mesh, Font, Texture, PlainText, ScriptCode, SpriteTexture, Shader, ShaderInclude, Material, Prefab, GUISkin,
+		PhysicsMaterial, PhysicsMesh
 	};
 
 	/**
@@ -312,6 +313,9 @@ namespace BansheeEngine
 		static const WString SpriteTextureIconTex;
 		static const WString PrefabIconTex;
 		static const WString GUISkinIconTex;
+		static const WString PhysicsMaterialIconTex;
+		static const WString PhysicsMeshIconTex;
+
 
 		static const WString WindowBackgroundTex;
 

+ 9 - 1
BansheeEditor/Source/BsBuiltinEditorResources.cpp

@@ -80,6 +80,8 @@ namespace BansheeEngine
 	const WString BuiltinEditorResources::SpriteTextureIconTex = L"SpriteIcon.psd";
 	const WString BuiltinEditorResources::PrefabIconTex = L"PrefabIcon.psd";
 	const WString BuiltinEditorResources::GUISkinIconTex = L"GUISkinIcon.psd";
+	const WString BuiltinEditorResources::PhysicsMaterialIconTex = L"MaterialIcon.psd"; // TODO: Needs proper icon
+	const WString BuiltinEditorResources::PhysicsMeshIconTex = L"MeshIcon.psd"; // TODO: Needs proper icon
 
 	const WString BuiltinEditorResources::ButtonNormalTex = L"ButtonNormal.png";
 	const WString BuiltinEditorResources::ButtonHoverTex = L"ButtonHover.png";
@@ -403,7 +405,7 @@ namespace BansheeEngine
 
 		WString iconsToProcess[] = { FolderIconTex, FontIconTex, MeshIconTex, TextureIconTex, PlainTextIconTex, 
 			ScriptCodeIconTex, ShaderIconTex, ShaderIncludeIconTex, MaterialIconTex, SpriteTextureIconTex, PrefabIconTex,
-			GUISkinIconTex };
+			GUISkinIconTex, PhysicsMaterialIconTex, PhysicsMeshIconTex };
 
 		PixelDataPtr srcData[sizeof(iconsToProcess)];
 
@@ -2025,6 +2027,12 @@ namespace BansheeEngine
 		case ProjectIcon::GUISkin:
 			iconName = GUISkinIconTex;
 			break;
+		case ProjectIcon::PhysicsMaterial:
+			iconName = PhysicsMaterialIconTex;
+			break;
+		case ProjectIcon::PhysicsMesh:
+			iconName = PhysicsMeshIconTex;
+			break;
 		}
 
 		if (iconName.empty())

+ 2 - 1
MBansheeEditor/EditorBuiltin.cs

@@ -44,7 +44,8 @@ namespace BansheeEditor
     /// </summary>
     public enum LibraryItemIcon // Note: Must match C++ enum ProjectIcon
 	{
-		Folder, Mesh, Font, Texture, PlainText, ScriptCode, SpriteTexture, Shader, ShaderInclude, Material, Prefab, GUISkin
+		Folder, Mesh, Font, Texture, PlainText, ScriptCode, SpriteTexture, Shader, ShaderInclude, Material, Prefab, GUISkin,
+        PhysicsMaterial, PhysicsMesh
 	};
 
     /// <summary>

+ 4 - 0
MBansheeEditor/Library/LibraryGUIEntry.cs

@@ -397,6 +397,10 @@ namespace BansheeEditor
                         return EditorBuiltin.GetLibraryItemIcon(LibraryItemIcon.Prefab, size);
                     case ResourceType.GUISkin:
                         return EditorBuiltin.GetLibraryItemIcon(LibraryItemIcon.GUISkin, size);
+                    case ResourceType.PhysicsMaterial:
+                        return EditorBuiltin.GetLibraryItemIcon(LibraryItemIcon.PhysicsMaterial, size);
+                    case ResourceType.PhysicsMesh:
+                        return EditorBuiltin.GetLibraryItemIcon(LibraryItemIcon.PhysicsMesh, size);
                 }
             }
 

+ 1 - 1
MBansheeEditor/ProjectLibrary.cs

@@ -444,7 +444,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, Undefined
+        ScriptCode, StringTable, GUISkin, PhysicsMaterial, PhysicsMesh, Undefined
     }
 
     /// <summary>

+ 1 - 1
MBansheeEngine/PhysicsMesh.cs

@@ -42,7 +42,7 @@ namespace BansheeEngine
     /// <summary>
     /// Valid types of a mesh used for physics.
     /// </summary>
-    public enum PhysicsMeshType
+    public enum PhysicsMeshType // Note: Must match C++ enum PhysicsMeshType
     {
         /// <summary>
         /// A regular triangle mesh. Mesh can be of arbitrary size but cannot be used for triggers and non-kinematic 

+ 3 - 1
SBansheeEngine/Include/BsManagedSerializableObjectInfo.h

@@ -42,7 +42,9 @@ namespace BansheeEngine
 		StringTableRef,
 		GUISkinRef,
 		SceneObjectRef,
-		ComponentRef
+		ComponentRef,
+		PhysicsMaterialRef,
+		PhysicsMeshRef,
 	};
 
 	/**

+ 37 - 0
SBansheeEngine/Include/BsScriptPhysicsMaterial.h

@@ -0,0 +1,37 @@
+//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
+//**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
+#pragma once
+
+#include "BsScriptEnginePrerequisites.h"
+#include "BsScriptResource.h"
+#include "BsPhysicsMaterial.h"
+
+namespace BansheeEngine
+{
+	/**	Interop class between C++ & CLR for PhysicsMaterial. */
+	class BS_SCR_BE_EXPORT ScriptPhysicsMaterial : public TScriptResource<ScriptPhysicsMaterial, PhysicsMaterial>
+	{
+	public:
+		SCRIPT_OBJ(ENGINE_ASSEMBLY, "BansheeEngine", "PhysicsMaterial")
+
+	private:
+		friend class ScriptResourceManager;
+
+		ScriptPhysicsMaterial(MonoObject* instance, const HPhysicsMaterial& material);
+
+		/**	Creates an empty, uninitialized managed instance of the resource interop object. */
+		static MonoObject* createInstance();
+
+		/************************************************************************/
+		/* 								CLR HOOKS						   		*/
+		/************************************************************************/
+		static void internal_CreateInstance(MonoObject* instance, float staticFriction,
+			float dynamicFriction, float restitution);
+		static float internal_GetStaticFriction(ScriptPhysicsMaterial* thisPtr);
+		static void internal_SetStaticFriction(ScriptPhysicsMaterial* thisPtr, float value);
+		static float internal_GetDynamicFriction(ScriptPhysicsMaterial* thisPtr);
+		static void internal_SetDynamicFriction(ScriptPhysicsMaterial* thisPtr, float value);
+		static float internal_GetRestitution(ScriptPhysicsMaterial* thisPtr);
+		static void internal_SetRestitution(ScriptPhysicsMaterial* thisPtr, float value);
+	};
+}

+ 31 - 0
SBansheeEngine/Include/BsScriptPhysicsMesh.h

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

+ 2 - 2
SBansheeEngine/Include/BsScriptResource.h

@@ -10,10 +10,10 @@ namespace BansheeEngine
 	/**
 	 * @brief	Types of resources accessible from script code.
 	 */
-	enum class ScriptResourceType // Note: Must be the same as C# enum ScriptResourceType
+	enum class ScriptResourceType // Note: Must be the same as C# enum ResourceType
 	{
 		Texture, SpriteTexture, Mesh, Font, Shader, ShaderInclude, Material, Prefab, 
-		PlainText, ScriptCode, StringTable, GUISkin, Undefined
+		PlainText, ScriptCode, StringTable, GUISkin, PhysicsMaterial, PhysicsMesh, Undefined
 	};
 
 	/**

+ 4 - 0
SBansheeEngine/SBansheeEngine.vcxproj

@@ -320,6 +320,8 @@
     <ClInclude Include="Include\BsScriptObject.h" />
     <ClInclude Include="Include\BsScriptObjectImpl.h" />
     <ClInclude Include="Include\BsScriptObjectManager.h" />
+    <ClInclude Include="Include\BsScriptPhysicsMaterial.h" />
+    <ClInclude Include="Include\BsScriptPhysicsMesh.h" />
     <ClInclude Include="Include\BsScriptPixelData.h" />
     <ClInclude Include="Include\BsScriptPixelUtility.h" />
     <ClInclude Include="Include\BsScriptPlainText.h" />
@@ -420,6 +422,8 @@
     <ClCompile Include="Source\BsScriptObject.cpp" />
     <ClCompile Include="Source\BsScriptObjectImpl.cpp" />
     <ClCompile Include="Source\BsScriptObjectManager.cpp" />
+    <ClCompile Include="Source\BsScriptPhysicsMaterial.cpp" />
+    <ClCompile Include="Source\BsScriptPhysicsMesh.cpp" />
     <ClCompile Include="Source\BsScriptPixelData.cpp" />
     <ClCompile Include="Source\BsScriptPixelUtility.cpp" />
     <ClCompile Include="Source\BsScriptPlainText.cpp" />

+ 12 - 0
SBansheeEngine/SBansheeEngine.vcxproj.filters

@@ -362,6 +362,12 @@
     <ClInclude Include="Include\BsScriptGUI.h">
       <Filter>Header Files\GUI</Filter>
     </ClInclude>
+    <ClInclude Include="Include\BsScriptPhysicsMaterial.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\BsScriptPhysicsMesh.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="Source\BsScriptTexture2D.cpp">
@@ -667,5 +673,11 @@
     <ClCompile Include="Source\BsScriptGUI.cpp">
       <Filter>Source Files\GUI</Filter>
     </ClCompile>
+    <ClCompile Include="Source\BsScriptPhysicsMaterial.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="Source\BsScriptPhysicsMesh.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
   </ItemGroup>
 </Project>

+ 56 - 0
SBansheeEngine/Source/BsManagedSerializableField.cpp

@@ -22,6 +22,8 @@
 #include "BsScriptFont.h"
 #include "BsScriptStringTable.h"
 #include "BsScriptGUISkin.h"
+#include "BsScriptPhysicsMaterial.h"
+#include "BsScriptPhysicsMesh.h"
 #include "BsScriptSceneObject.h"
 #include "BsScriptComponent.h"
 #include "BsManagedSerializableObject.h"
@@ -335,6 +337,30 @@ namespace BansheeEngine
 
 				return fieldData;
 			}
+			case ScriptPrimitiveType::PhysicsMaterialRef:
+			{
+				auto fieldData = bs_shared_ptr_new<ManagedSerializableFieldDataResourceRef>();
+
+				if (value != nullptr)
+				{
+					ScriptPhysicsMaterial* scriptPhysicsMaterial = ScriptPhysicsMaterial::toNative(value);
+					fieldData->value = scriptPhysicsMaterial->getHandle();
+				}
+
+				return fieldData;
+			}
+			case ScriptPrimitiveType::PhysicsMeshRef:
+			{
+				auto fieldData = bs_shared_ptr_new<ManagedSerializableFieldDataResourceRef>();
+
+				if (value != nullptr)
+				{
+					ScriptPhysicsMesh* scriptPhysicsMesh = ScriptPhysicsMesh::toNative(value);
+					fieldData->value = scriptPhysicsMesh->getHandle();
+				}
+
+				return fieldData;
+			}
 			case ScriptPrimitiveType::ManagedResourceRef:
 				{
 					auto fieldData = bs_shared_ptr_new<ManagedSerializableFieldDataResourceRef>();
@@ -824,6 +850,36 @@ namespace BansheeEngine
 				else
 					return nullptr;
 			}
+			else if (primitiveTypeInfo->mType == ScriptPrimitiveType::PhysicsMaterialRef)
+			{
+				if (!value.getUUID().empty())
+				{
+					HPhysicsMaterial material = static_resource_cast<PhysicsMaterial>(value);
+
+					ScriptPhysicsMaterial* scriptResource;
+					ScriptResourceManager::instance().getScriptResource(material, &scriptResource, true);
+
+					if (scriptResource != nullptr)
+						return scriptResource->getManagedInstance();
+				}
+				else
+					return nullptr;
+			}
+			else if (primitiveTypeInfo->mType == ScriptPrimitiveType::PhysicsMeshRef)
+			{
+				if (!value.getUUID().empty())
+				{
+					HPhysicsMesh mesh = static_resource_cast<PhysicsMesh>(value);
+
+					ScriptPhysicsMesh* scriptResource;
+					ScriptResourceManager::instance().getScriptResource(mesh, &scriptResource, true);
+
+					if (scriptResource != nullptr)
+						return scriptResource->getManagedInstance();
+				}
+				else
+					return nullptr;
+			}
 			else if (primitiveTypeInfo->mType == ScriptPrimitiveType::ManagedResourceRef)
 			{
 				if (!value.getUUID().empty())

+ 6 - 0
SBansheeEngine/Source/BsManagedSerializableObjectInfo.cpp

@@ -27,6 +27,8 @@
 #include "BsScriptScriptCode.h"
 #include "BsScriptStringTable.h"
 #include "BsScriptGUISkin.h"
+#include "BsScriptPhysicsMaterial.h"
+#include "BsScriptPhysicsMesh.h"
 #include "BsScriptPrefab.h"
 #include "BsScriptManagedResource.h"
 
@@ -194,6 +196,10 @@ namespace BansheeEngine
 			return ScriptStringTable::getMetaData()->scriptClass->_getInternalClass();
 		case ScriptPrimitiveType::GUISkinRef:
 			return ScriptGUISkin::getMetaData()->scriptClass->_getInternalClass();
+		case ScriptPrimitiveType::PhysicsMaterialRef:
+			return ScriptPhysicsMaterial::getMetaData()->scriptClass->_getInternalClass();
+		case ScriptPrimitiveType::PhysicsMeshRef:
+			return ScriptPhysicsMesh::getMetaData()->scriptClass->_getInternalClass();
 		case ScriptPrimitiveType::SceneObjectRef:
 			return ScriptAssemblyManager::instance().getSceneObjectClass()->_getInternalClass();
 		case ScriptPrimitiveType::ComponentRef:

+ 14 - 0
SBansheeEngine/Source/BsScriptAssemblyManager.cpp

@@ -22,6 +22,8 @@
 #include "BsScriptScriptCode.h"
 #include "BsScriptStringTable.h"
 #include "BsScriptGUISkin.h"
+#include "BsScriptPhysicsMaterial.h"
+#include "BsScriptPhysicsMesh.h"
 #include "BsScriptPrefab.h"
 
 namespace BansheeEngine
@@ -356,6 +358,18 @@ namespace BansheeEngine
 				typeInfo->mType = ScriptPrimitiveType::GUISkinRef;
 				return typeInfo;
 			}
+			else if (monoClass->isSubClassOf(ScriptPhysicsMaterial::getMetaData()->scriptClass))
+			{
+				std::shared_ptr<ManagedSerializableTypeInfoPrimitive> typeInfo = bs_shared_ptr_new<ManagedSerializableTypeInfoPrimitive>();
+				typeInfo->mType = ScriptPrimitiveType::PhysicsMaterialRef;
+				return typeInfo;
+			}
+			else if (monoClass->isSubClassOf(ScriptPhysicsMesh::getMetaData()->scriptClass))
+			{
+				std::shared_ptr<ManagedSerializableTypeInfoPrimitive> typeInfo = bs_shared_ptr_new<ManagedSerializableTypeInfoPrimitive>();
+				typeInfo->mType = ScriptPrimitiveType::PhysicsMeshRef;
+				return typeInfo;
+			}
 			else if(monoClass->isSubClassOf(mSceneObjectClass))
 			{
 				std::shared_ptr<ManagedSerializableTypeInfoPrimitive> typeInfo = bs_shared_ptr_new<ManagedSerializableTypeInfoPrimitive>();

+ 82 - 0
SBansheeEngine/Source/BsScriptPhysicsMaterial.cpp

@@ -0,0 +1,82 @@
+//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
+//**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
+#include "BsScriptPhysicsMaterial.h"
+#include "BsScriptResourceManager.h"
+#include "BsScriptMeta.h"
+#include "BsMonoClass.h"
+#include "BsMonoManager.h"
+
+namespace BansheeEngine
+{
+	ScriptPhysicsMaterial::ScriptPhysicsMaterial(MonoObject* instance, const HPhysicsMaterial& material)
+		:TScriptResource(instance, material)
+	{
+
+	}
+
+	void ScriptPhysicsMaterial::initRuntimeData()
+	{
+		metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptPhysicsMaterial::internal_CreateInstance);
+		metaData.scriptClass->addInternalCall("Internal_GetStaticFriction", &ScriptPhysicsMaterial::internal_GetStaticFriction);
+		metaData.scriptClass->addInternalCall("Internal_SetStaticFriction", &ScriptPhysicsMaterial::internal_SetStaticFriction);
+		metaData.scriptClass->addInternalCall("Internal_GetDynamicFriction", &ScriptPhysicsMaterial::internal_GetDynamicFriction);
+		metaData.scriptClass->addInternalCall("Internal_SetDynamicFriction", &ScriptPhysicsMaterial::internal_SetDynamicFriction);
+		metaData.scriptClass->addInternalCall("Internal_GetRestitution", &ScriptPhysicsMaterial::internal_GetRestitution);
+		metaData.scriptClass->addInternalCall("Internal_SetRestitution", &ScriptPhysicsMaterial::internal_SetRestitution);
+	}
+
+	void ScriptPhysicsMaterial::internal_CreateInstance(MonoObject* instance, float staticFriction,
+		float dynamicFriction, float restitution)
+	{
+		HPhysicsMaterial material = PhysicsMaterial::create(staticFriction, dynamicFriction, restitution);
+
+		ScriptPhysicsMaterial* scriptInstance;
+		ScriptResourceManager::instance().createScriptResource(instance, material, &scriptInstance);
+	}
+
+	float ScriptPhysicsMaterial::internal_GetStaticFriction(ScriptPhysicsMaterial* thisPtr)
+	{
+		HPhysicsMaterial material = thisPtr->getHandle();
+		return material->getStaticFriction();
+	}
+
+	void ScriptPhysicsMaterial::internal_SetStaticFriction(ScriptPhysicsMaterial* thisPtr, float value)
+	{
+		HPhysicsMaterial material = thisPtr->getHandle();
+		material->setStaticFriction(value);
+	}
+
+	float ScriptPhysicsMaterial::internal_GetDynamicFriction(ScriptPhysicsMaterial* thisPtr)
+	{
+		HPhysicsMaterial material = thisPtr->getHandle();
+		return material->getDynamicFriction();
+	}
+
+	void ScriptPhysicsMaterial::internal_SetDynamicFriction(ScriptPhysicsMaterial* thisPtr, float value)
+	{
+		HPhysicsMaterial material = thisPtr->getHandle();
+		material->setDynamicFriction(value);
+	}
+
+	float ScriptPhysicsMaterial::internal_GetRestitution(ScriptPhysicsMaterial* thisPtr)
+	{
+		HPhysicsMaterial material = thisPtr->getHandle();
+		return material->getRestitutionCoefficient();
+	}
+
+	void ScriptPhysicsMaterial::internal_SetRestitution(ScriptPhysicsMaterial* thisPtr, float value)
+	{
+		HPhysicsMaterial material = thisPtr->getHandle();
+		material->setRestitutionCoefficient(value);
+	}
+
+	MonoObject* ScriptPhysicsMaterial::createInstance()
+	{
+		bool dummy = false;
+
+		void* params[1];
+		params[0] = &dummy;
+
+		return metaData.scriptClass->createInstance("bool", params);
+	}
+}

+ 42 - 0
SBansheeEngine/Source/BsScriptPhysicsMesh.cpp

@@ -0,0 +1,42 @@
+//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
+//**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
+#include "BsScriptPhysicsMesh.h"
+#include "BsScriptResourceManager.h"
+#include "BsScriptMeta.h"
+#include "BsScriptMeshData.h"
+#include "BsMonoClass.h"
+#include "BsMonoManager.h"
+
+namespace BansheeEngine
+{
+	ScriptPhysicsMesh::ScriptPhysicsMesh(MonoObject* instance, const HPhysicsMesh& mesh)
+		:TScriptResource(instance, mesh)
+	{
+
+	}
+
+	void ScriptPhysicsMesh::initRuntimeData()
+	{
+		metaData.scriptClass->addInternalCall("Internal_GetMeshData", &ScriptPhysicsMesh::internal_GetMeshData);
+		metaData.scriptClass->addInternalCall("Internal_GetMeshType", &ScriptPhysicsMesh::internal_GetMeshType);
+	}
+
+	MonoObject* ScriptPhysicsMesh::internal_GetMeshData(ScriptPhysicsMesh* thisPtr)
+	{
+		HPhysicsMesh mesh = thisPtr->getHandle();
+
+		MeshDataPtr meshData = mesh->getMeshData();
+		return ScriptMeshData::create(meshData);
+	}
+
+	int ScriptPhysicsMesh::internal_GetMeshType(ScriptPhysicsMesh* thisPtr)
+	{
+		HPhysicsMesh mesh = thisPtr->getHandle();
+		return (int)mesh->getType();
+	}
+
+	MonoObject* ScriptPhysicsMesh::createInstance()
+	{
+		return metaData.scriptClass->createInstance();
+	}
+}

+ 14 - 0
SBansheeEngine/Source/BsScriptResource.cpp

@@ -17,6 +17,8 @@
 #include "BsScriptScriptCode.h"
 #include "BsScriptStringTable.h"
 #include "BsScriptGUISkin.h"
+#include "BsScriptPhysicsMesh.h"
+#include "BsScriptPhysicsMaterial.h"
 #include "BsScriptPrefab.h"
 
 namespace BansheeEngine
@@ -83,6 +85,10 @@ namespace BansheeEngine
 			return ScriptStringTable::getMetaData()->scriptClass;
 		case TID_GUISkin:
 			return ScriptGUISkin::getMetaData()->scriptClass;
+		case TID_PhysicsMaterial:
+			return ScriptPhysicsMaterial::getMetaData()->scriptClass;
+		case TID_PhysicsMesh:
+			return ScriptPhysicsMesh::getMetaData()->scriptClass;
 		}
 
 		return nullptr;
@@ -116,6 +122,10 @@ namespace BansheeEngine
 			return ScriptResourceType::ScriptCode;
 		case TID_GUISkin:
 			return ScriptResourceType::GUISkin;
+		case TID_PhysicsMaterial:
+			return ScriptResourceType::PhysicsMaterial;
+		case TID_PhysicsMesh:
+			return ScriptResourceType::PhysicsMesh;
 		}
 
 		return ScriptResourceType::Undefined;
@@ -149,6 +159,10 @@ namespace BansheeEngine
 			return TID_ScriptCode;
 		case ScriptResourceType::GUISkin:
 			return TID_GUISkin;
+		case ScriptResourceType::PhysicsMaterial:
+			return TID_PhysicsMaterial;
+		case ScriptResourceType::PhysicsMesh:
+			return TID_PhysicsMesh;
 		}
 
 		return 0;

+ 12 - 0
SBansheeEngine/Source/BsScriptResourceManager.cpp

@@ -19,6 +19,8 @@
 #include "BsScriptPrefab.h"
 #include "BsScriptStringTable.h"
 #include "BsScriptGUISkin.h"
+#include "BsScriptPhysicsMaterial.h"
+#include "BsScriptPhysicsMesh.h"
 #include "BsScriptManagedResource.h"
 #include "BsScriptAssemblyManager.h"
 
@@ -145,6 +147,10 @@ namespace BansheeEngine
 			return createScriptResource(static_resource_cast<Mesh>(resourceHandle), (ScriptMesh**)out);
 		case TID_GUISkin:
 			return createScriptResource(static_resource_cast<GUISkin>(resourceHandle), (ScriptGUISkin**)out);
+		case TID_PhysicsMaterial:
+			return createScriptResource(static_resource_cast<PhysicsMaterial>(resourceHandle), (ScriptPhysicsMaterial**)out);
+		case TID_PhysicsMesh:
+			return createScriptResource(static_resource_cast<PhysicsMesh>(resourceHandle), (ScriptPhysicsMesh**)out);
 		case TID_ManagedResource:
 			BS_EXCEPT(InternalErrorException, "Managed resources must have a managed instance by default, this call is invalid.")
 				break;
@@ -169,6 +175,8 @@ namespace BansheeEngine
 	template BS_SCR_BE_EXPORT void ScriptResourceManager::createScriptResource(const ResourceHandle<ScriptCode>&, ScriptScriptCode**);
 	template BS_SCR_BE_EXPORT void ScriptResourceManager::createScriptResource(const ResourceHandle<StringTable>&, ScriptStringTable**);
 	template BS_SCR_BE_EXPORT void ScriptResourceManager::createScriptResource(const ResourceHandle<GUISkin>&, ScriptGUISkin**);
+	template BS_SCR_BE_EXPORT void ScriptResourceManager::createScriptResource(const ResourceHandle<PhysicsMesh>&, ScriptPhysicsMesh**);
+	template BS_SCR_BE_EXPORT void ScriptResourceManager::createScriptResource(const ResourceHandle<PhysicsMaterial>&, ScriptPhysicsMaterial**);
 
 	template BS_SCR_BE_EXPORT void ScriptResourceManager::createScriptResource(MonoObject*, const ResourceHandle<Texture>&, ScriptTexture2D**);
 	template BS_SCR_BE_EXPORT void ScriptResourceManager::createScriptResource(MonoObject*, const ResourceHandle<Texture>&, ScriptTexture3D**);
@@ -184,6 +192,8 @@ namespace BansheeEngine
 	template BS_SCR_BE_EXPORT void ScriptResourceManager::createScriptResource(MonoObject*, const ResourceHandle<ScriptCode>&, ScriptScriptCode**);
 	template BS_SCR_BE_EXPORT void ScriptResourceManager::createScriptResource(MonoObject*, const ResourceHandle<StringTable>&, ScriptStringTable**);
 	template BS_SCR_BE_EXPORT void ScriptResourceManager::createScriptResource(MonoObject*, const ResourceHandle<GUISkin>&, ScriptGUISkin**);
+	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<ManagedResource>&, ScriptManagedResource**);
 
 	template BS_SCR_BE_EXPORT void ScriptResourceManager::getScriptResource(const ResourceHandle<Texture>& resourceHandle, ScriptTexture2D** out, bool create);
@@ -201,6 +211,8 @@ namespace BansheeEngine
 	template BS_SCR_BE_EXPORT void ScriptResourceManager::getScriptResource(const ResourceHandle<ScriptCode>& resourceHandle, ScriptScriptCode** out, bool create);
 	template BS_SCR_BE_EXPORT void ScriptResourceManager::getScriptResource(const ResourceHandle<StringTable>& resourceHandle, ScriptStringTable** out, bool create);
 	template BS_SCR_BE_EXPORT void ScriptResourceManager::getScriptResource(const ResourceHandle<GUISkin>& resourceHandle, ScriptGUISkin** out, bool create);
+	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<ManagedResource>& resourceHandle, ScriptManagedResource** out, bool create);
 	template BS_SCR_BE_EXPORT void ScriptResourceManager::getScriptResource(const ResourceHandle<Resource>& resourceHandle, ScriptResourceBase** out, bool create);