public static void InitSpherePhysics(this IMyEntity entity, MyStringHash materialType, Vector3 sphereCenter, float sphereRadius, float mass, float linearDamping, float angularDamping, ushort collisionLayer, RigidBodyFlag rbFlag) { mass = (rbFlag & RigidBodyFlag.RBF_STATIC) != 0 ? 0 : mass; var physics = new Sandbox.Engine.Physics.MyPhysicsBody(entity, rbFlag) { MaterialType = materialType, AngularDamping = angularDamping, LinearDamping = linearDamping }; var massProperties = HkInertiaTensorComputer.ComputeSphereVolumeMassProperties(sphereRadius, mass); HkSphereShape shape = new HkSphereShape(sphereRadius); physics.CreateFromCollisionObject((HkShape)shape, sphereCenter, entity.PositionComp.WorldMatrix, massProperties); shape.Base.RemoveReference(); entity.Physics = physics; }
public static void InitCapsulePhysics(this IMyEntity entity, MyStringId materialType, Vector3 vertexA, Vector3 vertexB, float radius, float mass, float linearDamping, float angularDamping, ushort collisionLayer, RigidBodyFlag rbFlag) { mass = (rbFlag & RigidBodyFlag.RBF_STATIC) != 0 ? 0 : mass; var physics = new Sandbox.Engine.Physics.MyPhysicsBody(entity, rbFlag) { MaterialType = materialType, AngularDamping = angularDamping, LinearDamping = linearDamping }; var massProperties = HkInertiaTensorComputer.ComputeSphereVolumeMassProperties(radius, mass); physics.ReportAllContacts = true; HkCapsuleShape shape = new HkCapsuleShape(vertexA, vertexB, radius); physics.CreateFromCollisionObject((HkShape)shape, (vertexA + vertexB) / 2, entity.PositionComp.WorldMatrix, massProperties); shape.Base.RemoveReference(); entity.Physics = physics; }
internal static void InitBoxPhysics(this IMyEntity entity, Matrix worldMatrix, MyStringHash materialType, Vector3 center, Vector3 size, float mass, float linearDamping, float angularDamping, ushort collisionLayer, RigidBodyFlag rbFlag) { mass = (rbFlag & RigidBodyFlag.RBF_STATIC) != 0 ? 0 : mass; var massProperties = HkInertiaTensorComputer.ComputeBoxVolumeMassProperties(size / 2, mass); var physicsBody = new Sandbox.Engine.Physics.MyPhysicsBody(null, rbFlag) { MaterialType = materialType, AngularDamping = angularDamping, LinearDamping = linearDamping }; //BoxShape shape = new BoxShape(size * 0.5f); HkBoxShape shape = new HkBoxShape(size * 0.5f); physicsBody.CreateFromCollisionObject((HkShape)shape, center, worldMatrix, massProperties); shape.Base.RemoveReference(); entity.Physics = physicsBody; //return physicsBody; }
public static void InitBoxPhysics(this IMyEntity entity, MyStringHash materialType, Vector3 center, Vector3 size, float mass, float linearDamping, float angularDamping, ushort collisionLayer, RigidBodyFlag rbFlag) { System.Diagnostics.Debug.Assert(size.Length() > 0); mass = (rbFlag & RigidBodyFlag.RBF_STATIC) != 0 ? 0 : mass; var massProperties = HkInertiaTensorComputer.ComputeBoxVolumeMassProperties(size / 2, mass); var physics = new Sandbox.Engine.Physics.MyPhysicsBody(entity, rbFlag) { MaterialType = materialType, AngularDamping = angularDamping, LinearDamping = linearDamping }; HkBoxShape shape = new HkBoxShape(size * 0.5f); physics.CreateFromCollisionObject((HkShape)shape, center, entity.PositionComp.WorldMatrix, massProperties); shape.Base.RemoveReference(); entity.Physics = physics; }