/// <summary> /// Add chain point with offset from previous point position. /// If not already set, the first point will be offset from (0, 0). /// </summary> /// <param name="offset">Offset vector</param> /// <param name="configurator">Point configurator</param> /// <returns>Builder</returns> public VerletChainBuilder AddPointWithOffset(Vector2 offset, PointConfiguratorFunc configurator = null) { Vector2 prevPosition = Vector2.Zero; if (points.Count > 0) { prevPosition = points[^ 1].GlobalPosition;
/// <summary> /// Add chain point at a specific position. /// </summary> /// <param name="position">Position vector</param> /// <param name="configurator">Point configurator</param> /// <returns>Builder</returns> public VerletChainBuilder AddPointAtPosition(Vector2 position, PointConfiguratorFunc configurator = null) { var point = world.CreatePoint(); point.MoveToPosition(position); if (points.Count == 0 && pinFirst) { point.PinToCurrentPosition(); } else if (!drawIntermediatePoints) { point.Visible = false; } configurator?.Invoke(point); points.Add(point); return(this); }
/// <summary> /// Add chain point with offset from previous point position. /// If not already set, the first point will be offset from (0, 0). /// </summary> /// <param name="x">X coordinate</param> /// <param name="y">Y coordinate</param> /// <param name="configurator">Point configurator</param> /// <returns>Builder</returns> public VerletChainBuilder AddPointWithOffset(float x, float y, PointConfiguratorFunc configurator = null) { return(AddPointWithOffset(new Vector2(x, y), configurator)); }
/// <summary> /// Add chain point at a specific position. /// </summary> /// <param name="x">X coordinate</param> /// <param name="y">Y coordinate</param> /// <param name="configurator">Point configurator</param> /// <returns>Builder</returns> public VerletChainBuilder AddPointAtPosition(float x, float y, PointConfiguratorFunc configurator = null) { return(AddPointAtPosition(new Vector2(x, y), configurator)); }