فهرست منبع

Added managed interop objects for physics joints

BearishSun 9 سال پیش
والد
کامیت
a44c3813ab

+ 6 - 0
MBansheeEngine/MBansheeEngine.csproj

@@ -119,11 +119,17 @@
     <Compile Include="Physics\NativeCapsuleCollider.cs" />
     <Compile Include="Physics\NativeCharacterController.cs" />
     <Compile Include="Physics\NativeCollider.cs" />
+    <Compile Include="Physics\NativeD6Joint.cs" />
+    <Compile Include="Physics\NativeDistanceJoint.cs" />
+    <Compile Include="Physics\NativeFixedJoint.cs" />
+    <Compile Include="Physics\NativeHingeJoint.cs" />
     <Compile Include="Physics\NativeJoint.cs" />
     <Compile Include="Physics\NativeMeshCollider.cs" />
     <Compile Include="Physics\NativePlaneCollider.cs" />
     <Compile Include="Physics\NativeRigidbody.cs" />
+    <Compile Include="Physics\NativeSliderJoint.cs" />
     <Compile Include="Physics\NativeSphereCollider.cs" />
+    <Compile Include="Physics\NativeSphericalJoint.cs" />
     <Compile Include="Physics\Physics.cs" />
     <Compile Include="Physics\PhysicsMaterial.cs" />
     <Compile Include="Physics\PhysicsMesh.cs" />

+ 1 - 1
MBansheeEngine/Physics/Joint.cs

@@ -428,7 +428,7 @@ namespace BansheeEngine
     /// <summary>
     /// Type of drives that can be used for moving or rotating bodies attached to the D6 joint.
     /// </summary>
-    public enum DriveType
+    public enum D6JointDriveType
     {
         /// <summary>
         /// Linear movement on the X axis using the linear drive model.

+ 118 - 0
MBansheeEngine/Physics/NativeD6Joint.cs

@@ -0,0 +1,118 @@
+//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
+//**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
+using System;
+using System.Runtime.CompilerServices;
+
+namespace BansheeEngine
+{
+    /// <summary>
+    /// Wrapper around the native D6Joint class.
+    /// <see cref="D6Joint"/>
+    /// </summary>
+    internal class NativeD6Joint : NativeJoint
+    {
+        public Radian Twist
+        {
+            get { return new Radian(Internal_GetTwist(mCachedPtr)); }
+        }
+
+        public Radian SwingY
+        {
+            get { return new Radian(Internal_GetSwingY(mCachedPtr)); }
+        }
+
+        public Radian SwingZ
+        {
+            get { return new Radian(Internal_GetSwingZ(mCachedPtr)); }
+        }
+
+        public LimitLinear LimitLinear
+        {
+            set { Internal_SetLimitLinear(mCachedPtr, value); }
+        }
+
+        public LimitAngularRange LimitTwist
+        {
+            set { Internal_SetLimitTwist(mCachedPtr, value); }
+        }
+
+        public LimitConeRange LimitSwing
+        {
+            set { Internal_SetLimitSwing(mCachedPtr, value); }
+        }
+
+        public Vector3 DrivePosition
+        {
+            set { Internal_SetDrivePosition(mCachedPtr, ref value); }
+        }
+
+        public Quaternion DriveRotation
+        {
+            set { Internal_SetDriveRotation(mCachedPtr, ref value); }
+        }
+
+        public Vector3 DriveLinearVelocity
+        {
+            set { Internal_SetDriveLinearVelocity(mCachedPtr, ref value); }
+        }
+
+        public Vector3 DriveAngularVelocity
+        {
+            set { Internal_SetDriveAngularVelocity(mCachedPtr, ref value); }
+        }
+
+        public void SetMotion(D6JointAxis axis, D6JointMotion motion)
+        {
+            Internal_SetMotion(mCachedPtr, axis, motion);
+        }
+
+        public void SetDrive(D6JointDriveType type, D6JointDrive drive)
+        {
+            Internal_SetDrive(mCachedPtr, type, drive);
+        }
+
+        public NativeD6Joint()
+        {
+            Internal_CreateInstance(this);
+        }
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_CreateInstance(NativeD6Joint instance);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_SetMotion(IntPtr thisPtr, D6JointAxis axis, D6JointMotion motion);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern float Internal_GetTwist(IntPtr thisPtr);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern float Internal_GetSwingY(IntPtr thisPtr);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern float Internal_GetSwingZ(IntPtr thisPtr);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_SetLimitLinear(IntPtr thisPtr, LimitLinear limit);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_SetLimitTwist(IntPtr thisPtr, LimitAngularRange limit);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_SetLimitSwing(IntPtr thisPtr, LimitConeRange limit);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_SetDrive(IntPtr thisPtr, D6JointDriveType type, D6JointDrive drive);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_SetDrivePosition(IntPtr thisPtr, ref Vector3 position);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_SetDriveRotation(IntPtr thisPtr, ref Quaternion rotation);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_SetDriveLinearVelocity(IntPtr thisPtr, ref Vector3 velocity);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_SetDriveAngularVelocity(IntPtr thisPtr, ref Vector3 velocity);
+    }
+}

+ 87 - 0
MBansheeEngine/Physics/NativeDistanceJoint.cs

@@ -0,0 +1,87 @@
+//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
+//**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
+
+using System;
+using System.Runtime.CompilerServices;
+
+namespace BansheeEngine
+{
+    /// <summary>
+    /// Wrapper around the native DistanceJoint class.
+    /// <see cref="DistanceJoint"/>
+    /// </summary>
+    internal class NativeDistanceJoint : NativeJoint
+    {
+        public float Distance
+        {
+            get { return Internal_GetDistance(mCachedPtr); }
+        }
+
+        public float MinDistance
+        {
+            set { Internal_SetMinDistance(mCachedPtr, value); }
+        }
+
+        public float MaxDistance
+        {
+            set { Internal_SetMaxDistance(mCachedPtr, value); }
+        }
+
+        public float Tolerance
+        {
+            set { Internal_SetTolerance(mCachedPtr, value); }
+        }
+
+        public Spring Spring
+        {
+            set { Internal_SetSpring(mCachedPtr, ref value); }
+        }
+
+        public bool EnableMinDistanceLimit
+        {
+            set { Internal_SetEnableMinDistanceLimit(mCachedPtr, value); }
+        }
+
+        public bool EnableMaxDistanceLimit
+        {
+            set { Internal_SetEnableMaxDistanceLimit(mCachedPtr, value); }
+        }
+
+        public bool EnableSpring
+        {
+            set { Internal_SetEnableSpring(mCachedPtr, value); }
+        }
+
+        public NativeDistanceJoint()
+        {
+            Internal_CreateInstance(this);
+        }
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_CreateInstance(NativeDistanceJoint instance);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern float Internal_GetDistance(IntPtr thisPtr);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_SetMinDistance(IntPtr thisPtr, float value);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_SetMaxDistance(IntPtr thisPtr, float value);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_SetTolerance(IntPtr thisPtr, float value);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_SetSpring(IntPtr thisPtr, ref Spring value);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_SetEnableMinDistanceLimit(IntPtr thisPtr, bool value);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_SetEnableMaxDistanceLimit(IntPtr thisPtr, bool value);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_SetEnableSpring(IntPtr thisPtr, bool value);
+    }
+}

+ 21 - 0
MBansheeEngine/Physics/NativeFixedJoint.cs

@@ -0,0 +1,21 @@
+//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
+//**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
+using System.Runtime.CompilerServices;
+
+namespace BansheeEngine
+{
+    /// <summary>
+    /// Wrapper around the native FixedJoint class.
+    /// <see cref="FixedJoint"/>
+    /// </summary>
+    internal class NativeFixedJoint : NativeJoint
+    {
+        public NativeFixedJoint()
+        {
+            Internal_CreateInstance(this);
+        }
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_CreateInstance(NativeFixedJoint instance);
+    }
+}

+ 70 - 0
MBansheeEngine/Physics/NativeHingeJoint.cs

@@ -0,0 +1,70 @@
+//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
+//**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
+using System;
+using System.Runtime.CompilerServices;
+
+namespace BansheeEngine
+{
+    /// <summary>
+    /// Wrapper around the native HingeJoint class.
+    /// <see cref="HingeJoint"/>
+    /// </summary>
+    internal class NativeHingeJoint : NativeJoint
+    {
+        public Radian Angle
+        {
+            get { return new Radian(Internal_GetAngle(mCachedPtr)); }
+        }
+
+        public float Speed
+        {
+            get { return Internal_GetSpeed(mCachedPtr); }
+        }
+
+        public LimitAngularRange Limit
+        {
+            set { Internal_SetLimit(mCachedPtr, value); }
+        }
+
+        public HingeJointDrive Drive
+        {
+            set { Internal_SetDrive(mCachedPtr, value); }
+        }
+
+        public bool EnableLimit
+        {
+            set { Internal_SetEnableLimit(mCachedPtr, value); }
+        }
+
+        public bool EnableDrive
+        {
+            set { Internal_SetEnableDrive(mCachedPtr, value); }
+        }
+
+        public NativeHingeJoint()
+        {
+            Internal_CreateInstance(this);
+        }
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_CreateInstance(NativeHingeJoint instance);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern float Internal_GetAngle(IntPtr thisPtr);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern float Internal_GetSpeed(IntPtr thisPtr);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_SetLimit(IntPtr thisPtr, LimitAngularRange limit);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_SetDrive(IntPtr thisPtr, HingeJointDrive drive);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_SetEnableLimit(IntPtr thisPtr, bool enable);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_SetEnableDrive(IntPtr thisPtr, bool enable);
+    }
+}

+ 54 - 0
MBansheeEngine/Physics/NativeSliderJoint.cs

@@ -0,0 +1,54 @@
+//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
+//**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
+using System;
+using System.Runtime.CompilerServices;
+
+namespace BansheeEngine
+{
+    /// <summary>
+    /// Wrapper around the native SliderJoint class.
+    /// <see cref="SliderJoint"/>
+    /// </summary>
+    internal class NativeSliderJoint : NativeJoint
+    {
+        public float Position
+        {
+            get { return Internal_GetPosition(mCachedPtr); }
+        }
+
+        public float Speed
+        {
+            get { return Internal_GetSpeed(mCachedPtr); }
+        }
+
+        public LimitLinearRange Limit
+        {
+            set { Internal_SetLimit(mCachedPtr, value); }
+        }
+
+        public bool EnableLimit
+        {
+            set { Internal_SetEnableLimit(mCachedPtr, value); }
+        }
+
+        public NativeSliderJoint()
+        {
+            Internal_CreateInstance(this);
+        }
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_CreateInstance(NativeSliderJoint instance);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern float Internal_GetPosition(IntPtr thisPtr);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern float Internal_GetSpeed(IntPtr thisPtr);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_SetLimit(IntPtr thisPtr, LimitLinearRange limit);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_SetEnableLimit(IntPtr thisPtr, bool enable);
+    }
+}

+ 44 - 0
MBansheeEngine/Physics/NativeSphericalJoint.cs

@@ -0,0 +1,44 @@
+//********************************** Banshee Engine (www.banshee3d.com) **************************************************//
+//**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
+using System;
+using System.Runtime.CompilerServices;
+
+namespace BansheeEngine
+{
+    /// <summary>
+    /// Wrapper around the native SphericalJoint class.
+    /// <see cref="SphericalJoint"/>
+    /// </summary>
+    internal class NativeSphericalJoint : NativeJoint
+    {
+        public LimitConeRange Limit
+        {
+            set { Internal_SetLimit(mCachedPtr, value); }
+        }
+
+        public bool EnableLimit
+        {
+            set { Internal_SetEnableLimit(mCachedPtr, value); }
+        }
+
+        public NativeSphericalJoint()
+        {
+            Internal_CreateInstance(this);
+        }
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_CreateInstance(NativeSphericalJoint instance);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern float Internal_GetPosition(IntPtr thisPtr);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern float Internal_GetSpeed(IntPtr thisPtr);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_SetLimit(IntPtr thisPtr, LimitConeRange limit);
+
+        [MethodImpl(MethodImplOptions.InternalCall)]
+        private static extern void Internal_SetEnableLimit(IntPtr thisPtr, bool enable);
+    }
+}

+ 12 - 1
SBansheeEngine/Source/BsScriptD6Joint.cpp

@@ -14,7 +14,18 @@ namespace BansheeEngine
 	void ScriptD6Joint::initRuntimeData()
 	{
 		metaData.scriptClass->addInternalCall("Internal_CreateInstance", &ScriptD6Joint::internal_CreateInstance);
-
+		metaData.scriptClass->addInternalCall("Internal_SetMotion", &ScriptD6Joint::internal_SetMotion);
+		metaData.scriptClass->addInternalCall("Internal_GetTwist", &ScriptD6Joint::internal_GetTwist);
+		metaData.scriptClass->addInternalCall("Internal_GetSwingY", &ScriptD6Joint::internal_GetSwingY);
+		metaData.scriptClass->addInternalCall("Internal_GetSwingZ", &ScriptD6Joint::internal_GetSwingZ);
+		metaData.scriptClass->addInternalCall("Internal_SetLimitLinear", &ScriptD6Joint::internal_SetLimitLinear);
+		metaData.scriptClass->addInternalCall("Internal_SetLimitTwist", &ScriptD6Joint::internal_SetLimitTwist);
+		metaData.scriptClass->addInternalCall("Internal_SetLimitSwing", &ScriptD6Joint::internal_SetLimitSwing);
+		metaData.scriptClass->addInternalCall("Internal_SetDrive", &ScriptD6Joint::internal_SetDrive);
+		metaData.scriptClass->addInternalCall("Internal_SetDrivePosition", &ScriptD6Joint::internal_SetDrivePosition);
+		metaData.scriptClass->addInternalCall("Internal_SetDriveRotation", &ScriptD6Joint::internal_SetDriveRotation);
+		metaData.scriptClass->addInternalCall("Internal_SetDriveLinearVelocity", &ScriptD6Joint::internal_SetDriveLinearVelocity);
+		metaData.scriptClass->addInternalCall("Internal_SetDriveAngularVelocity", &ScriptD6Joint::internal_SetDriveAngularVelocity);
 	}
 
 	D6Joint* ScriptD6Joint::getD6Joint() const