public override void UpdateOnceBeforeFrame() { base.UpdateOnceBeforeFrame(); Physics.Enabled = true; Physics.RigidBody.Activate(); Physics.RigidBody.ContactPointCallbackDelay = 0; Physics.RigidBody.ContactSoundCallbackEnabled = true; //return; if (InitialHit != null) { Physics.ApplyImpulse(InitialHit.Impulse, Physics.CenterOfMassWorld); MyPhysics.FractureImpactDetails fid = new Sandbox.Engine.Physics.MyPhysics.FractureImpactDetails(); fid.Entity = this; fid.World = Physics.HavokWorld; fid.ContactInWorld = InitialHit.Position; HkdFractureImpactDetails details = HkdFractureImpactDetails.Create(); details.SetBreakingBody(Physics.RigidBody); details.SetContactPoint(Physics.WorldToCluster(InitialHit.Position)); details.SetDestructionRadius(0.05f); details.SetBreakingImpulse(30000); details.SetParticleVelocity(InitialHit.Impulse); details.SetParticlePosition(Physics.WorldToCluster(InitialHit.Position)); details.SetParticleMass(500); fid.Details = details; MyPhysics.EnqueueDestruction(fid); } }
public static void TriggerDestruction(HkWorld world, HkRigidBody body, Vector3 havokPosition, float radius = 0.0005f) { Havok.HkdFractureImpactDetails details = Havok.HkdFractureImpactDetails.Create(); details.SetBreakingBody(body); details.SetContactPoint(havokPosition); details.SetDestructionRadius(radius); details.SetBreakingImpulse(Sandbox.MyDestructionConstants.STRENGTH * 10); //details.SetParticlePosition(havokPosition); //details.SetParticleMass(1000000); details.Flag = details.Flag | Havok.HkdFractureImpactDetails.Flags.FLAG_DONT_RECURSE; Sandbox.Engine.Physics.MyPhysics.FractureImpactDetails destruction = new Sandbox.Engine.Physics.MyPhysics.FractureImpactDetails(); destruction.Details = details; destruction.World = world; Sandbox.Engine.Physics.MyPhysics.EnqueueDestruction(destruction); }
public static void TriggerDestruction(HkWorld world, HkRigidBody body, Vector3 havokPosition, float radius = 0.0005f) { Havok.HkdFractureImpactDetails details = Havok.HkdFractureImpactDetails.Create(); details.SetBreakingBody(body); details.SetContactPoint(havokPosition); details.SetDestructionRadius(radius); details.SetBreakingImpulse(Sandbox.MyDestructionConstants.STRENGTH * 10); //details.SetParticlePosition(havokPosition); //details.SetParticleMass(1000000); details.Flag = details.Flag | Havok.HkdFractureImpactDetails.Flags.FLAG_DONT_RECURSE; Sandbox.Engine.Physics.MyPhysics.FractureImpactDetails destruction = new Sandbox.Engine.Physics.MyPhysics.FractureImpactDetails(); destruction.Details = details; destruction.World = world; Sandbox.Engine.Physics.MyPhysics.EnqueueDestruction(destruction); }
public override void UpdateOnceBeforeFrame() { base.UpdateOnceBeforeFrame(); Physics.Enabled = true; Physics.RigidBody.Activate(); Physics.RigidBody.ContactPointCallbackDelay = 0; Physics.RigidBody.ContactSoundCallbackEnabled = true; //return; if (InitialHit != null) { Physics.ApplyImpulse(InitialHit.Impulse, Physics.CenterOfMassWorld); MyPhysics.FractureImpactDetails fid = new Sandbox.Engine.Physics.MyPhysics.FractureImpactDetails(); fid.Entity = this; fid.World = Physics.HavokWorld; fid.ContactInWorld = InitialHit.Position; HkdFractureImpactDetails details = HkdFractureImpactDetails.Create(); details.SetBreakingBody(Physics.RigidBody); details.SetContactPoint(Physics.WorldToCluster(InitialHit.Position)); details.SetDestructionRadius(0.05f); details.SetBreakingImpulse(30000); details.SetParticleVelocity(InitialHit.Impulse); details.SetParticlePosition(Physics.WorldToCluster(InitialHit.Position)); details.SetParticleMass(500); fid.Details = details; MyPhysics.EnqueueDestruction(fid); } var grav = MyGravityProviderSystem.CalculateTotalGravityInPoint(PositionComp.GetPosition()); Physics.RigidBody.Gravity = grav; }