Skip to content

Commit c8467ec

Browse files
committed
New effect: Cars will explode on fire
1 parent 01788ad commit c8467ec

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
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

Comments
 (0)