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