本文整理汇总了C#中HkWorld类的典型用法代码示例。如果您正苦于以下问题:C# HkWorld类的具体用法?C# HkWorld怎么用?C# HkWorld使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
HkWorld类属于命名空间,在下文中一共展示了HkWorld类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C#代码示例。
示例1: CreateConnectionToWorld
public void CreateConnectionToWorld(HkdBreakableBody destructionBody, HkWorld havokWorld)
{
if (BlocksConnectedToWorld.Count == 0)
return;
HkdFixedConnectivity conn = HkdFixedConnectivity.Create();
foreach (var pos in BlocksConnectedToWorld)
{
HkdFixedConnectivity.Connection c = new HkdFixedConnectivity.Connection(Vector3.Zero, Vector3.Up, 1, m_blocksShapes[pos].Shape, havokWorld.GetFixedBody(), 0);
conn.AddConnection(ref c);
c.RemoveReference();
}
destructionBody.SetFixedConnectivity(conn);
conn.RemoveReference();
}
开发者ID:rem02,项目名称:SpaceEngineers,代码行数:14,代码来源:MyGridShape.cs
示例2: LoadData
public override void LoadData()
{
if (!HkBaseSystem.DestructionEnabled)
{
MyLog.Default.WriteLine("Havok Destruction is not availiable in this build.");
throw new System.InvalidOperationException("Havok Destruction is not availiable in this build.");
}
if (Static != null)
{
MyLog.Default.WriteLine("Destruction data was not freed. Unloading now...");
//throw new System.InvalidOperationException("Destruction data was not freed");
UnloadData();
}
Static = this;
BlockShapePool = new MyBlockShapePool();
TemporaryWorld = new HkWorld(true, 50000, MyPhysics.RestingVelocity, MyFakes.ENABLE_HAVOK_MULTITHREADING, 4);
TemporaryWorld.MarkForWrite();
TemporaryWorld.DestructionWorld = new HkdWorld(TemporaryWorld);
TemporaryWorld.UnmarkForWrite();
Storage = new HkDestructionStorage(TemporaryWorld.DestructionWorld);
// pre-fracture cube blocks
{
foreach (var groupName in MyDefinitionManager.Static.GetDefinitionPairNames())
{
var group = MyDefinitionManager.Static.GetDefinitionGroup(groupName);
if (group.Large != null)
{
var model = MyModels.GetModel(group.Large.Model);
if (model == null)
continue;
bool isGenerated = group.Large.IsGeneratedBlock && (group.Large.GeneratedBlockType == GENERATED_BLOCK_TYPE_PILLAR);
if (!MyFakes.LAZY_LOAD_DESTRUCTION || (model != null && model.HavokBreakableShapes != null)) //reload materials
LoadModelDestruction(group.Large.Model, group.Large, isGenerated, group.Large.Size * (MyDefinitionManager.Static.GetCubeSize(group.Large.CubeSize)));
foreach(var progress in group.Large.BuildProgressModels)
{
model = MyModels.GetModel(progress.File);
if (model == null)
continue;
if (!MyFakes.LAZY_LOAD_DESTRUCTION || (model != null && model.HavokBreakableShapes != null)) //reload materials
LoadModelDestruction(progress.File, group.Large, isGenerated, group.Large.Size * (MyDefinitionManager.Static.GetCubeSize(group.Large.CubeSize)));
}
if (MyFakes.CHANGE_BLOCK_CONVEX_RADIUS)
{
if (model != null && model.HavokBreakableShapes != null)
{
var shape = model.HavokBreakableShapes[0].GetShape();
if(shape.ShapeType != HkShapeType.Sphere && shape.ShapeType != HkShapeType.Capsule)
SetConvexRadius(model.HavokBreakableShapes[0], MyDestructionConstants.LARGE_GRID_CONVEX_RADIUS);
}
}
}
if (group.Small != null)
{
var model = MyModels.GetModel(group.Small.Model);
if (model == null)
continue;
bool isGenerated = group.Small.IsGeneratedBlock && (group.Small.GeneratedBlockType == GENERATED_BLOCK_TYPE_PILLAR);
if (!MyFakes.LAZY_LOAD_DESTRUCTION || (model != null && model.HavokBreakableShapes != null)) //reload materials
LoadModelDestruction(group.Small.Model, group.Small, isGenerated, group.Small.Size * (MyDefinitionManager.Static.GetCubeSize(group.Small.CubeSize)));
foreach (var progress in group.Small.BuildProgressModels)
{
model = MyModels.GetModel(progress.File);
if (model == null)
continue;
if (!MyFakes.LAZY_LOAD_DESTRUCTION || (model != null && model.HavokBreakableShapes != null)) //reload materials
LoadModelDestruction(progress.File, group.Small, isGenerated, group.Large.Size * (MyDefinitionManager.Static.GetCubeSize(group.Large.CubeSize)));
}
if (MyFakes.CHANGE_BLOCK_CONVEX_RADIUS)
{
if (model != null && model.HavokBreakableShapes != null)
{
var shape = model.HavokBreakableShapes[0].GetShape();
if (shape.ShapeType != HkShapeType.Sphere && shape.ShapeType != HkShapeType.Capsule)
SetConvexRadius(model.HavokBreakableShapes[0], MyDestructionConstants.LARGE_GRID_CONVEX_RADIUS);
}
}
}
}
if (!MyFakes.LAZY_LOAD_DESTRUCTION)
BlockShapePool.Preallocate();
}
foreach (var enviroment in MyDefinitionManager.Static.GetEnvironmentItemDefinitions())
{
LoadModelDestruction(enviroment.Model, enviroment, false, Vector3.One, false, true);
}
}
开发者ID:austusross,项目名称:SpaceEngineers,代码行数:99,代码来源:MyDestructionData.cs
示例3: ActivateBatch
public virtual void ActivateBatch(object world, ulong clusterObjectID)
{
System.Diagnostics.Debug.Assert(m_world == null, "Cannot activate already active object!");
m_world = (HkWorld)world;
ClusterObjectID = clusterObjectID;
IsInWorld = true;
ActivateCollision();
Matrix rigidBodyMatrix = GetRigidBodyMatrix();
if (RigidBody != null)
{
RigidBody.SetWorldMatrix(rigidBodyMatrix);
m_world.AddRigidBodyBatch(RigidBody);
}
if (RigidBody2 != null)
{
RigidBody2.SetWorldMatrix(rigidBodyMatrix);
m_world.AddRigidBodyBatch(RigidBody2);
}
if (CharacterProxy != null)
{
CharacterProxy.SetRigidBodyTransform(rigidBodyMatrix);
CharacterProxy.Activate(m_world);
}
foreach (var constraint in m_constraints)
{
m_constraintsAddBatch.Add(constraint);
}
}
开发者ID:leandro1129,项目名称:SpaceEngineers,代码行数:34,代码来源:MyPhysicsBody.cs
示例4: StepWorld
private static void StepWorld(HkWorld world)
{
world.ExecutePendingCriticalOperations();
world.UnmarkForWrite();
world.StepSimulation(VRage.Game.MyEngineConstants.PHYSICS_STEP_SIZE_IN_SECONDS * MyFakes.SIMULATION_SPEED);
world.StepSimulation(VRage.Game.MyEngineConstants.PHYSICS_STEP_SIZE_IN_SECONDS * MyFakes.SIMULATION_SPEED);
world.MarkForWrite();
}
开发者ID:stanhebben,项目名称:SpaceEngineers,代码行数:9,代码来源:MyPhysics.cs
示例5: MarkBreakable
private void MarkBreakable(HkWorld world)
{
m_shape.MarkBreakable(world, RigidBody);
if (RigidBody2 != null)
{
m_shape.MarkBreakable(world, RigidBody2);
}
}
开发者ID:austusross,项目名称:SpaceEngineers,代码行数:9,代码来源:MyGridPhysics.cs
示例6: SetShapeForCrouch
public void SetShapeForCrouch(HkWorld world, bool enable)
{
if (CharacterRigidBody != null && world != null)
{
world.Lock();
if (enable)
CharacterRigidBody.SetShapeForCrouch();
else
CharacterRigidBody.SetDefaultShape();
if (m_physicsBody.IsInWorld)
world.ReintegrateCharacter(CharacterRigidBody);
world.Unlock();
}
}
开发者ID:fluxit,项目名称:SpaceEngineers,代码行数:17,代码来源:MyCharacterProxy.cs
示例7: HitInfo
public HitInfo(HkWorld.HitInfo hi, Vector3D worldPosition)
{
HkHitInfo = hi;
Position = worldPosition;
}
开发者ID:stanhebben,项目名称:SpaceEngineers,代码行数:5,代码来源:MyPhysics.cs
示例8: Activate
public void Activate(HkWorld world)
{
if (CharacterPhantom != null)
{
world.AddPhantom(CharacterPhantom);
}
if (CharacterRigidBody != null)
{
world.AddCharacterRigidBody(CharacterRigidBody);
if (!float.IsInfinity(m_maxImpulse))
{
world.BreakOffPartsUtil.MarkEntityBreakable(CharacterRigidBody.GetRigidBody(), m_maxImpulse);
}
}
}
开发者ID:fluxit,项目名称:SpaceEngineers,代码行数:15,代码来源:MyCharacterProxy.cs
示例9: Deactivate
public void Deactivate(HkWorld world)
{
if (CharacterPhantom != null)
{
world.RemovePhantom(CharacterPhantom);
}
if (CharacterRigidBody != null)
{
world.RemoveCharacterRigidBody(CharacterRigidBody);
}
}
开发者ID:fluxit,项目名称:SpaceEngineers,代码行数:11,代码来源:MyCharacterProxy.cs
示例10: StepWorld
private static void StepWorld(HkWorld world)
{
world.UnmarkForWrite();
world.StepSimulation(MyEngineConstants.PHYSICS_STEP_SIZE_IN_SECONDS * MyFakes.SIMULATION_SPEED);
world.StepSimulation(MyEngineConstants.PHYSICS_STEP_SIZE_IN_SECONDS * MyFakes.SIMULATION_SPEED);
world.MarkForWrite();
}
开发者ID:fluxit,项目名称:SpaceEngineers,代码行数:7,代码来源:MyPhysics.cs
示例11: DeactivateBatch
public virtual void DeactivateBatch(object world)
{
System.Diagnostics.Debug.Assert(world == m_world, "Inconsistency in clusters!");
if (IsRagdollModeActive)
{
ReactivateRagdoll = true;
CloseRagdollMode(world as HkWorld);
}
if (BreakableBody != null && m_world.DestructionWorld != null)
{
m_world.DestructionWorld.RemoveBreakableBody(BreakableBody);
}
else if (RigidBody != null)
{
m_world.RemoveRigidBodyBatch(RigidBody);
}
if (RigidBody2 != null)
{
m_world.RemoveRigidBodyBatch(RigidBody2);
}
if (CharacterProxy != null)
{
CharacterProxy.Deactivate(m_world);
}
foreach (var constraint in m_constraints)
{
if (IsConstraintValid(constraint) && constraint.InWorld)
m_constraintsRemoveBatch.Add(constraint);
else
Debug.Fail("Trying to remove invalid constraint!");
}
m_world = null;
IsInWorld = false;
}
开发者ID:rem02,项目名称:SpaceEngineers,代码行数:38,代码来源:MyPhysicsBody.cs
示例12: UnmarkBreakable
private void UnmarkBreakable(HkWorld world)
{
if (!m_grid.BlocksDestructionEnabled)
return;
if (m_shape != null)
m_shape.UnmarkBreakable(world, RigidBody);
if (RigidBody2 != null)
{
m_shape.UnmarkBreakable(world, RigidBody2);
}
}
开发者ID:2asoft,项目名称:SpaceEngineers,代码行数:12,代码来源:MyGridPhysics.cs
示例13: InitCollisionFilters
static void InitCollisionFilters(HkWorld world)
{
// Floating objects intentionally collide with both DynamicDoubledCollisionLayer and KinematicDoubledCollisionLayer
// DynamicDoubledCollisionLayer is necessary, because we won't deformations
// KinematicDoubledCollisionLayer is necessary, because we don't want to push it when floating object is resting on it
world.DisableCollisionsBetween(DynamicDoubledCollisionLayer, KinematicDoubledCollisionLayer);
world.DisableCollisionsBetween(DynamicDoubledCollisionLayer, CharacterCollisionLayer);
world.DisableCollisionsBetween(DynamicDoubledCollisionLayer, DebrisCollisionLayer);
world.DisableCollisionsBetween(DynamicDoubledCollisionLayer, CharacterNetworkCollisionLayer);
world.DisableCollisionsBetween(KinematicDoubledCollisionLayer, DefaultCollisionLayer);
world.DisableCollisionsBetween(KinematicDoubledCollisionLayer, StaticCollisionLayer);
//world.DisableCollisionsBetween(KinematicDoubledCollisionLayer, AmmoLayer);
world.DisableCollisionsBetween(GravityPhantomLayer, StaticCollisionLayer);
world.DisableCollisionsBetween(GravityPhantomLayer, DefaultCollisionLayer);
world.DisableCollisionsBetween(GravityPhantomLayer, DynamicDoubledCollisionLayer);
world.DisableCollisionsBetween(GravityPhantomLayer, KinematicDoubledCollisionLayer);
world.DisableCollisionsBetween(GravityPhantomLayer, CharacterCollisionLayer);
world.DisableCollisionsBetween(GravityPhantomLayer, CharacterNetworkCollisionLayer);
world.DisableCollisionsBetween(GravityPhantomLayer, ObjectDetectionCollisionLayer);
//world.DisableCollisionsBetween(GravityPhantomLayer, AmmoLayer);
world.DisableCollisionsBetween(VirtualMassLayer, StaticCollisionLayer);
world.DisableCollisionsBetween(VirtualMassLayer, DefaultCollisionLayer);
world.DisableCollisionsBetween(VirtualMassLayer, CharacterCollisionLayer);
world.DisableCollisionsBetween(VirtualMassLayer, CharacterNetworkCollisionLayer);
world.DisableCollisionsBetween(VirtualMassLayer, DynamicDoubledCollisionLayer);
world.DisableCollisionsBetween(VirtualMassLayer, KinematicDoubledCollisionLayer);
world.DisableCollisionsBetween(VirtualMassLayer, DebrisCollisionLayer);
world.DisableCollisionsBetween(VirtualMassLayer, FloatingObjectCollisionLayer);
world.DisableCollisionsBetween(VirtualMassLayer, ObjectDetectionCollisionLayer);
world.DisableCollisionsBetween(VirtualMassLayer, VirtualMassLayer);
//world.DisableCollisionsBetween(VirtualMassLayer, AmmoLayer);
world.DisableCollisionsBetween(NoCollisionLayer, StaticCollisionLayer);
world.DisableCollisionsBetween(NoCollisionLayer, DefaultCollisionLayer);
world.DisableCollisionsBetween(NoCollisionLayer, CharacterCollisionLayer);
world.DisableCollisionsBetween(NoCollisionLayer, CharacterNetworkCollisionLayer);
world.DisableCollisionsBetween(NoCollisionLayer, DynamicDoubledCollisionLayer);
world.DisableCollisionsBetween(NoCollisionLayer, KinematicDoubledCollisionLayer);
world.DisableCollisionsBetween(NoCollisionLayer, DebrisCollisionLayer);
world.DisableCollisionsBetween(NoCollisionLayer, FloatingObjectCollisionLayer);
world.DisableCollisionsBetween(NoCollisionLayer, GravityPhantomLayer);
world.DisableCollisionsBetween(NoCollisionLayer, ObjectDetectionCollisionLayer);
world.DisableCollisionsBetween(NoCollisionLayer, VirtualMassLayer);
if (MyPerGameSettings.PhysicsNoCollisionLayerWithDefault)
world.DisableCollisionsBetween(NoCollisionLayer, 0);
//world.DisableCollisionsBetween(NoCollisionLayer, AmmoLayer);
world.DisableCollisionsBetween(ObjectDetectionCollisionLayer, ObjectDetectionCollisionLayer);
world.DisableCollisionsBetween(CollectorCollisionLayer, StaticCollisionLayer);
world.DisableCollisionsBetween(CollectorCollisionLayer, DefaultCollisionLayer);
world.DisableCollisionsBetween(CollectorCollisionLayer, CharacterCollisionLayer);
world.DisableCollisionsBetween(CollectorCollisionLayer, CharacterNetworkCollisionLayer);
world.DisableCollisionsBetween(CollectorCollisionLayer, DynamicDoubledCollisionLayer);
world.DisableCollisionsBetween(CollectorCollisionLayer, KinematicDoubledCollisionLayer);
world.DisableCollisionsBetween(CollectorCollisionLayer, DebrisCollisionLayer);
world.DisableCollisionsBetween(CollectorCollisionLayer, GravityPhantomLayer);
world.DisableCollisionsBetween(CollectorCollisionLayer, ObjectDetectionCollisionLayer);
world.DisableCollisionsBetween(CollectorCollisionLayer, VirtualMassLayer);
//world.DisableCollisionsBetween(CollectorCollisionLayer, AmmoLayer);
if (!Sandbox.Game.Multiplayer.Sync.IsServer)
{
world.DisableCollisionsBetween(DefaultCollisionLayer, CharacterNetworkCollisionLayer);
world.DisableCollisionsBetween(StaticCollisionLayer, CharacterNetworkCollisionLayer);
}
if (!MyFakes.ENABLE_CHARACTER_AND_DEBRIS_COLLISIONS)
{
world.DisableCollisionsBetween(DebrisCollisionLayer, CharacterCollisionLayer);
world.DisableCollisionsBetween(DebrisCollisionLayer, CharacterNetworkCollisionLayer);
}
//Disable collisions with anything but ships, stations and voxels
world.DisableCollisionsBetween(ExplosionRaycastLayer, CharacterCollisionLayer);
world.DisableCollisionsBetween(ExplosionRaycastLayer, NoCollisionLayer);
world.DisableCollisionsBetween(ExplosionRaycastLayer, DebrisCollisionLayer);
world.DisableCollisionsBetween(ExplosionRaycastLayer, GravityPhantomLayer);
world.DisableCollisionsBetween(ExplosionRaycastLayer, CharacterNetworkCollisionLayer);
world.DisableCollisionsBetween(ExplosionRaycastLayer, FloatingObjectCollisionLayer);
world.DisableCollisionsBetween(ExplosionRaycastLayer, ObjectDetectionCollisionLayer);
world.DisableCollisionsBetween(ExplosionRaycastLayer, VirtualMassLayer);
world.DisableCollisionsBetween(ExplosionRaycastLayer, CollectorCollisionLayer);
world.DisableCollisionsBetween(ExplosionRaycastLayer, AmmoLayer);
world.DisableCollisionsBetween(CollisionLayerWithoutCharacter, CharacterCollisionLayer);
world.DisableCollisionsBetween(CollisionLayerWithoutCharacter, NoCollisionLayer);
world.DisableCollisionsBetween(CollideWithStaticLayer, CollideWithStaticLayer);
world.DisableCollisionsBetween(CollideWithStaticLayer, DynamicDoubledCollisionLayer);
world.DisableCollisionsBetween(CollideWithStaticLayer, DefaultCollisionLayer);
world.DisableCollisionsBetween(CollideWithStaticLayer, CharacterCollisionLayer);
world.DisableCollisionsBetween(CollideWithStaticLayer, NoCollisionLayer);
world.DisableCollisionsBetween(CollideWithStaticLayer, DebrisCollisionLayer);
world.DisableCollisionsBetween(CollideWithStaticLayer, GravityPhantomLayer);
//.........这里部分代码省略.........
开发者ID:leandro1129,项目名称:SpaceEngineers,代码行数:101,代码来源:MyPhysics.cs
示例14: InitCollisionFilters
static void InitCollisionFilters(HkWorld world)
{
// Floating objects intentionally collide with both DynamicDoubledCollisionLayer and KinematicDoubledCollisionLayer
// DynamicDoubledCollisionLayer is necessary, because we won't deformations
// KinematicDoubledCollisionLayer is necessary, because we don't want to push it when floating object is resting on it
world.DisableCollisionsBetween(CollisionLayers.DynamicDoubledCollisionLayer, CollisionLayers.KinematicDoubledCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.DynamicDoubledCollisionLayer, CollisionLayers.CharacterCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.DynamicDoubledCollisionLayer, CollisionLayers.DebrisCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.DynamicDoubledCollisionLayer, CollisionLayers.LightFloatingObjectCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.DynamicDoubledCollisionLayer, CollisionLayers.CharacterNetworkCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.NotCollideWithStaticLayer, CollisionLayers.StaticCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.NotCollideWithStaticLayer, CollisionLayers.VoxelCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.KinematicDoubledCollisionLayer, CollisionLayers.DefaultCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.KinematicDoubledCollisionLayer, CollisionLayers.StaticCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.KinematicDoubledCollisionLayer, CollisionLayers.VoxelCollisionLayer);
//world.DisableCollisionsBetween(KinematicDoubledCollisionLayer, AmmoLayer);
world.DisableCollisionsBetween(CollisionLayers.GravityPhantomLayer, CollisionLayers.StaticCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.GravityPhantomLayer, CollisionLayers.VoxelCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.GravityPhantomLayer, CollisionLayers.DefaultCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.GravityPhantomLayer, CollisionLayers.DynamicDoubledCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.GravityPhantomLayer, CollisionLayers.KinematicDoubledCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.GravityPhantomLayer, CollisionLayers.CharacterCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.GravityPhantomLayer, CollisionLayers.CharacterNetworkCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.GravityPhantomLayer, CollisionLayers.ObjectDetectionCollisionLayer);
//world.DisableCollisionsBetween(GravityPhantomLayer, AmmoLayer);
world.DisableCollisionsBetween(CollisionLayers.VirtualMassLayer, CollisionLayers.StaticCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.VirtualMassLayer, CollisionLayers.VoxelCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.VirtualMassLayer, CollisionLayers.DefaultCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.VirtualMassLayer, CollisionLayers.CharacterCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.VirtualMassLayer, CollisionLayers.CharacterNetworkCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.VirtualMassLayer, CollisionLayers.DynamicDoubledCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.VirtualMassLayer, CollisionLayers.KinematicDoubledCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.VirtualMassLayer, CollisionLayers.DebrisCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.VirtualMassLayer, CollisionLayers.FloatingObjectCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.VirtualMassLayer, CollisionLayers.LightFloatingObjectCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.VirtualMassLayer, CollisionLayers.ObjectDetectionCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.VirtualMassLayer, CollisionLayers.VirtualMassLayer);
//world.DisableCollisionsBetween(VirtualMassLayer, AmmoLayer);
world.DisableCollisionsBetween(CollisionLayers.NoCollisionLayer, CollisionLayers.StaticCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.NoCollisionLayer, CollisionLayers.VoxelCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.NoCollisionLayer, CollisionLayers.DefaultCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.NoCollisionLayer, CollisionLayers.CharacterCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.NoCollisionLayer, CollisionLayers.CharacterNetworkCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.NoCollisionLayer, CollisionLayers.DynamicDoubledCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.NoCollisionLayer, CollisionLayers.KinematicDoubledCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.NoCollisionLayer, CollisionLayers.DebrisCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.NoCollisionLayer, CollisionLayers.FloatingObjectCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.NoCollisionLayer, CollisionLayers.LightFloatingObjectCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.NoCollisionLayer, CollisionLayers.GravityPhantomLayer);
world.DisableCollisionsBetween(CollisionLayers.NoCollisionLayer, CollisionLayers.ObjectDetectionCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.NoCollisionLayer, CollisionLayers.VirtualMassLayer);
world.DisableCollisionsBetween(CollisionLayers.NoCollisionLayer, CollisionLayers.NoCollisionLayer);
if (MyPerGameSettings.PhysicsNoCollisionLayerWithDefault)
world.DisableCollisionsBetween(CollisionLayers.NoCollisionLayer, 0);
//world.DisableCollisionsBetween(NoCollisionLayer, AmmoLayer);
world.DisableCollisionsBetween(CollisionLayers.ObjectDetectionCollisionLayer, CollisionLayers.ObjectDetectionCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.CollectorCollisionLayer, CollisionLayers.StaticCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.CollectorCollisionLayer, CollisionLayers.VoxelCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.CollectorCollisionLayer, CollisionLayers.DefaultCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.CollectorCollisionLayer, CollisionLayers.CharacterCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.CollectorCollisionLayer, CollisionLayers.CharacterNetworkCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.CollectorCollisionLayer, CollisionLayers.DynamicDoubledCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.CollectorCollisionLayer, CollisionLayers.KinematicDoubledCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.CollectorCollisionLayer, CollisionLayers.DebrisCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.CollectorCollisionLayer, CollisionLayers.GravityPhantomLayer);
world.DisableCollisionsBetween(CollisionLayers.CollectorCollisionLayer, CollisionLayers.ObjectDetectionCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.CollectorCollisionLayer, CollisionLayers.VirtualMassLayer);
//world.DisableCollisionsBetween(CollectorCollisionLayer, AmmoLayer);
if (!Sandbox.Game.Multiplayer.Sync.IsServer)
{
world.DisableCollisionsBetween(CollisionLayers.DefaultCollisionLayer, CollisionLayers.CharacterNetworkCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.StaticCollisionLayer, CollisionLayers.CharacterNetworkCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.VoxelCollisionLayer, CollisionLayers.CharacterNetworkCollisionLayer);
}
if (!MyFakes.ENABLE_CHARACTER_AND_DEBRIS_COLLISIONS)
{
world.DisableCollisionsBetween(CollisionLayers.DebrisCollisionLayer, CollisionLayers.CharacterCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.DebrisCollisionLayer, CollisionLayers.CharacterNetworkCollisionLayer);
}
//Disable collisions with anything but ships and stations
world.DisableCollisionsBetween(CollisionLayers.ExplosionRaycastLayer, CollisionLayers.VoxelCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.ExplosionRaycastLayer, CollisionLayers.CharacterCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.ExplosionRaycastLayer, CollisionLayers.NoCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.ExplosionRaycastLayer, CollisionLayers.DebrisCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.ExplosionRaycastLayer, CollisionLayers.GravityPhantomLayer);
world.DisableCollisionsBetween(CollisionLayers.ExplosionRaycastLayer, CollisionLayers.CharacterNetworkCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.ExplosionRaycastLayer, CollisionLayers.FloatingObjectCollisionLayer);
world.DisableCollisionsBetween(CollisionLayers.ExplosionRaycastLayer, CollisionLayers.LightFloatingObjectCollisionLayer);
//.........这里部分代码省略.........
开发者ID:stanhebben,项目名称:SpaceEngineers,代码行数:101,代码来源:MyPhysics.cs
示例15: Activate
public virtual void Activate(object world, ulong clusterObjectID)
{
System.Diagnostics.Debug.Assert(m_world == null, "Cannot activate already active object!");
System.Diagnostics.Debug.Assert(!IsInWorld, "Cannot activate already active object!");
System.Diagnostics.Debug.Assert(!IsWelded, "Activating welded body!");
m_world = (HkWorld)world;
ClusterObjectID = clusterObjectID;
ActivateCollision();
IsInWorld = true;
Matrix rigidBodyMatrix = GetRigidBodyMatrix();
if (BreakableBody != null)
{
RigidBody.SetWorldMatrix(rigidBodyMatrix);
//Disable destruction on clients
if (Sync.IsServer)
m_world.DestructionWorld.AddBreakableBody(BreakableBody);
else
m_world.AddRigidBody(RigidBody);
}
else if (RigidBody != null)
{
RigidBody.SetWorldMatrix(rigidBodyMatrix);
m_world.AddRigidBody(RigidBody);
}
if (RigidBody2 != null)
{
RigidBody2.SetWorldMatrix(rigidBodyMatrix);
m_world.AddRigidBody(RigidBody2);
}
if (CharacterProxy != null)
{
// obtain this character new system group id for collision filtering
CharacterSystemGroupCollisionFilterID = m_world.GetCollisionFilter().GetNewSystemGroup();
// Calculate filter info for this character
CharacterCollisionFilter = HkGroupFilter.CalcFilterInfo(MyPhysics.CollisionLayers.CharacterCollisionLayer, CharacterSystemGroupCollisionFilterID, 0, 0);
CharacterProxy.CharacterRigidBody.SetCollisionFilterInfo(CharacterCollisionFilter);
CharacterProxy.SetRigidBodyTransform(rigidBodyMatrix);
CharacterProxy.Activate(m_world);
}
//if (ReactivateRagdoll)
//{
// if (MyFakes.ENABLE_RAGDOLL_DEBUG) Debug.WriteLine("MyPhysicsBody.Activate.ReactivateRagdoll");
// ActivateRagdoll(rigidBodyMatrix);
// ReactivateRagdoll = false;
//}
if (SwitchToRagdollModeOnActivate)
{
if (MyFakes.ENABLE_RAGDOLL_DEBUG) Debug.WriteLine("MyPhysicsBody.Activate.SwitchToRagdollModeOnActivate");
SwitchToRagdollModeOnActivate = false;
SwitchToRagdollMode(m_ragdollDeadMode);
}
m_world.LockCriticalOperations();
foreach (var constraint in m_constraints)
{
if (!IsConstraintValid(constraint))
continue;
m_world.AddConstraint(constraint);
}
m_world.UnlockCriticalOperations();
}
开发者ID:stanhebben,项目名称:SpaceEngineers,代码行数:76,代码来源:MyPhysicsBody.cs
示例16: CreateHkWorld
public static HkWorld CreateHkWorld(float broadphaseSize = 100000)
{
var hkWorld = new HkWorld(MyPerGameSettings.EnableGlobalGravity, broadphaseSize, MyFakes.WHEEL_SOFTNESS ? float.MaxValue : RestingVelocity, MyFakes.ENABLE_HAVOK_MULTITHREADING, MySession.Static.Settings.PhysicsIterations);
hkWorld.MarkForWrite();
if (MySession.Static.Settings.WorldSizeKm > 0 || MyPerGameSettings.SingleCluster)
{
hkWorld.EntityLeftWorld += HavokWorld_EntityLeftWorld;
}
if (MyPerGameSettings.Destruction && Sandbox.Game.Multiplayer.Sync.IsServer)
{
hkWorld.DestructionWorld = new HkdWorld(hkWorld);
}
if (MyFakes.ENABLE_HAVOK_MULTITHREADING)
{
hkWorld.InitMultithreading(m_threadPool, m_jobQueue);
}
// Some ship won't rotate when this clip speed is too large
hkWorld.DeactivationRotationSqrdA /= 3;
hkWorld.DeactivationRotationSqrdB /= 3;
if (!MyFinalBuildConstants.IS_OFFICIAL)
{
hkWorld.VisualDebuggerEnabled = true;
}
InitCollisionFilters(hkWorld);
return hkWorld;
}
开发者ID:stanhebben,项目名称:SpaceEngineers,代码行数:29,代码来源:MyPhysics.cs
示例17: ActivateBatch
public virtual void ActivateBatch(object world, ulong clusterObjectID)
{
System.Diagnostics.Debug.Assert(m_world == null, "Cannot activate already active object!");
System.Diagnostics.Debug.Assert(!IsWelded, "Activating welded body!");
m_world = (HkWorld)world;
ClusterObjectID = clusterObjectID;
IsInWorld = true;
Matrix rigidBodyMatrix = GetRigidBodyMatrix();
if (RigidBody != null)
{
RigidBody.SetWorldMatrix(rigidBodyMatrix);
m_world.AddRigidBodyBatch(RigidBody);
}
if (RigidBody2 != null)
{
RigidBody2.SetWorldMatrix(rigidBodyMatrix);
m_world.AddRigidBodyBatch(RigidBody2);
}
if (CharacterProxy != null)
{
CharacterProxy.SetRigidBodyTransform(rigidBodyMatrix);
CharacterProxy.Activate(m_world);
}
foreach (var constraint in m_constraints)
{
if (!IsConstraintValid(constraint)) continue;
m_constraintsAddBatch.Add(constraint);
}
if (ReactivateRagdoll)
{
if (MyFakes.ENABLE_RAGDOLL_DEBUG) Debug.WriteLine("MyPhysicsBody.ActivateBatch.ReactivateRagdoll");
ActivateRagdoll(rigidBodyMatrix);
ReactivateRagdoll = false;
}
}
开发者ID:stanhebben,项目名称:SpaceEngineers,代码行数:43,代码来源:MyPhysicsBody.cs
示例18: IterateBodies
private void IterateBodies(HkWorld world)
{
foreach (var actRB in world.ActiveRigidBodies)
{
m_iterationBodies.Add(actRB);
}
foreach (var charRB in world.CharacterRigidBodies)
{
m_characterIterationBodies.Add(charRB);
}
}
开发者ID:stanhebben,项目名称:SpaceEngineers,代码行数:12,代码来源:MyPhysics.cs
示例19: Deactivate
public virtual void Deactivate(object world)
{
System.Diagnostics.Debug.Assert(world == m_world, "Inconsistency in clusters!");
if (IsRagdollModeActive)
{
ReactivateRagdoll = true;
CloseRagdollMode(world as HkWorld);
}
// MW: activate simulation island when a physics body is removed
if (IsInWorld && RigidBody != null && !RigidBody.IsActive)
{
if (!RigidBody.IsFixed)
{
RigidBody.Activate();
}
else
{
BoundingBoxD worldBox = Entity.PositionComp.WorldAABB;
worldBox.Inflate(0.5f);
MyPhysics.ActivateInBox(ref worldBox);
}
}
if (BreakableBody != null && m_world.DestructionWorld != null)
{
m_world.DestructionWorld.RemoveBreakableBody(BreakableBody);
}
else if (RigidBody != null && !RigidBody.IsDisposed)
{
m_world.RemoveRigidBody(RigidBody);
}
if (RigidBody2 != null && !RigidBody2.IsDisposed)
{
m_world.RemoveRigidBody(RigidBody2);
}
if (CharacterProxy != null)
{
CharacterProxy.Deactivate(m_world);
}
foreach (var constraint in m_constraints)
{
if (constraint.IsDisposed)
continue;
m_world.RemoveConstraint(constraint);
}
m_world = null;
IsInWorld = false;
}
开发者ID:stanhebben,项目名称:SpaceEngineers,代码行数:53,代码来源:MyPhysicsBody.cs
|
请发表评论