diff --git a/Extras/CSharpWrapper/AssemblyInfo.cpp b/Extras/CSharpWrapper/AssemblyInfo.cpp
new file mode 100644
index 000000000..188c8dcb2
--- /dev/null
+++ b/Extras/CSharpWrapper/AssemblyInfo.cpp
@@ -0,0 +1,42 @@
+//#include "stdafx.h"
+
+using namespace System;
+using namespace System::Reflection;
+using namespace System::Runtime::CompilerServices;
+using namespace System::Runtime::InteropServices;
+using namespace System::Security::Permissions;
+
+//
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+//
+[assembly:AssemblyTitleAttribute("Scea.BulletPhysics")];
+[assembly:AssemblyDescriptionAttribute("managed bullet physics engine C-API library ")];
+[assembly:AssemblyConfigurationAttribute("")];
+[assembly:AssemblyCompanyAttribute("")];
+[assembly:AssemblyProductAttribute("Scea.BulletPhysics")];
+[assembly:AssemblyCopyrightAttribute("Copyright (c) 2008")];
+[assembly:AssemblyTrademarkAttribute("")];
+[assembly:AssemblyCultureAttribute("")];
+
+//
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the value or you can default the Revision and Build Numbers
+// by using the '*' as shown below:
+
+[assembly:AssemblyVersionAttribute("1.0.*")];
+
+[assembly:ComVisible(false)];
+
+[assembly:CLSCompliantAttribute(true)];
+
+[assembly:Guid("c3dfa120-9f17-11dd-ad8b-0800200c9a66")]
+
+[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)];
diff --git a/Extras/CSharpWrapper/BulletPhysics.sln b/Extras/CSharpWrapper/BulletPhysics.sln
new file mode 100644
index 000000000..5afd30185
--- /dev/null
+++ b/Extras/CSharpWrapper/BulletPhysics.sln
@@ -0,0 +1,198 @@
+
+Microsoft Visual Studio Solution File, Format Version 9.00
+# Visual Studio 2005
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "BulletPhysics", "BulletPhysics.vcproj", "{5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}"
+ ProjectSection(ProjectDependencies) = postProject
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE} = {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319} = {61BD1097-CF2E-B296-DAA9-73A6FE135319}
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A} = {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}
+ EndProjectSection
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BulletPhysicsapp", "BulletPhysicsapp.csproj", "{11E65486-3C29-4D36-B488-4E05D9E4B46B}"
+ ProjectSection(ProjectDependencies) = postProject
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239} = {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}
+ EndProjectSection
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libbulletmath", "..\..\msvc\8\libbulletmath.vcproj", "{7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libbulletcollision", "..\..\msvc\8\libbulletcollision.vcproj", "{6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "libbulletdynamics", "..\..\msvc\8\libbulletdynamics.vcproj", "{61BD1097-CF2E-B296-DAA9-73A6FE135319}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Debug|Mixed Platforms = Debug|Mixed Platforms
+ Debug|Win32 = Debug|Win32
+ DebugDll|Any CPU = DebugDll|Any CPU
+ DebugDll|Mixed Platforms = DebugDll|Mixed Platforms
+ DebugDll|Win32 = DebugDll|Win32
+ DebugDoublePrecision|Any CPU = DebugDoublePrecision|Any CPU
+ DebugDoublePrecision|Mixed Platforms = DebugDoublePrecision|Mixed Platforms
+ DebugDoublePrecision|Win32 = DebugDoublePrecision|Win32
+ Release|Any CPU = Release|Any CPU
+ Release|Mixed Platforms = Release|Mixed Platforms
+ Release|Win32 = Release|Win32
+ ReleaseDll|Any CPU = ReleaseDll|Any CPU
+ ReleaseDll|Mixed Platforms = ReleaseDll|Mixed Platforms
+ ReleaseDll|Win32 = ReleaseDll|Win32
+ ReleaseDoublePrecision|Any CPU = ReleaseDoublePrecision|Any CPU
+ ReleaseDoublePrecision|Mixed Platforms = ReleaseDoublePrecision|Mixed Platforms
+ ReleaseDoublePrecision|Win32 = ReleaseDoublePrecision|Win32
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.Debug|Any CPU.ActiveCfg = Debug|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.Debug|Win32.ActiveCfg = Debug|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.Debug|Win32.Build.0 = Debug|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.DebugDll|Any CPU.ActiveCfg = Debug|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.DebugDll|Mixed Platforms.ActiveCfg = Debug|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.DebugDll|Mixed Platforms.Build.0 = Debug|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.DebugDll|Win32.ActiveCfg = Debug|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.DebugDll|Win32.Build.0 = Debug|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.DebugDoublePrecision|Any CPU.ActiveCfg = Debug|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.DebugDoublePrecision|Mixed Platforms.ActiveCfg = Debug|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.DebugDoublePrecision|Mixed Platforms.Build.0 = Debug|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.DebugDoublePrecision|Win32.ActiveCfg = Debug|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.DebugDoublePrecision|Win32.Build.0 = Debug|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.Release|Any CPU.ActiveCfg = Release|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.Release|Win32.ActiveCfg = Release|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.Release|Win32.Build.0 = Release|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.ReleaseDll|Any CPU.ActiveCfg = Release|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.ReleaseDll|Mixed Platforms.ActiveCfg = Release|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.ReleaseDll|Mixed Platforms.Build.0 = Release|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.ReleaseDll|Win32.ActiveCfg = Release|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.ReleaseDll|Win32.Build.0 = Release|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.ReleaseDoublePrecision|Any CPU.ActiveCfg = Release|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.ReleaseDoublePrecision|Mixed Platforms.ActiveCfg = Release|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.ReleaseDoublePrecision|Mixed Platforms.Build.0 = Release|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.ReleaseDoublePrecision|Win32.ActiveCfg = Release|Win32
+ {5EE4C1C4-4C81-46BB-A1C4-416F74BF9239}.ReleaseDoublePrecision|Win32.Build.0 = Release|Win32
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.Debug|Win32.ActiveCfg = Debug|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.DebugDll|Any CPU.ActiveCfg = Debug|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.DebugDll|Any CPU.Build.0 = Debug|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.DebugDll|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.DebugDll|Mixed Platforms.Build.0 = Debug|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.DebugDll|Win32.ActiveCfg = Debug|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.DebugDoublePrecision|Any CPU.ActiveCfg = Debug|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.DebugDoublePrecision|Any CPU.Build.0 = Debug|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.DebugDoublePrecision|Mixed Platforms.ActiveCfg = Debug|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.DebugDoublePrecision|Mixed Platforms.Build.0 = Debug|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.DebugDoublePrecision|Win32.ActiveCfg = Debug|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.Release|Any CPU.Build.0 = Release|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.Release|Mixed Platforms.Build.0 = Release|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.Release|Win32.ActiveCfg = Release|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.ReleaseDll|Any CPU.ActiveCfg = Release|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.ReleaseDll|Any CPU.Build.0 = Release|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.ReleaseDll|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.ReleaseDll|Mixed Platforms.Build.0 = Release|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.ReleaseDll|Win32.ActiveCfg = Release|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.ReleaseDoublePrecision|Any CPU.ActiveCfg = Release|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.ReleaseDoublePrecision|Any CPU.Build.0 = Release|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.ReleaseDoublePrecision|Mixed Platforms.ActiveCfg = Release|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.ReleaseDoublePrecision|Mixed Platforms.Build.0 = Release|Any CPU
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}.ReleaseDoublePrecision|Win32.ActiveCfg = Release|Any CPU
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug|Any CPU.ActiveCfg = Debug|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug|Win32.ActiveCfg = Debug|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Debug|Win32.Build.0 = Debug|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.DebugDll|Any CPU.ActiveCfg = DebugDll|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.DebugDll|Mixed Platforms.Build.0 = DebugDll|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.DebugDll|Win32.Build.0 = DebugDll|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.DebugDoublePrecision|Any CPU.ActiveCfg = DebugDoublePrecision|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.DebugDoublePrecision|Mixed Platforms.ActiveCfg = DebugDoublePrecision|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.DebugDoublePrecision|Mixed Platforms.Build.0 = DebugDoublePrecision|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release|Any CPU.ActiveCfg = Release|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release|Win32.ActiveCfg = Release|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.Release|Win32.Build.0 = Release|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.ReleaseDll|Any CPU.ActiveCfg = ReleaseDll|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.ReleaseDll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.ReleaseDll|Mixed Platforms.Build.0 = ReleaseDll|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.ReleaseDll|Win32.ActiveCfg = ReleaseDll|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.ReleaseDll|Win32.Build.0 = ReleaseDll|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.ReleaseDoublePrecision|Any CPU.ActiveCfg = ReleaseDoublePrecision|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.ReleaseDoublePrecision|Mixed Platforms.ActiveCfg = ReleaseDoublePrecision|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.ReleaseDoublePrecision|Mixed Platforms.Build.0 = ReleaseDoublePrecision|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32
+ {7D6E339F-9C2C-31DA-FDB0-5EE50973CF2A}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.Debug|Any CPU.ActiveCfg = Debug|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.Debug|Win32.ActiveCfg = Debug|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.Debug|Win32.Build.0 = Debug|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.DebugDll|Any CPU.ActiveCfg = DebugDll|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.DebugDll|Mixed Platforms.Build.0 = DebugDll|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.DebugDll|Win32.Build.0 = DebugDll|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.DebugDoublePrecision|Any CPU.ActiveCfg = DebugDoublePrecision|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.DebugDoublePrecision|Mixed Platforms.ActiveCfg = DebugDoublePrecision|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.DebugDoublePrecision|Mixed Platforms.Build.0 = DebugDoublePrecision|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.Release|Any CPU.ActiveCfg = Release|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.Release|Win32.ActiveCfg = Release|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.Release|Win32.Build.0 = Release|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.ReleaseDll|Any CPU.ActiveCfg = ReleaseDll|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.ReleaseDll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.ReleaseDll|Mixed Platforms.Build.0 = ReleaseDll|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.ReleaseDll|Win32.ActiveCfg = ReleaseDll|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.ReleaseDll|Win32.Build.0 = ReleaseDll|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.ReleaseDoublePrecision|Any CPU.ActiveCfg = ReleaseDoublePrecision|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.ReleaseDoublePrecision|Mixed Platforms.ActiveCfg = ReleaseDoublePrecision|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.ReleaseDoublePrecision|Mixed Platforms.Build.0 = ReleaseDoublePrecision|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32
+ {6ADA430D-009C-2ED4-A787-2AC2D6FEB8CE}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug|Any CPU.ActiveCfg = Debug|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug|Mixed Platforms.Build.0 = Debug|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug|Win32.ActiveCfg = Debug|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Debug|Win32.Build.0 = Debug|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.DebugDll|Any CPU.ActiveCfg = DebugDll|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.DebugDll|Mixed Platforms.ActiveCfg = DebugDll|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.DebugDll|Mixed Platforms.Build.0 = DebugDll|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.DebugDll|Win32.ActiveCfg = DebugDll|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.DebugDll|Win32.Build.0 = DebugDll|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.DebugDoublePrecision|Any CPU.ActiveCfg = DebugDoublePrecision|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.DebugDoublePrecision|Mixed Platforms.ActiveCfg = DebugDoublePrecision|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.DebugDoublePrecision|Mixed Platforms.Build.0 = DebugDoublePrecision|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.DebugDoublePrecision|Win32.ActiveCfg = DebugDoublePrecision|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.DebugDoublePrecision|Win32.Build.0 = DebugDoublePrecision|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release|Any CPU.ActiveCfg = Release|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release|Mixed Platforms.ActiveCfg = Release|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release|Mixed Platforms.Build.0 = Release|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release|Win32.ActiveCfg = Release|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.Release|Win32.Build.0 = Release|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.ReleaseDll|Any CPU.ActiveCfg = ReleaseDll|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.ReleaseDll|Mixed Platforms.ActiveCfg = ReleaseDll|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.ReleaseDll|Mixed Platforms.Build.0 = ReleaseDll|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.ReleaseDll|Win32.ActiveCfg = ReleaseDll|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.ReleaseDll|Win32.Build.0 = ReleaseDll|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.ReleaseDoublePrecision|Any CPU.ActiveCfg = ReleaseDoublePrecision|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.ReleaseDoublePrecision|Mixed Platforms.ActiveCfg = ReleaseDoublePrecision|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.ReleaseDoublePrecision|Mixed Platforms.Build.0 = ReleaseDoublePrecision|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.ReleaseDoublePrecision|Win32.ActiveCfg = ReleaseDoublePrecision|Win32
+ {61BD1097-CF2E-B296-DAA9-73A6FE135319}.ReleaseDoublePrecision|Win32.Build.0 = ReleaseDoublePrecision|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/Extras/CSharpWrapper/BulletPhysics.vcproj b/Extras/CSharpWrapper/BulletPhysics.vcproj
new file mode 100644
index 000000000..87ab96699
--- /dev/null
+++ b/Extras/CSharpWrapper/BulletPhysics.vcproj
@@ -0,0 +1,210 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Extras/CSharpWrapper/BulletPhysicsapp.csproj b/Extras/CSharpWrapper/BulletPhysicsapp.csproj
new file mode 100644
index 000000000..1b6b76158
--- /dev/null
+++ b/Extras/CSharpWrapper/BulletPhysicsapp.csproj
@@ -0,0 +1,73 @@
+
+
+ Debug
+ AnyCPU
+ 8.0.50727
+ 2.0
+ {11E65486-3C29-4D36-B488-4E05D9E4B46B}
+ WinExe
+ Properties
+ bulletapp
+ bulletapp
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+ False
+ debug\BulletPhysics.dll
+
+
+
+
+
+
+
+
+
+
+
+
+ ResXFileCodeGenerator
+ Resources.Designer.cs
+ Designer
+
+
+ True
+ Resources.resx
+ True
+
+
+ SettingsSingleFileGenerator
+ Settings.Designer.cs
+
+
+ True
+ Settings.settings
+ True
+
+
+
+
+
\ No newline at end of file
diff --git a/Extras/CSharpWrapper/BulletWrapper.cpp b/Extras/CSharpWrapper/BulletWrapper.cpp
new file mode 100644
index 000000000..f5d68c7f5
--- /dev/null
+++ b/Extras/CSharpWrapper/BulletWrapper.cpp
@@ -0,0 +1,21 @@
+/*
+Bullet Continuous Collision Detection and Physics Library
+Copyright (c) 2008 SCEI
+
+This software is provided 'as-is', without any express or implied warranty.
+In no event will the authors be held liable for any damages arising from the use of this software.
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it freely,
+subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
+2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
+3. This notice may not be removed or altered from any source distribution.
+*/
+
+/*
+ This is a C++/CLI wrapper of the high-level generic physics C-API.
+ You will be able to use it in C#
+*/
+
+#include "BulletWrapper.h"
diff --git a/Extras/CSharpWrapper/BulletWrapper.h b/Extras/CSharpWrapper/BulletWrapper.h
new file mode 100644
index 000000000..67e876a69
--- /dev/null
+++ b/Extras/CSharpWrapper/BulletWrapper.h
@@ -0,0 +1,422 @@
+/*
+Bullet Continuous Collision Detection and Physics Library
+Copyright (c) 2008 SCEI
+
+This software is provided 'as-is', without any express or implied warranty.
+In no event will the authors be held liable for any damages arising from the use of this software.
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it freely,
+subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
+2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
+3. This notice may not be removed or altered from any source distribution.
+*/
+
+/*
+ This is a C++/CLI wrapper of the high-level generic physics C-API.
+ You will be able to use it in C#
+*/
+
+#pragma once
+
+#include "Bullet-C-Api.h"
+
+namespace Scea
+{
+ namespace BulletPhysics
+ {
+ ///
+ /// Base Bullet Class
+ public __gc class Bullet;
+ public __gc class RigidBodyHandle;
+ public __gc class CollisionShapeHandle;
+ public __gc class MeshInterfaceHandle;
+
+ ///
+ /// A Mesh Interface Handle for Bullet
+ public __gc class MeshInterfaceHandle
+ {
+ public:
+ ///
+ /// Constructor for Mesh Interface Handle
+ MeshInterfaceHandle(plMeshInterfaceHandle handle)
+ {
+ _plMeshInterfaceHandle = handle;
+ }
+ ///
+ /// Destructor for Mesh Interface Handle
+ ~MeshInterfaceHandle()
+ {
+ _plMeshInterfaceHandle = 0;
+ };
+ plMeshInterfaceHandle _plMeshInterfaceHandle;
+ };
+
+ ///
+ /// A RigidBody handle for Bullet
+ public __gc class RigidBodyHandle
+ {
+ public:
+ ///
+ /// Constructor for RigidBody handle
+ RigidBodyHandle(plRigidBodyHandle handle)
+ {
+ _plRigidBodyHandle = handle;
+ }
+ ///
+ /// Destructor for RigidBody handle
+ ~RigidBodyHandle()
+ {
+ _plRigidBodyHandle = 0;
+ };
+ plRigidBodyHandle _plRigidBodyHandle;
+ };
+
+ ///
+ /// A Collision Shape handle for Bullet
+ public __gc class CollisionShapeHandle
+ {
+ public:
+ ///
+ /// Constructor for Collision Shape handle
+ CollisionShapeHandle(plCollisionShapeHandle handle)
+ {
+ _plCollisionShapeHandle = handle;
+ }
+
+ ///
+ /// Destructor for Collision Shape handle
+ ~CollisionShapeHandle()
+ {
+ _plCollisionShapeHandle = 0;
+ };
+ plCollisionShapeHandle _plCollisionShapeHandle;
+ };
+
+ ///
+ /// A RigidBody class in Bullet
+ public __gc class RigidBody
+ {
+ public:
+ ///
+ /// Constructor for RigidBody
+ /// The mass of this RigidBody
+ /// The Collision Shape handle of this RigidBody
+ /// stationary object has mass=0.f
+ RigidBody(float mass, CollisionShapeHandle * shape)
+ {
+ _plCollisionShapeHandle = shape->_plCollisionShapeHandle;
+ _plRigidBodyHandle = plCreateRigidBody(0, mass, _plCollisionShapeHandle);
+ }
+
+ ///
+ /// Destructor for RigidBody
+ ~RigidBody()
+ {
+ if (_plRigidBodyHandle != 0)
+ {
+ plDeleteRigidBody(_plRigidBodyHandle );
+ _plRigidBodyHandle = 0;
+ }
+ }
+
+ ///
+ /// Dispose function for RigidBody
+ void Dispose()
+ {
+ if (_plRigidBodyHandle != 0)
+ {
+ plDeleteRigidBody(_plRigidBodyHandle );
+ _plRigidBodyHandle = 0;
+ }
+ }
+
+ ///
+ /// Get the Position for this RigidBody
+ /// The float[3] position of this RigidBody
+ void GetPosition(float float_array __gc[])
+ {
+ float position[3];
+ plGetPosition(_plRigidBodyHandle, position);
+ for (int i=0; i<3; i++)
+ float_array[i] = position[i];
+ }
+
+ ///
+ /// Get the Open GL World Matrix for this RigidBody
+ /// The float[16] GL world matrix of this RigidBody
+ void GetOpenGLMatrix(float float_array __gc[])
+ {
+ float matrix[16];
+ plGetOpenGLMatrix(_plRigidBodyHandle, matrix);
+ for (int i=0; i<16; i++)
+ float_array[i] = matrix[i];
+ }
+
+ ///
+ /// Get the orientation for this RigidBody
+ /// The float[4] orientation of this RigidBody
+ void GetOrientation(float float_array __gc[])
+ {
+ float orientation[4];
+ plGetOrientation(_plRigidBodyHandle, orientation);
+ for (int i=0; i<4; i++)
+ float_array[i] = orientation[i];
+ }
+
+ ///
+ /// Set the position for this RigidBody
+ /// The float[3] position of this RigidBody
+ void SetPosition(float float_array __gc[])
+ {
+ float position[3];
+ for (int i=0; i<3; i++)
+ position[i] = float_array[i];
+ plSetPosition(_plRigidBodyHandle, position);
+ }
+
+ ///
+ /// Set the orientation for this RigidBody
+ /// The float[3] orientation of this RigidBody
+ void SetOrientation(float float_array __gc[])
+ {
+ float orientation[3];
+ for (int i=0; i<3; i++)
+ orientation[i] = float_array[i];
+ plSetOrientation(_plRigidBodyHandle, orientation);
+ }
+
+ ///
+ /// Set the orientation for this RigidBody
+ /// The yaw orientation of this RigidBody
+ /// The pitch orientation of this RigidBody
+ /// The roll orientation of this RigidBody
+ void SetOrientation(float yaw, float pitch, float roll)
+ {
+ float orient[4];
+ plSetEuler(yaw, pitch, roll, orient);
+ plSetOrientation(_plRigidBodyHandle, orient);
+ }
+
+ ///
+ /// Set the Open GL World Matrix for this RigidBody
+ /// The float[16] GL world matrix of this RigidBody
+ void SetOpenGLMatrix(float float_array __gc[])
+ {
+ float matrix[16];
+ for (int i=0; i<16; i++)
+ matrix[i] = float_array[i];
+ plSetOpenGLMatrix(_plRigidBodyHandle, matrix);
+ }
+
+ plRigidBodyHandle _plRigidBodyHandle;
+ plCollisionShapeHandle _plCollisionShapeHandle;
+ };
+
+
+ ///
+ /// Base Bullet Class
+ public __gc class Bullet
+ {
+ public:
+ ///
+ /// Constructor for the Bullet
+ Bullet()
+ {
+ m_rigidbody_count = 0;
+ _plDynamicsWorldHandle = 0;
+ _plPhysicsSdkHandle = plNewBulletSdk();
+ }
+ ///
+ /// Destructor for the Bullet
+ ~Bullet()
+ {
+ plDeletePhysicsSdk(_plPhysicsSdkHandle);
+ _plDynamicsWorldHandle = 0;
+ _plPhysicsSdkHandle = 0;
+ }
+
+ ///
+ /// Step Simulation for Bullet
+ ///
+ /// The amount of time to step in this simulation
+ void StepSimulation(plReal timeStep)
+ {
+ plStepSimulation(_plDynamicsWorldHandle, timeStep);
+ }
+
+ ///
+ /// Create collision shape handle for sphere
+ ///
+ /// The radius of the sphere
+ CollisionShapeHandle * CreateSphere(float radius)
+ {
+ return new CollisionShapeHandle(plNewSphereShape(radius));
+ }
+
+ ///
+ /// Create collision shape handle for Box
+ ///
+ /// extend x of the box
+ /// extend y of the box
+ /// extend z of the box
+ CollisionShapeHandle * CreateBox(float x, float y, float z)
+ {
+ return new CollisionShapeHandle( plNewBoxShape(x, y, z));
+ }
+
+ ///
+ /// Create collision shape handle for Capsule
+ ///
+ /// The radius of the capsule
+ /// The height of the capsule
+ CollisionShapeHandle * CreateCapsule(float radius, float height)
+ {
+ return new CollisionShapeHandle( plNewCapsuleShape(radius, height));
+ }
+
+ ///
+ /// Create collision shape handle for cone
+ ///
+ /// The radius of the cone
+ /// The height of the cone
+ CollisionShapeHandle * CreateCone(float radius, float height)
+ {
+ return new CollisionShapeHandle( plNewConeShape(radius, height));
+ }
+
+ ///
+ /// Create collision shape handle for cylinder
+ ///
+ /// The radius of the cylinder
+ /// The height of the cylinder
+ CollisionShapeHandle * CreateCylinder(float radius, float height)
+ {
+ return new CollisionShapeHandle( plNewCylinderShape(radius, height));
+ }
+
+ ///
+ /// Create a Compound Shape collision shape handle
+ ///
+ CollisionShapeHandle * CreateCompoundShape()
+ {
+ return new CollisionShapeHandle( plNewCompoundShape());
+ }
+
+ ///
+ /// Add shape to this Compound Shape collision shape handle
+ ///
+ /// compoundShape
+ /// childShape
+ /// childPos
+ /// childOrn
+ void AddCompoundShape(CollisionShapeHandle * compoundShape, CollisionShapeHandle * childShape, plVector3 childPos,plQuaternion childOrn)
+ {
+ plAddChildShape(compoundShape->_plCollisionShapeHandle, childShape->_plCollisionShapeHandle, childPos,childOrn);
+ }
+
+ ///
+ /// Destroy a collision shape handle
+ ///
+ void DestroyShape(CollisionShapeHandle * shape)
+ {
+ plDeleteShape(shape->_plCollisionShapeHandle);
+ delete shape;
+ }
+
+ ///
+ /// Create collision shape handle for Convex Meshes
+ ///
+ CollisionShapeHandle * CreateConvexHull()
+ {
+ return new CollisionShapeHandle(plNewConvexHullShape());
+ }
+
+ ///
+ /// Add Convex Hull Vertex to the Convex Mesh shape handle
+ ///
+ void AddConvexHullVertex(CollisionShapeHandle * handle, float x, float y, float z)
+ {
+ plAddVertex(handle->_plCollisionShapeHandle, x, y, z);
+ }
+
+/* CollisionShapeHandle * CreateTriangleMesh()
+ {
+ MeshInterfaceHandle * handle = new MeshInterfaceHandle(plNewMeshInterface());
+
+ return new CollisionShapeHandle(plNewStaticTriangleMeshShape(handle->_plMeshInterfaceHandle));
+ }
+
+ MeshInterfaceHandle * CreateMeshInterface()
+ {
+
+ return new MeshInterfaceHandle(plNewMeshInterface());
+ }
+/*
+ void AddMeshTriangle(MeshInterfaceHandle * handle, float * v0, float * v1,float * v2)
+ {
+ plAddTriangle(handle->_plMeshInterfaceHandle, v0, v1, v2);
+ }
+/*
+ CollisionShapeHandle * CreateTriangleMesh(MeshInterfaceHandle * handle)
+ {
+ return new CollisionShapeHandle(plNewStaticTriangleMeshShape(handle->_plMeshInterfaceHandle));
+ }
+*/ /* Concave static triangle meshes */
+/* extern void plAddTriangle(plMeshInterfaceHandle meshHandle, plVector3 v0,plVector3 v1,plVector3 v2);
+ extern plCollisionShapeHandle plNewStaticTriangleMeshShape(plMeshInterfaceHandle);
+ extern void plSetScaling(plCollisionShapeHandle shape, plVector3 scaling);
+*/
+
+ void SetEuler(float yaw, float pitch, float roll, float * orient)
+ {
+ plSetEuler(yaw, pitch, roll, orient);
+ }
+
+ ///
+ /// Add RigidBody, If won't haven't created a dynamic world, create one
+ ///
+ void AddRigidBody(RigidBody * body)
+ {
+ if (m_rigidbody_count == 0)
+ CreateDynamicsWorld();
+ plAddRigidBody(_plDynamicsWorldHandle, body->_plRigidBodyHandle);
+ m_rigidbody_count++;
+ }
+
+ ///
+ /// Remove RigidBody, If we remove everything in this dynamic world, we destroy the dynamic world
+ ///
+ void RemoveRigidBody(RigidBody * body)
+ {
+ plRemoveRigidBody(_plDynamicsWorldHandle, body->_plRigidBodyHandle);
+ m_rigidbody_count--;
+ if (m_rigidbody_count == 0)
+ DestroyDynamicsWorld();
+ }
+ private:
+ ///
+ /// Create a Dynamic World
+ ///
+ void CreateDynamicsWorld ()
+ {
+ _plDynamicsWorldHandle = plCreateDynamicsWorld(_plPhysicsSdkHandle);
+ }
+ ///
+ /// Destroy a Dynamic World
+ ///
+ void DestroyDynamicsWorld()
+ {
+ plDeleteDynamicsWorld(_plDynamicsWorldHandle);
+ }
+
+ // The count of rigidbody in this world.
+ int m_rigidbody_count;
+ plPhysicsSdkHandle _plPhysicsSdkHandle;
+
+ // This wrapper will let you support only one world at a time.
+ plDynamicsWorldHandle _plDynamicsWorldHandle;
+ };
+ }
+}
\ No newline at end of file
diff --git a/Extras/CSharpWrapper/Program.cs b/Extras/CSharpWrapper/Program.cs
new file mode 100644
index 000000000..fcd035393
--- /dev/null
+++ b/Extras/CSharpWrapper/Program.cs
@@ -0,0 +1,52 @@
+using System;
+using System.Collections.Generic;
+using System.Windows.Forms;
+
+using Scea.BulletPhysics;
+
+namespace bulletapp
+{
+ static class Program
+ {
+ ///
+ /// The main entry point for the application.
+ ///
+ [STAThread]
+ static void Main()
+ {
+ Bullet bullet = new Bullet();
+
+ CollisionShapeHandle s_handle = bullet.CreateSphere(1);
+ RigidBody body = new RigidBody(1, s_handle);
+ float [] position = new float[3];
+ position[0] = 1.0f; position[1] = 1.1f; position[2] = 1.2f;
+ body.SetPosition(position);
+ body.SetOrientation(0.1f, 0.2f, 0.3f);
+
+ bullet.AddRigidBody(body);
+ System.Console.WriteLine("Original Position (" + position[0] + ", " + position[1] + ", " + position[2] + ")");
+
+ float[] new_position = new float[3];
+ for (int i = 0; i < 10; i++)
+ {
+ bullet.StepSimulation(0.1f);
+ System.Console.WriteLine("StepSimulation " + 0.1);
+ body.GetPosition(new_position);
+ System.Console.WriteLine("New Position (" + new_position[0] + ", " + new_position[1] + ", " + new_position[2] + ")");
+ }
+
+ float[] matrix = new float[16];
+ body.GetOpenGLMatrix(matrix);
+ System.Console.WriteLine("GetOpenGLMatrix (" +
+ matrix[0] + ", " + matrix[1] + ", " + matrix[2] + ", " + matrix[3] + ", " +
+ matrix[4] + ", " + matrix[5] + ", " + matrix[6] + ", " + matrix[7] + ", " +
+ matrix[8] + ", " + matrix[9] + ", " + matrix[10] + ", " + matrix[11] + ", " +
+ matrix[12] + ", " + matrix[13] + ", " + matrix[14] + ", " + matrix[15] + ")"
+ );
+
+ float[] quot = new float[4];
+ body.GetOrientation(quot);
+ System.Console.WriteLine("GetOrientation (" + quot[0] + ", " + quot[1] + ", " + quot[2] + ", " + quot[3] + ")");
+ }
+ }
+}
\ No newline at end of file
diff --git a/Extras/CSharpWrapper/Properties/AssemblyInfo.cs b/Extras/CSharpWrapper/Properties/AssemblyInfo.cs
new file mode 100644
index 000000000..3821f32b1
--- /dev/null
+++ b/Extras/CSharpWrapper/Properties/AssemblyInfo.cs
@@ -0,0 +1,33 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("bulletapp")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("PlayStation")]
+[assembly: AssemblyProduct("bulletapp")]
+[assembly: AssemblyCopyright("Copyright © PlayStation 2008")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("0cae17bf-da40-4b83-8ce2-d21c5d1ec28a")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/Extras/CSharpWrapper/Properties/Resources.Designer.cs b/Extras/CSharpWrapper/Properties/Resources.Designer.cs
new file mode 100644
index 000000000..ee21772bd
--- /dev/null
+++ b/Extras/CSharpWrapper/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:2.0.50727.1433
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace bulletapp.Properties {
+ using System;
+
+
+ ///
+ /// A strongly-typed resource class, for looking up localized strings, etc.
+ ///
+ // This class was auto-generated by the StronglyTypedResourceBuilder
+ // class via a tool like ResGen or Visual Studio.
+ // To add or remove a member, edit your .ResX file then rerun ResGen
+ // with the /str option, or rebuild your VS project.
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
+ [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ internal class Resources {
+
+ private static global::System.Resources.ResourceManager resourceMan;
+
+ private static global::System.Globalization.CultureInfo resourceCulture;
+
+ [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+ internal Resources() {
+ }
+
+ ///
+ /// Returns the cached ResourceManager instance used by this class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Resources.ResourceManager ResourceManager {
+ get {
+ if (object.ReferenceEquals(resourceMan, null)) {
+ global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("bulletapp.Properties.Resources", typeof(Resources).Assembly);
+ resourceMan = temp;
+ }
+ return resourceMan;
+ }
+ }
+
+ ///
+ /// Overrides the current thread's CurrentUICulture property for all
+ /// resource lookups using this strongly typed resource class.
+ ///
+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+ internal static global::System.Globalization.CultureInfo Culture {
+ get {
+ return resourceCulture;
+ }
+ set {
+ resourceCulture = value;
+ }
+ }
+ }
+}
diff --git a/Extras/CSharpWrapper/Properties/Resources.resx b/Extras/CSharpWrapper/Properties/Resources.resx
new file mode 100644
index 000000000..ffecec851
--- /dev/null
+++ b/Extras/CSharpWrapper/Properties/Resources.resx
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
\ No newline at end of file
diff --git a/Extras/CSharpWrapper/Properties/Settings.Designer.cs b/Extras/CSharpWrapper/Properties/Settings.Designer.cs
new file mode 100644
index 000000000..64712a880
--- /dev/null
+++ b/Extras/CSharpWrapper/Properties/Settings.Designer.cs
@@ -0,0 +1,26 @@
+//------------------------------------------------------------------------------
+//
+// This code was generated by a tool.
+// Runtime Version:2.0.50727.1433
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+//
+//------------------------------------------------------------------------------
+
+namespace bulletapp.Properties {
+
+
+ [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+ [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "8.0.0.0")]
+ internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
+
+ private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+ public static Settings Default {
+ get {
+ return defaultInstance;
+ }
+ }
+ }
+}
diff --git a/Extras/CSharpWrapper/Properties/Settings.settings b/Extras/CSharpWrapper/Properties/Settings.settings
new file mode 100644
index 000000000..abf36c5d3
--- /dev/null
+++ b/Extras/CSharpWrapper/Properties/Settings.settings
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+