/// <summary> /// Create a verlet link. /// </summary> /// <param name="a">First verlet point</param> /// <param name="b">First verlet point</param> /// <param name="restingDistance">Resting distance</param> /// <param name="minimalDistance">Minimal link distance. Use `-1` to disable.</param> /// <param name="maximalDistance">Maximal link distance. Use `-1` to disable.</param> /// <param name="tearSensitivity">Distance required to break the link. Use `-1` to create an unbreakable link.</param> /// <param name="tearSensitivityFactor">Distance factor required to break the link. Use `-1` to create an unbreakable link.</param> /// <param name="stiffness">Stiffness of the link</param> /// <param name="width">Width of the link</param> /// <param name="color">Link color</param> /// <param name="visible">Show link</param> /// <returns>Verlet link</returns> public VerletLink CreateLink( VerletPoint a, VerletPoint b, float?restingDistance = null, float?minimalDistance = null, float?maximalDistance = null, float?tearSensitivity = null, float?tearSensitivityFactor = null, float?stiffness = null, float?width = null, Color?color = null, bool?visible = null) { var link = new VerletLink(this, a, b); a.AddLink(link); AddChild(link); link.Visible = visible ?? link.Visible; link.RestingDistance = restingDistance ?? link.RestingDistance; link.MinimalDistance = minimalDistance ?? link.MinimalDistance; link.MaximalDistance = maximalDistance ?? link.MaximalDistance; link.TearSensitivity = tearSensitivity ?? link.TearSensitivity; link.Stiffness = stiffness ?? link.Stiffness; link.Modulate = color ?? link.Modulate; link.Width = width ?? link.Width; if (tearSensitivityFactor.HasValue) { link.TearSensitivity = link.RestingDistance * tearSensitivityFactor.Value; } return(link); }
/// <summary> /// Mark a link to be removed next frame. /// </summary> /// <param name="link">Verlet link</param> public void QueueLinkRemoval(VerletLink link) { if (!linksToRemove.Contains(link)) { linksToRemove.Add(link); } }
private void RemoveLink(VerletLink link) { foreach (VerletPoint p in points) { p.RemoveLink(link); } RemoveChild(link); }