public virtual void updateSurfaceNode(SurfaceNode node, Part p)
{
if (node.yPos > 0)
{
p.transform.Translate(0f, (stretchFactor / node.prevFactor) * (node.yPos - node.rad) + node.rad - node.yPos, 0f, part.transform);
}
else
{
p.transform.Translate(0f, (stretchFactor / node.prevFactor) * (node.yPos + node.rad) - node.rad - node.yPos, 0f, part.transform);
}
node.prevFactor = stretchFactor;
node.yPos = p.transform.localPosition.y;
float radius = Mathf.Sqrt(node.xPos * node.xPos + node.zPos * node.zPos);
float angle = Mathf.Atan2(node.xPos, node.zPos);
float newRad = (radialFactor / node.prevRFactor) * (radius - node.rad) + node.rad - radius;
p.transform.Translate(newRad * Mathf.Sin(angle), 0f, newRad * Mathf.Cos(angle), part.transform);
node.xPos = p.transform.localPosition.x;
node.zPos = p.transform.localPosition.z;
node.prevRFactor = radialFactor;
}