void VsSpring::SetupPhysics()
{
	if(m_vxSpring)
		DeletePhysics();

	if(m_aryAttachmentPoints.GetSize() == 2)
	{
		Attachment *lpPrimaryAttachment = m_aryAttachmentPoints[0];
		Attachment *lpSecondaryAttachment = m_aryAttachmentPoints[1];

		if(!lpPrimaryAttachment && !lpSecondaryAttachment)
		{
			Enabled(false);
			return;
		}

		VsRigidBody *lpVsPrimary = dynamic_cast<VsRigidBody *>(lpPrimaryAttachment->Parent());
		VsRigidBody *lpVsSecondary = dynamic_cast<VsRigidBody *>(lpSecondaryAttachment->Parent());

		if(!lpVsPrimary && !lpVsSecondary)
		{
			Enabled(false);
			return;
		}

		m_vxSpring = new AnimatVxSpring(lpVsPrimary->Part(), lpVsSecondary->Part(), m_fltNaturalLength, m_fltStiffness, m_fltDamping); // attached to the reference frame.

		CStdFPoint vPrimPos = lpPrimaryAttachment->AbsolutePosition();
		CStdFPoint vSecPos = lpSecondaryAttachment->AbsolutePosition();
		
	    m_vxSpring->setPartAttachmentPosition(0, vPrimPos.x, vPrimPos.y, vPrimPos.z);
	    m_vxSpring->setPartAttachmentPosition(1, vSecPos.x, vSecPos.y, vSecPos.z);

		m_vxSpring->enable(m_bEnabled);
		GetVsSimulator()->Universe()->addConstraint(m_vxSpring);
	}
	else
		Enabled(false);
}