Browse Source

Moved all Script stuff to separate libraries

Marko Pintera 12 years ago
parent
commit
c12b03a92f
58 changed files with 2798 additions and 470 deletions
  1. 49 167
      BansheeEngine.sln
  2. 6 45
      BansheeEngine/BansheeEngine.vcxproj
  3. 0 117
      BansheeEngine/BansheeEngine.vcxproj.filters
  4. 0 26
      BansheeEngine/Include/BsEngineAssembly.h
  5. 0 17
      BansheeEngine/Include/BsPrerequisites.h
  6. 257 0
      BansheeMono/BansheeMono.vcxproj
  7. 81 0
      BansheeMono/BansheeMono.vcxproj.filters
  8. 4 0
      BansheeMono/BansheeMono.vcxproj.user
  9. 52 0
      BansheeMono/Include/BsMonoAssembly.h
  10. 52 0
      BansheeMono/Include/BsMonoClass.h
  11. 23 0
      BansheeMono/Include/BsMonoField.h
  12. 35 0
      BansheeMono/Include/BsMonoManager.h
  13. 32 0
      BansheeMono/Include/BsMonoMethod.h
  14. 29 0
      BansheeMono/Include/BsMonoPrerequisites.h
  15. 23 0
      BansheeMono/Include/BsMonoProperty.h
  16. 20 0
      BansheeMono/Include/BsMonoScriptManager.h
  17. 23 0
      BansheeMono/Include/BsMonoUtil.h
  18. 19 0
      BansheeMono/Include/BsScriptMeta.h
  19. 129 0
      BansheeMono/Source/BsMonoAssembly.cpp
  20. 138 0
      BansheeMono/Source/BsMonoClass.cpp
  21. 24 0
      BansheeMono/Source/BsMonoField.cpp
  22. 82 0
      BansheeMono/Source/BsMonoManager.cpp
  23. 27 0
      BansheeMono/Source/BsMonoMethod.cpp
  24. 21 0
      BansheeMono/Source/BsMonoPlugin.cpp
  25. 26 0
      BansheeMono/Source/BsMonoProperty.cpp
  26. 25 0
      BansheeMono/Source/BsMonoScriptManager.cpp
  27. 1 0
      BansheeMono/Source/BsMonoUtil.cpp
  28. 19 0
      BansheeMono/Source/BsScriptMeta.cpp
  29. 24 24
      CamelotClient/Include/BsScriptModalWindow.h
  30. 0 6
      CamelotClient/Source/BsEditorApplication.cpp
  31. 68 68
      CamelotClient/Source/BsScriptModalWindow.cpp
  32. 6 0
      Notes.txt
  33. 32 0
      SBansheeEngine/Include/BsScriptEnginePrerequisites.h
  34. 27 0
      SBansheeEngine/Include/BsScriptFont.h
  35. 38 0
      SBansheeEngine/Include/BsScriptGUIArea.h
  36. 25 0
      SBansheeEngine/Include/BsScriptGUIBase.h
  37. 44 0
      SBansheeEngine/Include/BsScriptGUIElementStateStyle.h
  38. 119 0
      SBansheeEngine/Include/BsScriptGUIElementStyle.h
  39. 26 0
      SBansheeEngine/Include/BsScriptGUILabel.h
  40. 31 0
      SBansheeEngine/Include/BsScriptGUILayout.h
  41. 69 0
      SBansheeEngine/Include/BsScriptMacros.h
  42. 95 0
      SBansheeEngine/Include/BsScriptObject.h
  43. 25 0
      SBansheeEngine/Include/BsScriptSpriteTexture.h
  44. 26 0
      SBansheeEngine/Include/BsScriptTexture2D.h
  45. 257 0
      SBansheeEngine/SBansheeEngine.vcxproj
  46. 87 0
      SBansheeEngine/SBansheeEngine.vcxproj.filters
  47. 4 0
      SBansheeEngine/SBansheeEngine.vcxproj.user
  48. 25 0
      SBansheeEngine/Source/BsScriptEnginePlugin.cpp
  49. 48 0
      SBansheeEngine/Source/BsScriptFont.cpp
  50. 94 0
      SBansheeEngine/Source/BsScriptGUIArea.cpp
  51. 48 0
      SBansheeEngine/Source/BsScriptGUIBase.cpp
  52. 60 0
      SBansheeEngine/Source/BsScriptGUIElementStateStyle.cpp
  53. 71 0
      SBansheeEngine/Source/BsScriptGUIElementStyle.cpp
  54. 67 0
      SBansheeEngine/Source/BsScriptGUILabel.cpp
  55. 74 0
      SBansheeEngine/Source/BsScriptGUILayout.cpp
  56. 44 0
      SBansheeEngine/Source/BsScriptSpriteTexture.cpp
  57. 65 0
      SBansheeEngine/Source/BsScriptTexture2D.cpp
  58. 2 0
      TODO.txt

+ 49 - 167
BansheeEngine.sln

@@ -114,357 +114,239 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MBansheeEngine", "MBansheeE
 EndProject
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MBansheeEditor", "MBansheeEditor\MBansheeEditor.csproj", "{ABC62E37-342E-4345-A374-E37CA06C036E}"
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MBansheeEditor", "MBansheeEditor\MBansheeEditor.csproj", "{ABC62E37-342E-4345-A374-E37CA06C036E}"
 EndProject
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BansheeMono", "BansheeMono\BansheeMono.vcxproj", "{4F05EF0A-B8DE-424B-8848-6ECEE9D99912}"
+	ProjectSection(ProjectDependencies) = postProject
+		{07B0C186-5173-46F2-BE26-7E4148BD0CCA} = {07B0C186-5173-46F2-BE26-7E4148BD0CCA}
+	EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "SBansheeEngine", "SBansheeEngine\SBansheeEngine.vcxproj", "{A4865386-A95B-41BE-B016-4674F6B4272E}"
+	ProjectSection(ProjectDependencies) = postProject
+		{4F05EF0A-B8DE-424B-8848-6ECEE9D99912} = {4F05EF0A-B8DE-424B-8848-6ECEE9D99912}
+	EndProjectSection
+EndProject
 Global
 Global
 	GlobalSection(SubversionScc) = preSolution
 	GlobalSection(SubversionScc) = preSolution
 		Svn-Managed = True
 		Svn-Managed = True
 		Manager = AnkhSVN - Subversion Support for Visual Studio
 		Manager = AnkhSVN - Subversion Support for Visual Studio
 	EndGlobalSection
 	EndGlobalSection
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Any CPU = Debug|Any CPU
-		Debug|Mixed Platforms = Debug|Mixed Platforms
 		Debug|Win32 = Debug|Win32
 		Debug|Win32 = Debug|Win32
 		Debug|x64 = Debug|x64
 		Debug|x64 = Debug|x64
-		DebugRelease|Any CPU = DebugRelease|Any CPU
-		DebugRelease|Mixed Platforms = DebugRelease|Mixed Platforms
 		DebugRelease|Win32 = DebugRelease|Win32
 		DebugRelease|Win32 = DebugRelease|Win32
 		DebugRelease|x64 = DebugRelease|x64
 		DebugRelease|x64 = DebugRelease|x64
-		Release|Any CPU = Release|Any CPU
-		Release|Mixed Platforms = Release|Mixed Platforms
 		Release|Win32 = Release|Win32
 		Release|Win32 = Release|Win32
 		Release|x64 = Release|x64
 		Release|x64 = Release|x64
 	EndGlobalSection
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{9B21D41C-516B-43BF-9B10-E99B599C7589}.Debug|Any CPU.ActiveCfg = Debug|Win32
-		{9B21D41C-516B-43BF-9B10-E99B599C7589}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
-		{9B21D41C-516B-43BF-9B10-E99B599C7589}.Debug|Mixed Platforms.Build.0 = Debug|Win32
 		{9B21D41C-516B-43BF-9B10-E99B599C7589}.Debug|Win32.ActiveCfg = Debug|Win32
 		{9B21D41C-516B-43BF-9B10-E99B599C7589}.Debug|Win32.ActiveCfg = Debug|Win32
 		{9B21D41C-516B-43BF-9B10-E99B599C7589}.Debug|Win32.Build.0 = Debug|Win32
 		{9B21D41C-516B-43BF-9B10-E99B599C7589}.Debug|Win32.Build.0 = Debug|Win32
 		{9B21D41C-516B-43BF-9B10-E99B599C7589}.Debug|x64.ActiveCfg = Debug|x64
 		{9B21D41C-516B-43BF-9B10-E99B599C7589}.Debug|x64.ActiveCfg = Debug|x64
 		{9B21D41C-516B-43BF-9B10-E99B599C7589}.Debug|x64.Build.0 = Debug|x64
 		{9B21D41C-516B-43BF-9B10-E99B599C7589}.Debug|x64.Build.0 = Debug|x64
-		{9B21D41C-516B-43BF-9B10-E99B599C7589}.DebugRelease|Any CPU.ActiveCfg = DebugRelease|Win32
-		{9B21D41C-516B-43BF-9B10-E99B599C7589}.DebugRelease|Mixed Platforms.ActiveCfg = DebugRelease|Win32
-		{9B21D41C-516B-43BF-9B10-E99B599C7589}.DebugRelease|Mixed Platforms.Build.0 = DebugRelease|Win32
 		{9B21D41C-516B-43BF-9B10-E99B599C7589}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
 		{9B21D41C-516B-43BF-9B10-E99B599C7589}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
 		{9B21D41C-516B-43BF-9B10-E99B599C7589}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
 		{9B21D41C-516B-43BF-9B10-E99B599C7589}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
 		{9B21D41C-516B-43BF-9B10-E99B599C7589}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
 		{9B21D41C-516B-43BF-9B10-E99B599C7589}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
 		{9B21D41C-516B-43BF-9B10-E99B599C7589}.DebugRelease|x64.Build.0 = DebugRelease|x64
 		{9B21D41C-516B-43BF-9B10-E99B599C7589}.DebugRelease|x64.Build.0 = DebugRelease|x64
-		{9B21D41C-516B-43BF-9B10-E99B599C7589}.Release|Any CPU.ActiveCfg = Release|Win32
-		{9B21D41C-516B-43BF-9B10-E99B599C7589}.Release|Mixed Platforms.ActiveCfg = Release|Win32
-		{9B21D41C-516B-43BF-9B10-E99B599C7589}.Release|Mixed Platforms.Build.0 = Release|Win32
 		{9B21D41C-516B-43BF-9B10-E99B599C7589}.Release|Win32.ActiveCfg = Release|Win32
 		{9B21D41C-516B-43BF-9B10-E99B599C7589}.Release|Win32.ActiveCfg = Release|Win32
 		{9B21D41C-516B-43BF-9B10-E99B599C7589}.Release|Win32.Build.0 = Release|Win32
 		{9B21D41C-516B-43BF-9B10-E99B599C7589}.Release|Win32.Build.0 = Release|Win32
 		{9B21D41C-516B-43BF-9B10-E99B599C7589}.Release|x64.ActiveCfg = Release|x64
 		{9B21D41C-516B-43BF-9B10-E99B599C7589}.Release|x64.ActiveCfg = Release|x64
 		{9B21D41C-516B-43BF-9B10-E99B599C7589}.Release|x64.Build.0 = Release|x64
 		{9B21D41C-516B-43BF-9B10-E99B599C7589}.Release|x64.Build.0 = Release|x64
-		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.Debug|Any CPU.ActiveCfg = Debug|Win32
-		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
-		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.Debug|Mixed Platforms.Build.0 = Debug|Win32
 		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.Debug|Win32.ActiveCfg = Debug|Win32
 		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.Debug|Win32.ActiveCfg = Debug|Win32
 		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.Debug|Win32.Build.0 = Debug|Win32
 		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.Debug|Win32.Build.0 = Debug|Win32
 		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.Debug|x64.ActiveCfg = Debug|x64
 		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.Debug|x64.ActiveCfg = Debug|x64
 		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.Debug|x64.Build.0 = Debug|x64
 		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.Debug|x64.Build.0 = Debug|x64
-		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.DebugRelease|Any CPU.ActiveCfg = DebugRelease|Win32
-		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.DebugRelease|Mixed Platforms.ActiveCfg = DebugRelease|Win32
-		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.DebugRelease|Mixed Platforms.Build.0 = DebugRelease|Win32
 		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
 		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
 		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
 		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
 		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
 		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
 		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.DebugRelease|x64.Build.0 = DebugRelease|x64
 		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.DebugRelease|x64.Build.0 = DebugRelease|x64
-		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.Release|Any CPU.ActiveCfg = Release|Win32
-		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.Release|Mixed Platforms.ActiveCfg = Release|Win32
-		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.Release|Mixed Platforms.Build.0 = Release|Win32
 		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.Release|Win32.ActiveCfg = Release|Win32
 		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.Release|Win32.ActiveCfg = Release|Win32
 		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.Release|Win32.Build.0 = Release|Win32
 		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.Release|Win32.Build.0 = Release|Win32
 		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.Release|x64.ActiveCfg = Release|x64
 		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.Release|x64.ActiveCfg = Release|x64
 		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.Release|x64.Build.0 = Release|x64
 		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.Release|x64.Build.0 = Release|x64
-		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.Debug|Any CPU.ActiveCfg = Debug|Win32
-		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
-		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.Debug|Mixed Platforms.Build.0 = Debug|Win32
 		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.Debug|Win32.ActiveCfg = Debug|Win32
 		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.Debug|Win32.ActiveCfg = Debug|Win32
 		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.Debug|Win32.Build.0 = Debug|Win32
 		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.Debug|Win32.Build.0 = Debug|Win32
 		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.Debug|x64.ActiveCfg = Debug|x64
 		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.Debug|x64.ActiveCfg = Debug|x64
 		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.Debug|x64.Build.0 = Debug|x64
 		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.Debug|x64.Build.0 = Debug|x64
-		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.DebugRelease|Any CPU.ActiveCfg = DebugRelease|Win32
-		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.DebugRelease|Mixed Platforms.ActiveCfg = DebugRelease|Win32
-		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.DebugRelease|Mixed Platforms.Build.0 = DebugRelease|Win32
 		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
 		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
 		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
 		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
 		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
 		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
 		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.DebugRelease|x64.Build.0 = DebugRelease|x64
 		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.DebugRelease|x64.Build.0 = DebugRelease|x64
-		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.Release|Any CPU.ActiveCfg = Release|Win32
-		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.Release|Mixed Platforms.ActiveCfg = Release|Win32
-		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.Release|Mixed Platforms.Build.0 = Release|Win32
 		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.Release|Win32.ActiveCfg = Release|Win32
 		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.Release|Win32.ActiveCfg = Release|Win32
 		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.Release|Win32.Build.0 = Release|Win32
 		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.Release|Win32.Build.0 = Release|Win32
 		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.Release|x64.ActiveCfg = Release|x64
 		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.Release|x64.ActiveCfg = Release|x64
 		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.Release|x64.Build.0 = Release|x64
 		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.Release|x64.Build.0 = Release|x64
-		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.Debug|Any CPU.ActiveCfg = Debug|Win32
-		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
-		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.Debug|Mixed Platforms.Build.0 = Debug|Win32
 		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.Debug|Win32.ActiveCfg = Debug|Win32
 		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.Debug|Win32.ActiveCfg = Debug|Win32
 		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.Debug|Win32.Build.0 = Debug|Win32
 		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.Debug|Win32.Build.0 = Debug|Win32
 		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.Debug|x64.ActiveCfg = Debug|x64
 		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.Debug|x64.ActiveCfg = Debug|x64
 		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.Debug|x64.Build.0 = Debug|x64
 		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.Debug|x64.Build.0 = Debug|x64
-		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.DebugRelease|Any CPU.ActiveCfg = DebugRelease|Win32
-		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.DebugRelease|Mixed Platforms.ActiveCfg = DebugRelease|Win32
-		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.DebugRelease|Mixed Platforms.Build.0 = DebugRelease|Win32
 		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
 		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
 		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
 		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
 		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
 		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
 		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.DebugRelease|x64.Build.0 = DebugRelease|x64
 		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.DebugRelease|x64.Build.0 = DebugRelease|x64
-		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.Release|Any CPU.ActiveCfg = Release|Win32
-		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.Release|Mixed Platforms.ActiveCfg = Release|Win32
-		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.Release|Mixed Platforms.Build.0 = Release|Win32
 		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.Release|Win32.ActiveCfg = Release|Win32
 		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.Release|Win32.ActiveCfg = Release|Win32
 		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.Release|Win32.Build.0 = Release|Win32
 		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.Release|Win32.Build.0 = Release|Win32
 		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.Release|x64.ActiveCfg = Release|x64
 		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.Release|x64.ActiveCfg = Release|x64
 		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.Release|x64.Build.0 = Release|x64
 		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.Release|x64.Build.0 = Release|x64
-		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.Debug|Any CPU.ActiveCfg = Debug|Win32
-		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
-		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.Debug|Mixed Platforms.Build.0 = Debug|Win32
 		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.Debug|Win32.ActiveCfg = Debug|Win32
 		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.Debug|Win32.ActiveCfg = Debug|Win32
 		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.Debug|Win32.Build.0 = Debug|Win32
 		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.Debug|Win32.Build.0 = Debug|Win32
 		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.Debug|x64.ActiveCfg = Debug|x64
 		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.Debug|x64.ActiveCfg = Debug|x64
 		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.Debug|x64.Build.0 = Debug|x64
 		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.Debug|x64.Build.0 = Debug|x64
-		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.DebugRelease|Any CPU.ActiveCfg = DebugRelease|Win32
-		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.DebugRelease|Mixed Platforms.ActiveCfg = DebugRelease|Win32
-		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.DebugRelease|Mixed Platforms.Build.0 = DebugRelease|Win32
 		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
 		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
 		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
 		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
 		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
 		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
 		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.DebugRelease|x64.Build.0 = DebugRelease|x64
 		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.DebugRelease|x64.Build.0 = DebugRelease|x64
-		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.Release|Any CPU.ActiveCfg = Release|Win32
-		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.Release|Mixed Platforms.ActiveCfg = Release|Win32
-		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.Release|Mixed Platforms.Build.0 = Release|Win32
 		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.Release|Win32.ActiveCfg = Release|Win32
 		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.Release|Win32.ActiveCfg = Release|Win32
 		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.Release|Win32.Build.0 = Release|Win32
 		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.Release|Win32.Build.0 = Release|Win32
 		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.Release|x64.ActiveCfg = Release|x64
 		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.Release|x64.ActiveCfg = Release|x64
 		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.Release|x64.Build.0 = Release|x64
 		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.Release|x64.Build.0 = Release|x64
-		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.Debug|Any CPU.ActiveCfg = Debug|Win32
-		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
-		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.Debug|Mixed Platforms.Build.0 = Debug|Win32
 		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.Debug|Win32.ActiveCfg = Debug|Win32
 		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.Debug|Win32.ActiveCfg = Debug|Win32
 		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.Debug|Win32.Build.0 = Debug|Win32
 		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.Debug|Win32.Build.0 = Debug|Win32
 		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.Debug|x64.ActiveCfg = Debug|x64
 		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.Debug|x64.ActiveCfg = Debug|x64
 		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.Debug|x64.Build.0 = Debug|x64
 		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.Debug|x64.Build.0 = Debug|x64
-		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.DebugRelease|Any CPU.ActiveCfg = DebugRelease|Win32
-		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.DebugRelease|Mixed Platforms.ActiveCfg = DebugRelease|Win32
-		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.DebugRelease|Mixed Platforms.Build.0 = DebugRelease|Win32
 		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
 		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
 		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
 		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
 		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
 		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
 		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.DebugRelease|x64.Build.0 = DebugRelease|x64
 		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.DebugRelease|x64.Build.0 = DebugRelease|x64
-		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.Release|Any CPU.ActiveCfg = Release|Win32
-		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.Release|Mixed Platforms.ActiveCfg = Release|Win32
-		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.Release|Mixed Platforms.Build.0 = Release|Win32
 		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.Release|Win32.ActiveCfg = Release|Win32
 		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.Release|Win32.ActiveCfg = Release|Win32
 		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.Release|Win32.Build.0 = Release|Win32
 		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.Release|Win32.Build.0 = Release|Win32
 		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.Release|x64.ActiveCfg = Release|x64
 		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.Release|x64.ActiveCfg = Release|x64
 		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.Release|x64.Build.0 = Release|x64
 		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.Release|x64.Build.0 = Release|x64
-		{7F449698-73DF-4203-9F31-0877DBF01695}.Debug|Any CPU.ActiveCfg = Debug|Win32
-		{7F449698-73DF-4203-9F31-0877DBF01695}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
-		{7F449698-73DF-4203-9F31-0877DBF01695}.Debug|Mixed Platforms.Build.0 = Debug|Win32
 		{7F449698-73DF-4203-9F31-0877DBF01695}.Debug|Win32.ActiveCfg = Debug|Win32
 		{7F449698-73DF-4203-9F31-0877DBF01695}.Debug|Win32.ActiveCfg = Debug|Win32
 		{7F449698-73DF-4203-9F31-0877DBF01695}.Debug|Win32.Build.0 = Debug|Win32
 		{7F449698-73DF-4203-9F31-0877DBF01695}.Debug|Win32.Build.0 = Debug|Win32
 		{7F449698-73DF-4203-9F31-0877DBF01695}.Debug|x64.ActiveCfg = Debug|x64
 		{7F449698-73DF-4203-9F31-0877DBF01695}.Debug|x64.ActiveCfg = Debug|x64
 		{7F449698-73DF-4203-9F31-0877DBF01695}.Debug|x64.Build.0 = Debug|x64
 		{7F449698-73DF-4203-9F31-0877DBF01695}.Debug|x64.Build.0 = Debug|x64
-		{7F449698-73DF-4203-9F31-0877DBF01695}.DebugRelease|Any CPU.ActiveCfg = DebugRelease|Win32
-		{7F449698-73DF-4203-9F31-0877DBF01695}.DebugRelease|Mixed Platforms.ActiveCfg = DebugRelease|Win32
-		{7F449698-73DF-4203-9F31-0877DBF01695}.DebugRelease|Mixed Platforms.Build.0 = DebugRelease|Win32
 		{7F449698-73DF-4203-9F31-0877DBF01695}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
 		{7F449698-73DF-4203-9F31-0877DBF01695}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
 		{7F449698-73DF-4203-9F31-0877DBF01695}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
 		{7F449698-73DF-4203-9F31-0877DBF01695}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
 		{7F449698-73DF-4203-9F31-0877DBF01695}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
 		{7F449698-73DF-4203-9F31-0877DBF01695}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
 		{7F449698-73DF-4203-9F31-0877DBF01695}.DebugRelease|x64.Build.0 = DebugRelease|x64
 		{7F449698-73DF-4203-9F31-0877DBF01695}.DebugRelease|x64.Build.0 = DebugRelease|x64
-		{7F449698-73DF-4203-9F31-0877DBF01695}.Release|Any CPU.ActiveCfg = Release|Win32
-		{7F449698-73DF-4203-9F31-0877DBF01695}.Release|Mixed Platforms.ActiveCfg = Release|Win32
-		{7F449698-73DF-4203-9F31-0877DBF01695}.Release|Mixed Platforms.Build.0 = Release|Win32
 		{7F449698-73DF-4203-9F31-0877DBF01695}.Release|Win32.ActiveCfg = Release|Win32
 		{7F449698-73DF-4203-9F31-0877DBF01695}.Release|Win32.ActiveCfg = Release|Win32
 		{7F449698-73DF-4203-9F31-0877DBF01695}.Release|Win32.Build.0 = Release|Win32
 		{7F449698-73DF-4203-9F31-0877DBF01695}.Release|Win32.Build.0 = Release|Win32
 		{7F449698-73DF-4203-9F31-0877DBF01695}.Release|x64.ActiveCfg = Release|x64
 		{7F449698-73DF-4203-9F31-0877DBF01695}.Release|x64.ActiveCfg = Release|x64
 		{7F449698-73DF-4203-9F31-0877DBF01695}.Release|x64.Build.0 = Release|x64
 		{7F449698-73DF-4203-9F31-0877DBF01695}.Release|x64.Build.0 = Release|x64
-		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.Debug|Any CPU.ActiveCfg = Debug|Win32
-		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
-		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.Debug|Mixed Platforms.Build.0 = Debug|Win32
 		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.Debug|Win32.ActiveCfg = Debug|Win32
 		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.Debug|Win32.ActiveCfg = Debug|Win32
 		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.Debug|Win32.Build.0 = Debug|Win32
 		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.Debug|Win32.Build.0 = Debug|Win32
 		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.Debug|x64.ActiveCfg = Debug|x64
 		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.Debug|x64.ActiveCfg = Debug|x64
 		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.Debug|x64.Build.0 = Debug|x64
 		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.Debug|x64.Build.0 = Debug|x64
-		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.DebugRelease|Any CPU.ActiveCfg = DebugRelease|Win32
-		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.DebugRelease|Mixed Platforms.ActiveCfg = DebugRelease|Win32
-		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.DebugRelease|Mixed Platforms.Build.0 = DebugRelease|Win32
 		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
 		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
 		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
 		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
 		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
 		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
 		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.DebugRelease|x64.Build.0 = DebugRelease|x64
 		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.DebugRelease|x64.Build.0 = DebugRelease|x64
-		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.Release|Any CPU.ActiveCfg = Release|Win32
-		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.Release|Mixed Platforms.ActiveCfg = Release|Win32
-		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.Release|Mixed Platforms.Build.0 = Release|Win32
 		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.Release|Win32.ActiveCfg = Release|Win32
 		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.Release|Win32.ActiveCfg = Release|Win32
 		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.Release|Win32.Build.0 = Release|Win32
 		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.Release|Win32.Build.0 = Release|Win32
 		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.Release|x64.ActiveCfg = Release|x64
 		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.Release|x64.ActiveCfg = Release|x64
 		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.Release|x64.Build.0 = Release|x64
 		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.Release|x64.Build.0 = Release|x64
-		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.Debug|Any CPU.ActiveCfg = Debug|Win32
-		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
-		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.Debug|Mixed Platforms.Build.0 = Debug|Win32
 		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.Debug|Win32.ActiveCfg = Debug|Win32
 		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.Debug|Win32.ActiveCfg = Debug|Win32
 		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.Debug|Win32.Build.0 = Debug|Win32
 		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.Debug|Win32.Build.0 = Debug|Win32
 		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.Debug|x64.ActiveCfg = Debug|x64
 		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.Debug|x64.ActiveCfg = Debug|x64
 		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.Debug|x64.Build.0 = Debug|x64
 		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.Debug|x64.Build.0 = Debug|x64
-		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.DebugRelease|Any CPU.ActiveCfg = DebugRelease|Win32
-		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.DebugRelease|Mixed Platforms.ActiveCfg = DebugRelease|Win32
-		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.DebugRelease|Mixed Platforms.Build.0 = DebugRelease|Win32
 		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
 		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
 		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
 		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
 		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
 		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
 		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.DebugRelease|x64.Build.0 = DebugRelease|x64
 		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.DebugRelease|x64.Build.0 = DebugRelease|x64
-		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.Release|Any CPU.ActiveCfg = Release|Win32
-		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.Release|Mixed Platforms.ActiveCfg = Release|Win32
-		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.Release|Mixed Platforms.Build.0 = Release|Win32
 		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.Release|Win32.ActiveCfg = Release|Win32
 		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.Release|Win32.ActiveCfg = Release|Win32
 		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.Release|Win32.Build.0 = Release|Win32
 		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.Release|Win32.Build.0 = Release|Win32
 		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.Release|x64.ActiveCfg = Release|x64
 		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.Release|x64.ActiveCfg = Release|x64
 		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.Release|x64.Build.0 = Release|x64
 		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.Release|x64.Build.0 = Release|x64
-		{B12702AD-ABFB-343A-A199-8E24837244A3}.Debug|Any CPU.ActiveCfg = Debug|Win32
-		{B12702AD-ABFB-343A-A199-8E24837244A3}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
-		{B12702AD-ABFB-343A-A199-8E24837244A3}.Debug|Mixed Platforms.Build.0 = Debug|Win32
 		{B12702AD-ABFB-343A-A199-8E24837244A3}.Debug|Win32.ActiveCfg = Debug|Win32
 		{B12702AD-ABFB-343A-A199-8E24837244A3}.Debug|Win32.ActiveCfg = Debug|Win32
-		{B12702AD-ABFB-343A-A199-8E24837244A3}.Debug|Win32.Build.0 = Debug|Win32
 		{B12702AD-ABFB-343A-A199-8E24837244A3}.Debug|x64.ActiveCfg = Debug|x64
 		{B12702AD-ABFB-343A-A199-8E24837244A3}.Debug|x64.ActiveCfg = Debug|x64
-		{B12702AD-ABFB-343A-A199-8E24837244A3}.DebugRelease|Any CPU.ActiveCfg = DebugRelease|Win32
-		{B12702AD-ABFB-343A-A199-8E24837244A3}.DebugRelease|Mixed Platforms.ActiveCfg = DebugRelease|Win32
-		{B12702AD-ABFB-343A-A199-8E24837244A3}.DebugRelease|Mixed Platforms.Build.0 = DebugRelease|Win32
 		{B12702AD-ABFB-343A-A199-8E24837244A3}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
 		{B12702AD-ABFB-343A-A199-8E24837244A3}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
-		{B12702AD-ABFB-343A-A199-8E24837244A3}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
 		{B12702AD-ABFB-343A-A199-8E24837244A3}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
 		{B12702AD-ABFB-343A-A199-8E24837244A3}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
-		{B12702AD-ABFB-343A-A199-8E24837244A3}.DebugRelease|x64.Build.0 = DebugRelease|x64
-		{B12702AD-ABFB-343A-A199-8E24837244A3}.Release|Any CPU.ActiveCfg = Release|Win32
-		{B12702AD-ABFB-343A-A199-8E24837244A3}.Release|Mixed Platforms.ActiveCfg = Release|Win32
-		{B12702AD-ABFB-343A-A199-8E24837244A3}.Release|Mixed Platforms.Build.0 = Release|Win32
 		{B12702AD-ABFB-343A-A199-8E24837244A3}.Release|Win32.ActiveCfg = Release|Win32
 		{B12702AD-ABFB-343A-A199-8E24837244A3}.Release|Win32.ActiveCfg = Release|Win32
-		{B12702AD-ABFB-343A-A199-8E24837244A3}.Release|Win32.Build.0 = Release|Win32
 		{B12702AD-ABFB-343A-A199-8E24837244A3}.Release|x64.ActiveCfg = Release|x64
 		{B12702AD-ABFB-343A-A199-8E24837244A3}.Release|x64.ActiveCfg = Release|x64
-		{B12702AD-ABFB-343A-A199-8E24837244A3}.Release|x64.Build.0 = Release|x64
-		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.Debug|Any CPU.ActiveCfg = Debug|Win32
-		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
-		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.Debug|Mixed Platforms.Build.0 = Debug|Win32
 		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.Debug|Win32.ActiveCfg = Debug|Win32
 		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.Debug|Win32.ActiveCfg = Debug|Win32
 		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.Debug|Win32.Build.0 = Debug|Win32
 		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.Debug|Win32.Build.0 = Debug|Win32
 		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.Debug|x64.ActiveCfg = Debug|x64
 		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.Debug|x64.ActiveCfg = Debug|x64
 		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.Debug|x64.Build.0 = Debug|x64
 		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.Debug|x64.Build.0 = Debug|x64
-		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.DebugRelease|Any CPU.ActiveCfg = DebugRelease|Win32
-		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.DebugRelease|Mixed Platforms.ActiveCfg = DebugRelease|Win32
-		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.DebugRelease|Mixed Platforms.Build.0 = DebugRelease|Win32
 		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
 		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
 		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
 		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
 		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
 		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
 		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.DebugRelease|x64.Build.0 = DebugRelease|x64
 		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.DebugRelease|x64.Build.0 = DebugRelease|x64
-		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.Release|Any CPU.ActiveCfg = Release|Win32
-		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.Release|Mixed Platforms.ActiveCfg = Release|Win32
-		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.Release|Mixed Platforms.Build.0 = Release|Win32
 		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.Release|Win32.ActiveCfg = Release|Win32
 		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.Release|Win32.ActiveCfg = Release|Win32
 		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.Release|Win32.Build.0 = Release|Win32
 		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.Release|Win32.Build.0 = Release|Win32
 		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.Release|x64.ActiveCfg = Release|x64
 		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.Release|x64.ActiveCfg = Release|x64
 		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.Release|x64.Build.0 = Release|x64
 		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.Release|x64.Build.0 = Release|x64
-		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.Debug|Any CPU.ActiveCfg = Debug|Win32
-		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
-		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.Debug|Mixed Platforms.Build.0 = Debug|Win32
 		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.Debug|Win32.ActiveCfg = Debug|Win32
 		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.Debug|Win32.ActiveCfg = Debug|Win32
 		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.Debug|Win32.Build.0 = Debug|Win32
 		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.Debug|Win32.Build.0 = Debug|Win32
 		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.Debug|x64.ActiveCfg = Debug|x64
 		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.Debug|x64.ActiveCfg = Debug|x64
 		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.Debug|x64.Build.0 = Debug|x64
 		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.Debug|x64.Build.0 = Debug|x64
-		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.DebugRelease|Any CPU.ActiveCfg = DebugRelease|Win32
-		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.DebugRelease|Mixed Platforms.ActiveCfg = DebugRelease|Win32
-		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.DebugRelease|Mixed Platforms.Build.0 = DebugRelease|Win32
 		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
 		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
 		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
 		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
 		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
 		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
 		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.DebugRelease|x64.Build.0 = DebugRelease|x64
 		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.DebugRelease|x64.Build.0 = DebugRelease|x64
-		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.Release|Any CPU.ActiveCfg = Release|Win32
-		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.Release|Mixed Platforms.ActiveCfg = Release|Win32
-		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.Release|Mixed Platforms.Build.0 = Release|Win32
 		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.Release|Win32.ActiveCfg = Release|Win32
 		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.Release|Win32.ActiveCfg = Release|Win32
 		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.Release|Win32.Build.0 = Release|Win32
 		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.Release|Win32.Build.0 = Release|Win32
 		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.Release|x64.ActiveCfg = Release|x64
 		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.Release|x64.ActiveCfg = Release|x64
 		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.Release|x64.Build.0 = Release|x64
 		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.Release|x64.Build.0 = Release|x64
-		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.Debug|Any CPU.ActiveCfg = Debug|Win32
-		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
-		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.Debug|Mixed Platforms.Build.0 = Debug|Win32
 		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.Debug|Win32.ActiveCfg = Debug|Win32
 		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.Debug|Win32.ActiveCfg = Debug|Win32
 		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.Debug|Win32.Build.0 = Debug|Win32
 		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.Debug|Win32.Build.0 = Debug|Win32
 		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.Debug|x64.ActiveCfg = Debug|x64
 		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.Debug|x64.ActiveCfg = Debug|x64
 		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.Debug|x64.Build.0 = Debug|x64
 		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.Debug|x64.Build.0 = Debug|x64
-		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.DebugRelease|Any CPU.ActiveCfg = DebugRelease|Win32
-		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.DebugRelease|Mixed Platforms.ActiveCfg = DebugRelease|Win32
-		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.DebugRelease|Mixed Platforms.Build.0 = DebugRelease|Win32
 		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
 		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
 		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
 		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
 		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
 		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
 		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.DebugRelease|x64.Build.0 = DebugRelease|x64
 		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.DebugRelease|x64.Build.0 = DebugRelease|x64
-		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.Release|Any CPU.ActiveCfg = Release|Win32
-		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.Release|Mixed Platforms.ActiveCfg = Release|Win32
-		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.Release|Mixed Platforms.Build.0 = Release|Win32
 		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.Release|Win32.ActiveCfg = Release|Win32
 		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.Release|Win32.ActiveCfg = Release|Win32
 		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.Release|Win32.Build.0 = Release|Win32
 		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.Release|Win32.Build.0 = Release|Win32
 		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.Release|x64.ActiveCfg = Release|x64
 		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.Release|x64.ActiveCfg = Release|x64
 		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.Release|x64.Build.0 = Release|x64
 		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.Release|x64.Build.0 = Release|x64
-		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.Debug|Any CPU.ActiveCfg = Debug|Win32
-		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
-		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.Debug|Mixed Platforms.Build.0 = Debug|Win32
 		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.Debug|Win32.ActiveCfg = Debug|Win32
 		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.Debug|Win32.ActiveCfg = Debug|Win32
 		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.Debug|Win32.Build.0 = Debug|Win32
 		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.Debug|Win32.Build.0 = Debug|Win32
 		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.Debug|x64.ActiveCfg = Debug|x64
 		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.Debug|x64.ActiveCfg = Debug|x64
 		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.Debug|x64.Build.0 = Debug|x64
 		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.Debug|x64.Build.0 = Debug|x64
-		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.DebugRelease|Any CPU.ActiveCfg = DebugRelease|Win32
-		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.DebugRelease|Mixed Platforms.ActiveCfg = DebugRelease|Win32
-		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.DebugRelease|Mixed Platforms.Build.0 = DebugRelease|Win32
 		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
 		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
 		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
 		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
 		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
 		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
 		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.DebugRelease|x64.Build.0 = DebugRelease|x64
 		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.DebugRelease|x64.Build.0 = DebugRelease|x64
-		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.Release|Any CPU.ActiveCfg = Release|Win32
-		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.Release|Mixed Platforms.ActiveCfg = Release|Win32
-		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.Release|Mixed Platforms.Build.0 = Release|Win32
 		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.Release|Win32.ActiveCfg = Release|Win32
 		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.Release|Win32.ActiveCfg = Release|Win32
 		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.Release|Win32.Build.0 = Release|Win32
 		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.Release|Win32.Build.0 = Release|Win32
 		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.Release|x64.ActiveCfg = Release|x64
 		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.Release|x64.ActiveCfg = Release|x64
 		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.Release|x64.Build.0 = Release|x64
 		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.Release|x64.Build.0 = Release|x64
-		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.Debug|Win32.ActiveCfg = Debug|Any CPU
-		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.Debug|x64.Build.0 = Debug|Any CPU
-		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.DebugRelease|Any CPU.ActiveCfg = Release|Any CPU
-		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.DebugRelease|Any CPU.Build.0 = Release|Any CPU
-		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.DebugRelease|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.DebugRelease|Mixed Platforms.Build.0 = Release|Any CPU
+		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.Debug|Win32.ActiveCfg = Release|Any CPU
+		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.Debug|Win32.Build.0 = Release|Any CPU
+		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.Debug|x64.ActiveCfg = Release|Any CPU
+		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.Debug|x64.Build.0 = Release|Any CPU
 		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.DebugRelease|Win32.ActiveCfg = Release|Any CPU
 		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.DebugRelease|Win32.ActiveCfg = Release|Any CPU
+		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.DebugRelease|Win32.Build.0 = Release|Any CPU
 		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.DebugRelease|x64.ActiveCfg = Release|Any CPU
 		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.DebugRelease|x64.ActiveCfg = Release|Any CPU
-		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.Release|Any CPU.Build.0 = Release|Any CPU
-		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.DebugRelease|x64.Build.0 = Release|Any CPU
 		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.Release|Win32.ActiveCfg = Release|Any CPU
 		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.Release|Win32.ActiveCfg = Release|Any CPU
+		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.Release|Win32.Build.0 = Release|Any CPU
 		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.Release|x64.ActiveCfg = Release|Any CPU
 		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.Release|x64.ActiveCfg = Release|Any CPU
-		{ABC62E37-342E-4345-A374-E37CA06C036E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{ABC62E37-342E-4345-A374-E37CA06C036E}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{ABC62E37-342E-4345-A374-E37CA06C036E}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
-		{ABC62E37-342E-4345-A374-E37CA06C036E}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
-		{ABC62E37-342E-4345-A374-E37CA06C036E}.Debug|Win32.ActiveCfg = Debug|Any CPU
-		{ABC62E37-342E-4345-A374-E37CA06C036E}.Debug|x64.ActiveCfg = Debug|Any CPU
-		{ABC62E37-342E-4345-A374-E37CA06C036E}.Debug|x64.Build.0 = Debug|Any CPU
-		{ABC62E37-342E-4345-A374-E37CA06C036E}.DebugRelease|Any CPU.ActiveCfg = Release|Any CPU
-		{ABC62E37-342E-4345-A374-E37CA06C036E}.DebugRelease|Any CPU.Build.0 = Release|Any CPU
-		{ABC62E37-342E-4345-A374-E37CA06C036E}.DebugRelease|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{ABC62E37-342E-4345-A374-E37CA06C036E}.DebugRelease|Mixed Platforms.Build.0 = Release|Any CPU
+		{876EB338-489E-4727-84DA-8CBBF0DA5B5E}.Release|x64.Build.0 = Release|Any CPU
+		{ABC62E37-342E-4345-A374-E37CA06C036E}.Debug|Win32.ActiveCfg = Release|Any CPU
+		{ABC62E37-342E-4345-A374-E37CA06C036E}.Debug|Win32.Build.0 = Release|Any CPU
+		{ABC62E37-342E-4345-A374-E37CA06C036E}.Debug|x64.ActiveCfg = Release|Any CPU
+		{ABC62E37-342E-4345-A374-E37CA06C036E}.Debug|x64.Build.0 = Release|Any CPU
 		{ABC62E37-342E-4345-A374-E37CA06C036E}.DebugRelease|Win32.ActiveCfg = Release|Any CPU
 		{ABC62E37-342E-4345-A374-E37CA06C036E}.DebugRelease|Win32.ActiveCfg = Release|Any CPU
+		{ABC62E37-342E-4345-A374-E37CA06C036E}.DebugRelease|Win32.Build.0 = Release|Any CPU
 		{ABC62E37-342E-4345-A374-E37CA06C036E}.DebugRelease|x64.ActiveCfg = Release|Any CPU
 		{ABC62E37-342E-4345-A374-E37CA06C036E}.DebugRelease|x64.ActiveCfg = Release|Any CPU
-		{ABC62E37-342E-4345-A374-E37CA06C036E}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{ABC62E37-342E-4345-A374-E37CA06C036E}.Release|Any CPU.Build.0 = Release|Any CPU
-		{ABC62E37-342E-4345-A374-E37CA06C036E}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
-		{ABC62E37-342E-4345-A374-E37CA06C036E}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+		{ABC62E37-342E-4345-A374-E37CA06C036E}.DebugRelease|x64.Build.0 = Release|Any CPU
 		{ABC62E37-342E-4345-A374-E37CA06C036E}.Release|Win32.ActiveCfg = Release|Any CPU
 		{ABC62E37-342E-4345-A374-E37CA06C036E}.Release|Win32.ActiveCfg = Release|Any CPU
+		{ABC62E37-342E-4345-A374-E37CA06C036E}.Release|Win32.Build.0 = Release|Any CPU
 		{ABC62E37-342E-4345-A374-E37CA06C036E}.Release|x64.ActiveCfg = Release|Any CPU
 		{ABC62E37-342E-4345-A374-E37CA06C036E}.Release|x64.ActiveCfg = Release|Any CPU
+		{ABC62E37-342E-4345-A374-E37CA06C036E}.Release|x64.Build.0 = Release|Any CPU
+		{4F05EF0A-B8DE-424B-8848-6ECEE9D99912}.Debug|Win32.ActiveCfg = Debug|Win32
+		{4F05EF0A-B8DE-424B-8848-6ECEE9D99912}.Debug|Win32.Build.0 = Debug|Win32
+		{4F05EF0A-B8DE-424B-8848-6ECEE9D99912}.Debug|x64.ActiveCfg = Debug|x64
+		{4F05EF0A-B8DE-424B-8848-6ECEE9D99912}.Debug|x64.Build.0 = Debug|x64
+		{4F05EF0A-B8DE-424B-8848-6ECEE9D99912}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
+		{4F05EF0A-B8DE-424B-8848-6ECEE9D99912}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
+		{4F05EF0A-B8DE-424B-8848-6ECEE9D99912}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
+		{4F05EF0A-B8DE-424B-8848-6ECEE9D99912}.DebugRelease|x64.Build.0 = DebugRelease|x64
+		{4F05EF0A-B8DE-424B-8848-6ECEE9D99912}.Release|Win32.ActiveCfg = Release|Win32
+		{4F05EF0A-B8DE-424B-8848-6ECEE9D99912}.Release|Win32.Build.0 = Release|Win32
+		{4F05EF0A-B8DE-424B-8848-6ECEE9D99912}.Release|x64.ActiveCfg = Release|x64
+		{A4865386-A95B-41BE-B016-4674F6B4272E}.Debug|Win32.ActiveCfg = Debug|Win32
+		{A4865386-A95B-41BE-B016-4674F6B4272E}.Debug|Win32.Build.0 = Debug|Win32
+		{A4865386-A95B-41BE-B016-4674F6B4272E}.Debug|x64.ActiveCfg = Debug|x64
+		{A4865386-A95B-41BE-B016-4674F6B4272E}.Debug|x64.Build.0 = Debug|x64
+		{A4865386-A95B-41BE-B016-4674F6B4272E}.DebugRelease|Win32.ActiveCfg = DebugRelease|Win32
+		{A4865386-A95B-41BE-B016-4674F6B4272E}.DebugRelease|Win32.Build.0 = DebugRelease|Win32
+		{A4865386-A95B-41BE-B016-4674F6B4272E}.DebugRelease|x64.ActiveCfg = DebugRelease|x64
+		{A4865386-A95B-41BE-B016-4674F6B4272E}.DebugRelease|x64.Build.0 = DebugRelease|x64
+		{A4865386-A95B-41BE-B016-4674F6B4272E}.Release|Win32.ActiveCfg = Release|Win32
+		{A4865386-A95B-41BE-B016-4674F6B4272E}.Release|Win32.Build.0 = Release|Win32
+		{A4865386-A95B-41BE-B016-4674F6B4272E}.Release|x64.ActiveCfg = Release|x64
+		{A4865386-A95B-41BE-B016-4674F6B4272E}.Release|x64.Build.0 = Release|x64
 	EndGlobalSection
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
 		HideSolutionNode = FALSE

+ 6 - 45
BansheeEngine/BansheeEngine.vcxproj

@@ -127,7 +127,7 @@
     <Link>
     <Link>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <AdditionalLibraryDirectories>..\lib\x86\$(Configuration);..\Dependencies\lib\x86\Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>..\lib\x86\$(Configuration);..\Dependencies\lib\x86\Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <AdditionalDependencies>CamelotCore.lib;CamelotUtility.lib;mono-2.0.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>CamelotCore.lib;CamelotUtility.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <ImportLibrary>..\lib\x86\$(Configuration)\$(TargetName).lib</ImportLibrary>
       <ImportLibrary>..\lib\x86\$(Configuration)\$(TargetName).lib</ImportLibrary>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
@@ -141,7 +141,7 @@
     <Link>
     <Link>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <AdditionalLibraryDirectories>..\lib\$(Platform)\$(Configuration);..\Dependencies\lib\x64\Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>..\lib\$(Platform)\$(Configuration);..\Dependencies\lib\x64\Debug;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
-      <AdditionalDependencies>CamelotCore.lib;CamelotUtility.lib;mono-2.0.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>CamelotCore.lib;CamelotUtility.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <ImportLibrary>..\lib\$(Platform)\$(Configuration)\$(TargetName).lib</ImportLibrary>
       <ImportLibrary>..\lib\$(Platform)\$(Configuration)\$(TargetName).lib</ImportLibrary>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
@@ -161,7 +161,7 @@
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalLibraryDirectories>..\lib\x86\$(Configuration);..\Dependencies\lib\x86\Release</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>..\lib\x86\$(Configuration);..\Dependencies\lib\x86\Release</AdditionalLibraryDirectories>
-      <AdditionalDependencies>CamelotCore.lib;CamelotUtility.lib;mono-2.0.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>CamelotCore.lib;CamelotUtility.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <ImportLibrary>..\lib\x86\$(Configuration)\$(TargetName).lib</ImportLibrary>
       <ImportLibrary>..\lib\x86\$(Configuration)\$(TargetName).lib</ImportLibrary>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
@@ -181,7 +181,7 @@
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalLibraryDirectories>..\lib\x86\$(Configuration);..\Dependencies\lib\x86\DebugRelease</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>..\lib\x86\$(Configuration);..\Dependencies\lib\x86\DebugRelease</AdditionalLibraryDirectories>
-      <AdditionalDependencies>CamelotCore.lib;CamelotUtility.lib;mono-2.0.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>CamelotCore.lib;CamelotUtility.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <ImportLibrary>..\lib\x86\$(Configuration)\$(TargetName).lib</ImportLibrary>
       <ImportLibrary>..\lib\x86\$(Configuration)\$(TargetName).lib</ImportLibrary>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
@@ -201,7 +201,7 @@
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalLibraryDirectories>..\lib\$(Platform)\$(Configuration);..\Dependencies\lib\x64\Release</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>..\lib\$(Platform)\$(Configuration);..\Dependencies\lib\x64\Release</AdditionalLibraryDirectories>
-      <AdditionalDependencies>CamelotCore.lib;CamelotUtility.lib;mono-2.0.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>CamelotCore.lib;CamelotUtility.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <ImportLibrary>..\lib\$(Platform)\$(Configuration)\$(TargetName).lib</ImportLibrary>
       <ImportLibrary>..\lib\$(Platform)\$(Configuration)\$(TargetName).lib</ImportLibrary>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
@@ -221,26 +221,16 @@
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
       <OptimizeReferences>true</OptimizeReferences>
       <AdditionalLibraryDirectories>..\lib\$(Platform)\$(Configuration);..\Dependencies\lib\x64\DebugRelease</AdditionalLibraryDirectories>
       <AdditionalLibraryDirectories>..\lib\$(Platform)\$(Configuration);..\Dependencies\lib\x64\DebugRelease</AdditionalLibraryDirectories>
-      <AdditionalDependencies>CamelotCore.lib;CamelotUtility.lib;mono-2.0.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalDependencies>CamelotCore.lib;CamelotUtility.lib;%(AdditionalDependencies)</AdditionalDependencies>
       <ImportLibrary>..\lib\$(Platform)\$(Configuration)\$(TargetName).lib</ImportLibrary>
       <ImportLibrary>..\lib\$(Platform)\$(Configuration)\$(TargetName).lib</ImportLibrary>
     </Link>
     </Link>
   </ItemDefinitionGroup>
   </ItemDefinitionGroup>
   <ItemGroup>
   <ItemGroup>
     <ClInclude Include="Include\BsApplication.h" />
     <ClInclude Include="Include\BsApplication.h" />
-    <ClInclude Include="Include\BsScriptComponent.h" />
-    <ClInclude Include="Include\BsScriptFont.h" />
-    <ClInclude Include="Include\BsScriptGUIArea.h" />
-    <ClInclude Include="Include\BsScriptGUIBase.h" />
-    <ClInclude Include="Include\BsScriptGUIElementStateStyle.h" />
-    <ClInclude Include="Include\BsScriptGUIElementStyle.h" />
-    <ClInclude Include="Include\BsScriptGUILabel.h" />
-    <ClInclude Include="Include\BsScriptGUILayout.h" />
-    <ClInclude Include="Include\BsScriptGUIWidget.h" />
     <ClInclude Include="Include\BsDrawHelper3D.h" />
     <ClInclude Include="Include\BsDrawHelper3D.h" />
     <ClInclude Include="Include\BsDrawHelperTemplate.h" />
     <ClInclude Include="Include\BsDrawHelperTemplate.h" />
     <ClInclude Include="Include\BsDragAndDropManager.h" />
     <ClInclude Include="Include\BsDragAndDropManager.h" />
     <ClInclude Include="Include\BsDrawHelper2D.h" />
     <ClInclude Include="Include\BsDrawHelper2D.h" />
-    <ClInclude Include="Include\BsEngineAssembly.h" />
     <ClInclude Include="Include\BsEngineGUI.h" />
     <ClInclude Include="Include\BsEngineGUI.h" />
     <ClInclude Include="Include\BsGUIArea.h" />
     <ClInclude Include="Include\BsGUIArea.h" />
     <ClInclude Include="Include\BsGUIButton.h" />
     <ClInclude Include="Include\BsGUIButton.h" />
@@ -289,17 +279,7 @@
     <ClInclude Include="Include\BsProfilerOverlay.h" />
     <ClInclude Include="Include\BsProfilerOverlay.h" />
     <ClInclude Include="Include\BsSceneManager.h" />
     <ClInclude Include="Include\BsSceneManager.h" />
     <ClInclude Include="Include\BsGUIScrollArea.h" />
     <ClInclude Include="Include\BsGUIScrollArea.h" />
-    <ClInclude Include="Include\BsScriptAssembly.h" />
-    <ClInclude Include="Include\BsScriptClass.h" />
-    <ClInclude Include="Include\BsScriptField.h" />
-    <ClInclude Include="Include\BsScriptMacros.h" />
     <ClInclude Include="Include\BsScriptManager.h" />
     <ClInclude Include="Include\BsScriptManager.h" />
-    <ClInclude Include="Include\BsScriptMethod.h" />
-    <ClInclude Include="Include\BsScriptObject.h" />
-    <ClInclude Include="Include\BsScriptProperty.h" />
-    <ClInclude Include="Include\BsScriptSpriteTexture.h" />
-    <ClInclude Include="Include\BsScriptTexture2D.h" />
-    <ClInclude Include="Include\BsScriptUtil.h" />
     <ClInclude Include="Include\BsSprite.h" />
     <ClInclude Include="Include\BsSprite.h" />
     <ClInclude Include="Include\BsSpriteTexture.h" />
     <ClInclude Include="Include\BsSpriteTexture.h" />
     <ClInclude Include="Include\BsTextSprite.h" />
     <ClInclude Include="Include\BsTextSprite.h" />
@@ -314,10 +294,8 @@
     <ClInclude Include="Include\BsD3D9BuiltinMaterialFactory.h" />
     <ClInclude Include="Include\BsD3D9BuiltinMaterialFactory.h" />
     <ClInclude Include="Include\BsGLBuiltinMaterialFactory.h" />
     <ClInclude Include="Include\BsGLBuiltinMaterialFactory.h" />
     <ClInclude Include="Include\BsUpdateCallback.h" />
     <ClInclude Include="Include\BsUpdateCallback.h" />
-    <ClCompile Include="Source\BsEngineAssembly.cpp" />
     <ClCompile Include="Source\BsGUIButtonBase.cpp" />
     <ClCompile Include="Source\BsGUIButtonBase.cpp" />
     <ClCompile Include="Source\BsGUIContextMenu.cpp" />
     <ClCompile Include="Source\BsGUIContextMenu.cpp" />
-    <ClInclude Include="Include\BsScriptMeta.h" />
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <ClCompile Include="Source\BsApplication.cpp" />
     <ClCompile Include="Source\BsApplication.cpp" />
@@ -362,24 +340,7 @@
     <ClCompile Include="Source\BsProfilerOverlay.cpp" />
     <ClCompile Include="Source\BsProfilerOverlay.cpp" />
     <ClCompile Include="Source\BsSceneManager.cpp" />
     <ClCompile Include="Source\BsSceneManager.cpp" />
     <ClCompile Include="Source\BsGUIScrollArea.cpp" />
     <ClCompile Include="Source\BsGUIScrollArea.cpp" />
-    <ClCompile Include="Source\BsScriptAssembly.cpp" />
-    <ClCompile Include="Source\BsScriptClass.cpp" />
-    <ClCompile Include="Source\BsScriptComponent.cpp" />
-    <ClCompile Include="Source\BsScriptField.cpp" />
-    <ClCompile Include="Source\BsScriptFont.cpp" />
-    <ClCompile Include="Source\BsScriptGUIArea.cpp" />
-    <ClCompile Include="Source\BsScriptGUIBase.cpp" />
-    <ClCompile Include="Source\BsScriptGUIElementStateStyle.cpp" />
-    <ClCompile Include="Source\BsScriptGUIElementStyle.cpp" />
-    <ClCompile Include="Source\BsScriptGUILabel.cpp" />
-    <ClCompile Include="Source\BsScriptGUILayout.cpp" />
-    <ClCompile Include="Source\BsScriptGUIWidget.cpp" />
     <ClCompile Include="Source\BsScriptManager.cpp" />
     <ClCompile Include="Source\BsScriptManager.cpp" />
-    <ClCompile Include="Source\BsScriptMethod.cpp" />
-    <ClCompile Include="Source\BsScriptMeta.cpp" />
-    <ClCompile Include="Source\BsScriptProperty.cpp" />
-    <ClCompile Include="Source\BsScriptSpriteTexture.cpp" />
-    <ClCompile Include="Source\BsScriptTexture2D.cpp" />
     <ClCompile Include="Source\BsSprite.cpp" />
     <ClCompile Include="Source\BsSprite.cpp" />
     <ClCompile Include="Source\BsSpriteTexture.cpp" />
     <ClCompile Include="Source\BsSpriteTexture.cpp" />
     <ClCompile Include="Source\BsTextSprite.cpp" />
     <ClCompile Include="Source\BsTextSprite.cpp" />

+ 0 - 117
BansheeEngine/BansheeEngine.vcxproj.filters

@@ -243,72 +243,9 @@
     <ClInclude Include="Include\BsDebugDrawMaterialInfo.h">
     <ClInclude Include="Include\BsDebugDrawMaterialInfo.h">
       <Filter>Header Files</Filter>
       <Filter>Header Files</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\BsScriptAssembly.h">
-      <Filter>Header Files\Script</Filter>
-    </ClInclude>
-    <ClInclude Include="Include\BsScriptClass.h">
-      <Filter>Header Files\Script</Filter>
-    </ClInclude>
     <ClInclude Include="Include\BsScriptManager.h">
     <ClInclude Include="Include\BsScriptManager.h">
       <Filter>Header Files\Script</Filter>
       <Filter>Header Files\Script</Filter>
     </ClInclude>
     </ClInclude>
-    <ClInclude Include="Include\BsScriptMethod.h">
-      <Filter>Header Files\Script</Filter>
-    </ClInclude>
-    <ClInclude Include="Include\BsScriptObject.h">
-      <Filter>Header Files\Script</Filter>
-    </ClInclude>
-    <ClInclude Include="Include\BsScriptMeta.h">
-      <Filter>Header Files\Script</Filter>
-    </ClInclude>
-    <ClInclude Include="Include\BsEngineAssembly.h">
-      <Filter>Header Files\Script</Filter>
-    </ClInclude>
-    <ClInclude Include="Include\BsScriptField.h">
-      <Filter>Header Files\Script</Filter>
-    </ClInclude>
-    <ClInclude Include="Include\BsScriptTexture2D.h">
-      <Filter>Header Files\Script</Filter>
-    </ClInclude>
-    <ClInclude Include="Include\BsScriptGUIWidget.h">
-      <Filter>Header Files\Script</Filter>
-    </ClInclude>
-    <ClInclude Include="Include\BsScriptComponent.h">
-      <Filter>Header Files\Script</Filter>
-    </ClInclude>
-    <ClInclude Include="Include\BsScriptProperty.h">
-      <Filter>Header Files\Script</Filter>
-    </ClInclude>
-    <ClInclude Include="Include\BsScriptGUIElementStyle.h">
-      <Filter>Header Files\Script</Filter>
-    </ClInclude>
-    <ClInclude Include="Include\BsScriptSpriteTexture.h">
-      <Filter>Header Files\Script</Filter>
-    </ClInclude>
-    <ClInclude Include="Include\BsScriptFont.h">
-      <Filter>Header Files\Script</Filter>
-    </ClInclude>
-    <ClInclude Include="Include\BsScriptGUIElementStateStyle.h">
-      <Filter>Header Files\Script</Filter>
-    </ClInclude>
-    <ClInclude Include="Include\BsScriptMacros.h">
-      <Filter>Header Files\Script</Filter>
-    </ClInclude>
-    <ClInclude Include="Include\BsScriptGUILabel.h">
-      <Filter>Header Files\Script</Filter>
-    </ClInclude>
-    <ClInclude Include="Include\BsScriptUtil.h">
-      <Filter>Header Files\Script</Filter>
-    </ClInclude>
-    <ClInclude Include="Include\BsScriptGUILayout.h">
-      <Filter>Header Files\Script</Filter>
-    </ClInclude>
-    <ClInclude Include="Include\BsScriptGUIArea.h">
-      <Filter>Header Files\Script</Filter>
-    </ClInclude>
-    <ClInclude Include="Include\BsScriptGUIBase.h">
-      <Filter>Header Files\Script</Filter>
-    </ClInclude>
   </ItemGroup>
   </ItemGroup>
   <ItemGroup>
   <ItemGroup>
     <ClCompile Include="Source\BsGUIElement.cpp">
     <ClCompile Include="Source\BsGUIElement.cpp">
@@ -488,62 +425,8 @@
     <ClCompile Include="Source\BsGUIRenderTexture.cpp">
     <ClCompile Include="Source\BsGUIRenderTexture.cpp">
       <Filter>Source Files\GUI</Filter>
       <Filter>Source Files\GUI</Filter>
     </ClCompile>
     </ClCompile>
-    <ClCompile Include="Source\BsScriptAssembly.cpp">
-      <Filter>Source Files\Script</Filter>
-    </ClCompile>
-    <ClCompile Include="Source\BsScriptClass.cpp">
-      <Filter>Source Files\Script</Filter>
-    </ClCompile>
     <ClCompile Include="Source\BsScriptManager.cpp">
     <ClCompile Include="Source\BsScriptManager.cpp">
       <Filter>Source Files\Script</Filter>
       <Filter>Source Files\Script</Filter>
     </ClCompile>
     </ClCompile>
-    <ClCompile Include="Source\BsScriptMethod.cpp">
-      <Filter>Source Files\Script</Filter>
-    </ClCompile>
-    <ClCompile Include="Source\BsScriptMeta.cpp">
-      <Filter>Source Files\Script</Filter>
-    </ClCompile>
-    <ClCompile Include="Source\BsScriptTexture2D.cpp">
-      <Filter>Source Files\Script</Filter>
-    </ClCompile>
-    <ClCompile Include="Source\BsScriptField.cpp">
-      <Filter>Source Files\Script</Filter>
-    </ClCompile>
-    <ClCompile Include="Source\BsEngineAssembly.cpp">
-      <Filter>Source Files\Script</Filter>
-    </ClCompile>
-    <ClCompile Include="Source\BsScriptGUIWidget.cpp">
-      <Filter>Source Files\Script</Filter>
-    </ClCompile>
-    <ClCompile Include="Source\BsScriptComponent.cpp">
-      <Filter>Source Files\Script</Filter>
-    </ClCompile>
-    <ClCompile Include="Source\BsScriptProperty.cpp">
-      <Filter>Source Files\Script</Filter>
-    </ClCompile>
-    <ClCompile Include="Source\BsScriptGUIElementStyle.cpp">
-      <Filter>Source Files\Script</Filter>
-    </ClCompile>
-    <ClCompile Include="Source\BsScriptFont.cpp">
-      <Filter>Source Files\Script</Filter>
-    </ClCompile>
-    <ClCompile Include="Source\BsScriptSpriteTexture.cpp">
-      <Filter>Source Files\Script</Filter>
-    </ClCompile>
-    <ClCompile Include="Source\BsScriptGUIElementStateStyle.cpp">
-      <Filter>Source Files\Script</Filter>
-    </ClCompile>
-    <ClCompile Include="Source\BsScriptGUILabel.cpp">
-      <Filter>Source Files\Script</Filter>
-    </ClCompile>
-    <ClCompile Include="Source\BsScriptGUILayout.cpp">
-      <Filter>Source Files\Script</Filter>
-    </ClCompile>
-    <ClCompile Include="Source\BsScriptGUIArea.cpp">
-      <Filter>Source Files\Script</Filter>
-    </ClCompile>
-    <ClCompile Include="Source\BsScriptGUIBase.cpp">
-      <Filter>Source Files\Script</Filter>
-    </ClCompile>
   </ItemGroup>
   </ItemGroup>
 </Project>
 </Project>

+ 0 - 26
BansheeEngine/Include/BsEngineAssembly.h

@@ -1,26 +0,0 @@
-#pragma once
-
-#include "BsPrerequisites.h"
-#include "BsScriptAssembly.h"
-#include "CmModule.h"
-
-namespace BansheeEngine
-{
-	class BS_EXPORT EngineAssembly : public CM::Module<EngineAssembly>
-	{
-	public:
-		EngineAssembly();
-		~EngineAssembly();
-
-		ScriptAssembly& getAssembly() const { return *mAssembly; }
-
-	private:
-		static const CM::String ENGINE_ASSEMBLY_PATH;
-		static const CM::String ENGINE_ASSEMBLY_NAME;
-		static const CM::String ASSEMBLY_ENTRY_POINT;
-
-		ScriptAssembly* mAssembly;
-	};
-
-	ScriptAssembly& gEngineAssembly();
-}

+ 0 - 17
BansheeEngine/Include/BsPrerequisites.h

@@ -63,23 +63,6 @@ namespace BansheeEngine
 	class GUIContent;
 	class GUIContent;
 	class GUIContextMenu;
 	class GUIContextMenu;
 
 
-	// Script
-	class ScriptManager;
-	class ScriptAssembly;
-	class ScriptClass;
-	class ScriptMethod;
-	class ScriptField;
-	class ScriptProperty;
-	class ScriptFont;
-	class ScriptSpriteTexture;
-	class ScriptTexture2D;
-	class ScriptGUIElementStyle;
-	class ScriptGUIElementStateStyle;
-	class ScriptGUIBase;
-	class ScriptGUIArea;
-	class ScriptGUILayout;
-	class ScriptGUILabel;
-
 	// 2D
 	// 2D
 	class TextSprite;
 	class TextSprite;
 	class ImageSprite;
 	class ImageSprite;

+ 257 - 0
BansheeMono/BansheeMono.vcxproj

@@ -0,0 +1,257 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DebugRelease|Win32">
+      <Configuration>DebugRelease</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DebugRelease|x64">
+      <Configuration>DebugRelease</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{4F05EF0A-B8DE-424B-8848-6ECEE9D99912}</ProjectGuid>
+    <RootNamespace>BansheeMono</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v110</PlatformToolset>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v110</PlatformToolset>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v110</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugRelease|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v110</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v110</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugRelease|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v110</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugRelease|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugRelease|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <OutDir>..\bin\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>.\Intermediate\$(Platform)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <OutDir>..\bin\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>.\Intermediate\$(Platform)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugRelease|x64'">
+    <OutDir>..\bin\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>.\Intermediate\$(Platform)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugRelease|Win32'">
+    <OutDir>..\bin\x86\$(Configuration)\</OutDir>
+    <IntDir>.\Intermediate\$(Platform)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>..\bin\x86\$(Configuration)\</OutDir>
+    <IntDir>.\Intermediate\$(Platform)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>..\bin\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>.\Intermediate\$(Platform)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>.\Include;..\CamelotCore\Include;..\CamelotUtility\Include;..\Dependencies\Include;..\BansheeEngine\Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>BS_MONO_EXPORTS;_WINDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <ImportLibrary>..\lib\x86\$(Configuration)\$(TargetName).lib</ImportLibrary>
+      <AdditionalDependencies>CamelotCore.lib;CamelotUtility.lib;BansheeEngine.lib;mono-2.0.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>../lib/x86/$(Configuration);../Dependencies/lib/x86/Debug</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>.\Include;..\CamelotCore\Include;..\CamelotUtility\Include;..\Dependencies\Include;..\BansheeEngine\Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>BS_MONO_EXPORTS;_WINDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <ImportLibrary>..\lib\x64\$(Configuration)\$(TargetName).lib</ImportLibrary>
+      <AdditionalDependencies>CamelotCore.lib;CamelotUtility.lib;BansheeEngine.lib;mono-2.0.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>../lib/x64/$(Configuration);../Dependencies/lib/x64/Debug</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>.\Include;..\CamelotCore\Include;..\CamelotUtility\Include;..\Dependencies\Include;..\BansheeEngine\Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <DebugInformationFormat>None</DebugInformationFormat>
+      <PreprocessorDefinitions>BS_MONO_EXPORTS;_WINDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>false</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <ImportLibrary>..\lib\x86\$(Configuration)\$(TargetName).lib</ImportLibrary>
+      <AdditionalDependencies>CamelotCore.lib;CamelotUtility.lib;BansheeEngine.lib;mono-2.0.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
+      <AdditionalLibraryDirectories>../lib/x86/$(Configuration);../Dependencies/lib/x86/Release</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugRelease|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>.\Include;..\CamelotCore\Include;..\CamelotUtility\Include;..\Dependencies\Include;..\BansheeEngine\Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>BS_MONO_EXPORTS;_WINDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <ImportLibrary>..\lib\x86\$(Configuration)\$(TargetName).lib</ImportLibrary>
+      <AdditionalDependencies>CamelotCore.lib;CamelotUtility.lib;BansheeEngine.lib;mono-2.0.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <OutputFile>$(OutDir)$(TargetName)$(TargetExt)</OutputFile>
+      <AdditionalLibraryDirectories>../lib/x86/$(Configuration);../Dependencies/lib/x86/DebugRelease</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>.\Include;..\CamelotCore\Include;..\CamelotUtility\Include;..\Dependencies\Include;..\BansheeEngine\Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <DebugInformationFormat>None</DebugInformationFormat>
+      <PreprocessorDefinitions>BS_MONO_EXPORTS;_WINDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>false</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <ImportLibrary>..\lib\x64\$(Configuration)\$(TargetName).lib</ImportLibrary>
+      <AdditionalDependencies>CamelotCore.lib;CamelotUtility.lib;BansheeEngine.lib;mono-2.0.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>../lib/x64/$(Configuration);../Dependencies/lib/x64/Release</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugRelease|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>.\Include;..\CamelotCore\Include;..\CamelotUtility\Include;..\Dependencies\Include;..\BansheeEngine\Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>BS_MONO_EXPORTS;_WINDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <ImportLibrary>..\lib\x64\$(Configuration)\$(TargetName).lib</ImportLibrary>
+      <AdditionalDependencies>CamelotCore.lib;CamelotUtility.lib;BansheeEngine.lib;mono-2.0.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <AdditionalLibraryDirectories>../lib/x64/$(Configuration);../Dependencies/lib/x64/DebugRelease</AdditionalLibraryDirectories>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="Include\BsMonoAssembly.h" />
+    <ClInclude Include="Include\BsMonoClass.h" />
+    <ClInclude Include="Include\BsMonoField.h" />
+    <ClInclude Include="Include\BsMonoManager.h" />
+    <ClInclude Include="Include\BsMonoMethod.h" />
+    <ClInclude Include="Include\BsMonoPrerequisites.h" />
+    <ClInclude Include="Include\BsMonoProperty.h" />
+    <ClInclude Include="Include\BsMonoScriptManager.h" />
+    <ClInclude Include="Include\BsMonoUtil.h" />
+    <ClInclude Include="Include\BsScriptMeta.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="Source\BsMonoAssembly.cpp" />
+    <ClCompile Include="Source\BsMonoClass.cpp" />
+    <ClCompile Include="Source\BsMonoField.cpp" />
+    <ClCompile Include="Source\BsMonoManager.cpp" />
+    <ClCompile Include="Source\BsMonoMethod.cpp" />
+    <ClCompile Include="Source\BsMonoPlugin.cpp" />
+    <ClCompile Include="Source\BsMonoProperty.cpp" />
+    <ClCompile Include="Source\BsMonoScriptManager.cpp" />
+    <ClCompile Include="Source\BsMonoUtil.cpp" />
+    <ClCompile Include="Source\BsScriptMeta.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>

+ 81 - 0
BansheeMono/BansheeMono.vcxproj.filters

@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="Include\BsMonoPrerequisites.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\BsMonoAssembly.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\BsMonoClass.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\BsMonoField.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\BsMonoManager.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\BsMonoMethod.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\BsMonoProperty.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\BsMonoScriptManager.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\BsMonoUtil.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\BsScriptMeta.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="Source\BsMonoAssembly.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="Source\BsMonoClass.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="Source\BsMonoField.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="Source\BsMonoManager.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="Source\BsMonoMethod.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="Source\BsMonoProperty.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="Source\BsMonoPlugin.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="Source\BsScriptMeta.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="Source\BsMonoScriptManager.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="Source\BsMonoUtil.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>

+ 4 - 0
BansheeMono/BansheeMono.vcxproj.user

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup />
+</Project>

+ 52 - 0
BansheeMono/Include/BsMonoAssembly.h

@@ -0,0 +1,52 @@
+#pragma once
+
+#include "BsMonoPrerequisites.h"
+#include <mono/jit/jit.h>
+#include <mono/metadata/assembly.h>
+
+namespace BansheeEngine
+{
+	class BS_MONO_EXPORT MonoAssembly
+	{
+		struct ClassId
+		{
+			struct Hash
+			{
+				inline size_t operator()(const ClassId& v) const;
+			};
+
+			struct Equals
+			{
+				inline bool operator()(const ClassId &a, const ClassId &b) const;
+			};
+
+			ClassId(const CM::String& namespaceName, CM::String name);
+
+			CM::String namespaceName;
+			CM::String name;
+		};
+
+	public:
+		~MonoAssembly();
+
+		MonoClass& getClass(const CM::String& namespaceName, const CM::String& name);
+		MonoDomain* getDomain() const { return mDomain; }
+
+	private:
+		friend class MonoManager;
+
+		MonoAssembly();
+
+		void load(const CM::String& path, const CM::String& name);
+		void unload();
+
+		void initialize(const CM::String& entryPoint);
+
+		CM::String mName;
+		MonoDomain* mDomain;
+		MonoImage* mMonoImage;
+		::MonoAssembly* mMonoAssembly;
+		bool mIsLoaded;
+		CM::UnorderedMap<ClassId, MonoClass*, ClassId::Hash, ClassId::Equals>::type mClasses;
+	};
+}

+ 52 - 0
BansheeMono/Include/BsMonoClass.h

@@ -0,0 +1,52 @@
+#pragma once
+
+#include "BsMonoPrerequisites.h"
+#include <mono/jit/jit.h>
+
+namespace BansheeEngine
+{
+	class BS_MONO_EXPORT MonoClass
+	{
+		struct MethodId
+		{
+			struct Hash
+			{
+				inline size_t operator()(const MethodId& v) const;
+			};
+			
+			struct Equals
+			{
+				inline bool operator()(const MethodId &a, const MethodId &b) const;
+			};
+
+			MethodId(const CM::String& name, CM::UINT32 numParams);
+
+			CM::String name;
+			CM::UINT32 numParams;
+		};
+
+	public:
+		~MonoClass();
+
+		MonoMethod& getMethod(const CM::String& name, CM::UINT32 numParams = 0);
+		MonoField& getField(const CM::String& name);
+		MonoProperty& getProperty(const CM::String& name);
+
+		MonoObject* invokeMethod(const CM::String& name, MonoObject* instance = nullptr, void** params = nullptr, CM::UINT32 numParams = 0);
+		void addInternalCall(const CM::String& name, const void* method);
+
+		MonoObject* createInstance() const;
+	private:
+		friend class MonoAssembly;
+
+		MonoClass(const CM::String& fullName, ::MonoClass* monoClass, MonoAssembly* parentAssembly);
+
+		MonoAssembly* mParentAssembly;
+		::MonoClass* mClass;
+		CM::String mFullName;
+
+		CM::UnorderedMap<MethodId, MonoMethod*, MethodId::Hash, MethodId::Equals>::type mMethods; 
+		CM::UnorderedMap<CM::String, MonoField*>::type mFields; 
+		CM::UnorderedMap<CM::String, MonoProperty*>::type mProperties;
+	};
+}

+ 23 - 0
BansheeMono/Include/BsMonoField.h

@@ -0,0 +1,23 @@
+#pragma once
+
+#include "BsMonoPrerequisites.h"
+#include <mono/jit/jit.h>
+#include <mono/metadata/class.h>
+
+namespace BansheeEngine
+{
+	class BS_MONO_EXPORT MonoField
+	{
+	public:
+		void* getValue(MonoObject* instance);
+		void setValue(MonoObject* instance, void* value);
+
+	private:
+		friend class MonoClass;
+
+		MonoField(MonoClassField* field);
+
+		MonoClassField* mField;
+		void* mThunk;
+	};
+}

+ 35 - 0
BansheeMono/Include/BsMonoManager.h

@@ -0,0 +1,35 @@
+#pragma once
+
+#include "BsMonoPrerequisites.h"
+#include "BsScriptMeta.h"
+#include "CmModule.h"
+#include <mono/jit/jit.h>
+
+namespace BansheeEngine
+{
+	/**
+	 * @brief	Loads Mono script assemblies and manages script objects.
+	 */
+	class BS_MONO_EXPORT MonoManager : public CM::Module<MonoManager>
+	{
+	public:
+		MonoManager();
+		~MonoManager();
+
+		MonoAssembly& loadAssembly(const CM::String& path, const CM::String& name, const CM::String& entryPoint = CM::StringUtil::BLANK);
+		void unloadAssembly(MonoAssembly& assembly);
+
+		static void registerScriptType(ScriptMeta* metaData);
+	private:
+		static const CM::String MONO_LIB_DIR;
+		static const CM::String MONO_ETC_DIR;
+
+		static CM::UnorderedMap<CM::String, CM::Vector<ScriptMeta*>::type>::type& getTypesToInitialize()
+		{
+			static CM::UnorderedMap<CM::String, CM::Vector<ScriptMeta*>::type>::type mTypesToInitialize;
+			return mTypesToInitialize;
+		}
+
+		CM::UnorderedMap<CM::String, MonoAssembly*>::type mAssemblies;
+	};
+}

+ 32 - 0
BansheeMono/Include/BsMonoMethod.h

@@ -0,0 +1,32 @@
+#pragma once
+
+#include "BsMonoPrerequisites.h"
+#include <mono/jit/jit.h>
+
+namespace BansheeEngine
+{
+	class BS_MONO_EXPORT MonoMethod
+	{
+	public:
+		MonoObject* invoke(MonoObject* instance, void** params);
+
+		/**
+		 * @brief	Gets a thunk for this method. A thunk is a C++ like function
+		 * 			pointer that you can use for calling the method.
+		 *
+		 * @note	This is the fastest way of calling managed code.
+		 */
+		void* getThunk() const;
+
+		CM::String getName() const;
+
+	private:
+		friend class MonoClass;
+		friend class MonoProperty;
+
+		MonoMethod(::MonoMethod* method);
+
+		::MonoMethod* mMethod;
+		void* mThunk;
+	};
+}

+ 29 - 0
BansheeMono/Include/BsMonoPrerequisites.h

@@ -0,0 +1,29 @@
+#pragma once
+
+#include "BsPrerequisites.h"
+
+#if (CM_PLATFORM == CM_PLATFORM_WIN32) && !defined(__MINGW32__)
+#	ifdef BS_MONO_EXPORTS
+#		define BS_MONO_EXPORT __declspec(dllexport)
+#	else
+#       if defined( __MINGW32__ )
+#           define BS_MONO_EXPORT
+#       else
+#    		define BS_MONO_EXPORT __declspec(dllimport)
+#       endif
+#	endif
+#elif defined ( CM_GCC_VISIBILITY )
+#    define BS_MONO_EXPORT  __attribute__ ((visibility("default")))
+#else
+#    define BS_MONO_EXPORT
+#endif
+
+namespace BansheeEngine
+{
+	class MonoManager;
+	class MonoAssembly;
+	class MonoClass;
+	class MonoMethod;
+	class MonoField;
+	class MonoProperty;
+}

+ 23 - 0
BansheeMono/Include/BsMonoProperty.h

@@ -0,0 +1,23 @@
+#pragma once
+
+#include "BsMonoPrerequisites.h"
+#include <mono/jit/jit.h>
+
+namespace BansheeEngine
+{
+	class BS_MONO_EXPORT MonoProperty
+	{
+	public:
+		MonoObject* get(MonoObject* instance) const;
+		void set(MonoObject* instance, MonoObject* value) const;
+
+	private:
+		friend class MonoClass;
+
+		MonoProperty(::MonoProperty* monoProp);
+
+		::MonoProperty* mProperty;
+		::MonoMethod* mGetMethod;
+		::MonoMethod* mSetMethod;
+	};
+}

+ 20 - 0
BansheeMono/Include/BsMonoScriptManager.h

@@ -0,0 +1,20 @@
+#pragma once
+
+#include "BsMonoPrerequisites.h"
+#include "BsScriptManager.h"
+#include "CmModule.h"
+
+namespace BansheeEngine 
+{
+	class BS_MONO_EXPORT MonoScriptSystem : public ScriptSystem
+	{
+	public:
+		MonoScriptSystem();
+		~MonoScriptSystem();
+
+		virtual void initialize();
+
+	private:
+		bool mIsInitialized;
+	};
+}

+ 23 - 0
BansheeMono/Include/BsMonoUtil.h

@@ -0,0 +1,23 @@
+#pragma once
+
+#include "BsMonoPrerequisites.h"
+#include <mono/jit/jit.h>
+
+namespace BansheeEngine
+{
+	class BS_MONO_EXPORT ScriptUtil
+	{
+	public:
+		static CM::WString monoToWString(MonoString* str)
+		{
+			int len = mono_string_length(str);
+			mono_unichar2* monoChars = mono_string_chars(str);
+
+			CM::WString ret(len, '0');
+			for(int i = 0; i < len; i++)
+				ret[i] = monoChars[i];
+
+			return ret;
+		}
+	};
+}

+ 19 - 0
BansheeMono/Include/BsScriptMeta.h

@@ -0,0 +1,19 @@
+#pragma once
+
+#include "BsMonoPrerequisites.h"
+
+namespace BansheeEngine
+{
+	struct BS_MONO_EXPORT ScriptMeta
+	{
+		ScriptMeta();
+		ScriptMeta(const CM::String& assembly, const CM::String& ns, const CM::String& name, std::function<void()> initCallback);
+
+		CM::String ns;
+		CM::String name;
+		CM::String assembly;
+		std::function<void()> initCallback;
+		MonoClass* scriptClass;							
+		MonoField* thisPtrField;	
+	};
+}

+ 129 - 0
BansheeMono/Source/BsMonoAssembly.cpp

@@ -0,0 +1,129 @@
+#include "BsMonoAssembly.h"
+#include "BsMonoClass.h"
+#include "BsMonoManager.h"
+#include "CmUtil.h"
+#include "CmException.h"
+
+#include <mono/metadata/debug-helpers.h>
+
+using namespace CamelotFramework;
+
+namespace BansheeEngine
+{
+	inline size_t MonoAssembly::ClassId::Hash::operator()(const MonoAssembly::ClassId& v) const
+	{
+		size_t seed = 0;
+		hash_combine(seed, v.namespaceName);
+		hash_combine(seed, v.name);
+		return seed;
+	}
+
+	inline bool MonoAssembly::ClassId::Equals::operator()(const MonoAssembly::ClassId& a, const MonoAssembly::ClassId& b) const
+	{
+		return a.name == b.name && a.namespaceName == b.namespaceName;
+	}
+
+	MonoAssembly::ClassId::ClassId(const String& namespaceName, String name)
+		:namespaceName(namespaceName), name(name)
+	{
+
+	}
+
+	MonoAssembly::MonoAssembly()
+		:mIsLoaded(false), mMonoImage(nullptr), mMonoAssembly(nullptr), mDomain(nullptr)
+	{
+
+	}
+
+	MonoAssembly::~MonoAssembly()
+	{
+		unload();
+
+		if(mDomain != nullptr)
+		{
+			mono_jit_cleanup(mDomain);
+			mDomain = nullptr;
+		}
+	}
+
+	void MonoAssembly::load(const CM::String& path, const CM::String& name)
+	{
+		if(mDomain == nullptr)
+		{
+			mDomain = mono_jit_init (path.c_str());
+			if(mDomain == nullptr)
+			{
+				CM_EXCEPT(InternalErrorException, "Cannot initialize Mono runtime.");
+			}
+		}
+
+		::MonoAssembly* monoAssembly = mono_domain_assembly_open (mDomain, path.c_str());
+		if(monoAssembly == nullptr)
+		{
+			CM_EXCEPT(InvalidParametersException, "Cannot load Mono assembly: " + path);
+		}
+
+		mName = name;
+		mMonoAssembly = monoAssembly;
+		mMonoImage = mono_assembly_get_image(mMonoAssembly);
+		if(mMonoImage == nullptr)
+		{
+			CM_EXCEPT(InvalidParametersException, "Cannot get script assembly image.");
+		}
+
+		mIsLoaded = true;
+	}
+
+	void MonoAssembly::unload()
+	{
+		if(!mIsLoaded)
+			return;
+
+		for(auto& entry : mClasses)
+			cm_delete(entry.second);
+
+		mClasses.clear();
+
+		if(mMonoImage != nullptr)
+		{
+			mono_image_close(mMonoImage);
+			mMonoImage = nullptr;
+		}
+
+		mIsLoaded = false;
+		mMonoAssembly = nullptr;
+	}
+
+	void MonoAssembly::initialize(const CM::String& entryPoint)
+	{
+		MonoMethodDesc* methodDesc = mono_method_desc_new(entryPoint.c_str(), false);
+		::MonoMethod* entry = mono_method_desc_search_in_image(methodDesc, mMonoImage);
+
+		if(entry != nullptr)
+			mono_runtime_invoke(entry, nullptr, nullptr, nullptr);
+	}
+
+	MonoClass& MonoAssembly::getClass(const String& namespaceName, const String& name)
+	{
+		if(!mIsLoaded)
+			CM_EXCEPT(InvalidStateException, "Trying to use an unloaded assembly.");
+
+		ClassId classId(namespaceName, name);
+		auto iterFind = mClasses.find(classId);
+
+		if(iterFind != mClasses.end())
+			return *iterFind->second;
+
+		::MonoClass* monoClass = mono_class_from_name(mMonoImage, namespaceName.c_str(), name.c_str());
+		if(monoClass == nullptr)
+		{
+			CM_EXCEPT(InvalidParametersException, "Cannot get Mono class: " + namespaceName + "." + name);
+		}
+
+		String fullClassName = namespaceName + "." + name;
+		MonoClass* newClass = new (cm_alloc<MonoClass>()) MonoClass(fullClassName, monoClass, this);
+		mClasses[classId] = newClass;
+
+		return *newClass;
+	}
+}

+ 138 - 0
BansheeMono/Source/BsMonoClass.cpp

@@ -0,0 +1,138 @@
+#include "BsMonoClass.h"
+#include "BsMonoMethod.h"
+#include "BsMonoField.h"
+#include "BsMonoProperty.h"
+#include "BsMonoAssembly.h"
+#include "BsMonoManager.h"
+#include "CmUtil.h"
+#include "CmException.h"
+
+using namespace CamelotFramework;
+
+namespace BansheeEngine
+{
+	inline size_t MonoClass::MethodId::Hash::operator()(const MonoClass::MethodId& v) const
+	{
+		size_t seed = 0;
+		hash_combine(seed, v.name);
+		hash_combine(seed, v.numParams);
+		return seed;
+	}
+
+	inline bool MonoClass::MethodId::Equals::operator()(const MonoClass::MethodId &a, const MonoClass::MethodId &b) const
+	{
+		return a.name == b.name && a.numParams == b.numParams;
+	}
+
+	MonoClass::MethodId::MethodId(const String& name, UINT32 numParams)
+		:name(name), numParams(numParams)
+	{
+
+	}
+
+	MonoClass::MonoClass(const String& fullName, ::MonoClass* monoClass, MonoAssembly* parentAssembly)
+		:mFullName(fullName), mClass(monoClass), mParentAssembly(parentAssembly)
+	{
+
+	}
+
+	MonoClass::~MonoClass()
+	{
+		for(auto& mapEntry : mMethods)
+		{
+			cm_delete(mapEntry.second);
+		}
+
+		mMethods.clear();
+
+		for(auto& mapEntry : mFields)
+		{
+			cm_delete(mapEntry.second);
+		}
+
+		mFields.clear();
+
+		for(auto& mapEntry : mProperties)
+		{
+			cm_delete(mapEntry.second);
+		}
+
+		mProperties.clear();
+	}
+
+	MonoMethod& MonoClass::getMethod(const String& name, UINT32 numParams)
+	{
+		MethodId mehodId(name, numParams);
+		auto iterFind = mMethods.find(mehodId);
+		if(iterFind != mMethods.end())
+			return *iterFind->second;
+
+		::MonoMethod* method = mono_class_get_method_from_name(mClass, name.c_str(), (int)numParams);
+		if(method == nullptr)
+		{
+			String fullMethodName = mFullName + "::" + name;
+			CM_EXCEPT(InvalidParametersException, "Cannot get Mono method: " + fullMethodName);
+		}
+
+		MonoMethod* newMethod = new (cm_alloc<MonoMethod>()) MonoMethod(method);
+		mMethods[mehodId] = newMethod;
+
+		return *newMethod;
+	}
+
+	MonoField& MonoClass::getField(const String& name)
+	{
+		auto iterFind = mFields.find(name);
+		if(iterFind != mFields.end())
+			return *iterFind->second;
+
+		MonoClassField* field = mono_class_get_field_from_name(mClass, name.c_str());
+		if(field == nullptr)
+		{
+			String fullFieldName = mFullName + "::" + name;
+			CM_EXCEPT(InvalidParametersException, "Cannot get Mono field: " + fullFieldName);
+		}
+
+		MonoField* newField = new (cm_alloc<MonoField>()) MonoField(field);
+		mFields[name] = newField;
+
+		return *newField;
+	}
+
+	MonoProperty& MonoClass::getProperty(const String& name)
+	{
+		auto iterFind = mProperties.find(name);
+		if(iterFind != mProperties.end())
+			return *iterFind->second;
+
+		::MonoProperty* property = mono_class_get_property_from_name(mClass, name.c_str());
+		if(property == nullptr)
+		{
+			String fullPropertyName = mFullName + "::" + name;
+			CM_EXCEPT(InvalidParametersException, "Cannot get Mono property: " + fullPropertyName);
+		}
+
+		MonoProperty* newProperty = new (cm_alloc<MonoProperty>()) MonoProperty(property);
+		mProperties[name] = newProperty;
+
+		return *newProperty;
+	}
+
+	MonoObject* MonoClass::invokeMethod(const String& name, MonoObject* instance, void** params, UINT32 numParams)
+	{
+		return getMethod(name, numParams).invoke(instance, params);
+	}
+
+	void MonoClass::addInternalCall(const String& name, const void* method)
+	{
+		String fullMethodName = mFullName + "::" + name;
+		mono_add_internal_call(fullMethodName.c_str(), method);
+	}
+
+	MonoObject* MonoClass::createInstance() const
+	{
+		MonoObject* obj = mono_object_new(mParentAssembly->getDomain(), mClass);
+
+		return obj;
+	}
+}

+ 24 - 0
BansheeMono/Source/BsMonoField.cpp

@@ -0,0 +1,24 @@
+#include "BsMonoField.h"
+
+using namespace CamelotFramework;
+
+namespace BansheeEngine
+{
+	MonoField::MonoField(MonoClassField* field)
+		:mField(field)
+	{
+
+	}
+
+	void* MonoField::getValue(MonoObject* instance)
+	{
+		void* value = nullptr;
+		mono_field_get_value(instance, mField, &value);
+		return value;
+	}
+
+	void MonoField::setValue(MonoObject* instance, void* value)
+	{
+		mono_field_set_value(instance, mField, &value);
+	}
+}

+ 82 - 0
BansheeMono/Source/BsMonoManager.cpp

@@ -0,0 +1,82 @@
+#include "BsMonoManager.h"
+#include "CmException.h"
+#include "BsScriptMeta.h"
+#include "BsMonoAssembly.h"
+#include "BsMonoClass.h"
+
+#include <mono/metadata/assembly.h>
+#include <mono/metadata/mono-config.h>
+
+using namespace CamelotFramework;
+
+namespace BansheeEngine
+{
+	const String MonoManager::MONO_LIB_DIR = "..\\..\\Mono\\lib";
+	const String MonoManager::MONO_ETC_DIR = "..\\..\\Mono\\etc";
+
+	MonoManager::MonoManager()
+	{
+		mono_set_dirs(MONO_LIB_DIR.c_str(), MONO_ETC_DIR.c_str()); 
+		mono_config_parse(nullptr);
+	}
+
+	MonoManager::~MonoManager()
+	{
+		for(auto& entry : mAssemblies)
+		{
+			unloadAssembly(*entry.second);
+			cm_delete(entry.second);
+		}
+
+		mAssemblies.clear();
+	}
+
+	MonoAssembly& MonoManager::loadAssembly(const String& path, const String& name, const String& entryPoint)
+	{
+		MonoAssembly* assembly = nullptr;
+
+		auto iterFind = mAssemblies.find(name);
+		if(iterFind != mAssemblies.end())
+		{
+			assembly = iterFind->second;
+		}
+		else
+		{
+			assembly = new (cm_alloc<MonoAssembly>()) MonoAssembly();
+			mAssemblies[name] = assembly;
+		}
+
+		if(!assembly->mIsLoaded)
+		{
+			assembly->load(path, name);
+
+			// Fully initialize all types that use this assembly
+			Vector<ScriptMeta*>::type& mTypeMetas = getTypesToInitialize()[name];
+			for(auto& meta : mTypeMetas)
+			{
+				meta->scriptClass = &assembly->getClass(meta->ns, meta->name);
+				meta->thisPtrField = &meta->scriptClass->getField("mCachedPtr");
+				meta->initCallback();
+			}
+
+			assembly->initialize(entryPoint); // Perform any initialization after everything is loaded
+		}
+
+		return *assembly;
+	}
+
+	void MonoManager::unloadAssembly(MonoAssembly& assembly)
+	{
+		::MonoAssembly* monoAssembly = assembly.mMonoAssembly;
+		assembly.unload();
+
+		if(monoAssembly)
+			mono_assembly_close(monoAssembly);
+	}
+
+	void MonoManager::registerScriptType(ScriptMeta* metaData)
+	{
+		Vector<ScriptMeta*>::type& mMetas = getTypesToInitialize()[metaData->assembly];
+		mMetas.push_back(metaData);
+	}
+}

+ 27 - 0
BansheeMono/Source/BsMonoMethod.cpp

@@ -0,0 +1,27 @@
+#include "BsMonoMethod.h"
+
+using namespace CamelotFramework;
+
+namespace BansheeEngine
+{
+	MonoMethod::MonoMethod(::MonoMethod* method)
+		:mMethod(method)
+	{
+		mThunk = mono_method_get_unmanaged_thunk(mMethod);
+	}
+
+	MonoObject* MonoMethod::invoke(MonoObject* instance, void** params)
+	{
+		return mono_runtime_invoke(mMethod, instance, params, nullptr);
+	}		
+
+	void* MonoMethod::getThunk() const
+	{
+		return mThunk;
+	}
+
+	String MonoMethod::getName() const
+	{
+		return String(mono_method_get_name(mMethod));
+	}
+}

+ 21 - 0
BansheeMono/Source/BsMonoPlugin.cpp

@@ -0,0 +1,21 @@
+#include "BsMonoPrerequisites.h"
+#include "BsMonoScriptManager.h"
+
+using namespace CamelotFramework;
+
+namespace BansheeEngine
+{
+	extern "C" BS_MONO_EXPORT const String& getPluginName()
+	{
+		static String pluginName = "BansheeMono";
+		return pluginName;
+	}
+
+	extern "C" BS_MONO_EXPORT void* loadPlugin()
+	{
+		std::shared_ptr<MonoScriptSystem> mono = cm_shared_ptr<MonoScriptSystem>();
+		ScriptManager::instance().initialize(mono);
+
+		return nullptr;
+	}
+}

+ 26 - 0
BansheeMono/Source/BsMonoProperty.cpp

@@ -0,0 +1,26 @@
+#include "BsMonoProperty.h"
+#include "BsMonoMethod.h"
+
+using namespace CamelotFramework;
+
+namespace BansheeEngine
+{
+	MonoProperty::MonoProperty(::MonoProperty* monoProp)
+		:mProperty(monoProp)
+	{
+		mGetMethod = mono_property_get_get_method(mProperty);
+		mSetMethod = mono_property_get_set_method(mProperty);
+	}
+
+	MonoObject* MonoProperty::get(MonoObject* instance) const
+	{
+		return mono_runtime_invoke(mGetMethod, instance, nullptr, nullptr);
+	}
+
+	void MonoProperty::set(MonoObject* instance, MonoObject* value) const
+	{
+		void* args[1];
+		args[0] = value;
+		mono_runtime_invoke(mSetMethod, instance, args, nullptr);
+	}	
+}

+ 25 - 0
BansheeMono/Source/BsMonoScriptManager.cpp

@@ -0,0 +1,25 @@
+#include "BsMonoScriptManager.h"
+#include "BsMonoManager.h"
+
+using namespace CamelotFramework;
+
+namespace BansheeEngine
+{
+	MonoScriptSystem::MonoScriptSystem()
+		:mIsInitialized(false)
+	{
+
+	}
+
+	MonoScriptSystem::~MonoScriptSystem()
+	{
+		if(mIsInitialized)
+			MonoManager::shutDown();
+	}
+
+	void MonoScriptSystem::initialize()
+	{
+		MonoManager::startUp(cm_new<MonoManager>());
+		mIsInitialized = true;
+	}
+}

+ 1 - 0
BansheeMono/Source/BsMonoUtil.cpp

@@ -0,0 +1 @@
+#include "BsMonoUtil.h"

+ 19 - 0
BansheeMono/Source/BsScriptMeta.cpp

@@ -0,0 +1,19 @@
+#include "BsScriptMeta.h"
+#include "BsMonoManager.h"
+#include "BsMonoClass.h"
+#include "BsMonoField.h"
+
+namespace BansheeEngine
+{
+	ScriptMeta::ScriptMeta()
+		:scriptClass(nullptr), thisPtrField(nullptr)
+	{
+
+	}
+
+	ScriptMeta::ScriptMeta(const CM::String& assembly, const CM::String& ns, const CM::String& name, std::function<void()> initCallback)
+		:assembly(assembly), ns(ns), name(name), initCallback(initCallback)
+	{
+
+	}
+}

+ 24 - 24
CamelotClient/Include/BsScriptModalWindow.h

@@ -1,26 +1,26 @@
 #pragma once
 #pragma once
 
 
-#include "BsPrerequisites.h"
-#include "BsScriptObject.h"
-
-namespace BansheeEditor
-{
-	class ScriptModalWindow : public BansheeEngine::ScriptObject<ScriptModalWindow>
-	{
-	public:
-		static void initMetaData();
-
-	private:
-		ScriptModalWindow(CM::INT32 left, CM::INT32 top, CM::UINT32 width, CM::UINT32 height);
-
-		static void internal_createInstance(MonoObject* instance, CM::INT32 left, CM::INT32 top, CM::UINT32 width, CM::UINT32 height);
-		static void internal_destroyInstance(ScriptModalWindow* nativeInstance);
-
-		static void initRuntimeData();
-
-		CM::RenderWindowPtr mRenderWindow;
-		CM::HSceneObject mSceneObject;
-		BS::HGUIWidget mGUI;
-		BS::HCamera mCamera;
-	};
-}
+//#include "BsPrerequisites.h"
+//#include "BsScriptObject.h"
+//
+//namespace BansheeEditor
+//{
+//	class ScriptModalWindow : public BansheeEngine::ScriptObject<ScriptModalWindow>
+//	{
+//	public:
+//		static void initMetaData();
+//
+//	private:
+//		ScriptModalWindow(CM::INT32 left, CM::INT32 top, CM::UINT32 width, CM::UINT32 height);
+//
+//		static void internal_createInstance(MonoObject* instance, CM::INT32 left, CM::INT32 top, CM::UINT32 width, CM::UINT32 height);
+//		static void internal_destroyInstance(ScriptModalWindow* nativeInstance);
+//
+//		static void initRuntimeData();
+//
+//		CM::RenderWindowPtr mRenderWindow;
+//		CM::HSceneObject mSceneObject;
+//		BS::HGUIWidget mGUI;
+//		BS::HCamera mCamera;
+//	};
+//}

+ 0 - 6
CamelotClient/Source/BsEditorApplication.cpp

@@ -4,8 +4,6 @@
 #include "BsApplication.h"
 #include "BsApplication.h"
 #include "CmApplication.h"
 #include "CmApplication.h"
 #include "CmRenderWindow.h"
 #include "CmRenderWindow.h"
-#include "BsScriptManager.h"
-#include "BsEngineAssembly.h"
 
 
 // DEBUG ONLY
 // DEBUG ONLY
 #include "DbgEditorWidget1.h"
 #include "DbgEditorWidget1.h"
@@ -214,8 +212,6 @@ namespace BansheeEditor
 		/************************************************************************/
 		/************************************************************************/
 
 
 		EditorWindowManager::startUp(cm_new<EditorWindowManager>());
 		EditorWindowManager::startUp(cm_new<EditorWindowManager>());
-		ScriptManager::startUp(cm_new<ScriptManager>());
-		EngineAssembly::startUp(cm_new<EngineAssembly>());
 		MainEditorWindow* mainWindow = MainEditorWindow::create(gApplication().getPrimaryWindow());
 		MainEditorWindow* mainWindow = MainEditorWindow::create(gApplication().getPrimaryWindow());
 
 
 		gApplication().mainLoopCallback.connect(boost::bind(&EditorApplication::update, this));
 		gApplication().mainLoopCallback.connect(boost::bind(&EditorApplication::update, this));
@@ -225,8 +221,6 @@ namespace BansheeEditor
 
 
 		gBansheeApp().runMainLoop();
 		gBansheeApp().runMainLoop();
 
 
-		EngineAssembly::shutDown();
-		ScriptManager::shutDown();
 		EditorWindowManager::shutDown();
 		EditorWindowManager::shutDown();
 
 
 
 

+ 68 - 68
CamelotClient/Source/BsScriptModalWindow.cpp

@@ -1,69 +1,69 @@
 #include "BsScriptModalWindow.h"
 #include "BsScriptModalWindow.h"
-#include "BsScriptMeta.h"
-#include "BsScriptField.h"
-#include "BsScriptClass.h"
-#include "BsScriptManager.h"
-#include "CmSceneObject.h"
-#include "CmRenderWindow.h"
-#include "CmApplication.h"
-#include "BsCamera.h"
-#include "BsGUIWidget.h"
-
-using namespace CamelotFramework;
-using namespace BansheeEngine;
-
-namespace BansheeEditor
-{
-	ScriptModalWindow::ScriptModalWindow(INT32 left, INT32 top, UINT32 width, UINT32 height)
-	{
-		RENDER_WINDOW_DESC renderWindowDesc;
-		renderWindowDesc.width = width;
-		renderWindowDesc.height = height;
-		renderWindowDesc.left = left;
-		renderWindowDesc.top = top;
-		renderWindowDesc.title = "ModalWindow";
-		renderWindowDesc.fullscreen = false;
-		renderWindowDesc.border = WindowBorder::None;
-		renderWindowDesc.toolWindow = true;
-
-		mRenderWindow = RenderWindow::create(renderWindowDesc, gApplication().getPrimaryWindow());
-
-		mSceneObject = SceneObject::create("ModalWindow");
-
-		mCamera = mSceneObject->addComponent<Camera>();
-		mCamera->initialize(mRenderWindow, 0.0f, 0.0f, 1.0f, 1.0f);
-		mCamera->setNearClipDistance(5);
-		mCamera->setAspectRatio(1.0f);
-		mCamera->setIgnoreSceneRenderables(true);
-
-		mGUI = mSceneObject->addComponent<GUIWidget>(mCamera->getViewport().get());
-		mGUI->setDepth(128);
-	}
-
-	void ScriptModalWindow::initMetaData()
-	{
-		metaData = ScriptMeta("MBansheeEditor", "BansheeEditor", "ModalWindow", &ScriptModalWindow::initRuntimeData);
-
-		ScriptManager::registerScriptType(&metaData);
-	}
-
-	void ScriptModalWindow::initRuntimeData()
-	{
-		metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptModalWindow::internal_createInstance);
-		metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptModalWindow::internal_destroyInstance);
-	}
-
-	void ScriptModalWindow::internal_createInstance(MonoObject* instance, INT32 left, INT32 top, UINT32 width, UINT32 height)
-	{
-		ScriptModalWindow* nativeInstance = new (cm_alloc<ScriptModalWindow>()) ScriptModalWindow(left, top, width, height);
-		nativeInstance->createInstance(instance);
-
-		metaData.thisPtrField->setValue(instance, nativeInstance);
-	}
-
-	void ScriptModalWindow::internal_destroyInstance(ScriptModalWindow* nativeInstance)
-	{
-		nativeInstance->destroyInstance();
-		cm_delete(nativeInstance);
-	}
-}
+//#include "BsScriptMeta.h"
+//#include "BsMonoField.h"
+//#include "BsMonoClass.h"
+//#include "BsMonoManager.h"
+//#include "CmSceneObject.h"
+//#include "CmRenderWindow.h"
+//#include "CmApplication.h"
+//#include "BsCamera.h"
+//#include "BsGUIWidget.h"
+//
+//using namespace CamelotFramework;
+//using namespace BansheeEngine;
+//
+//namespace BansheeEditor
+//{
+//	ScriptModalWindow::ScriptModalWindow(INT32 left, INT32 top, UINT32 width, UINT32 height)
+//	{
+//		RENDER_WINDOW_DESC renderWindowDesc;
+//		renderWindowDesc.width = width;
+//		renderWindowDesc.height = height;
+//		renderWindowDesc.left = left;
+//		renderWindowDesc.top = top;
+//		renderWindowDesc.title = "ModalWindow";
+//		renderWindowDesc.fullscreen = false;
+//		renderWindowDesc.border = WindowBorder::None;
+//		renderWindowDesc.toolWindow = true;
+//
+//		mRenderWindow = RenderWindow::create(renderWindowDesc, gApplication().getPrimaryWindow());
+//
+//		mSceneObject = SceneObject::create("ModalWindow");
+//
+//		mCamera = mSceneObject->addComponent<Camera>();
+//		mCamera->initialize(mRenderWindow, 0.0f, 0.0f, 1.0f, 1.0f);
+//		mCamera->setNearClipDistance(5);
+//		mCamera->setAspectRatio(1.0f);
+//		mCamera->setIgnoreSceneRenderables(true);
+//
+//		mGUI = mSceneObject->addComponent<GUIWidget>(mCamera->getViewport().get());
+//		mGUI->setDepth(128);
+//	}
+//
+//	void ScriptModalWindow::initMetaData()
+//	{
+//		metaData = ScriptMeta("MBansheeEditor", "BansheeEditor", "ModalWindow", &ScriptModalWindow::initRuntimeData);
+//
+//		MonoManager::registerScriptType(&metaData);
+//	}
+//
+//	void ScriptModalWindow::initRuntimeData()
+//	{
+//		metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptModalWindow::internal_createInstance);
+//		metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptModalWindow::internal_destroyInstance);
+//	}
+//
+//	void ScriptModalWindow::internal_createInstance(MonoObject* instance, INT32 left, INT32 top, UINT32 width, UINT32 height)
+//	{
+//		ScriptModalWindow* nativeInstance = new (cm_alloc<ScriptModalWindow>()) ScriptModalWindow(left, top, width, height);
+//		nativeInstance->createInstance(instance);
+//
+//		metaData.thisPtrField->setValue(instance, nativeInstance);
+//	}
+//
+//	void ScriptModalWindow::internal_destroyInstance(ScriptModalWindow* nativeInstance)
+//	{
+//		nativeInstance->destroyInstance();
+//		cm_delete(nativeInstance);
+//	}
+//}

+ 6 - 0
Notes.txt

@@ -59,6 +59,12 @@ Reminders:
      StreamMesh - constantly updated by CPU and read by GPU
      StreamMesh - constantly updated by CPU and read by GPU
      ReadMesh - written by GPU and easily read by CPU
      ReadMesh - written by GPU and easily read by CPU
 	  - OpenGL especially has no good way of reading or streaming data. It has special STREAM and COPY buffer types which I never use.
 	  - OpenGL especially has no good way of reading or streaming data. It has special STREAM and COPY buffer types which I never use.
+  - (EXTREMELY LOW PRIORITY) Scripting: It might be good to make Mono classes more generic and move them to BansheeEngine. 
+      e.g. MonoClass -> ScriptClass, where ScriptClass is just an abstract interface. Then I don't expose any Mono stuff to actually script libraries like 
+	  SBansheeEngine. User could then fairly easily port the system to another scripting language just by implementing another ScriptSystem. 
+    - This would probably come with an overhead of at least one extra function call for each script call, which is currently unacceptable 
+	  considering that most people will definitely won't be writing new script systems.
+
 
 
 Potential optimizations:
 Potential optimizations:
  - bulkPixelConversion is EXTREMELY poorly unoptimized. Each pixel it calls a separate method that does redudant operations every pixel.
  - bulkPixelConversion is EXTREMELY poorly unoptimized. Each pixel it calls a separate method that does redudant operations every pixel.

+ 32 - 0
SBansheeEngine/Include/BsScriptEnginePrerequisites.h

@@ -0,0 +1,32 @@
+#pragma once
+
+#include "BsMonoPrerequisites.h"
+
+#if (CM_PLATFORM == CM_PLATFORM_WIN32) && !defined(__MINGW32__)
+#	ifdef BS_SCR_BE_EXPORTS
+#		define BS_SCR_BE_EXPORT __declspec(dllexport)
+#	else
+#       if defined( __MINGW32__ )
+#           define BS_SCR_BE_EXPORT
+#       else
+#    		define BS_SCR_BE_EXPORT __declspec(dllimport)
+#       endif
+#	endif
+#elif defined ( CM_GCC_VISIBILITY )
+#    define BS_SCR_BE_EXPORT  __attribute__ ((visibility("default")))
+#else
+#    define BS_SCR_BE_EXPORT
+#endif
+
+namespace BansheeEngine
+{
+	class ScriptFont;
+	class ScriptSpriteTexture;
+	class ScriptTexture2D;
+	class ScriptGUIElementStyle;
+	class ScriptGUIElementStateStyle;
+	class ScriptGUIBase;
+	class ScriptGUIArea;
+	class ScriptGUILayout;
+	class ScriptGUILabel;
+}

+ 27 - 0
SBansheeEngine/Include/BsScriptFont.h

@@ -0,0 +1,27 @@
+#pragma once
+
+#include "BsScriptEnginePrerequisites.h"
+#include "BsScriptObject.h"
+#include "CmFont.h"
+
+namespace BansheeEngine
+{
+	class BS_SCR_BE_EXPORT ScriptFont : public ScriptObject<ScriptFont>
+	{
+	public:
+		static void initMetaData();
+
+		void* getNativeRaw() const;
+		const CM::HFont& getInternalValue() const { return mFont; }
+
+	private:
+		static void internal_createInstanceExternal(MonoObject* instance, const CM::HFont& font);
+		static void internal_destroyInstance(ScriptFont* nativeInstance);
+
+		static void initRuntimeData();
+
+		ScriptFont(const CM::HFont& font);
+
+		CM::HFont mFont;
+	};
+}

+ 38 - 0
SBansheeEngine/Include/BsScriptGUIArea.h

@@ -0,0 +1,38 @@
+#pragma once
+
+#include "BsScriptEnginePrerequisites.h"
+#include "BsScriptObject.h"
+
+namespace BansheeEngine
+{
+	class BS_SCR_BE_EXPORT ScriptGUIArea : public ScriptObject<ScriptGUIArea>
+	{
+	public:
+		static void initMetaData();
+
+		GUIArea* getInternalValue() const { return mArea; }
+		void* getNativeRaw() const { return mArea; }
+
+		GUIWidget& getParentWidget() const;
+
+	private:
+		static void internal_createInstance(MonoObject* instance, MonoObject* parentGUI, CM::INT32 x, CM::INT32 y, CM::UINT32 width, CM::UINT32 height, CM::UINT16 depth);
+		static void internal_createInstanceResizeableX(MonoObject* instance, MonoObject* parentGUI, CM::UINT32 offsetLeft, CM::UINT32 offsetRight, 
+			CM::UINT32 offsetTop, CM::UINT32 height, CM::UINT16 depth);
+
+		static void internal_createInstanceResizeableY(MonoObject* instance, MonoObject* parentGUI, CM::UINT32 offsetTop, 
+			CM::UINT32 offsetBottom, CM::UINT32 offsetLeft, CM::UINT32 width, CM::UINT16 depth);
+
+		static void internal_createInstanceResizeableXY(MonoObject* instance, MonoObject* parentGUI, CM::UINT32 offsetLeft, 
+			CM::UINT32 offsetRight, CM::UINT32 offsetTop, CM::UINT32 offsetBottom, CM::UINT16 depth);
+
+		static void internal_destroyInstance(ScriptGUIArea* nativeInstance);
+
+		static void initRuntimeData();
+
+		ScriptGUIArea(GUIArea* area, ScriptGUIBase* parentGUI);
+
+		GUIArea* mArea;
+		ScriptGUIBase* mParentGUI;
+	};
+}

+ 25 - 0
SBansheeEngine/Include/BsScriptGUIBase.h

@@ -0,0 +1,25 @@
+#pragma once
+
+#include "BsScriptEnginePrerequisites.h"
+#include "BsScriptObject.h"
+
+namespace BansheeEngine
+{
+	class BS_SCR_BE_EXPORT ScriptGUIBase : public ScriptObject<ScriptGUIBase>
+	{
+	public:
+		static void initMetaData();
+
+		GUIWidget& getWidget() const { return mWidget; }
+
+	private:
+		static void internal_createInstance(MonoObject* instance);
+		static void internal_destroyInstance(ScriptGUIBase* nativeInstance);
+
+		static void initRuntimeData();
+
+		ScriptGUIBase(GUIWidget& widget);
+
+		GUIWidget& mWidget;
+	};
+}

+ 44 - 0
SBansheeEngine/Include/BsScriptGUIElementStateStyle.h

@@ -0,0 +1,44 @@
+#pragma once
+
+#include "BsScriptEnginePrerequisites.h"
+#include "BsScriptObject.h"
+#include "BsMonoClass.h"
+#include "BsGUIElementStyle.h"
+#include "BsScriptMacros.h"
+#include "BsScriptSpriteTexture.h"
+
+namespace BansheeEngine
+{
+	class BS_SCR_BE_EXPORT ScriptGUIElementStateStyle : public ScriptObject<ScriptGUIElementStateStyle>
+	{
+	public:
+		~ScriptGUIElementStateStyle();
+
+		static void initMetaData();
+		GUIElementStyle::GUIElementStateStyle getInternalValue() const { return *mElementStateStyle; }
+
+	private:
+		static void internal_createInstance(MonoObject* instance);
+		static void internal_createInstanceExternal(MonoObject* instance, GUIElementStyle::GUIElementStateStyle* externalStateStyle);
+		static void internal_destroyInstance(ScriptGUIElementStateStyle* nativeInstance);
+
+		static void initRuntimeData()
+		{
+			metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptGUIElementStateStyle::internal_createInstance);
+			metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptGUIElementStateStyle::internal_destroyInstance);
+
+			CM_SCRIPT_SETGET_META(ScriptGUIElementStateStyle, Texture);
+			CM_SCRIPT_SETGET_META(ScriptGUIElementStateStyle, TextColor);
+		}
+
+		CM_SCRIPT_GETSET_OBJECT_SHRDPTR(ScriptGUIElementStateStyle, ScriptSpriteTexture, Texture, mElementStateStyle->texture, mSpriteTexture);
+		CM_SCRIPT_GETSET_VALUE_REF(ScriptGUIElementStateStyle, CM::Color, TextColor, mElementStateStyle->textColor);
+
+		ScriptGUIElementStateStyle();
+		ScriptGUIElementStateStyle(GUIElementStyle::GUIElementStateStyle* externalStyle);
+
+		GUIElementStyle::GUIElementStateStyle* mElementStateStyle;
+		ScriptSpriteTexture* mSpriteTexture;
+		bool mOwnsStyle;
+	};
+}

+ 119 - 0
SBansheeEngine/Include/BsScriptGUIElementStyle.h

@@ -0,0 +1,119 @@
+#pragma once
+
+#include "BsScriptEnginePrerequisites.h"
+#include "BsScriptObject.h"
+#include "BsGUIElementStyle.h"
+#include "BsScriptMacros.h"
+#include "BsMonoClass.h"
+#include "BsScriptGUIElementStateStyle.h"
+#include "BsScriptFont.h"
+
+namespace BansheeEngine
+{
+	template<class ParentType, class Type>
+	class script_getset_value
+	{
+	private:
+		static void internal_get(ParentType* nativeInstance, Type* value);
+		static void internal_set(ParentType* nativeInstance, Type value);
+	};
+
+	class BS_SCR_BE_EXPORT ScriptGUIElementStyle : public ScriptObject<ScriptGUIElementStyle>
+	{
+	public:
+		~ScriptGUIElementStyle();
+
+		static void initMetaData();
+		GUIElementStyle* getInternalValue() const { return mElementStyle; }
+
+	private:
+		static void internal_createInstance(MonoObject* instance, MonoString* name);
+		static void internal_createInstanceExternal(MonoObject* instance, MonoString* name, GUIElementStyle* externalStyle);
+		static void internal_destroyInstance(ScriptGUIElementStyle* nativeInstance);
+
+		static void initRuntimeData()
+		{
+			metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptGUIElementStyle::internal_createInstance);
+			metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptGUIElementStyle::internal_destroyInstance);
+
+			CM_SCRIPT_SETGET_META(ScriptGUIElementStyle, Font);
+
+			CM_SCRIPT_SETGET_META(ScriptGUIElementStyle, FontSize);
+			CM_SCRIPT_SETGET_META(ScriptGUIElementStyle, TextHorzAlign);
+			CM_SCRIPT_SETGET_META(ScriptGUIElementStyle, TextVertAlign);
+			CM_SCRIPT_SETGET_META(ScriptGUIElementStyle, ImagePosition);
+			CM_SCRIPT_SETGET_META(ScriptGUIElementStyle, WordWrap);
+
+			CM_SCRIPT_SETGET_META(ScriptGUIElementStyle, Normal);
+			CM_SCRIPT_SETGET_META(ScriptGUIElementStyle, Hover);
+			CM_SCRIPT_SETGET_META(ScriptGUIElementStyle, Active);
+			CM_SCRIPT_SETGET_META(ScriptGUIElementStyle, Focused);
+
+			CM_SCRIPT_SETGET_META(ScriptGUIElementStyle, NormalOn);
+			CM_SCRIPT_SETGET_META(ScriptGUIElementStyle, HoverOn);
+			CM_SCRIPT_SETGET_META(ScriptGUIElementStyle, ActiveOn);
+			CM_SCRIPT_SETGET_META(ScriptGUIElementStyle, FocusedOn);
+
+			CM_SCRIPT_SETGET_META(ScriptGUIElementStyle, Border);
+			CM_SCRIPT_SETGET_META(ScriptGUIElementStyle, Margins);
+			CM_SCRIPT_SETGET_META(ScriptGUIElementStyle, ContentOffset);
+
+			CM_SCRIPT_SETGET_META(ScriptGUIElementStyle, Width);
+			CM_SCRIPT_SETGET_META(ScriptGUIElementStyle, Height);
+			CM_SCRIPT_SETGET_META(ScriptGUIElementStyle, MinWidth);
+			CM_SCRIPT_SETGET_META(ScriptGUIElementStyle, MaxWidth);
+			CM_SCRIPT_SETGET_META(ScriptGUIElementStyle, MinHeight);
+			CM_SCRIPT_SETGET_META(ScriptGUIElementStyle, MaxHeight);
+			CM_SCRIPT_SETGET_META(ScriptGUIElementStyle, FixedWidth);
+			CM_SCRIPT_SETGET_META(ScriptGUIElementStyle, FixedHeight);
+		}
+
+		CM_SCRIPT_GETSET_OBJECT_SHRDPTR(ScriptGUIElementStyle, ScriptFont, Font, mElementStyle->font, mFont);
+
+		CM_SCRIPT_GETSET_VALUE(ScriptGUIElementStyle, CM::UINT32, FontSize, mElementStyle->fontSize);
+		CM_SCRIPT_GETSET_VALUE(ScriptGUIElementStyle, TextHorzAlign, TextHorzAlign, mElementStyle->textHorzAlign);
+		CM_SCRIPT_GETSET_VALUE(ScriptGUIElementStyle, TextVertAlign, TextVertAlign, mElementStyle->textVertAlign);
+		CM_SCRIPT_GETSET_VALUE(ScriptGUIElementStyle, GUIImagePosition, ImagePosition, mElementStyle->imagePosition);
+		CM_SCRIPT_GETSET_VALUE(ScriptGUIElementStyle, bool, WordWrap, mElementStyle->wordWrap);
+
+		CM_SCRIPT_GETSET_OBJECT(ScriptGUIElementStyle, ScriptGUIElementStateStyle, Normal, mElementStyle->normal, mNormal);
+		CM_SCRIPT_GETSET_OBJECT(ScriptGUIElementStyle, ScriptGUIElementStateStyle, Hover, mElementStyle->hover, mHover);
+		CM_SCRIPT_GETSET_OBJECT(ScriptGUIElementStyle, ScriptGUIElementStateStyle, Active, mElementStyle->active, mActive);
+		CM_SCRIPT_GETSET_OBJECT(ScriptGUIElementStyle, ScriptGUIElementStateStyle, Focused, mElementStyle->focused, mFocused);
+
+		CM_SCRIPT_GETSET_OBJECT(ScriptGUIElementStyle, ScriptGUIElementStateStyle, NormalOn, mElementStyle->normalOn, mNormalOn);
+		CM_SCRIPT_GETSET_OBJECT(ScriptGUIElementStyle, ScriptGUIElementStateStyle, HoverOn, mElementStyle->hoverOn, mHoverOn);
+		CM_SCRIPT_GETSET_OBJECT(ScriptGUIElementStyle, ScriptGUIElementStateStyle, ActiveOn, mElementStyle->activeOn, mActiveOn);
+		CM_SCRIPT_GETSET_OBJECT(ScriptGUIElementStyle, ScriptGUIElementStateStyle, FocusedOn, mElementStyle->focusedOn, mFocusedOn);
+
+		CM_SCRIPT_GETSET_VALUE_REF(ScriptGUIElementStyle, RectOffset, Border, mElementStyle->border);
+		CM_SCRIPT_GETSET_VALUE_REF(ScriptGUIElementStyle, RectOffset, Margins, mElementStyle->margins);
+		CM_SCRIPT_GETSET_VALUE_REF(ScriptGUIElementStyle, RectOffset, ContentOffset, mElementStyle->contentOffset);
+
+		CM_SCRIPT_GETSET_VALUE(ScriptGUIElementStyle, CM::UINT32, Width, mElementStyle->width);
+		CM_SCRIPT_GETSET_VALUE(ScriptGUIElementStyle, CM::UINT32, Height, mElementStyle->height);
+		CM_SCRIPT_GETSET_VALUE(ScriptGUIElementStyle, CM::UINT32, MinWidth, mElementStyle->minWidth);
+		CM_SCRIPT_GETSET_VALUE(ScriptGUIElementStyle, CM::UINT32, MaxWidth, mElementStyle->maxWidth);
+		CM_SCRIPT_GETSET_VALUE(ScriptGUIElementStyle, CM::UINT32, MinHeight, mElementStyle->minHeight);
+		CM_SCRIPT_GETSET_VALUE(ScriptGUIElementStyle, CM::UINT32, MaxHeight, mElementStyle->maxHeight);
+		CM_SCRIPT_GETSET_VALUE(ScriptGUIElementStyle, bool, FixedWidth, mElementStyle->fixedWidth);
+		CM_SCRIPT_GETSET_VALUE(ScriptGUIElementStyle, bool, FixedHeight, mElementStyle->fixedHeight);
+
+		ScriptGUIElementStyle(const CM::String& name);
+		ScriptGUIElementStyle(const CM::String& name, GUIElementStyle* externalStyle);
+
+		CM::String mName;
+		GUIElementStyle* mElementStyle;
+		bool mOwnsStyle;
+
+		ScriptFont* mFont;
+		ScriptGUIElementStateStyle* mNormal;
+		ScriptGUIElementStateStyle* mHover;
+		ScriptGUIElementStateStyle* mActive;
+		ScriptGUIElementStateStyle* mFocused;
+		ScriptGUIElementStateStyle* mNormalOn;
+		ScriptGUIElementStateStyle* mHoverOn;
+		ScriptGUIElementStateStyle* mActiveOn;
+		ScriptGUIElementStateStyle* mFocusedOn;
+	};
+}

+ 26 - 0
SBansheeEngine/Include/BsScriptGUILabel.h

@@ -0,0 +1,26 @@
+#pragma once
+
+#include "BsScriptEnginePrerequisites.h"
+#include "BsScriptObject.h"
+
+namespace BansheeEngine
+{
+	class BS_SCR_BE_EXPORT ScriptGUILabel : public ScriptObject<ScriptGUILabel>
+	{
+	public:
+		static void initMetaData();
+
+		GUILabel* getInternalValue() const { return mLabel; }
+		void* getNativeRaw() const { return mLabel; }
+
+	private:
+		static void internal_createInstance(MonoObject* instance, MonoObject* parentLayout, MonoString* label, MonoObject* style, MonoArray* guiOptions);
+		static void internal_destroyInstance(ScriptGUILabel* nativeInstance);
+
+		static void initRuntimeData();
+
+		ScriptGUILabel(GUILabel* label);
+
+		GUILabel* mLabel;
+	};
+}

+ 31 - 0
SBansheeEngine/Include/BsScriptGUILayout.h

@@ -0,0 +1,31 @@
+#pragma once
+
+#include "BsScriptEnginePrerequisites.h"
+#include "BsScriptObject.h"
+
+namespace BansheeEngine
+{
+	class BS_SCR_BE_EXPORT ScriptGUILayout : public ScriptObject<ScriptGUILayout>
+	{
+	public:
+		static void initMetaData();
+
+		GUILayout* getInternalValue() const { return mLayout; }
+		void* getNativeRaw() const { return mLayout; }
+
+		ScriptGUIArea* getParentArea() const { return mParentArea; }
+
+	private:
+		static void internal_createInstanceXFromArea(MonoObject* instance, MonoObject* parentArea);
+		static void internal_createInstanceXFromLayout(MonoObject* instance, MonoObject* parentLayout);
+		static void internal_createInstanceYFromLayout(MonoObject* instance, MonoObject* parentLayout);
+		static void internal_destroyInstance(ScriptGUILayout* nativeInstance);
+
+		static void initRuntimeData();
+
+		ScriptGUILayout(GUILayout* layout, ScriptGUIArea* parentArea);
+
+		GUILayout* mLayout;
+		ScriptGUIArea* mParentArea;
+	};
+}

+ 69 - 0
SBansheeEngine/Include/BsScriptMacros.h

@@ -0,0 +1,69 @@
+#pragma once
+
+#define CM_SCRIPT_GETSET_VALUE(ParentType, Type, Name, Field)									\
+	static void internal_Get##Name##(##ParentType##* nativeInstance, Type##* value)				\
+	{																							\
+		*value = nativeInstance->##Field;														\
+	}																							\
+																								\
+	static void internal_Set##Name##(##ParentType##* nativeInstance, Type value)				\
+	{																							\
+		nativeInstance->##Field = value;															\
+	}																							\
+
+#define CM_SCRIPT_GETSET_VALUE_REF(ParentType, Type, Name, Field)								\
+	static void internal_Get##Name##(##ParentType##* nativeInstance, Type##* value)				\
+	{																							\
+		*value = nativeInstance->##Field;														\
+	}																							\
+																								\
+	static void internal_Set##Name##(##ParentType##* nativeInstance, Type##* value)				\
+	{																							\
+		nativeInstance->##Field = *value;														\
+	}																							\
+
+#define CM_SCRIPT_GETSET_OBJECT(ParentType, Type, Name, FieldNative, FieldManaged)									\
+	static void internal_Get##Name##(##ParentType##* nativeInstance, MonoObject** value)							\
+	{																												\
+		throwIfInstancesDontMatch(nativeInstance->##FieldManaged##, &nativeInstance->##FieldNative##);				\
+																													\
+		if(nativeInstance->##FieldManaged != nullptr)																\
+		{																											\
+			*value = nativeInstance->##FieldManaged##->getManagedInstance();											\
+			return;																									\
+		}																											\
+																													\
+		*value = nullptr;																							\
+	}																												\
+																													\
+	static void internal_Set##Name##(##ParentType##* nativeInstance, MonoObject* value)								\
+	{																												\
+		Type##* nativeValue = Type##::toNative(value);																\
+		nativeInstance->##FieldNative = nativeValue->getInternalValue();												\
+		nativeInstance->##FieldManaged = nativeValue;																\
+	}
+
+#define CM_SCRIPT_GETSET_OBJECT_SHRDPTR(ParentType, Type, Name, FieldNative, FieldManaged)							\
+	static void internal_Get##Name##(##ParentType##* nativeInstance, MonoObject** value)							\
+	{																												\
+		throwIfInstancesDontMatch(nativeInstance->##FieldManaged##, nativeInstance->##FieldNative##.get());			\
+																													\
+		if(nativeInstance->##FieldManaged != nullptr)																\
+		{																											\
+			*value = nativeInstance->##FieldManaged##->getManagedInstance();											\
+			return;																									\
+		}																											\
+																													\
+		*value = nullptr;																							\
+	}																												\
+																													\
+	static void internal_Set##Name##(##ParentType##* nativeInstance, MonoObject* value)								\
+	{																												\
+		Type##* nativeValue = Type##::toNative(value);																\
+		nativeInstance->##FieldNative = nativeValue->getInternalValue();												\
+		nativeInstance->##FieldManaged = nativeValue;																\
+	}
+
+#define CM_SCRIPT_SETGET_META(Type, Name)																			\
+	metaData.scriptClass->addInternalCall("Internal_Get" #Name, &##Type##::internal_Get##Name##);					\
+	metaData.scriptClass->addInternalCall("Internal_Set" #Name, &##Type##::internal_Set##Name##);

+ 95 - 0
SBansheeEngine/Include/BsScriptObject.h

@@ -0,0 +1,95 @@
+#pragma once
+
+#include "BsScriptEnginePrerequisites.h"
+#include "BsScriptMeta.h"
+#include "BsMonoField.h"
+#include "CmException.h"
+#include <mono/jit/jit.h>
+
+namespace BansheeEngine
+{
+	template <class Type>
+	struct InitScriptObjectOnStart
+	{
+	public:
+		InitScriptObjectOnStart()
+		{
+			Type::initMetaData();
+		}
+
+		void makeSureIAmInstantiated() { }
+	};
+
+	/**
+	 * @brief	 Base class for objects that can be extended using Mono scripting
+	 */
+	template <class Type>
+	class ScriptObject
+	{
+	public:
+		ScriptObject()
+			:mManagedInstance(nullptr)
+		{	
+			// Compiler will only generate code for stuff that is directly used, including static data members,
+			// so we fool it here like we're using the class directly. Otherwise compiler won't generate the code for the member
+			// and our type won't get initialized on start (Actual behavior is a bit more random)
+			initOnStart.makeSureIAmInstantiated();
+		}
+
+		virtual ~ScriptObject() 
+		{
+			if(mManagedInstance != nullptr)
+				CM_EXCEPT(InvalidStateException, "Script object is being destroyed without its instance previously being released.");
+		}
+
+		MonoObject* getManagedInstance() const { return mManagedInstance; }
+		virtual void* getNativeRaw() const { return nullptr; }
+
+		static Type* toNative(MonoObject* managedInstance)
+		{
+			return reinterpret_cast<Type*>(metaData.thisPtrField->getValue(managedInstance));
+		}
+
+	protected:
+		static ScriptMeta metaData;
+
+		MonoObject* mManagedInstance;
+
+		void createInstance(MonoObject* instance)
+		{
+			if(mManagedInstance != nullptr)
+				CM_EXCEPT(InvalidStateException, "Trying to instantiate an already instantiated script object.");
+
+			mManagedInstance = instance;
+		}
+
+		void destroyInstance()
+		{
+			if(mManagedInstance == nullptr)
+				return;
+
+			mManagedInstance = nullptr;
+		}
+
+		template <class Type2>
+		static void throwIfInstancesDontMatch(ScriptObject<Type2>* lhs, void* rhs)
+		{
+#if CM_DEBUG_MODE
+			if((lhs == nullptr && rhs != nullptr) || (rhs == nullptr && lhs != nullptr) || lhs->getNativeRaw() != rhs)
+			{
+				CM_EXCEPT(InvalidStateException, "Native and script instance do not match. This usually happens when you modify a native object " \
+					" that is also being referenced from script code. You should only modify such objects directly from script code.");
+			}
+#endif
+		}
+
+	private:
+		static InitScriptObjectOnStart<Type> initOnStart;
+	};
+
+	template <typename Type>
+	InitScriptObjectOnStart<Type> ScriptObject<Type>::initOnStart;
+
+	template <typename Type>
+	ScriptMeta ScriptObject<Type>::metaData;
+}

+ 25 - 0
SBansheeEngine/Include/BsScriptSpriteTexture.h

@@ -0,0 +1,25 @@
+#pragma once
+
+#include "BsScriptEnginePrerequisites.h"
+#include "BsScriptObject.h"
+
+namespace BansheeEngine
+{
+	class BS_SCR_BE_EXPORT ScriptSpriteTexture : public ScriptObject<ScriptSpriteTexture>
+	{
+	public:
+		static void initMetaData();
+
+		const SpriteTexturePtr& getInternalValue() const { return mTexture; }
+
+	private:
+		static void internal_createInstance(MonoObject* instance);
+		static void internal_destroyInstance(ScriptSpriteTexture* nativeInstance);
+
+		static void initRuntimeData();
+
+		ScriptSpriteTexture(const SpriteTexturePtr& texture);
+
+		SpriteTexturePtr mTexture;
+	};
+}

+ 26 - 0
SBansheeEngine/Include/BsScriptTexture2D.h

@@ -0,0 +1,26 @@
+#pragma once
+
+#include "BsScriptEnginePrerequisites.h"
+#include "BsScriptObject.h"
+#include "CmTexture.h"
+
+namespace BansheeEngine
+{
+	class BS_SCR_BE_EXPORT ScriptTexture2D : public ScriptObject<ScriptTexture2D>
+	{
+	public:
+		static void initMetaData();
+
+		void* getNativeRaw() const { return mTexture.get(); }
+
+	private:
+		static void internal_createInstance(MonoObject* instance, CM::UINT32 format, CM::UINT32 width, CM::UINT32 height, bool hasMipmaps, bool gammaCorrection);
+		static void internal_destroyInstance(ScriptTexture2D* nativeInstance);
+
+		static void initRuntimeData();
+
+		ScriptTexture2D(const CM::HTexture& texture);
+
+		CM::HTexture mTexture;
+	};
+}

+ 257 - 0
SBansheeEngine/SBansheeEngine.vcxproj

@@ -0,0 +1,257 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="DebugRelease|Win32">
+      <Configuration>DebugRelease</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="DebugRelease|x64">
+      <Configuration>DebugRelease</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{A4865386-A95B-41BE-B016-4674F6B4272E}</ProjectGuid>
+    <RootNamespace>SBansheeEngine</RootNamespace>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v110</PlatformToolset>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v110</PlatformToolset>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v110</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v110</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugRelease|Win32'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v110</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugRelease|x64'" Label="Configuration">
+    <ConfigurationType>DynamicLibrary</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v110</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>NotSet</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugRelease|Win32'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='DebugRelease|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <OutDir>..\bin\x86\$(Configuration)\</OutDir>
+    <IntDir>.\Intermediate\$(Platform)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugRelease|Win32'">
+    <OutDir>..\bin\x86\$(Configuration)\</OutDir>
+    <IntDir>.\Intermediate\$(Platform)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <OutDir>..\bin\x86\$(Configuration)\</OutDir>
+    <IntDir>.\Intermediate\$(Platform)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <OutDir>..\bin\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>.\Intermediate\$(Platform)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DebugRelease|x64'">
+    <OutDir>..\bin\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>.\Intermediate\$(Platform)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <OutDir>..\bin\$(Platform)\$(Configuration)\</OutDir>
+    <IntDir>.\Intermediate\$(Platform)\$(Configuration)\</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>.\Include;..\CamelotCore\Include;..\CamelotUtility\Include;..\Dependencies\Include;..\BansheeEngine\Include;..\BansheeMono\Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>BS_SCR_BE_EXPORTS;_WINDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>../lib/x86/$(Configuration);../Dependencies/lib/x86/Debug</AdditionalLibraryDirectories>
+      <AdditionalDependencies>CamelotCore.lib;CamelotUtility.lib;BansheeEngine.lib;BansheeMono.lib;mono-2.0.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <ImportLibrary>..\lib\x86\$(Configuration)\$(TargetName).lib</ImportLibrary>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>.\Include;..\CamelotCore\Include;..\CamelotUtility\Include;..\Dependencies\Include;..\BansheeEngine\Include;..\BansheeMono\Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>BS_SCR_BE_EXPORTS;_WINDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalLibraryDirectories>../lib/x64/$(Configuration);../Dependencies/lib/x64/Debug</AdditionalLibraryDirectories>
+      <AdditionalDependencies>CamelotCore.lib;CamelotUtility.lib;BansheeEngine.lib;BansheeMono.lib;mono-2.0.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <ImportLibrary>..\lib\x64\$(Configuration)\$(TargetName).lib</ImportLibrary>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>.\Include;..\CamelotCore\Include;..\CamelotUtility\Include;..\Dependencies\Include;..\BansheeEngine\Include;..\BansheeMono\Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <DebugInformationFormat>None</DebugInformationFormat>
+      <PreprocessorDefinitions>BS_SCR_BE_EXPORTS;_WINDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>false</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalLibraryDirectories>../lib/x86/$(Configuration);../Dependencies/lib/x86/Release</AdditionalLibraryDirectories>
+      <AdditionalDependencies>CamelotCore.lib;CamelotUtility.lib;BansheeEngine.lib;BansheeMono.lib;mono-2.0.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <ImportLibrary>..\lib\x86\$(Configuration)\$(TargetName).lib</ImportLibrary>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>.\Include;..\CamelotCore\Include;..\CamelotUtility\Include;..\Dependencies\Include;..\BansheeEngine\Include;..\BansheeMono\Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <DebugInformationFormat>None</DebugInformationFormat>
+      <PreprocessorDefinitions>BS_SCR_BE_EXPORTS;_WINDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>false</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalLibraryDirectories>../lib/x64/$(Configuration);../Dependencies/lib/x64/Release</AdditionalLibraryDirectories>
+      <AdditionalDependencies>CamelotCore.lib;CamelotUtility.lib;BansheeEngine.lib;BansheeMono.lib;mono-2.0.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <ImportLibrary>..\lib\x64\$(Configuration)\$(TargetName).lib</ImportLibrary>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugRelease|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>.\Include;..\CamelotCore\Include;..\CamelotUtility\Include;..\Dependencies\Include;..\BansheeEngine\Include;..\BansheeMono\Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>BS_SCR_BE_EXPORTS;_WINDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalLibraryDirectories>../lib/x86/$(Configuration);../Dependencies/lib/x86/DebugRelease</AdditionalLibraryDirectories>
+      <AdditionalDependencies>CamelotCore.lib;CamelotUtility.lib;BansheeEngine.lib;BansheeMono.lib;mono-2.0.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <ImportLibrary>..\lib\x86\$(Configuration)\$(TargetName).lib</ImportLibrary>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='DebugRelease|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>MaxSpeed</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <SDLCheck>true</SDLCheck>
+      <AdditionalIncludeDirectories>.\Include;..\CamelotCore\Include;..\CamelotUtility\Include;..\Dependencies\Include;..\BansheeEngine\Include;..\BansheeMono\Include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+      <PreprocessorDefinitions>BS_SCR_BE_EXPORTS;_WINDLL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+    </ClCompile>
+    <Link>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <AdditionalLibraryDirectories>../lib/x64/$(Configuration);../Dependencies/lib/x64/DebugRelease</AdditionalLibraryDirectories>
+      <AdditionalDependencies>CamelotCore.lib;CamelotUtility.lib;BansheeEngine.lib;BansheeMono.lib;mono-2.0.lib;%(AdditionalDependencies)</AdditionalDependencies>
+      <ImportLibrary>..\lib\x64\$(Configuration)\$(TargetName).lib</ImportLibrary>
+    </Link>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClInclude Include="Include\BsScriptEnginePrerequisites.h" />
+    <ClInclude Include="Include\BsScriptFont.h" />
+    <ClInclude Include="Include\BsScriptGUIArea.h" />
+    <ClInclude Include="Include\BsScriptGUIBase.h" />
+    <ClInclude Include="Include\BsScriptGUIElementStateStyle.h" />
+    <ClInclude Include="Include\BsScriptGUIElementStyle.h" />
+    <ClInclude Include="Include\BsScriptGUILabel.h" />
+    <ClInclude Include="Include\BsScriptGUILayout.h" />
+    <ClInclude Include="Include\BsScriptMacros.h" />
+    <ClInclude Include="Include\BsScriptObject.h" />
+    <ClInclude Include="Include\BsScriptSpriteTexture.h" />
+    <ClInclude Include="Include\BsScriptTexture2D.h" />
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="Source\BsScriptEnginePlugin.cpp" />
+    <ClCompile Include="Source\BsScriptFont.cpp" />
+    <ClCompile Include="Source\BsScriptGUIArea.cpp" />
+    <ClCompile Include="Source\BsScriptGUIBase.cpp" />
+    <ClCompile Include="Source\BsScriptGUIElementStateStyle.cpp" />
+    <ClCompile Include="Source\BsScriptGUIElementStyle.cpp" />
+    <ClCompile Include="Source\BsScriptGUILabel.cpp" />
+    <ClCompile Include="Source\BsScriptGUILayout.cpp" />
+    <ClCompile Include="Source\BsScriptSpriteTexture.cpp" />
+    <ClCompile Include="Source\BsScriptTexture2D.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>

+ 87 - 0
SBansheeEngine/SBansheeEngine.vcxproj.filters

@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClInclude Include="Include\BsScriptFont.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\BsScriptGUIArea.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\BsScriptGUIBase.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\BsScriptGUIElementStateStyle.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\BsScriptGUIElementStyle.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\BsScriptGUILabel.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\BsScriptGUILayout.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\BsScriptObject.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\BsScriptSpriteTexture.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\BsScriptTexture2D.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\BsScriptMacros.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+    <ClInclude Include="Include\BsScriptEnginePrerequisites.h">
+      <Filter>Header Files</Filter>
+    </ClInclude>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="Source\BsScriptTexture2D.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="Source\BsScriptFont.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="Source\BsScriptGUIArea.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="Source\BsScriptGUIBase.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="Source\BsScriptGUIElementStateStyle.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="Source\BsScriptGUIElementStyle.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="Source\BsScriptGUILabel.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="Source\BsScriptGUILayout.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="Source\BsScriptSpriteTexture.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="Source\BsScriptEnginePlugin.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>

+ 4 - 0
SBansheeEngine/SBansheeEngine.vcxproj.user

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup />
+</Project>

+ 25 - 0
SBansheeEngine/Source/BsScriptEnginePlugin.cpp

@@ -0,0 +1,25 @@
+#include "BsScriptEnginePrerequisites.h"
+#include "BsMonoManager.h"
+#include "BsMonoAssembly.h"
+
+using namespace CamelotFramework;
+
+namespace BansheeEngine
+{
+	extern "C" BS_SCR_BE_EXPORT const String& getPluginName()
+	{
+		static String pluginName = "SBansheeEngine";
+		return pluginName;
+	}
+
+	extern "C" BS_SCR_BE_EXPORT void* loadPlugin()
+	{
+		const CM::String ENGINE_ASSEMBLY_PATH = "..\\..\\Assemblies\\MBansheeEngine.dll";
+		const CM::String ENGINE_ASSEMBLY_NAME = "MBansheeEngine";
+		const CM::String ASSEMBLY_ENTRY_POINT = "Program::Main";
+
+		MonoManager::instance().loadAssembly(ENGINE_ASSEMBLY_PATH, ENGINE_ASSEMBLY_NAME, ASSEMBLY_ENTRY_POINT);
+
+		return nullptr;
+	}
+}

+ 48 - 0
SBansheeEngine/Source/BsScriptFont.cpp

@@ -0,0 +1,48 @@
+#include "BsScriptFont.h"
+#include "BsScriptMeta.h"
+#include "BsMonoField.h"
+#include "BsMonoClass.h"
+#include "BsMonoManager.h"
+#include "BsSpriteTexture.h"
+
+using namespace CamelotFramework;
+
+namespace BansheeEngine
+{
+	ScriptFont::ScriptFont(const CM::HFont& font)
+		:mFont(font)
+	{
+
+	}
+
+	void ScriptFont::initMetaData()
+	{
+		metaData = ScriptMeta("MBansheeEngine", "BansheeEngine", "Font", &ScriptFont::initRuntimeData);
+
+		MonoManager::registerScriptType(&metaData);
+	}
+
+	void* ScriptFont::getNativeRaw() const
+	{
+		return (void*)mFont.get();
+	}
+
+	void ScriptFont::initRuntimeData()
+	{
+		metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptFont::internal_destroyInstance);
+	}
+
+	void ScriptFont::internal_createInstanceExternal(MonoObject* instance, const CM::HFont& font)
+	{
+		ScriptFont* nativeInstance = new (cm_alloc<ScriptFont>()) ScriptFont(font);
+		nativeInstance->createInstance(instance);
+
+		metaData.thisPtrField->setValue(instance, nativeInstance);
+	}
+
+	void ScriptFont::internal_destroyInstance(ScriptFont* nativeInstance)
+	{
+		nativeInstance->destroyInstance();
+		cm_delete(nativeInstance);
+	}
+}

+ 94 - 0
SBansheeEngine/Source/BsScriptGUIArea.cpp

@@ -0,0 +1,94 @@
+#include "BsScriptGUIArea.h"
+#include "BsScriptMeta.h"
+#include "BsMonoField.h"
+#include "BsMonoClass.h"
+#include "BsMonoManager.h"
+#include "BsScriptGUIArea.h"
+#include "BsGUIArea.h"
+#include "BsGUILayout.h"
+#include "BsScriptGUIBase.h"
+
+using namespace CamelotFramework;
+
+namespace BansheeEngine
+{
+	ScriptGUIArea::ScriptGUIArea(GUIArea* area, ScriptGUIBase* parentGUI)
+		:mArea(area), mParentGUI(parentGUI)
+	{
+
+	}
+
+	void ScriptGUIArea::initMetaData()
+	{
+		metaData = ScriptMeta("MBansheeEngine", "BansheeEngine", "GUIBase", &ScriptGUIArea::initRuntimeData);
+
+		MonoManager::registerScriptType(&metaData);
+	}
+
+	void ScriptGUIArea::initRuntimeData()
+	{
+		metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptGUIArea::internal_createInstance);
+		metaData.scriptClass->addInternalCall("Internal_CreateInstanceResizableX", &ScriptGUIArea::internal_createInstanceResizeableX);
+		metaData.scriptClass->addInternalCall("Internal_CreateInstanceResizableY", &ScriptGUIArea::internal_createInstanceResizeableY);
+		metaData.scriptClass->addInternalCall("Internal_CreateInstanceResizableXY", &ScriptGUIArea::internal_createInstanceResizeableXY);
+		metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptGUIArea::internal_destroyInstance);
+	}
+
+	GUIWidget& ScriptGUIArea::getParentWidget() const 
+	{ 
+		return mParentGUI->getWidget(); 
+	}
+
+	void ScriptGUIArea::internal_createInstance(MonoObject* instance, MonoObject* parentGUI, CM::INT32 x, CM::INT32 y, CM::UINT32 width, CM::UINT32 height, CM::UINT16 depth)
+	{
+		ScriptGUIBase* scriptGUIBase = ScriptGUIBase::toNative(parentGUI);
+		GUIArea* nativeArea = GUIArea::create(scriptGUIBase->getWidget(), x, y, width, height, depth);
+
+		ScriptGUIArea* nativeInstance = new (cm_alloc<ScriptGUIArea>()) ScriptGUIArea(nativeArea, scriptGUIBase);
+		nativeInstance->createInstance(instance);
+
+		metaData.thisPtrField->setValue(instance, nativeInstance);
+	}
+
+	void ScriptGUIArea::internal_createInstanceResizeableX(MonoObject* instance, MonoObject* parentGUI, CM::UINT32 offsetLeft, CM::UINT32 offsetRight, 
+		CM::UINT32 offsetTop, CM::UINT32 height, CM::UINT16 depth)
+	{
+		ScriptGUIBase* scriptGUIBase = ScriptGUIBase::toNative(parentGUI);
+		GUIArea* nativeArea = GUIArea::createStretchedX(scriptGUIBase->getWidget(), offsetLeft, offsetRight, offsetTop, height, depth);
+		
+		ScriptGUIArea* nativeInstance = new (cm_alloc<ScriptGUIArea>()) ScriptGUIArea(nativeArea, scriptGUIBase);
+		nativeInstance->createInstance(instance);
+
+		metaData.thisPtrField->setValue(instance, nativeInstance);
+	}
+
+	void ScriptGUIArea::internal_createInstanceResizeableY(MonoObject* instance, MonoObject* parentGUI, CM::UINT32 offsetTop, 
+		CM::UINT32 offsetBottom, CM::UINT32 offsetLeft, CM::UINT32 width, CM::UINT16 depth)
+	{
+		ScriptGUIBase* scriptGUIBase = ScriptGUIBase::toNative(parentGUI);
+		GUIArea* nativeArea = GUIArea::createStretchedY(scriptGUIBase->getWidget(), offsetTop, offsetBottom, offsetLeft, width, depth);
+
+		ScriptGUIArea* nativeInstance = new (cm_alloc<ScriptGUIArea>()) ScriptGUIArea(nativeArea, scriptGUIBase);
+		nativeInstance->createInstance(instance);
+
+		metaData.thisPtrField->setValue(instance, nativeInstance);
+	}
+
+	void ScriptGUIArea::internal_createInstanceResizeableXY(MonoObject* instance, MonoObject* parentGUI, CM::UINT32 offsetLeft, 
+		CM::UINT32 offsetRight, CM::UINT32 offsetTop, CM::UINT32 offsetBottom, CM::UINT16 depth)
+	{
+		ScriptGUIBase* scriptGUIBase = ScriptGUIBase::toNative(parentGUI);
+		GUIArea* nativeArea = GUIArea::createStretchedXY(scriptGUIBase->getWidget(), offsetLeft, offsetRight, offsetTop, offsetBottom, depth);
+
+		ScriptGUIArea* nativeInstance = new (cm_alloc<ScriptGUIArea>()) ScriptGUIArea(nativeArea, scriptGUIBase);
+		nativeInstance->createInstance(instance);
+
+		metaData.thisPtrField->setValue(instance, nativeInstance);
+	}
+
+	void ScriptGUIArea::internal_destroyInstance(ScriptGUIArea* nativeInstance)
+	{
+		nativeInstance->destroyInstance();
+		cm_delete(nativeInstance);
+	}
+}

+ 48 - 0
SBansheeEngine/Source/BsScriptGUIBase.cpp

@@ -0,0 +1,48 @@
+#include "BsScriptGUIBase.h"
+#include "BsScriptMeta.h"
+#include "BsMonoField.h"
+#include "BsMonoClass.h"
+#include "BsMonoManager.h"
+#include "BsScriptGUIArea.h"
+#include "BsGUIArea.h"
+#include "BsGUILayout.h"
+
+using namespace CamelotFramework;
+
+namespace BansheeEngine
+{
+	ScriptGUIBase::ScriptGUIBase(GUIWidget& widget)
+		:mWidget(widget)
+	{
+
+	}
+
+	void ScriptGUIBase::initMetaData()
+	{
+		metaData = ScriptMeta("MBansheeEngine", "BansheeEngine", "GUIBase", &ScriptGUIBase::initRuntimeData);
+
+		MonoManager::registerScriptType(&metaData);
+	}
+	void ScriptGUIBase::initRuntimeData()
+	{
+		metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptGUIBase::internal_createInstance);
+		metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptGUIBase::internal_destroyInstance);
+	}
+
+	void ScriptGUIBase::internal_createInstance(MonoObject* instance)
+	{
+		//ScriptGUIArea* scriptArea = ScriptGUIArea::toNative(parentArea);
+		//GUIArea* nativeArea = scriptArea->getInternalValue();
+
+		//ScriptGUILayout* nativeInstance = new (cm_alloc<ScriptGUILayout>()) ScriptGUILayout(nativeArea->getLayout(), scriptArea);
+		//nativeInstance->createInstance(instance);
+
+		//metaData.thisPtrField->setValue(instance, nativeInstance);
+	}
+
+	void ScriptGUIBase::internal_destroyInstance(ScriptGUIBase* nativeInstance)
+	{
+		nativeInstance->destroyInstance();
+		cm_delete(nativeInstance);
+	}
+}

+ 60 - 0
SBansheeEngine/Source/BsScriptGUIElementStateStyle.cpp

@@ -0,0 +1,60 @@
+#include "BsScriptGUIElementStateStyle.h"
+#include "BsScriptMeta.h"
+#include "BsMonoField.h"
+#include "BsMonoClass.h"
+#include "BsMonoManager.h"
+#include "BsScriptSpriteTexture.h"
+#include "CmException.h"
+#include "BsGUIElementStyle.h"
+
+using namespace CamelotFramework;
+
+namespace BansheeEngine
+{
+	ScriptGUIElementStateStyle::ScriptGUIElementStateStyle()
+		:mElementStateStyle(cm_new<GUIElementStyle::GUIElementStateStyle>()), mSpriteTexture(nullptr), mOwnsStyle(true)
+	{
+
+	}
+
+	ScriptGUIElementStateStyle::ScriptGUIElementStateStyle(GUIElementStyle::GUIElementStateStyle* externalStyle)
+		: mElementStateStyle(externalStyle), mSpriteTexture(nullptr), mOwnsStyle(false)
+	{
+
+	}
+
+	ScriptGUIElementStateStyle::~ScriptGUIElementStateStyle()
+	{
+		if(mOwnsStyle)
+			cm_delete(mElementStateStyle);
+	}
+
+	void ScriptGUIElementStateStyle::initMetaData()
+	{
+		metaData = ScriptMeta("MBansheeEngine", "BansheeEngine", "GUIElementStateStyle", &ScriptGUIElementStateStyle::initRuntimeData);
+
+		MonoManager::registerScriptType(&metaData);
+	}
+
+	void ScriptGUIElementStateStyle::internal_createInstance(MonoObject* instance)
+	{
+		ScriptGUIElementStateStyle* nativeInstance = new (cm_alloc<ScriptGUIElementStateStyle>()) ScriptGUIElementStateStyle();
+		nativeInstance->createInstance(instance);
+
+		metaData.thisPtrField->setValue(instance, nativeInstance);
+	}
+
+	void ScriptGUIElementStateStyle::internal_createInstanceExternal(MonoObject* instance, GUIElementStyle::GUIElementStateStyle* externalStyle)
+	{
+		ScriptGUIElementStateStyle* nativeInstance = new (cm_alloc<ScriptGUIElementStateStyle>()) ScriptGUIElementStateStyle(externalStyle);
+		nativeInstance->createInstance(instance);
+
+		metaData.thisPtrField->setValue(instance, nativeInstance);
+	}
+
+	void ScriptGUIElementStateStyle::internal_destroyInstance(ScriptGUIElementStateStyle* nativeInstance)
+	{
+		nativeInstance->destroyInstance();
+		cm_delete(nativeInstance);
+	}
+}

+ 71 - 0
SBansheeEngine/Source/BsScriptGUIElementStyle.cpp

@@ -0,0 +1,71 @@
+#include "BsScriptGUIElementStyle.h"
+#include "BsScriptMeta.h"
+#include "BsMonoField.h"
+#include "BsMonoClass.h"
+#include "BsMonoManager.h"
+#include "BsScriptFont.h"
+#include "CmException.h"
+#include "BsGUIElementStyle.h"
+#include "BsScriptGUIElementStateStyle.h"
+
+using namespace CamelotFramework;
+
+namespace BansheeEngine
+{
+	ScriptGUIElementStyle::ScriptGUIElementStyle(const String& name)
+		:mName(name), mElementStyle(cm_new<GUIElementStyle>()), mFont(nullptr), mOwnsStyle(true), mNormal(nullptr), mHover(nullptr),
+		mActive(nullptr), mFocused(nullptr), mNormalOn(nullptr), mHoverOn(nullptr), mActiveOn(nullptr), mFocusedOn(nullptr)
+	{
+
+	}
+
+	ScriptGUIElementStyle::ScriptGUIElementStyle(const String& name, GUIElementStyle* externalStyle)
+		:mName(name), mElementStyle(externalStyle), mFont(nullptr), mOwnsStyle(false), mNormal(nullptr), mHover(nullptr),
+		mActive(nullptr), mFocused(nullptr), mNormalOn(nullptr), mHoverOn(nullptr), mActiveOn(nullptr), mFocusedOn(nullptr)
+	{
+
+	}
+
+	ScriptGUIElementStyle::~ScriptGUIElementStyle()
+	{
+		if(mOwnsStyle)
+			cm_delete(mElementStyle);
+	}
+
+	void ScriptGUIElementStyle::initMetaData()
+	{
+		metaData = ScriptMeta("MBansheeEngine", "BansheeEngine", "GUIElementStyle", &ScriptGUIElementStyle::initRuntimeData);
+
+		MonoManager::registerScriptType(&metaData);
+	}
+
+	void ScriptGUIElementStyle::internal_createInstance(MonoObject* instance, MonoString* name)
+	{
+		char* nativeName = mono_string_to_utf8(name);
+		String styleName(nativeName);
+		free(nativeName);
+
+		ScriptGUIElementStyle* nativeInstance = new (cm_alloc<ScriptGUIElementStyle>()) ScriptGUIElementStyle(styleName);
+		nativeInstance->createInstance(instance);
+
+		metaData.thisPtrField->setValue(instance, nativeInstance);
+	}
+
+	void ScriptGUIElementStyle::internal_createInstanceExternal(MonoObject* instance, MonoString* name, GUIElementStyle* externalStyle)
+	{
+		char* nativeName = mono_string_to_utf8(name);
+		String styleName(nativeName);
+		free(nativeName);
+
+		ScriptGUIElementStyle* nativeInstance = new (cm_alloc<ScriptGUIElementStyle>()) ScriptGUIElementStyle(styleName, externalStyle);
+		nativeInstance->createInstance(instance);
+
+		metaData.thisPtrField->setValue(instance, nativeInstance);
+	}
+
+	void ScriptGUIElementStyle::internal_destroyInstance(ScriptGUIElementStyle* nativeInstance)
+	{
+		nativeInstance->destroyInstance();
+		cm_delete(nativeInstance);
+	}
+}

+ 67 - 0
SBansheeEngine/Source/BsScriptGUILabel.cpp

@@ -0,0 +1,67 @@
+#include "BsScriptGUILabel.h"
+#include "BsScriptMeta.h"
+#include "BsMonoField.h"
+#include "BsMonoClass.h"
+#include "BsMonoManager.h"
+#include "BsSpriteTexture.h"
+#include "BsMonoUtil.h"
+#include "BsGUILayout.h"
+#include "BsGUILabel.h"
+#include "BsGUIOptions.h"
+#include "BsScriptGUIElementStyle.h"
+#include "BsScriptGUILayout.h"
+#include "BsScriptGUIArea.h"
+
+using namespace CamelotFramework;
+
+namespace BansheeEngine
+{
+	ScriptGUILabel::ScriptGUILabel(GUILabel* label)
+		:mLabel(label)
+	{
+
+	}
+
+	void ScriptGUILabel::initMetaData()
+	{
+		metaData = ScriptMeta("MBansheeEngine", "BansheeEngine", "GUILabel", &ScriptGUILabel::initRuntimeData);
+
+		MonoManager::registerScriptType(&metaData);
+	}
+	void ScriptGUILabel::initRuntimeData()
+	{
+		metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptGUILabel::internal_createInstance);
+		metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptGUILabel::internal_destroyInstance);
+	}
+
+	void ScriptGUILabel::internal_createInstance(MonoObject* instance, MonoObject* parentLayout, MonoString* label, MonoObject* style, MonoArray* guiOptions)
+	{
+		ScriptGUILayout* scriptLayout = ScriptGUILayout::toNative(parentLayout);
+		HString nativeLabel(ScriptUtil::monoToWString(label));
+		GUIOptions options;
+
+		UINT32 arrayLen = (UINT32)mono_array_length(guiOptions);
+		for(UINT32 i = 0; i < arrayLen; i++)
+			options.addOption(mono_array_get(guiOptions, GUIOption, i));
+
+		GUIElementStyle* elemStyle = nullptr;
+		
+		if(style != nullptr)
+			elemStyle = ScriptGUIElementStyle::toNative(style)->getInternalValue();
+
+		GUILabel* guiLabel = GUILabel::create(scriptLayout->getParentArea()->getParentWidget(), nativeLabel, options, elemStyle); // TODO - Use proper HString
+		GUILayout* nativeLayout = scriptLayout->getInternalValue();
+		nativeLayout->addElement(guiLabel);
+
+		ScriptGUILabel* nativeInstance = new (cm_alloc<ScriptGUILabel>()) ScriptGUILabel(guiLabel);
+		nativeInstance->createInstance(instance);
+
+		metaData.thisPtrField->setValue(instance, nativeInstance);
+	}
+
+	void ScriptGUILabel::internal_destroyInstance(ScriptGUILabel* nativeInstance)
+	{
+		nativeInstance->destroyInstance();
+		cm_delete(nativeInstance);
+	}
+}

+ 74 - 0
SBansheeEngine/Source/BsScriptGUILayout.cpp

@@ -0,0 +1,74 @@
+#include "BsScriptGUILayout.h"
+#include "BsScriptMeta.h"
+#include "BsMonoField.h"
+#include "BsMonoClass.h"
+#include "BsMonoManager.h"
+#include "BsScriptGUIArea.h"
+#include "BsGUIArea.h"
+#include "BsGUILayout.h"
+
+using namespace CamelotFramework;
+
+namespace BansheeEngine
+{
+	ScriptGUILayout::ScriptGUILayout(GUILayout* layout, ScriptGUIArea* parentArea)
+		:mLayout(layout), mParentArea(parentArea)
+	{
+
+	}
+
+	void ScriptGUILayout::initMetaData()
+	{
+		metaData = ScriptMeta("MBansheeEngine", "BansheeEngine", "GUILayout", &ScriptGUILayout::initRuntimeData);
+
+		MonoManager::registerScriptType(&metaData);
+	}
+	void ScriptGUILayout::initRuntimeData()
+	{
+		metaData.scriptClass->addInternalCall("Internal_CreateInstanceXFromArea", &ScriptGUILayout::internal_createInstanceXFromArea);
+		metaData.scriptClass->addInternalCall("Internal_CreateInstanceXFromLayout", &ScriptGUILayout::internal_createInstanceXFromLayout);
+		metaData.scriptClass->addInternalCall("Internal_CreateInstanceYFromLayout", &ScriptGUILayout::internal_createInstanceYFromLayout);
+		metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptGUILayout::internal_destroyInstance);
+	}
+
+	void ScriptGUILayout::internal_createInstanceXFromArea(MonoObject* instance, MonoObject* parentArea)
+	{
+		ScriptGUIArea* scriptArea = ScriptGUIArea::toNative(parentArea);
+		GUIArea* nativeArea = scriptArea->getInternalValue();
+
+		ScriptGUILayout* nativeInstance = new (cm_alloc<ScriptGUILayout>()) ScriptGUILayout(&nativeArea->getLayout(), scriptArea);
+		nativeInstance->createInstance(instance);
+
+		metaData.thisPtrField->setValue(instance, nativeInstance);
+	}
+
+	void ScriptGUILayout::internal_createInstanceXFromLayout(MonoObject* instance, MonoObject* parentLayout)
+	{
+		ScriptGUILayout* scriptLayout = ScriptGUILayout::toNative(parentLayout);
+		GUILayout* nativeLayout = scriptLayout->getInternalValue();
+		GUILayout& layout = nativeLayout->addLayoutX();
+
+		ScriptGUILayout* nativeInstance = new (cm_alloc<ScriptGUILayout>()) ScriptGUILayout(&layout, scriptLayout->getParentArea());
+		nativeInstance->createInstance(instance);
+
+		metaData.thisPtrField->setValue(instance, nativeInstance);
+	}
+
+	void ScriptGUILayout::internal_createInstanceYFromLayout(MonoObject* instance, MonoObject* parentLayout)
+	{
+		ScriptGUILayout* scriptLayout = ScriptGUILayout::toNative(parentLayout);
+		GUILayout* nativeLayout = scriptLayout->getInternalValue();
+		GUILayout& layout = nativeLayout->addLayoutY();
+
+		ScriptGUILayout* nativeInstance = new (cm_alloc<ScriptGUILayout>()) ScriptGUILayout(&layout, scriptLayout->getParentArea());
+		nativeInstance->createInstance(instance);
+
+		metaData.thisPtrField->setValue(instance, nativeInstance);
+	}
+
+	void ScriptGUILayout::internal_destroyInstance(ScriptGUILayout* nativeInstance)
+	{
+		nativeInstance->destroyInstance();
+		cm_delete(nativeInstance);
+	}
+}

+ 44 - 0
SBansheeEngine/Source/BsScriptSpriteTexture.cpp

@@ -0,0 +1,44 @@
+#include "BsScriptSpriteTexture.h"
+#include "BsScriptMeta.h"
+#include "BsMonoField.h"
+#include "BsMonoClass.h"
+#include "BsMonoManager.h"
+#include "BsSpriteTexture.h"
+
+using namespace CamelotFramework;
+
+namespace BansheeEngine
+{
+	ScriptSpriteTexture::ScriptSpriteTexture(const SpriteTexturePtr& texture)
+		:mTexture(texture)
+	{
+
+	}
+
+	void ScriptSpriteTexture::initMetaData()
+	{
+		metaData = ScriptMeta("MBansheeEngine", "BansheeEngine", "SpriteTexture", &ScriptSpriteTexture::initRuntimeData);
+
+		MonoManager::registerScriptType(&metaData);
+	}
+
+	void ScriptSpriteTexture::initRuntimeData()
+	{
+		metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptSpriteTexture::internal_createInstance);
+		metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptSpriteTexture::internal_destroyInstance);
+	}
+
+	void ScriptSpriteTexture::internal_createInstance(MonoObject* instance)
+	{
+		ScriptSpriteTexture* nativeInstance = new (cm_alloc<ScriptSpriteTexture>()) ScriptSpriteTexture(nullptr); // TODO - DUMMY CODE!
+		nativeInstance->createInstance(instance);
+
+		metaData.thisPtrField->setValue(instance, nativeInstance);
+	}
+
+	void ScriptSpriteTexture::internal_destroyInstance(ScriptSpriteTexture* nativeInstance)
+	{
+		nativeInstance->destroyInstance();
+		cm_delete(nativeInstance);
+	}
+}

+ 65 - 0
SBansheeEngine/Source/BsScriptTexture2D.cpp

@@ -0,0 +1,65 @@
+#include "BsScriptTexture2D.h"
+#include "BsScriptMeta.h"
+#include "BsMonoField.h"
+#include "BsMonoClass.h"
+#include "BsMonoManager.h"
+#include "CmTexture.h"
+#include "CmPixelUtil.h"
+#include "CmException.h"
+
+using namespace CamelotFramework;
+
+namespace BansheeEngine
+{
+	ScriptTexture2D::ScriptTexture2D(const CM::HTexture& texture)
+		:mTexture(texture)
+	{
+
+	}
+
+	void ScriptTexture2D::initMetaData()
+	{
+		metaData = ScriptMeta("MBansheeEngine", "BansheeEngine", "Texture2D", &ScriptTexture2D::initRuntimeData);
+
+		MonoManager::registerScriptType(&metaData);
+	}
+
+	void ScriptTexture2D::initRuntimeData()
+	{
+		metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptTexture2D::internal_createInstance);
+		metaData.scriptClass->addInternalCall("Internal_DestroyInstance", &ScriptTexture2D::internal_destroyInstance);
+	}
+
+	void ScriptTexture2D::internal_createInstance(MonoObject* instance, CM::UINT32 format, CM::UINT32 width, CM::UINT32 height, bool hasMipmaps, bool gammaCorrection)
+	{
+		PixelFormat texFormat = PF_R8G8B8;
+		switch(format)
+		{
+		case 0: // RGB
+			texFormat = PF_R8G8B8;
+			break;
+		case 1: // RGBA
+			texFormat = PF_R8G8B8A8;
+			break;
+		default:
+			CM_EXCEPT(InvalidParametersException, "Unsupported texture format");
+		}
+
+		int numMips = 0;
+		if(hasMipmaps)
+			numMips = PixelUtil::getMaxMipmaps(width, height, 1, texFormat);
+
+		HTexture texture = Texture::create(TEX_TYPE_2D, width, height, numMips, texFormat, TU_STATIC, gammaCorrection);
+
+		ScriptTexture2D* nativeInstance = new (cm_alloc<ScriptTexture2D>()) ScriptTexture2D(texture);
+		nativeInstance->createInstance(instance);
+
+		metaData.thisPtrField->setValue(instance, nativeInstance);
+	}
+
+	void ScriptTexture2D::internal_destroyInstance(ScriptTexture2D* nativeInstance)
+	{
+		nativeInstance->destroyInstance();
+		cm_delete(nativeInstance);
+	}
+}

+ 2 - 0
TODO.txt

@@ -129,6 +129,8 @@ Low priority TODO
  - Texture "ScaleToFit" will cause the texture to repeat instead of clipping the image. e.g. a 50x20 texture placed on an 50x100 area will repeat 5x
  - Texture "ScaleToFit" will cause the texture to repeat instead of clipping the image. e.g. a 50x20 texture placed on an 50x100 area will repeat 5x
  - When writing to mesh vertex buffer in Mesh::writeSubresource that requires a color flip I need to create a temporary copy of the 
  - When writing to mesh vertex buffer in Mesh::writeSubresource that requires a color flip I need to create a temporary copy of the 
     entire buffer. It would be better to handle this differently. Same thing happens in MeshHeap
     entire buffer. It would be better to handle this differently. Same thing happens in MeshHeap
+ - OpenGL also supports texture views using glTextureView but so far I only use them in DX11
+ - I don't have a way to set Texture filtering or wrap modes, default ones are always set on initialization
 ----------------------------------------------------------------------------------------------
 ----------------------------------------------------------------------------------------------
 Optional:
 Optional:
  - Need better handling for shader techniques. Some Materials are able to run on all renderers yet I can only specify one. This is problematic
  - Need better handling for shader techniques. Some Materials are able to run on all renderers yet I can only specify one. This is problematic