NativeSliderJoint.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. using System;
  4. using System.Runtime.CompilerServices;
  5. using System.Runtime.InteropServices;
  6. namespace BansheeEngine
  7. {
  8. /** @cond INTEROP */
  9. /** @addtogroup Interop
  10. * @{
  11. */
  12. /// <summary>
  13. /// Wrapper around the native SliderJoint class.
  14. /// <see cref="SliderJoint"/>
  15. /// </summary>
  16. internal class NativeSliderJoint : NativeJoint
  17. {
  18. public float Position
  19. {
  20. get { return Internal_GetPosition(mCachedPtr); }
  21. }
  22. public float Speed
  23. {
  24. get { return Internal_GetSpeed(mCachedPtr); }
  25. }
  26. public LimitLinearRange Limit
  27. {
  28. set { Internal_SetLimit(mCachedPtr, value); }
  29. }
  30. public bool EnableLimit
  31. {
  32. set { Internal_SetEnableLimit(mCachedPtr, value); }
  33. }
  34. public NativeSliderJoint(ScriptCommonJointData commonData, ScriptSliderJointData data)
  35. {
  36. Internal_CreateInstance(this, ref commonData, ref data);
  37. }
  38. [MethodImpl(MethodImplOptions.InternalCall)]
  39. private static extern void Internal_CreateInstance(NativeSliderJoint instance, ref ScriptCommonJointData commonData,
  40. ref ScriptSliderJointData data);
  41. [MethodImpl(MethodImplOptions.InternalCall)]
  42. private static extern float Internal_GetPosition(IntPtr thisPtr);
  43. [MethodImpl(MethodImplOptions.InternalCall)]
  44. private static extern float Internal_GetSpeed(IntPtr thisPtr);
  45. [MethodImpl(MethodImplOptions.InternalCall)]
  46. private static extern void Internal_SetLimit(IntPtr thisPtr, LimitLinearRange limit);
  47. [MethodImpl(MethodImplOptions.InternalCall)]
  48. private static extern void Internal_SetEnableLimit(IntPtr thisPtr, bool enable);
  49. }
  50. /// <summary>
  51. /// Used for passing SliderJoint initialization data between native and managed code.
  52. /// </summary>
  53. [StructLayout(LayoutKind.Sequential), SerializeObject]
  54. internal struct ScriptSliderJointData // Note: Must match C++ struct ScriptSliderJointData
  55. {
  56. public LimitLinearRange limit;
  57. public bool enableLimit;
  58. }
  59. /** @} */
  60. /** @endcond */
  61. }