本文整理汇总了C#中HkContactPointEvent.GetOtherEntity方法的典型用法代码示例。如果您正苦于以下问题:C# HkContactPointEvent.GetOtherEntity方法的具体用法?C# HkContactPointEvent.GetOtherEntity怎么用?C# HkContactPointEvent.GetOtherEntity使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类HkContactPointEvent
的用法示例。
在下文中一共展示了HkContactPointEvent.GetOtherEntity方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: MyGridContactInfo
public MyGridContactInfo(ref HkContactPointEvent evnt, MyCubeGrid grid)
{
Event = evnt;
ContactPosition = grid.Physics.ClusterToWorld(evnt.ContactPoint.Position);
m_currentEntity = grid;
m_collidingEntity = Event.GetOtherEntity(grid) as MyEntity;
m_currentBlock = null;
m_otherBlock = null;
ImpulseMultiplier = 1;
}
示例2: RigidBody_ContactPointCallback
//isnt used
void RigidBody_ContactPointCallback(ref HkContactPointEvent value)
{
if (!Sync.IsServer)
return;
var entity = value.GetOtherEntity(this);
if (entity is MyFloatingObject)
{
m_entitiesToTake.Add(entity as MyFloatingObject);
NeedsUpdate |= MyEntityUpdateEnum.BEFORE_NEXT_FRAME;
}
}
示例3: TrySpawnWalkingParticles
internal void TrySpawnWalkingParticles(ref HkContactPointEvent value)
{
if (!MyFakes.ENABLE_WALKING_PARTICLES)
return;
var oldCheckTime = m_lastWalkParticleCheckTime;
m_lastWalkParticleCheckTime = MySandboxGame.TotalGamePlayTimeInMilliseconds;
m_walkParticleSpawnCounterMs -= m_lastWalkParticleCheckTime - oldCheckTime;
if (m_walkParticleSpawnCounterMs > 0)
return;
var naturalGravityMultiplier = MyGravityProviderSystem.CalculateHighestNaturalGravityMultiplierInPoint(Entity.PositionComp.WorldMatrix.Translation);
if (naturalGravityMultiplier <= 0f)
{
m_walkParticleSpawnCounterMs = m_walkParticleGravityDelay;
return;
}
var character = Entity as MyCharacter;
if (character.JetpackComp != null && character.JetpackComp.Running)
{
m_walkParticleSpawnCounterMs = m_walkParticleJetpackOffDelay;
return;
}
var currentMovementState = character.GetCurrentMovementState();
if (currentMovementState.GetDirection() == MyCharacterMovement.NoDirection || currentMovementState == MyCharacterMovementEnum.Falling)
{
m_walkParticleSpawnCounterMs = m_walkParticleDefaultDelay;
return;
}
var otherPhysicsBody = value.GetOtherEntity(character).Physics as MyVoxelPhysicsBody;//value.Base.BodyA.UserObject == character.Physics ? value.Base.BodyB.UserObject : value.Base.BodyA.UserObject)) as MyVoxelPhysicsBody;
if (otherPhysicsBody == null)
return;
MyStringId movementType;
const int walkParticleWalkDelay = 500;
const int walkParticleRunDelay = 275;
const int walkParticleSprintDelay = 250;
switch (currentMovementState.GetSpeed())
{
case MyCharacterMovement.NormalSpeed:
movementType = MyMaterialPropertiesHelper.CollisionType.Walk;
m_walkParticleSpawnCounterMs = walkParticleWalkDelay;
break;
case MyCharacterMovement.Fast:
movementType = MyMaterialPropertiesHelper.CollisionType.Run;
m_walkParticleSpawnCounterMs = walkParticleRunDelay;
break;
case MyCharacterMovement.VeryFast:
movementType = MyMaterialPropertiesHelper.CollisionType.Sprint;
m_walkParticleSpawnCounterMs = walkParticleSprintDelay;
break;
default:
movementType = MyMaterialPropertiesHelper.CollisionType.Walk;
m_walkParticleSpawnCounterMs = m_walkParticleDefaultDelay;
break;
}
var spawnPosition = otherPhysicsBody.ClusterToWorld(value.ContactPoint.Position);
MyVoxelMaterialDefinition voxelMaterialDefinition = otherPhysicsBody.m_voxelMap.GetMaterialAt(ref spawnPosition);
if (voxelMaterialDefinition == null)
return;
MyMaterialPropertiesHelper.Static.TryCreateCollisionEffect(
movementType,
spawnPosition,
value.ContactPoint.Normal,
m_characterMaterial,
MyStringHash.GetOrCompute(voxelMaterialDefinition.MaterialTypeName));
}
示例4: RigidBody_ContactPointCallback
void RigidBody_ContactPointCallback(ref HkContactPointEvent value)
{
ProfilerShort.Begin("Grid Contact counter");
ProfilerShort.End();
var otherEntity = value.GetOtherEntity(m_grid);
var otherPhysicsBody = value.GetPhysicsBody(0);
var thisEntity = m_grid;
if (otherEntity == null || thisEntity == null)
return;
//DA used to stop appliyng force when there is planet/ship collisions to increase performance after ship crashes on planet
if ((Math.Abs(value.SeparatingVelocity) < 0.3f) && (otherEntity is MyTrees || otherEntity is MyVoxelPhysics))
{
return;
}
MyGridContactInfo info = new MyGridContactInfo(ref value, m_grid);
var myBody = RigidBody;// value.Base.BodyA.GetEntity() == m_grid.Components ? value.Base.BodyA : value.Base.BodyB;
if (info.CollidingEntity is Sandbox.Game.Entities.Character.MyCharacter || info.CollidingEntity.MarkedForClose)
return;
if (MyFakes.LANDING_GEAR_IGNORE_DAMAGE_CONTACTS && MyCubeGridGroups.Static.NoContactDamage.HasSameGroupAndIsGrid(otherEntity, thisEntity))
return;
ProfilerShort.Begin("Grid contact point callback");
bool hitVoxel = info.CollidingEntity is MyVoxelMap || info.CollidingEntity is MyVoxelPhysics;
if(hitVoxel && m_grid.Render != null) {
m_grid.Render.ResetLastVoxelContactTimer();
}
bool doSparks = MyPerGameSettings.EnableCollisionSparksEffect && (info.CollidingEntity is MyCubeGrid || hitVoxel);
// According to Petr, WasUsed does not work everytime
//if (value.ContactProperties.WasUsed)
{
// Handle callbacks here
info.HandleEvents();
}
if(MyDebugDrawSettings.DEBUG_DRAW_FRICTION)
{
var pos = ClusterToWorld(value.ContactPoint.Position);
var vel = -GetVelocityAtPoint(pos);
vel *= 0.1f;
var fn = Math.Abs(Gravity.Dot(value.ContactPoint.Normal) * value.ContactProperties.Friction);
if (vel.Length() > 0.5f)
{
vel.Normalize();
MyRenderProxy.DebugDrawArrow3D(pos, pos + fn * vel, Color.Gray, Color.Gray, false);
}
}
if (doSparks && Math.Abs(value.SeparatingVelocity) > 2.0f && value.ContactProperties.WasUsed && !m_lastContacts.ContainsKey(value.ContactPointId) && info.EnableParticles)
{
ProfilerShort.Begin("AddCollisionEffect");
m_lastContacts[value.ContactPointId] = MySandboxGame.TotalGamePlayTimeInMilliseconds;
AddCollisionEffect(info.ContactPosition, value.ContactPoint.Normal);
ProfilerShort.End();
}
ProfilerShort.Begin("Dust");
bool doDust = MyPerGameSettings.EnableCollisionSparksEffect && hitVoxel;
float force = Math.Abs(value.SeparatingVelocity * (Mass / 100000));
if (doDust && force > 0.25f && info.EnableParticles)
{
float scale = MathHelper.Clamp(force / 10.0f, 0.2f, 4.0f);
AddDustEffect(info.ContactPosition, scale);
}
ProfilerShort.End();
// Large dynamic ships colliding with floating objects
// When low separating velocity or deformation performed, disable contact point
// Floating object will still collide with kinematic part of ship and won't push it
if (m_grid.GridSizeEnum == MyCubeSize.Large && !myBody.IsFixedOrKeyframed && info.CollidingEntity is MyFloatingObject && (Math.Abs(value.SeparatingVelocity) < 0.2f))
{
var prop = value.ContactProperties;
prop.IsDisabled = true;
}
ProfilerShort.End();
}
示例5: RigidBody_ContactPointCallback
void RigidBody_ContactPointCallback(ref HkContactPointEvent value)
{
ProfilerShort.Begin("Grid Contact counter");
ProfilerShort.End();
var otherEntity = value.GetOtherEntity(m_grid);
var thisEntity = m_grid;
if (otherEntity == null || thisEntity == null)
return;
//DA used to stop appliyng force when there is planet/ship collisions to increase performance after ship crashes on planet
if ((Math.Abs(value.SeparatingVelocity) < 0.3f) && (otherEntity is MyTrees || otherEntity is MyVoxelPhysics))
{
return;
}
MyGridContactInfo info = new MyGridContactInfo(ref value, m_grid);
var myBody = RigidBody;// value.Base.BodyA.GetEntity() == m_grid.Components ? value.Base.BodyA : value.Base.BodyB;
// CH: DEBUG
if (info.CollidingEntity is Sandbox.Game.Entities.Character.MyCharacter || info.CollidingEntity.MarkedForClose)
return;
if (MyFakes.LANDING_GEAR_IGNORE_DAMAGE_CONTACTS && MyCubeGridGroups.Static.NoContactDamage.HasSameGroupAndIsGrid(otherEntity, thisEntity))
return;
ProfilerShort.Begin("Grid contact point callback");
bool doSparks = MyPerGameSettings.EnableCollisionSparksEffect && (info.CollidingEntity is MyCubeGrid || info.CollidingEntity is MyVoxelMap);
// According to Petr, WasUsed does not work everytime
//if (value.ContactProperties.WasUsed)
{
// Handle callbacks here
info.HandleEvents();
}
bool deformationPerformed = false;
if (Sync.IsServer && value.ContactProperties.ImpulseApplied > MyGridShape.BreakImpulse && info.CollidingEntity != null && info.EnableDeformation && m_grid.BlocksDestructionEnabled)
{
float deformation = value.SeparatingVelocity;
if (info.RubberDeformation)
{
deformation /= 5;
}
HkBreakOffPointInfo breakInfo = CreateBreakOffPoint(value, info.ContactPosition, MyGridShape.BreakImpulse);
PerformDeformation(ref breakInfo, false, value.SeparatingVelocity, otherEntity as MyEntity);
deformationPerformed = true;
}
else if (doSparks && value.SeparatingVelocity > 2.0f && value.ContactProperties.WasUsed && !m_lastContacts.ContainsKey(value.ContactPointId) && info.EnableParticles)
{
m_lastContacts[value.ContactPointId] = MySandboxGame.TotalGamePlayTimeInMilliseconds;
AddCollisionEffect(info.ContactPosition, value.ContactPoint.Normal);
}
// Large dynamic ships colliding with floating objects
// When low separating velocity or deformation performed, disable contact point
// Floating object will still collide with kinematic part of ship and won't push it
if (m_grid.GridSizeEnum == MyCubeSize.Large && !myBody.IsFixedOrKeyframed && info.CollidingEntity is MyFloatingObject && (Math.Abs(value.SeparatingVelocity) < 0.2f || deformationPerformed))
{
var prop = value.ContactProperties;
prop.IsDisabled = true;
}
ProfilerShort.End();
}