summaryrefslogtreecommitdiffstats
path: root/src/control/AccidentManager.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/control/AccidentManager.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/control/AccidentManager.cpp b/src/control/AccidentManager.cpp
new file mode 100644
index 00000000..e2b1f6d0
--- /dev/null
+++ b/src/control/AccidentManager.cpp
@@ -0,0 +1,45 @@
+#include "common.h"
+#include "patcher.h"
+#include "AccidentManager.h"
+
+#include "Ped.h"
+
+CAccidentManager& gAccidentManager = *(CAccidentManager*)0x87FD10;
+
+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;
+} \ No newline at end of file