public Section(float startDistance, SplinePoint start, SplinePoint end, int parts, float power)
{
this.startDistance = endDistance = startDistance;
var startPosition = start.transform.localPosition;
var endPosition = end.transform.localPosition;
var startForward = start.transform.parent.InverseTransformDirection(start.transform.forward);
var endForward = end.transform.parent.InverseTransformDirection(end.transform.forward);
var startUp = start.transform.parent.InverseTransformDirection(start.transform.up);
var endUp = end.transform.parent.InverseTransformDirection(end.transform.up);
var deltaPower = Vector3.Distance(startPosition, endPosition) * power;
var startPower = start.autoPower ? deltaPower : start.power;
var endPower = end.autoPower ? deltaPower : end.power;
var point = new Point();
for (int i = 0; i <= parts; i++)
{
var t = (float)i / parts;
var position = Bezier.GetPoint(startPosition, startForward * startPower, endPosition, -endForward * endPower, t);
endDistance += i == 0 ? 0 : Vector3.Distance(point.position, position);
point.distance = endDistance;
point.forward = i == 0 ? startForward : (i == parts ? endForward : Vector3.Normalize(position - point.position));
point.upward = Vector3.Slerp(startUp, endUp, t);
point.position = position;
points.Add(point);
}
}