本文整理汇总了C#中Sandbox.Game.Entities.MyVoxelBase.CreateVoxelMeteorCrater方法的典型用法代码示例。如果您正苦于以下问题:C# MyVoxelBase.CreateVoxelMeteorCrater方法的具体用法?C# MyVoxelBase.CreateVoxelMeteorCrater怎么用?C# MyVoxelBase.CreateVoxelMeteorCrater使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Sandbox.Game.Entities.MyVoxelBase
的用法示例。
在下文中一共展示了MyVoxelBase.CreateVoxelMeteorCrater方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: CreateCrater
private void CreateCrater(MyPhysics.MyContactPointEvent value, MyVoxelBase voxel)
{
if (Math.Abs(Vector3.Normalize(-Entity.WorldMatrix.Forward).Dot(value.ContactPointEvent.ContactPoint.Normal)) < 0.1)
{
MyParticleEffect impactParticle1;
if (InParticleVisibleRange && MyParticlesManager.TryCreateParticleEffect((int)MyParticleEffectsIDEnum.MeteorAsteroidCollision, out impactParticle1))
{
impactParticle1.WorldMatrix = Entity.WorldMatrix;
impactParticle1.UserScale = (float)Entity.PositionComp.WorldVolume.Radius * 2;
}
m_particleVectorUp = Vector3.Zero;
return;
}
if (Sync.IsServer)
{
BoundingSphereD sphere = new BoundingSphere(value.Position, Entity.PositionComp.Scale.Value / 3);
Vector3 direction;
// if contact was send after reflection we need to get former direction
if (value.ContactPointEvent.SeparatingVelocity < 0)
direction = Vector3.Normalize(Entity.Physics.LinearVelocity);
else
direction = Vector3.Normalize(Vector3.Reflect(Entity.Physics.LinearVelocity, value.ContactPointEvent.ContactPoint.Normal));
var material = VoxelMaterial;
int tries = MyDefinitionManager.Static.GetVoxelMaterialDefinitions().Count() * 2; // max amount of tries
while (!material.IsRare || !material.SpawnsFromMeteorites || material.MinVersion > MySession.Static.Settings.VoxelGeneratorVersion)
{
if (--tries < 0) // to prevent infinite loops in case all materials are disabled just use the meteorites' initial material
{
material = VoxelMaterial;
break;
}
material = MyDefinitionManager.Static.GetVoxelMaterialDefinitions().ElementAt(MyUtils.GetRandomInt(MyDefinitionManager.Static.GetVoxelMaterialDefinitions().Count() - 1));
}
voxel.CreateVoxelMeteorCrater(sphere.Center, (float)sphere.Radius, -direction, material);
MyVoxelGenerator.MakeCrater(voxel, sphere, -direction, material);
}
m_closeAfterSimulation = Sync.IsServer;
}