1
+ #include " util/EffectBase.h"
2
+
3
+ class CarsExplodeOnFireEffect : public EffectBase
4
+ {
5
+ // give some space for GhostRider to reset to 0
6
+ static inline const float BURN_TIMER = 4900 .0f ;
7
+
8
+ public:
9
+ void
10
+ OnTick (EffectInstance *inst) override
11
+ {
12
+ for (auto *vehicle : CPools::ms_pVehiclePool)
13
+ {
14
+ if (vehicle->m_fHealth < 250 .0f )
15
+ {
16
+ SetBurnTimer (vehicle, BURN_TIMER);
17
+ }
18
+ }
19
+ }
20
+
21
+ void
22
+ SetBurnTimer (CVehicle *vehicle, float value)
23
+ {
24
+ if (!vehicle || !CPools::ms_pVehiclePool->IsObjectValid (vehicle))
25
+ {
26
+ return ;
27
+ }
28
+
29
+ auto *model = CModelInfo::ms_modelInfoPtrs[vehicle->m_nModelIndex ];
30
+ if (!model) return ;
31
+
32
+ auto *vehicleModelInfo = reinterpret_cast <CVehicleModelInfo *> (model);
33
+ if (!vehicleModelInfo) return ;
34
+
35
+ switch (vehicleModelInfo->m_nVehicleType )
36
+ {
37
+ case VEHICLE_BIKE:
38
+ {
39
+ CBike *bike = (CBike *) vehicle;
40
+ if (IsValidTime (bike->m_fBurningTimer ))
41
+ {
42
+ bike->m_fBurningTimer = value;
43
+ }
44
+ break ;
45
+ }
46
+ case VEHICLE_AUTOMOBILE:
47
+ case VEHICLE_MTRUCK:
48
+ case VEHICLE_QUAD:
49
+ case VEHICLE_TRAILER:
50
+ {
51
+ CAutomobile *automobile = (CAutomobile *) vehicle;
52
+ if (IsValidTime (automobile->m_fBurningTimer ))
53
+ {
54
+ automobile->m_fBurningTimer = value;
55
+ }
56
+ break ;
57
+ }
58
+ case VEHICLE_BOAT:
59
+ {
60
+ CBoat *boat = (CBoat *) vehicle;
61
+ if (IsValidTime (boat->m_fBurningTimer ))
62
+ {
63
+ boat->m_fBurningTimer = value;
64
+ }
65
+ break ;
66
+ }
67
+ }
68
+
69
+ if (vehicle->m_pTrailer && IsVehiclePointerValid (vehicle->m_pTrailer ))
70
+ {
71
+ SetBurnTimer (vehicle->m_pTrailer , value);
72
+ }
73
+ }
74
+
75
+ static bool
76
+ IsValidTime (float time)
77
+ {
78
+ return time >= 0 .0f && time < BURN_TIMER;
79
+ }
80
+ };
81
+
82
+ DEFINE_EFFECT (CarsExplodeOnFireEffect, " effect_cars_explode_on_fire" , 0 );
0 commit comments