public override void ContactPointCallback(ref MyGridContactInfo value) { //return; var prop = value.Event.ContactProperties; prop.Friction = Friction; prop.Restitution = 0.5f; value.EnableParticles = false; value.RubberDeformation = true; string particle = null; if (value.CollidingEntity is MyVoxelBase && MyFakes.ENABLE_DRIVING_PARTICLES) { MyVoxelBase voxel = value.CollidingEntity as MyVoxelBase; Vector3D contactPosition = value.ContactPosition; MyStringHash material = MyStringHash.GetOrCompute(voxel.GetMaterialAt(ref contactPosition).MaterialTypeName); particle = MyMaterialPropertiesHelper.Static.GetCollisionEffect(MyMaterialPropertiesHelper.CollisionType.Start, m_wheelStringHash, material); } else if (value.CollidingEntity is MyCubeGrid && MyFakes.ENABLE_DRIVING_PARTICLES) { MyCubeGrid grid = value.CollidingEntity as MyCubeGrid; MyStringHash material = grid.Physics.GetMaterialAt(value.ContactPosition); particle = MyMaterialPropertiesHelper.Static.GetCollisionEffect(MyMaterialPropertiesHelper.CollisionType.Start, m_wheelStringHash, material); } if (Render != null && particle != null) { Render.TrySpawnParticle(value.ContactPosition, particle); } }
public override void ContactPointCallback(ref MyGridContactInfo info) { if (info.CollidingEntity != null && m_attachedTo == info.CollidingEntity) { info.EnableDeformation = false; info.EnableParticles = false; } }
public override void ContactPointCallback(ref MyGridContactInfo value) { base.ContactPointCallback(ref value); if ((this.m_pistonBlock != null) && ReferenceEquals(value.CollidingEntity, this.m_pistonBlock.Subpart3)) { value.EnableDeformation = false; value.EnableParticles = false; } }
public override void ContactPointCallback(ref MyGridContactInfo value) { HkContactPointProperties contactProperties = value.Event.ContactProperties; contactProperties.Friction = 0.85f; contactProperties.Restitution = 0.2f; value.EnableParticles = false; value.RubberDeformation = true; }
public override void ContactPointCallback(ref MyGridContactInfo value) { //return; var prop = value.Event.ContactProperties; prop.Friction = 0.85f; prop.Restitution = 0.2f; value.EnableParticles = false; value.RubberDeformation = true; }
internal override void ContactPointCallback(ref MyGridContactInfo value) { base.ContactPointCallback(ref value); if (m_pistonBlock == null) return; //if (value.CollidingEntity == m_pistonBlock.CubeGrid || value.CollidingEntity == m_pistonBlock.Subpart3) if (value.CollidingEntity == m_pistonBlock.Subpart3) { value.EnableDeformation = false; value.EnableParticles = false; } }
public override void ContactPointCallback(ref MyGridContactInfo value) { var prop = value.Event.ContactProperties; value.EnableDeformation = false; value.EnableParticles = false; value.RubberDeformation = false; if (MyPerGameSettings.BallFriendlyPhysics) { prop.Friction = Friction; prop.Restitution = Restitution > REAL_MAXIMUM_RESTITUTION ? REAL_MAXIMUM_RESTITUTION : Restitution; } }
private void DestroyGrid(ref MyPhysics.MyContactPointEvent value, MyCubeGrid grid) { MyGridContactInfo info = new MyGridContactInfo(ref value.ContactPointEvent, grid); info.EnableDeformation = false; info.EnableParticles = false; HkBreakOffPointInfo breakInfo = new HkBreakOffPointInfo() { ContactPoint = value.ContactPointEvent.ContactPoint, ContactPosition = info.ContactPosition, ContactPointProperties = value.ContactPointEvent.ContactProperties, IsContact = true, BreakingImpulse = grid.Physics.Shape.BreakImpulse, CollidingBody = value.ContactPointEvent.Base.BodyA == grid.Physics.RigidBody ? value.ContactPointEvent.Base.BodyB : value.ContactPointEvent.Base.BodyA, ContactPointDirection = value.ContactPointEvent.Base.BodyB == grid.Physics.RigidBody ? -1 : 1, }; grid.Physics.PerformMeteoritDeformation(ref breakInfo, value.ContactPointEvent.SeparatingVelocity); m_closeAfterSimulation = Sync.IsServer; }
public override void ContactPointCallback(ref MyGridContactInfo value) { //return; var prop = value.Event.ContactProperties; prop.Friction = Friction; prop.Restitution = 0.5f; value.EnableParticles = false; value.RubberDeformation = true; if (value.CollidingEntity is MyVoxelBase) { MyVoxelBase voxel = value.CollidingEntity as MyVoxelBase; Vector3D contactPosition = value.ContactPosition; MyParticleEffectsIDEnum particleEffect = voxel.GetMaterialAt(ref contactPosition).ParticleEffect; if (Render != null && particleEffect != MyParticleEffectsIDEnum.None) { Render.TrySpawnParticle(value.ContactPosition, particleEffect); } } }
/// <summary> /// Return true when contact is valid /// </summary> internal virtual void ContactPointCallback(ref MyGridContactInfo value) { }
void Physics_ContactPointCallback(ref Engine.Physics.MyPhysics.MyContactPointEvent e) { // RestoreDynamicMasses(); //if (m_frameCounter > DYNAMIC_UPDATE_DELAY) // m_frameCounter = 0; //else // return; if (m_lastFrameCollision != m_frameCounter) { DynamicWeights.Clear(); } MyGridContactInfo info = new MyGridContactInfo(ref e.ContactPointEvent, m_grid); if (info.CollidingEntity.Physics.IsStatic) { return; } float speed = info.CollidingEntity.Physics.LinearVelocity.Length(); if (speed < 0.1f) { return; } Vector3I blockPos = m_grid.WorldToGridInteger(info.ContactPosition + Vector3.Up * 0.25f); float dot = Vector3.Dot(Vector3.Normalize(info.CollidingEntity.Physics.LinearVelocity), Vector3.Down); float collidingMass = 0; m_constrainedGrid.Clear(); MyCubeGrid collidingGrid = info.CollidingEntity as MyCubeGrid; if (collidingGrid != null) { m_constrainedGrid.Add(collidingGrid); AddConstrainedGrids(collidingGrid); foreach (var grid in m_constrainedGrid) { collidingMass += grid.Physics.Mass; } } else { collidingMass = info.CollidingEntity.Physics.Mass; } collidingMass = info.CollidingEntity is Sandbox.Game.Entities.Character.MyCharacter ? MassToSI(collidingMass) : MassToSI(MyDestructionHelper.MassFromHavok(collidingMass)); float siMass = collidingMass * MyPetaInputComponent.SI_DYNAMICS_MULTIPLIER; //if (dot < 0) //impact from downside // return; float impact = siMass * speed * dot + siMass; if (impact < 0) { return; } if (m_grid.GridSizeEnum == MyCubeSize.Large) { } DynamicWeights[blockPos] = impact; m_needsRecalc = true; m_lastFrameCollision = m_frameCounter; if (!m_collidingEntities.ContainsKey(info.CollidingEntity)) { m_collidingEntities.Add(info.CollidingEntity, new CollidingEntityInfo() { Position = blockPos, FrameTime = m_frameCounter }); info.CollidingEntity.PositionComp.OnPositionChanged += PositionComp_OnPositionChanged; } else { m_collidingEntities[info.CollidingEntity].FrameTime = m_frameCounter; } }
public override void ContactPointCallback(ref MyGridContactInfo value) { Vector3 normal = value.Event.ContactPoint.Normal; this.m_contactNormals.PushNext(ref normal); MyVoxelMaterialDefinition voxelSurfaceMaterial = value.VoxelSurfaceMaterial; if (voxelSurfaceMaterial != null) { this.m_frictionCollector = voxelSurfaceMaterial.Friction; } float friction = this.Friction; if ((this.m_isSuspensionMounted && ((value.CollidingEntity is MyCubeGrid) && (value.OtherBlock != null))) && (value.OtherBlock.FatBlock == null)) { friction *= 0.07f; this.m_frictionCollector = 0.7f; } HkContactPointProperties contactProperties = value.Event.ContactProperties; contactProperties.Friction = friction; contactProperties.Restitution = 0.5f; value.EnableParticles = false; value.RubberDeformation = true; ulong simulationFrameCounter = MySandboxGame.Static.SimulationFrameCounter; if (simulationFrameCounter != this.LastContactFrameNumber) { Vector3 vector2; this.LastContactFrameNumber = simulationFrameCounter; Vector3D contactPosition = value.ContactPosition; if (this.m_contactNormals.GetAvgNormalCached(out vector2)) { normal = vector2; } string particleName = null; if (!(value.CollidingEntity is MyVoxelBase) || !MyFakes.ENABLE_DRIVING_PARTICLES) { if ((value.CollidingEntity is MyCubeGrid) && MyFakes.ENABLE_DRIVING_PARTICLES) { MyStringHash materialAt = (value.CollidingEntity as MyCubeGrid).Physics.GetMaterialAt(contactPosition); particleName = MyMaterialPropertiesHelper.Static.GetCollisionEffect(MyMaterialPropertiesHelper.CollisionType.Start, this.m_wheelStringHash, materialAt); } } else if (voxelSurfaceMaterial != null) { MyStringHash materialTypeNameHash = voxelSurfaceMaterial.MaterialTypeNameHash; particleName = MyMaterialPropertiesHelper.Static.GetCollisionEffect(MyMaterialPropertiesHelper.CollisionType.Start, this.m_wheelStringHash, materialTypeNameHash); } if (this.Render != null) { if (particleName != null) { this.Render.TrySpawnParticle(particleName, ref contactPosition, ref normal); } this.Render.UpdateParticle(ref contactPosition, ref normal); } if (((particleName != null) && Sync.IsServer) && (MySession.Static.Settings.OnlineMode != MyOnlineModeEnum.OFFLINE)) { ParticleData data = new ParticleData { EffectName = particleName, PositionRelative = (Vector3)(contactPosition - base.PositionComp.WorldMatrix.Translation), Normal = value.Event.ContactPoint.Normal }; this.m_particleData.Value = data; } this.RegisterPerFrameUpdate(); } }