StretchyTanks.StretchyConicTank.updateSurfaceNode C# (CSharp) Method

updateSurfaceNode() public method

public updateSurfaceNode ( SurfaceNode node, Part p ) : void
node SurfaceNode
p Part
return void
        public override 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 v = node.yPos / (stretchFactor * 1.875f) + 0.5f;
            float rf = Mathf.Lerp(radialFactor, topFactor, v);
            float prf = Mathf.Lerp(node.prevRFactor, node.prevTFactor, v);

            float radius = Mathf.Sqrt(node.xPos * node.xPos + node.zPos * node.zPos);
            float angle = Mathf.Atan2(node.xPos, node.zPos);
            float newRad = (rf / prf) * (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;
            node.prevTFactor = topFactor;
        }