当前位置: 首页>>代码示例>>C#>>正文


C# MyPhysicsBody.OnUnwelded方法代码示例

本文整理汇总了C#中Sandbox.Engine.Physics.MyPhysicsBody.OnUnwelded方法的典型用法代码示例。如果您正苦于以下问题:C# MyPhysicsBody.OnUnwelded方法的具体用法?C# MyPhysicsBody.OnUnwelded怎么用?C# MyPhysicsBody.OnUnwelded使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Sandbox.Engine.Physics.MyPhysicsBody的用法示例。


在下文中一共展示了MyPhysicsBody.OnUnwelded方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: Unweld

        public void Unweld(MyPhysicsBody other, bool insertToWorld = true, bool recreateShape = true)
        {
            Debug.Assert(other.IsWelded && RigidBody != null && other.WeldedRigidBody != null, "Invalid welding state!");
            
            if (IsWelded)
            {
                WeldInfo.Parent.Unweld(other, insertToWorld, recreateShape);
                Debug.Assert(other.IsWelded);
                return;
            }

            if (other.IsInWorld || RigidBody == null || other.WeldedRigidBody == null)
            {
                WeldInfo.Children.Remove(other);
                return;
            }
            var rbWorldMatrix = RigidBody.GetRigidBodyMatrix();
            //other.Entity.OnPhysicsChanged -= WeldedEntity_OnPhysicsChanged;

            other.WeldInfo.Parent = null;
            Debug.Assert(WeldInfo.Children.Contains(other));
            WeldInfo.Children.Remove(other);

            var body = other.RigidBody;
            Debug.Assert(body == RigidBody);
            other.RigidBody = other.WeldedRigidBody;
            other.WeldedRigidBody = null;
            if (!other.RigidBody.IsDisposed)
            {
                other.RigidBody.SetWorldMatrix(other.WeldInfo.Transform * rbWorldMatrix);
                other.RigidBody.LinearVelocity = body.LinearVelocity;
                other.WeldInfo.MassElement.Tranform = Matrix.Identity;
                other.WeldInfo.Transform = Matrix.Identity;
            }
            else
            {
                Debug.Fail("Disposed welded body");
            }
            //RemoveConstraints(other.RigidBody);

            other.ClusterObjectID = MyHavokCluster.CLUSTERED_OBJECT_ID_UNITIALIZED;
            if (insertToWorld)
            {
                other.Activate();
                other.OnMotion(other.RigidBody, 0);
            }

            if (WeldInfo.Children.Count == 0)
            {
                recreateShape = false;
                Entity.OnPhysicsChanged -= WeldedEntity_OnPhysicsChanged;
                Entity.OnClose -= Entity_OnClose;
                WeldedRigidBody.LinearVelocity = RigidBody.LinearVelocity;
                WeldedRigidBody.AngularVelocity = RigidBody.AngularVelocity;
                if (HavokWorld != null)
                    HavokWorld.RemoveRigidBody(RigidBody);
                RigidBody.Dispose();
                RigidBody = WeldedRigidBody;
                WeldedRigidBody = null;
                RigidBody.SetWorldMatrix(rbWorldMatrix);
                WeldInfo.Transform = Matrix.Identity;
                if (HavokWorld != null)
                    HavokWorld.AddRigidBody(RigidBody);
                else if (!Entity.MarkedForClose)
                    Activate();

                if (RigidBody2 != null)
                    RigidBody2.SetShape(RigidBody.GetShape());
            }
            if (RigidBody != null && recreateShape)
                RecreateWeldedShape(GetShape());
            OnUnwelded(other);
            other.OnUnwelded(this);
            Debug.Assert(!other.IsWelded);
        }
开发者ID:2asoft,项目名称:SpaceEngineers,代码行数:75,代码来源:MyPhysicsBody.Welding.cs


注:本文中的Sandbox.Engine.Physics.MyPhysicsBody.OnUnwelded方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。