summaryrefslogtreecommitdiffstats
path: root/src/SurfaceTable.cpp
blob: 107734e4bed038da9920c3dc451aaefa7c0cffb2 (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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
#include "common.h"
#include "patcher.h"
#include "Weather.h"
#include "Collision.h"
#include "SurfaceTable.h"

float (*CSurfaceTable::ms_aAdhesiveLimitTable)[NUMADHESIVEGROUPS] = (float (*)[NUMADHESIVEGROUPS])0x8E29D4;

int
CSurfaceTable::GetAdhesionGroup(uint8 surfaceType)
{
	switch(surfaceType){
	case SURFACE_0:		return ADHESIVE_ROAD;
	case SURFACE_1:		return ADHESIVE_ROAD;
	case SURFACE_2:		return ADHESIVE_LOOSE;
	case SURFACE_3:		return ADHESIVE_LOOSE;
	case SURFACE_4:		return ADHESIVE_HARD;
	case SURFACE_5:		return ADHESIVE_ROAD;
	case SURFACE_6:		return ADHESIVE_HARD;
	case SURFACE_7:		return ADHESIVE_HARD;
	case SURFACE_8:		return ADHESIVE_HARD;
	case SURFACE_9:		return ADHESIVE_HARD;
	case SURFACE_10:	return ADHESIVE_HARD;
	case SURFACE_11:	return ADHESIVE_HARD;
	case SURFACE_12:	return ADHESIVE_HARD;
	case SURFACE_13:	return ADHESIVE_HARD;
	case SURFACE_14:	return ADHESIVE_HARD;
	case SURFACE_15:	return ADHESIVE_HARD;
	case SURFACE_16:	return ADHESIVE_HARD;
	case SURFACE_17:	return ADHESIVE_RUBBER;
	case SURFACE_18:	return ADHESIVE_LOOSE;
	case SURFACE_19:	return ADHESIVE_WET;
	case SURFACE_20:	return ADHESIVE_ROAD;
	case SURFACE_21:	return ADHESIVE_ROAD;
	case SURFACE_22:	return ADHESIVE_ROAD;
	case SURFACE_23:	return ADHESIVE_RUBBER;
	case SURFACE_24:	return ADHESIVE_HARD;
	case SURFACE_25:	return ADHESIVE_LOOSE;
	case SURFACE_26:	return ADHESIVE_LOOSE;
	case SURFACE_27:	return ADHESIVE_HARD;
	case SURFACE_28:	return ADHESIVE_HARD;
	case SURFACE_29:	return ADHESIVE_RUBBER;
	case SURFACE_30:	return ADHESIVE_LOOSE;
	case SURFACE_31:	return ADHESIVE_HARD;
	case SURFACE_32:	return ADHESIVE_HARD;
	default:		return ADHESIVE_ROAD;
	}
}

float
CSurfaceTable::GetWetMultiplier(uint8 surfaceType)
{
	switch(surfaceType){
	case SURFACE_0:
	case SURFACE_1:
	case SURFACE_4:
	case SURFACE_5:
	case SURFACE_8:
	case SURFACE_20:
	case SURFACE_21:
	case SURFACE_22:
	case SURFACE_25:
	case SURFACE_30:
	case SURFACE_31:
		return 1.0f - CWeather::WetRoads*0.25f;

	case SURFACE_2:
	case SURFACE_6:
	case SURFACE_7:
	case SURFACE_9:
	case SURFACE_10:
	case SURFACE_11:
	case SURFACE_12:
	case SURFACE_13:
	case SURFACE_14:
	case SURFACE_15:
	case SURFACE_16:
	case SURFACE_17:
	case SURFACE_23:
	case SURFACE_24:
	case SURFACE_26:
	case SURFACE_27:
	case SURFACE_28:
	case SURFACE_29:
	case SURFACE_32:
		return 1.0f - CWeather::WetRoads*0.4f;

	default:
		return 1.0f;
	}
}

float
CSurfaceTable::GetAdhesiveLimit(CColPoint &colpoint)
{
	return ms_aAdhesiveLimitTable[GetAdhesionGroup(colpoint.surfaceB)][GetAdhesionGroup(colpoint.surfaceA)];
}