| 647 | } |
| 648 | |
| 649 | bool CCar::attach_Actor(CGameObject* actor) |
| 650 | { |
| 651 | if (CPHDestroyable::Destroyed()) |
| 652 | return false; |
| 653 | CHolderCustom::attach_Actor(actor); |
| 654 | |
| 655 | IKinematics* K = smart_cast<IKinematics*>(Visual()); |
| 656 | CInifile* ini = K->LL_UserData(); |
| 657 | int id; |
| 658 | if (ini->line_exist("car_definition", "driver_place")) |
| 659 | id = K->LL_BoneID(ini->r_string("car_definition", "driver_place")); |
| 660 | else |
| 661 | { |
| 662 | Owner()->setVisible(0); |
| 663 | id = K->LL_GetBoneRoot(); |
| 664 | } |
| 665 | CBoneInstance& instance = K->LL_GetBoneInstance(u16(id)); |
| 666 | m_sits_transforms.set(instance.mTransform); |
| 667 | actor->XFORM().mul_43(XFORM(), m_sits_transforms); |
| 668 | |
| 669 | OnCameraChange(ectFirst); |
| 670 | PPhysicsShell()->Enable(); |
| 671 | PPhysicsShell()->add_ObjectContactCallback(ActorObstacleCallback); |
| 672 | processing_activate(); |
| 673 | ReleaseBreaks(); |
| 674 | |
| 675 | return true; |
| 676 | } |
| 677 | |
| 678 | bool CCar::is_Door(u16 id, xr_map<u16, SDoor>::iterator& i) |
| 679 | { |
no test coverage detected