diff options
Diffstat (limited to 'src/core/Accident.cpp')
-rw-r--r-- | src/core/Accident.cpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/core/Accident.cpp b/src/core/Accident.cpp new file mode 100644 index 00000000..a42280b7 --- /dev/null +++ b/src/core/Accident.cpp @@ -0,0 +1,59 @@ +#include "common.h" +#include "patcher.h" +#include "AccidentManager.h" + +#include "Ped.h" + +CAccidentManager& gAccidentManager = *(CAccidentManager*)0x87FD10; + +WRAPPER void CAccidentManager::Update(void) { EAXJMP(0x456710); } + +uint16 +CAccidentManager::CountActiveAccidents() +{ + uint16 accidents = 0; + for (int i = 0; i < NUM_ACCIDENTS; i++){ + if (m_aAccidents[i].m_pVictim) + accidents++; + } + return accidents; +} + +CAccident* +CAccidentManager::FindNearestAccident(CVector vecPos, float* pDistance) +{ + for (int i = 0; i < MAX_MEDICS_TO_ATTEND_ACCIDENT; i++){ + int accidentId = -1; + float minDistance = 999999; + for (int j = 0; j < NUM_ACCIDENTS; j++){ + CPed* pVictim = m_aAccidents[j].m_pVictim; + if (!pVictim) + continue; + if (pVictim->CharCreatedBy == MISSION_CHAR) + continue; + if (pVictim->m_fHealth != 0.0f) + continue; + if (m_aAccidents[j].m_nMedicsPerformingCPR != i) + continue; + float distance = (pVictim->GetPosition() - vecPos).Magnitude2D(); + if (distance / 2 > pVictim->GetPosition().z - vecPos.z && distance < minDistance){ + minDistance = distance; + accidentId = j; + } + } + *pDistance = minDistance; + if (accidentId != -1) + return &m_aAccidents[accidentId]; + } + return nil; +} + +bool +CAccidentManager::UnattendedAccidents(void) +{ + for (int i = 0; i < NUM_ACCIDENTS; i++) { + if (m_aAccidents[i].m_pVictim && m_aAccidents[i].m_nMedicsAttending == 0) + return true; + } + return false; +}
\ No newline at end of file |