//********************************** Banshee Engine (www.banshee3d.com) **************************************************// //**************** Copyright (c) 2016 Marko Pintera (marko.pintera@gmail.com). All rights reserved. **********************// using System; using System.Runtime.CompilerServices; 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. /// public class PhysicsMaterial : Resource { /// /// Constructor for internal use by the runtime. /// private PhysicsMaterial(bool dummy) { } /// /// Creates a brand new physics material. /// /// Controls friction when two in-contact objects are not moving lateral to each other. /// /// Controls friction when two in-contact objects are moving lateral to each other. /// /// 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. public PhysicsMaterial(float staticFriction = 0.0f, float dynamicFriction = 0.0f, float restitution = 0.0f) { Internal_CreateInstance(this, staticFriction, dynamicFriction, restitution); } /// /// 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)). /// 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). /// 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. /// public float Restitution { get { return Internal_GetRestitution(mCachedPtr); } set { Internal_SetRestitution(mCachedPtr, value); } } [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_CreateInstance(PhysicsMaterial instance, float staticFriction, float dynamicFriction, float restitution); [MethodImpl(MethodImplOptions.InternalCall)] private static extern float Internal_GetStaticFriction(IntPtr thisPtr); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetStaticFriction(IntPtr thisPtr, float value); [MethodImpl(MethodImplOptions.InternalCall)] private static extern float Internal_GetDynamicFriction(IntPtr thisPtr); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetDynamicFriction(IntPtr thisPtr, float value); [MethodImpl(MethodImplOptions.InternalCall)] private static extern float Internal_GetRestitution(IntPtr thisPtr); [MethodImpl(MethodImplOptions.InternalCall)] private static extern void Internal_SetRestitution(IntPtr thisPtr, float value); } /** @} */ }