| 990 | } |
| 991 | |
| 992 | void CWeapon::UpdateLaser() |
| 993 | { |
| 994 | if (laser_light_render) |
| 995 | { |
| 996 | auto io = smart_cast<CInventoryOwner*>(H_Parent()); |
| 997 | if (!laser_light_render->get_active() && IsLaserOn() && (!H_Parent() || (io && this == io->inventory().ActiveItem()))) |
| 998 | { |
| 999 | laser_light_render->set_active(true); |
| 1000 | UpdateAddonsVisibility(); |
| 1001 | } |
| 1002 | else if (laser_light_render->get_active() && (!IsLaserOn() || !(!H_Parent() || (io && this == io->inventory().ActiveItem())))) |
| 1003 | { |
| 1004 | laser_light_render->set_active(false); |
| 1005 | UpdateAddonsVisibility(); |
| 1006 | } |
| 1007 | |
| 1008 | if (laser_light_render->get_active()) |
| 1009 | { |
| 1010 | laser_pos = get_LastFP(); |
| 1011 | Fvector laser_dir = get_LastFD(); |
| 1012 | |
| 1013 | if (GetHUDmode()) |
| 1014 | { |
| 1015 | if (laserdot_attach_bone.size()) |
| 1016 | { |
| 1017 | GetBoneOffsetPosDir(laserdot_attach_bone, laser_pos, laser_dir, laserdot_attach_offset); |
| 1018 | CorrectDirFromWorldToHud(laser_dir); |
| 1019 | } |
| 1020 | } |
| 1021 | else |
| 1022 | { |
| 1023 | XFORM().transform_tiny(laser_pos, laserdot_world_attach_offset); |
| 1024 | } |
| 1025 | |
| 1026 | Fmatrix laserXForm; |
| 1027 | laserXForm.identity(); |
| 1028 | laserXForm.k.set(laser_dir); |
| 1029 | Fvector::generate_orthonormal_basis_normalized(laserXForm.k, laserXForm.j, laserXForm.i); |
| 1030 | |
| 1031 | laser_light_render->set_position(laser_pos); |
| 1032 | laser_light_render->set_rotation(laserXForm.k, laserXForm.i); |
| 1033 | |
| 1034 | // calc color animator |
| 1035 | if (laser_lanim) |
| 1036 | { |
| 1037 | int frame; |
| 1038 | const u32 clr = laser_lanim->CalculateBGR(Device.fTimeGlobal, frame); |
| 1039 | |
| 1040 | Fcolor fclr{(float)color_get_B(clr), (float)color_get_G(clr), (float)color_get_R(clr), 1.f}; |
| 1041 | fclr.mul_rgb(laser_fBrightness / 255.f); |
| 1042 | laser_light_render->set_color(fclr); |
| 1043 | } |
| 1044 | } |
| 1045 | } |
| 1046 | } |
| 1047 | |
| 1048 | void CWeapon::UpdateFlashlight() |
| 1049 | { |
nothing calls this directly
no test coverage detected