using System; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; namespace BansheeEngine { /** @addtogroup Physics * @{ */ /// /// Material that controls how two physical objects interact with each other. Materials of both objects are used during /// their interaction and their combined values are used. /// [ShowInInspector] public partial class PhysicsMaterial : Resource { private PhysicsMaterial(bool __dummy0) { } protected PhysicsMaterial() { } /// Creates a new physics material. /// /// Controls friction when two in-contact objects are not moving lateral to each other (for example how difficult is to /// get an object moving from a static state while it is in contact other object(s)). /// /// /// Sets dynamic friction of the material. Controls friction when two in-contact objects are moving lateral to each other /// (for example how quickly does an object slow down when sliding along another object). /// /// /// Controls "bounciness" of an object during a collision. Value of 1 means the collision is elastic, and value of 0 /// means the value is inelastic. Must be in [0, 1] range. /// public PhysicsMaterial(float staticFriction = 0f, float dynamicFriction = 0f, float restitution = 0f) { Internal_create(this, staticFriction, dynamicFriction, restitution); } /// Returns a reference wrapper for this resource. public RRef Ref { get { return Internal_GetRef(mCachedPtr); } } /// /// Controls friction when two in-contact objects are not moving lateral to each other (for example how difficult it is /// to get an object moving from a static state while it is in contact with other object(s)). /// [ShowInInspector] [NativeWrapper] public float StaticFriction { get { return Internal_getStaticFriction(mCachedPtr); } set { Internal_setStaticFriction(mCachedPtr, value); } } /// /// Controls friction when two in-contact objects are moving lateral to each other (for example how quickly does an /// object slow down when sliding along another object). /// [ShowInInspector] [NativeWrapper] public float DynamicFriction { get { return Internal_getDynamicFriction(mCachedPtr); } set { Internal_setDynamicFriction(mCachedPtr, value); } } /// /// Controls "bounciness" of an object during a collision. Value of 1 means the collision is elastic, and value of 0 /// means the value is inelastic. Must be in [0, 1] range. /// [ShowInInspector] [NativeWrapper] public float Restitution { get { return Internal_getRestitutionCoefficient(mCachedPtr); } set { Internal_setRestitutionCoefficient(mCachedPtr, value); } } /// Returns a reference wrapper for this resource. public static implicit operator RRef(PhysicsMaterial x) { return Internal_GetRef(x.mCachedPtr); } [MethodImpl(MethodImplOptions.InternalCall)] private static extern RRef Internal_GetRef(IntPtr thisPtr); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_setStaticFriction(IntPtr thisPtr, float value); [MethodImpl(MethodImplOptions.InternalCall)] private static extern float Internal_getStaticFriction(IntPtr thisPtr); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_setDynamicFriction(IntPtr thisPtr, float value); [MethodImpl(MethodImplOptions.InternalCall)] private static extern float Internal_getDynamicFriction(IntPtr thisPtr); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_setRestitutionCoefficient(IntPtr thisPtr, float value); [MethodImpl(MethodImplOptions.InternalCall)] private static extern float Internal_getRestitutionCoefficient(IntPtr thisPtr); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_create(PhysicsMaterial managedInstance, float staticFriction, float dynamicFriction, float restitution); } /** @} */ }