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); }