| 977 | } |
| 978 | |
| 979 | void BinocularCamera(ItemInfo* item) |
| 980 | { |
| 981 | auto& player = GetLaraInfo(*item); |
| 982 | |
| 983 | AlterFOV(7 * (ANGLE(11.5f) - player.Control.Look.OpticRange), false); |
| 984 | |
| 985 | int x = item->Pose.Position.x; |
| 986 | int y = item->Pose.Position.y + GameBoundingBox(item).Y1; |
| 987 | int z = item->Pose.Position.z; |
| 988 | |
| 989 | auto pointColl = GetPointCollision(Vector3i(x, y, z), item->RoomNumber); |
| 990 | |
| 991 | Camera.pos.x = x; |
| 992 | Camera.pos.y = y; |
| 993 | Camera.pos.z = z; |
| 994 | Camera.pos.RoomNumber = pointColl.GetRoomNumber(); |
| 995 | |
| 996 | float l = BLOCK(20.25f) * phd_cos(player.Control.Look.Orientation.x); |
| 997 | float tx = x + l * phd_sin(item->Pose.Orientation.y + player.Control.Look.Orientation.y); |
| 998 | float ty = y - BLOCK(20.25f) * phd_sin(player.Control.Look.Orientation.x); |
| 999 | float tz = z + l * phd_cos(item->Pose.Orientation.y + player.Control.Look.Orientation.y); |
| 1000 | |
| 1001 | if (Camera.oldType == CameraType::Fixed) |
| 1002 | { |
| 1003 | Camera.target.x = tx; |
| 1004 | Camera.target.y = ty; |
| 1005 | Camera.target.z = tz; |
| 1006 | Camera.target.RoomNumber = item->RoomNumber; |
| 1007 | } |
| 1008 | else |
| 1009 | { |
| 1010 | Camera.target.x += (tx - Camera.target.x) / 4; |
| 1011 | Camera.target.y += (ty - Camera.target.y) / 4; |
| 1012 | Camera.target.z += (tz - Camera.target.z) / 4; |
| 1013 | Camera.target.RoomNumber = item->RoomNumber; |
| 1014 | } |
| 1015 | |
| 1016 | if (Camera.type == Camera.oldType) |
| 1017 | CalculateBounce(true); |
| 1018 | |
| 1019 | Camera.target.RoomNumber = GetPointCollision(Camera.pos.ToVector3i(), Camera.target.RoomNumber).GetRoomNumber(); |
| 1020 | LookAt(&Camera, 0); |
| 1021 | UpdateMikePos(*item); |
| 1022 | Camera.oldType = Camera.type; |
| 1023 | } |
| 1024 | |
| 1025 | void ConfirmCameraTargetPos() |
| 1026 | { |
no test coverage detected