private void RemoveOwnerVirtualPhysics() { if (OwnerVirtualPhysics == null) { return; } OwnerVirtualPhysics.RigidBody.RemoveProperty(HkCharacterRigidBody.MANIPULATED_OBJECT); OwnerVirtualPhysics.Close(); OwnerVirtualPhysics = null; }
private bool CreateOwnerVirtualPhysics() { if (Owner == null) { return(false); } OwnerVirtualPhysics = new MyCharacterVirtualPhysicsBody(Owner, RigidBodyFlag.RBF_KINEMATIC); var massProperties = HkInertiaTensorComputer.ComputeSphereVolumeMassProperties(0.1f, MyPerGameSettings.Destruction ? MyDestructionHelper.MassToHavok(Owner.Definition.Mass) : Owner.Definition.Mass); HkShape sh = new HkSphereShape(0.1f); OwnerVirtualPhysics.InitialSolverDeactivation = HkSolverDeactivation.Off; MatrixD headWorldMatrix = Owner.GetHeadMatrix(false, forceHeadBone: true); OwnerVirtualPhysics.CreateFromCollisionObject(sh, Vector3.Zero, headWorldMatrix, massProperties, Sandbox.Engine.Physics.MyPhysics.NoCollisionLayer); OwnerVirtualPhysics.RigidBody.EnableDeactivation = false; // Character ray casts includes also NoCollision layer shapes so setup property for ignoring the body OwnerVirtualPhysics.RigidBody.SetProperty(HkCharacterRigidBody.MANIPULATED_OBJECT, 0); sh.RemoveReference(); OwnerVirtualPhysics.Enabled = true; return(true); }