• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

C# HkWorld类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了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


示例20: UnmarkBreakable

        private 

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C# HkdBreakableShape类代码示例发布时间:2022-05-24
下一篇:
C# HkShape类代码示例发布时间:2022-05-24
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap