| 365 | |
| 366 | static xr_vector<Fmatrix> bones_bind_forms; |
| 367 | bool CCar::SDoor::IsFront(const Fvector& pos, const Fvector& dir) |
| 368 | { |
| 369 | IKinematics* K = PKinematics(pcar->Visual()); |
| 370 | // CBoneInstance bi=K->LL_GetBoneInstance(bone_id); |
| 371 | // CBoneData& bd=K->LL_GetData(bone_id); |
| 372 | K->LL_GetBindTransform(bones_bind_forms); |
| 373 | // Fobb bb=bd.obb; |
| 374 | Fvector tdir; |
| 375 | tdir.set(pcar->XFORM().i); |
| 376 | if (tdir.dotproduct(dir) < 0.f) |
| 377 | tdir.invert(); |
| 378 | Fmatrix pf; |
| 379 | pf.mul(pcar->XFORM(), bones_bind_forms[bone_id]); |
| 380 | Fvector dif, dif1; |
| 381 | dif.sub(pf.c, pos); |
| 382 | pcar->Center(dif1); |
| 383 | Fvector c_to_d; |
| 384 | c_to_d.sub(pf.c, dif1); |
| 385 | |
| 386 | dif1.sub(pos); |
| 387 | // dif.normalize_safe(); |
| 388 | return (dif1.dotproduct(tdir) > dif.dotproduct(tdir) && abs(c_to_d.dotproduct(tdir)) < dif1.dotproduct(tdir)); |
| 389 | } |
| 390 | bool CCar::SDoor::IsInArea(const Fvector& pos, const Fvector& dir) |
| 391 | { |
| 392 | if (!joint) |
no test coverage detected