소스 검색

Moved all Script stuff to separate libraries

Marko Pintera 12 년 전
부모
커밋
c12b03a92f
58개의 변경된 파일2798개의 추가작업 그리고 470개의 파일을 삭제
  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
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MBansheeEditor", "MBansheeEditor\MBansheeEditor.csproj", "{ABC62E37-342E-4345-A374-E37CA06C036E}"
 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
 	GlobalSection(SubversionScc) = preSolution
 		Svn-Managed = True
 		Manager = AnkhSVN - Subversion Support for Visual Studio
 	EndGlobalSection
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
-		Debug|Any CPU = Debug|Any CPU
-		Debug|Mixed Platforms = Debug|Mixed Platforms
 		Debug|Win32 = Debug|Win32
 		Debug|x64 = Debug|x64
-		DebugRelease|Any CPU = DebugRelease|Any CPU
-		DebugRelease|Mixed Platforms = DebugRelease|Mixed Platforms
 		DebugRelease|Win32 = DebugRelease|Win32
 		DebugRelease|x64 = DebugRelease|x64
-		Release|Any CPU = Release|Any CPU
-		Release|Mixed Platforms = Release|Mixed Platforms
 		Release|Win32 = Release|Win32
 		Release|x64 = Release|x64
 	EndGlobalSection
 	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.Build.0 = Debug|Win32
 		{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}.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.Build.0 = DebugRelease|Win32
 		{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}.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.Build.0 = Release|Win32
 		{9B21D41C-516B-43BF-9B10-E99B599C7589}.Release|x64.ActiveCfg = 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.Build.0 = Debug|Win32
 		{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}.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.Build.0 = DebugRelease|Win32
 		{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}.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.Build.0 = Release|Win32
 		{CC7F9445-71C9-4559-9976-FF0A64DCB582}.Release|x64.ActiveCfg = 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.Build.0 = Debug|Win32
 		{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}.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.Build.0 = DebugRelease|Win32
 		{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}.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.Build.0 = Release|Win32
 		{796B6DFF-BA04-42B7-A43A-2B14D707A33A}.Release|x64.ActiveCfg = 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.Build.0 = Debug|Win32
 		{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}.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.Build.0 = DebugRelease|Win32
 		{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}.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.Build.0 = Release|Win32
 		{67137A0D-7A67-4D0C-9FBF-AF904FABEF05}.Release|x64.ActiveCfg = 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.Build.0 = Debug|Win32
 		{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}.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.Build.0 = DebugRelease|Win32
 		{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}.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.Build.0 = Release|Win32
 		{F58FF869-2EA6-4FFF-AB84-328C531BA9D9}.Release|x64.ActiveCfg = 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.Build.0 = Debug|Win32
 		{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}.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.Build.0 = DebugRelease|Win32
 		{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}.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.Build.0 = Release|Win32
 		{122B7A22-0C62-4B35-B661-EBF3F394EA79}.Release|x64.ActiveCfg = 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.Build.0 = Debug|Win32
 		{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}.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.Build.0 = DebugRelease|Win32
 		{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}.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.Build.0 = Release|Win32
 		{7F449698-73DF-4203-9F31-0877DBF01695}.Release|x64.ActiveCfg = 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.Build.0 = Debug|Win32
 		{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}.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.Build.0 = DebugRelease|Win32
 		{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}.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.Build.0 = Release|Win32
 		{BFEBBAF8-8A84-4899-8899-D0D7196AF9A1}.Release|x64.ActiveCfg = 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.Build.0 = Debug|Win32
 		{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}.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.Build.0 = DebugRelease|Win32
 		{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}.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.Build.0 = Release|Win32
 		{1437BB4E-DDB3-4307-AA41-8C035DA3014B}.Release|x64.ActiveCfg = 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.Build.0 = Debug|Win32
 		{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.Build.0 = DebugRelease|Win32
 		{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.Build.0 = Release|Win32
 		{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.Build.0 = Debug|Win32
 		{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}.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.Build.0 = DebugRelease|Win32
 		{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}.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.Build.0 = Release|Win32
 		{AB6C9284-D1CB-4AAD-BA4B-8A9E81AD1A73}.Release|x64.ActiveCfg = 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.Build.0 = Debug|Win32
 		{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}.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.Build.0 = DebugRelease|Win32
 		{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}.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.Build.0 = Release|Win32
 		{07B0C186-5173-46F2-BE26-7E4148BD0CCA}.Release|x64.ActiveCfg = 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.Build.0 = Debug|Win32
 		{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}.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.Build.0 = DebugRelease|Win32
 		{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}.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.Build.0 = Release|Win32
 		{08975177-4A13-4EE7-BB21-3BB92FB3F3CC}.Release|x64.ActiveCfg = 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.Build.0 = Debug|Win32
 		{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}.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.Build.0 = DebugRelease|Win32
 		{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}.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.Build.0 = Release|Win32
 		{41CC18CE-139E-45A5-A9AA-336CBA2E1521}.Release|x64.ActiveCfg = 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.Build.0 = 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.Build.0 = 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.Build.0 = 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.Build.0 = 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
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

+ 6 - 45
BansheeEngine/BansheeEngine.vcxproj

@@ -127,7 +127,7 @@
     <Link>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <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>
     </Link>
   </ItemDefinitionGroup>
@@ -141,7 +141,7 @@
     <Link>
       <GenerateDebugInformation>true</GenerateDebugInformation>
       <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>
     </Link>
   </ItemDefinitionGroup>
@@ -161,7 +161,7 @@
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
       <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>
     </Link>
   </ItemDefinitionGroup>
@@ -181,7 +181,7 @@
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
       <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>
     </Link>
   </ItemDefinitionGroup>
@@ -201,7 +201,7 @@
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
       <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>
     </Link>
   </ItemDefinitionGroup>
@@ -221,26 +221,16 @@
       <EnableCOMDATFolding>true</EnableCOMDATFolding>
       <OptimizeReferences>true</OptimizeReferences>
       <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>
     </Link>
   </ItemDefinitionGroup>
   <ItemGroup>
     <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\BsDrawHelperTemplate.h" />
     <ClInclude Include="Include\BsDragAndDropManager.h" />
     <ClInclude Include="Include\BsDrawHelper2D.h" />
-    <ClInclude Include="Include\BsEngineAssembly.h" />
     <ClInclude Include="Include\BsEngineGUI.h" />
     <ClInclude Include="Include\BsGUIArea.h" />
     <ClInclude Include="Include\BsGUIButton.h" />
@@ -289,17 +279,7 @@
     <ClInclude Include="Include\BsProfilerOverlay.h" />
     <ClInclude Include="Include\BsSceneManager.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\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\BsSpriteTexture.h" />
     <ClInclude Include="Include\BsTextSprite.h" />
@@ -314,10 +294,8 @@
     <ClInclude Include="Include\BsD3D9BuiltinMaterialFactory.h" />
     <ClInclude Include="Include\BsGLBuiltinMaterialFactory.h" />
     <ClInclude Include="Include\BsUpdateCallback.h" />
-    <ClCompile Include="Source\BsEngineAssembly.cpp" />
     <ClCompile Include="Source\BsGUIButtonBase.cpp" />
     <ClCompile Include="Source\BsGUIContextMenu.cpp" />
-    <ClInclude Include="Include\BsScriptMeta.h" />
   </ItemGroup>
   <ItemGroup>
     <ClCompile Include="Source\BsApplication.cpp" />
@@ -362,24 +340,7 @@
     <ClCompile Include="Source\BsProfilerOverlay.cpp" />
     <ClCompile Include="Source\BsSceneManager.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\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\BsSpriteTexture.cpp" />
     <ClCompile Include="Source\BsTextSprite.cpp" />

+ 0 - 117
BansheeEngine/BansheeEngine.vcxproj.filters

@@ -243,72 +243,9 @@
     <ClInclude Include="Include\BsDebugDrawMaterialInfo.h">
       <Filter>Header Files</Filter>
     </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">
       <Filter>Header Files\Script</Filter>
     </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>
     <ClCompile Include="Source\BsGUIElement.cpp">
@@ -488,62 +425,8 @@
     <ClCompile Include="Source\BsGUIRenderTexture.cpp">
       <Filter>Source Files\GUI</Filter>
     </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">
       <Filter>Source Files\Script</Filter>
     </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>
 </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 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
 	class TextSprite;
 	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
 
-#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 "CmApplication.h"
 #include "CmRenderWindow.h"
-#include "BsScriptManager.h"
-#include "BsEngineAssembly.h"
 
 // DEBUG ONLY
 #include "DbgEditorWidget1.h"
@@ -214,8 +212,6 @@ namespace BansheeEditor
 		/************************************************************************/
 
 		EditorWindowManager::startUp(cm_new<EditorWindowManager>());
-		ScriptManager::startUp(cm_new<ScriptManager>());
-		EngineAssembly::startUp(cm_new<EngineAssembly>());
 		MainEditorWindow* mainWindow = MainEditorWindow::create(gApplication().getPrimaryWindow());
 
 		gApplication().mainLoopCallback.connect(boost::bind(&EditorApplication::update, this));
@@ -225,8 +221,6 @@ namespace BansheeEditor
 
 		gBansheeApp().runMainLoop();
 
-		EngineAssembly::shutDown();
-		ScriptManager::shutDown();
 		EditorWindowManager::shutDown();
 
 

+ 68 - 68
CamelotClient/Source/BsScriptModalWindow.cpp

@@ -1,69 +1,69 @@
 #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
      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.
+  - (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:
  - 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
  - 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
+ - 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:
  - Need better handling for shader techniques. Some Materials are able to run on all renderers yet I can only specify one. This is problematic