本文整理汇总了C#中Sandbox.Engine.Physics.MyPhysicsBody.Weld方法的典型用法代码示例。如果您正苦于以下问题:C# MyPhysicsBody.Weld方法的具体用法?C# MyPhysicsBody.Weld怎么用?C# MyPhysicsBody.Weld使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Sandbox.Engine.Physics.MyPhysicsBody
的用法示例。
在下文中一共展示了MyPhysicsBody.Weld方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Weld
public void Weld(MyPhysicsBody other, bool recreateShape = true)
{
if (other.WeldInfo.Parent == this) //already welded to this
return;
if(other.IsWelded && !IsWelded)
{
other.Weld(this);
return;
}
if(IsWelded)
{
WeldInfo.Parent.Weld(other);
return;
}
HkShape thisShape;
if (WeldInfo.Children.Count == 0)
{
thisShape = RigidBody.GetShape();
HkShape.SetUserData(thisShape, RigidBody);
Entity.OnPhysicsChanged += WeldedEntity_OnPhysicsChanged;
//Entity.OnClose += Entity_OnClose;
}
else
thisShape = GetShape();
other.Deactivate();
var transform = other.RigidBody.GetRigidBodyMatrix() * Matrix.Invert(RigidBody.GetRigidBodyMatrix());
other.WeldInfo.Transform = transform;
other.WeldedRigidBody = other.RigidBody;
other.RigidBody = RigidBody;
other.WeldInfo.Parent = this;
WeldInfo.Children.Add(other);
if(recreateShape)
RecreateWeldedShape(thisShape);
other.Entity.OnPhysicsChanged += WeldedEntity_OnPhysicsChanged;
}
示例2: Weld
public void Weld(MyPhysicsBody other, bool recreateShape = true)
{
if (other.WeldInfo.Parent == this) //already welded to this
return;
if (other.IsWelded && !IsWelded)
{
other.Weld(this);
return;
}
if (IsWelded)
{
WeldInfo.Parent.Weld(other);
return;
}
if(other.WeldInfo.Children.Count > 0)
{
Debug.Fail("Welding other welded gorup");
other.UnweldAll(false); //they should end in same group and get welded
}
ProfilerShort.Begin("Weld");
HkShape thisShape;
bool firstWelded = WeldInfo.Children.Count == 0;
if (firstWelded)
{
//RemoveConstraints(RigidBody);
WeldedRigidBody = RigidBody;
thisShape = RigidBody.GetShape();
if (HavokWorld != null)
HavokWorld.RemoveRigidBody(WeldedRigidBody);
RigidBody = HkRigidBody.Clone(WeldedRigidBody);
if (HavokWorld != null)
HavokWorld.AddRigidBody(RigidBody);
HkShape.SetUserData(thisShape, RigidBody);
Entity.OnPhysicsChanged += WeldedEntity_OnPhysicsChanged;
WeldInfo.UpdateMassProps(RigidBody);
//Entity.OnClose += Entity_OnClose;
}
else
thisShape = GetShape();
other.Deactivate();
var transform = other.Entity.WorldMatrix*Entity.WorldMatrixInvScaled;
other.WeldInfo.Transform = transform;
other.WeldInfo.UpdateMassProps(other.RigidBody);
Debug.Assert(other.WeldedRigidBody == null);
other.WeldedRigidBody = other.RigidBody;
other.RigidBody = RigidBody;
other.WeldInfo.Parent = this;
other.ClusterObjectID = ClusterObjectID;
WeldInfo.Children.Add(other);
//if(recreateShape)
// RecreateWeldedShape(thisShape);
ProfilerShort.BeginNextBlock("OnPhysicsChanged");
//(other.Entity as MyEntity).RaisePhysicsChanged();
//other.Entity.OnPhysicsChanged += WeldedEntity_OnPhysicsChanged;
//Debug.Assert(other.m_constraints.Count == 0, "Constraints left in welded body");
ProfilerShort.BeginNextBlock("RemoveConstraints");
ProfilerShort.End();
OnWelded(other);
other.OnWelded(this);
}