//********************************** Banshee Engine (www.banshee3d.com) **************************************************// //**************** Copyright (c) 2016 Marko Pintera (marko.pintera@gmail.com). All rights reserved. **********************// using System; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; namespace BansheeEngine { /// /// Wrapper around the native HingeJoint class. /// /// 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(ScriptCommonJointData commonData, ScriptHingeJointData data) { Internal_CreateInstance(this, ref commonData, ref data); } [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_CreateInstance(NativeHingeJoint instance, ref ScriptCommonJointData commonData, ref ScriptHingeJointData data); [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); } /// /// Used for passing HingeJoint initialization data between native and managed code. /// [StructLayout(LayoutKind.Sequential)] internal struct ScriptHingeJointData // Note: Must match C++ struct ScriptHingeJointData { public LimitAngularRange limit; public HingeJointDrive drive; public HingeJoint.Flag flags; } }