From 368ce0d4e5607b2c7e442efe73da71b266c8727b Mon Sep 17 00:00:00 2001 From: Nikolay Korolev Date: Sun, 15 Sep 2019 02:28:07 +0300 Subject: CCarCtrl --- src/core/Fire.cpp | 25 +++++++++++++++++++++++++ src/core/Fire.h | 11 +++++++++-- src/core/config.h | 3 +++ 3 files changed, 37 insertions(+), 2 deletions(-) (limited to 'src/core') diff --git a/src/core/Fire.cpp b/src/core/Fire.cpp index a2894d43..2181f91c 100644 --- a/src/core/Fire.cpp +++ b/src/core/Fire.cpp @@ -6,5 +6,30 @@ CFireManager &gFireManager = *(CFireManager*)0x8F31D0; WRAPPER void CFire::Extinguish(void) { EAXJMP(0x479D40); } +CFire* CFireManager::FindNearestFire(CVector vecPos, float* pDistance) +{ + for (int i = 0; i < MAX_FIREMEN_ATTENDING; i++) { + int fireId = -1; + float minDistance = 999999; + for (int j = 0; j < NUM_FIRES; j++) { + if (!m_aFires[j].m_bIsOngoing) + continue; + if (m_aFires[j].m_bIsScriptFire) + continue; + if (m_aFires[j].m_nFiremenPuttingOut != i) + continue; + float distance = (m_aFires[j].m_vecPos - vecPos).Magnitude2D(); + if (distance < minDistance) { + minDistance = distance; + fireId = j; + } + } + *pDistance = minDistance; + if (fireId != -1) + return &m_aFires[fireId]; + } + return nil; +} + WRAPPER void CFireManager::StartFire(CEntity *entityOnFire, CEntity *culprit, float, uint32) { EAXJMP(0x479590); } WRAPPER CFire *CFireManager::FindFurthestFire_NeverMindFireMen(CVector coors, float, float) { EAXJMP(0x479430); } diff --git a/src/core/Fire.h b/src/core/Fire.h index 040e9a25..5080fd89 100644 --- a/src/core/Fire.h +++ b/src/core/Fire.h @@ -6,7 +6,7 @@ class CFire { public: bool m_bIsOngoing; - bool m_bExists; + bool m_bIsScriptFire; bool m_bPropogationFlag; bool m_bAudioSet; CVector m_vecPos; @@ -16,7 +16,7 @@ public: int m_nStartTime; int field_20; int field_24; - int field_28; + uint32 m_nFiremenPuttingOut; float field_2C; void Extinguish(void); @@ -24,8 +24,15 @@ public: class CFireManager { + enum { + MAX_FIREMEN_ATTENDING = 2, + }; + uint32 m_nTotalFires; + CFire m_aFires[NUM_FIRES]; public: void StartFire(CEntity *entityOnFire, CEntity *culprit, float, uint32); CFire *FindFurthestFire_NeverMindFireMen(CVector coors, float, float); + CFire *FindNearestFire(CVector, float*); + uint32 GetTotalActiveFires() const { return m_nTotalFires; } }; extern CFireManager &gFireManager; diff --git a/src/core/config.h b/src/core/config.h index ddd22ed2..81e2f2fb 100644 --- a/src/core/config.h +++ b/src/core/config.h @@ -75,6 +75,9 @@ enum Config { NUM_CARGENS = 160, NUM_PATH_NODES_IN_AUTOPILOT = 8, + + NUM_ACCIDENTS = 20, + NUM_FIRES = 40 }; // We'll use this once we're ready to become independent of the game -- cgit v1.2.3