|
11 | 11 |
|
12 | 12 | #include "StdInc.h" |
13 | 13 | #include "CHudSA.h" |
| 14 | +#include "CGameSA.h" |
| 15 | +#include "CCameraSA.h" |
| 16 | +#include "CPlayerInfoSA.h" |
| 17 | +#include "TaskAttackSA.h" |
| 18 | + |
| 19 | +extern CGameSA* pGame; |
14 | 20 |
|
15 | 21 | char szVehicleName[50] = {'\0'}; |
16 | 22 | char szZoneName[50] = {'\0'}; |
@@ -171,3 +177,54 @@ void CHudSA::ResetComponentAdjustment() |
171 | 177 | MemPut<float>(m_pfCameraCrosshairScale, 192.0f); |
172 | 178 | m_fSniperCrosshairScale = 210.0f; |
173 | 179 | } |
| 180 | + |
| 181 | +bool CHudSA::IsCrosshairVisible() |
| 182 | +{ |
| 183 | + bool specialAiming = false; |
| 184 | + bool simpleAiming = false; |
| 185 | + |
| 186 | + // Get camera view mode |
| 187 | + CCamera* camera = pGame->GetCamera(); |
| 188 | + eCamMode cameraViewMode = static_cast<eCamMode>(camera->GetCam(camera->GetActiveCam())->GetMode()); |
| 189 | + |
| 190 | + // Get player |
| 191 | + CPed* playerPed = pGame->GetPedContext(); |
| 192 | + CWeapon* weapon = nullptr; |
| 193 | + eWeaponType weaponType; |
| 194 | + |
| 195 | + // Get player current weapon |
| 196 | + if (playerPed) |
| 197 | + { |
| 198 | + weapon = playerPed->GetWeapon(playerPed->GetCurrentWeaponSlot()); |
| 199 | + if (weapon) |
| 200 | + weaponType = weapon->GetType(); |
| 201 | + } |
| 202 | + |
| 203 | + // Special aiming |
| 204 | + if (cameraViewMode == MODE_SNIPER || cameraViewMode == MODE_1STPERSON || cameraViewMode == MODE_ROCKETLAUNCHER || cameraViewMode == MODE_ROCKETLAUNCHER_HS || cameraViewMode == MODE_M16_1STPERSON || cameraViewMode == MODE_HELICANNON_1STPERSON || cameraViewMode == MODE_CAMERA) |
| 205 | + { |
| 206 | + if (weapon && cameraViewMode != MODE_1STPERSON && pGame->GetWeaponInfo(weaponType, WEAPONSKILL_STD)->GetFireType() != FIRETYPE_MELEE) |
| 207 | + specialAiming = true; |
| 208 | + } |
| 209 | + |
| 210 | + // Simple aiming |
| 211 | + if (cameraViewMode == MODE_M16_1STPERSON_RUNABOUT || cameraViewMode == MODE_ROCKETLAUNCHER_RUNABOUT || cameraViewMode == MODE_ROCKETLAUNCHER_RUNABOUT_HS || cameraViewMode == MODE_SNIPER_RUNABOUT) |
| 212 | + simpleAiming = true; |
| 213 | + |
| 214 | + if ((playerPed && weapon) && !playerPed->GetTargetedObject() && playerPed->GetPedInterface()->pPlayerData->m_bFreeAiming) |
| 215 | + { |
| 216 | + CTaskSimpleUseGun* taskUseGun = playerPed->GetPedIntelligence()->GetTaskUseGun(); |
| 217 | + if ((!taskUseGun || !taskUseGun->GetSkipAim()) && (cameraViewMode == MODE_AIMWEAPON || cameraViewMode == MODE_AIMWEAPON_FROMCAR || cameraViewMode == MODE_AIMWEAPON_ATTACHED)) |
| 218 | + { |
| 219 | + if (playerPed->GetPedState() != PED_ENTER_CAR && playerPed->GetPedState() != PED_CARJACK) |
| 220 | + { |
| 221 | + if ((weaponType >= WEAPONTYPE_PISTOL && weaponType <= WEAPONTYPE_M4) || weaponType == WEAPONTYPE_TEC9 || weaponType == WEAPONTYPE_COUNTRYRIFLE || weaponType == WEAPONTYPE_MINIGUN || weaponType == WEAPONTYPE_FLAMETHROWER) |
| 222 | + simpleAiming = cameraViewMode != MODE_AIMWEAPON || camera->GetTransitionState() == 0; |
| 223 | + } |
| 224 | + } |
| 225 | + } |
| 226 | + |
| 227 | + // Check CTheScripts::bDrawCrossHair |
| 228 | + std::uint8_t crossHairType = *reinterpret_cast<std::uint8_t*>(VAR_CTheScripts_bDrawCrossHair); |
| 229 | + return specialAiming || simpleAiming || crossHairType > 0; |
| 230 | +} |
0 commit comments