summaryrefslogtreecommitdiffstats
path: root/src/entities/Vehicle.cpp
blob: ced504a38e46cf2a9c4bc4dc5367c4f74b79f68e (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include "common.h"
#include "patcher.h"
#include "Vehicle.h"
#include "Pools.h"
#include "CarCtrl.h"
#include "ModelIndices.h"

bool &CVehicle::bWheelsOnlyCheat = *(bool *)0x95CD78;
bool &CVehicle::bAllDodosCheat = *(bool *)0x95CD75;
bool &CVehicle::bCheat3 = *(bool *)0x95CD66;
bool &CVehicle::bCheat4 = *(bool *)0x95CD65;
bool &CVehicle::bCheat5 = *(bool *)0x95CD64;
	
void *CVehicle::operator new(size_t sz) { return CPools::GetVehiclePool()->New();  }
void CVehicle::operator delete(void *p, size_t sz) { CPools::GetVehiclePool()->Delete((CVehicle*)p); }

bool
CVehicle::IsLawEnforcementVehicle(void)
{
	switch (m_modelIndex) {
		case MI_FBICAR:
		case MI_POLICE:
		case MI_ENFORCER:
		case MI_PREDATOR:
		case MI_RHINO:
		case MI_BARRACKS:
			return true;
		default:
			return false;
	}
}

void
CVehicle::ChangeLawEnforcerState(bool enable)
{
	if (enable) {
		if (!bIsLawEnforcer) {
			bIsLawEnforcer = true;
			CCarCtrl::NumLawEnforcerCars++;
		}
	} else {
		if (bIsLawEnforcer) {
			bIsLawEnforcer = false;
			CCarCtrl::NumLawEnforcerCars--;
		}
	}
}

void
CVehicle::RemoveDriver(void)
{
	m_status = STATUS_ABANDONED;
	pDriver = nil;
}

bool
CVehicle::IsUpsideDown(void)
{
	return GetUp().z <= -0.9f;
}

STARTPATCHES
	InjectHook(0x552820, &CVehicle::ChangeLawEnforcerState, PATCH_JUMP);
	InjectHook(0x5520A0, &CVehicle::RemoveDriver, PATCH_JUMP);
ENDPATCHES