//------------------------------------------------------------------------ void CVehicleActionDeployRope::AttachOnRope(IEntity *pEntity) { assert(pEntity); if(!pEntity) return; IRopeRenderNode *pRopeUpper = GetRopeRenderNode(m_ropeUpperId); if(!pRopeUpper) return; assert(pRopeUpper->GetPointsCount() >= 2); IPhysicalEntity *pRopePhys = pRopeUpper->GetPhysics(); assert(pRopePhys); typedef std::vector <Vec3> TVec3Vector; TVec3Vector points; int pointCount; pe_status_rope ropeStatus; if(pRopePhys->GetStatus(&ropeStatus)) pointCount = ropeStatus.nSegments + 1; else pointCount = 0; if(pointCount < 2) return; points.resize(pointCount); ropeStatus.pPoints = &points[0]; if(pRopePhys->GetStatus(&ropeStatus)) { Matrix34 worldTM; worldTM.SetIdentity(); worldTM = Matrix33(m_pVehicle->GetEntity()->GetWorldTM()); worldTM.SetTranslation(ropeStatus.pPoints[1]); pEntity->SetWorldTM(worldTM); } pRopeUpper->LinkEndEntities(m_pVehicle->GetEntity()->GetPhysics(), pEntity->GetPhysics()); }