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
98
99
|
#pragma once
#include "util.h"
#define MAX_VERTS 16384
struct VERTEX {
F32 x, y;
U32 col;
};
inline constexpr U32 rgba( U32 r, U32 g, U32 b, U32 a ) {
return r | ( g << 8 ) | ( b << 16 ) | ( a << 24 );
}
const U32 C_HALO_IN = rgba( 0, 0, 0, 10 );
const U32 C_HALO_OUT = rgba( 0, 0, 0, 0 );
const U32 C_FACE_MID = rgba( 96, 100, 110, 155 );
const U32 C_FACE_EDGE = rgba( 24, 26, 32, 20 );
const U32 C_SWIRL = rgba( 165, 170, 180, 60 );
const U32 C_RIM = rgba( 255, 255, 255, 205 );
const U32 C_TICK = rgba( 235, 240, 255, 180 );
const U32 C_TICKMIN = rgba( 235, 240, 255, 120 );
const U32 C_LABEL = rgba( 245, 247, 252, 235 );
const U32 C_REDLINE = rgba( 210, 40, 40, 230 );
const U32 C_REDLINE2 = rgba( 255, 70, 70, 230 );
const U32 C_NEEDLE = rgba( 225, 228, 236, 250 );
const U32 C_TRAIL = rgba( 225, 228, 236, 130 );
const U32 C_HUB = rgba( 70, 74, 84, 255 );
const U32 C_HUBDOT = rgba( 210, 214, 222, 255 );
const U32 C_GEAR = rgba( 245, 247, 252, 245 );
const U32 C_SPEED = rgba( 245, 247, 252, 245 );
const U32 C_PEAK = rgba( 255, 255, 255, 210 );
const U32 C_VACUUM = rgba( 160, 170, 190, 110 );
const U32 C_ZERO = rgba( 255, 255, 255, 235 );
const U32 C_LAMP = rgba( 0, 255, 255, 250 );
const U32 C_LAMPBG = rgba( 20, 20, 20, 130 );
#define ZONE_RED 0.86f
// 7-seg glyph indices; 0-9 are the digits
enum GLYPH {
G_R = 10, G_N, G_DASH, G_A, G_B, G_S, G_T, G_C,
G_COUNT,
};
F32 gauge_angle( F32 t );
class GAUGE_RENDERER {
public:
VERTEX verts[MAX_VERTS];
I32 nverts;
F32 fade;
GAUGE_RENDERER();
void clear();
void set_fade( F32 f );
U32 faded( U32 c ) const;
void rect( F32 x, F32 y, F32 w, F32 h, U32 c );
void line( F32 x0, F32 y0, F32 x1, F32 y1, F32 t, U32 c );
void arc( F32 cx, F32 cy, F32 r0, F32 r1, F32 a0, F32 a1, U32 c );
void arc_grad( F32 cx, F32 cy, F32 r0, F32 r1, F32 a0, F32 a1, U32 c_in, U32 c_out );
void disc( F32 cx, F32 cy, F32 r, U32 c );
void disc_grad( F32 cx, F32 cy, F32 r, U32 c_in, U32 c_out );
void tick( F32 cx, F32 cy, F32 a, F32 rin, F32 rout, F32 t, U32 c );
void needle( F32 cx, F32 cy, F32 a, F32 len, F32 back, F32 w, U32 c );
void needle_trail( F32 cx, F32 cy, F32 a0, F32 a1, F32 r0, F32 r1, U32 c );
// 7-seg text
void glyph( F32 x, F32 y, F32 dw, F32 dh, I32 g, U32 c );
void glyph_c( F32 cx, F32 cy, F32 dw, F32 dh, I32 g, U32 c );
void number( F32 x, F32 y, F32 dw, F32 dh, I32 val, U32 c );
void number_c( F32 cx, F32 cy, F32 dw, F32 dh, I32 val, U32 c );
void number_r( F32 x, F32 y, F32 dw, F32 dh, I32 val, U32 c );
void lamp( F32 cx, F32 cy, F32 h, const I32 g[3], U32 c );
void build_tach_bg(
F32 cx, F32 cy, F32 r,
F32 rpm_max, F32 red_ang, F32 rpm_off
);
void build_tach_gear_speed(
F32 cx, F32 cy, F32 r,
F32 rpm, F32 rpm_max,
I32 gear, F32 speed,
F32 red_ang
);
void build_tach(
F32 cx, F32 cy, F32 r, F32 trail,
F32 rpm, F32 rpm_max, F32 red_ang, F32 rpm_off, F32 peak,
I32 gear, F32 speed, U8 have_ext, U8 flash_needle
);
void build_boost_bg( F32 cx, F32 cy, F32 r, F32 range );
void build_boost( F32 cx, F32 cy, F32 r, F32 bar, F32 range, F32 trail );
void build_lamps( F32 cx, F32 cy, F32 r, F32 h, U8 hb, U8 abs_on, U8 tcs_on, U8 abs_flash, U8 tcs_flash );
void build_tires( F32 cx, F32 cy, F32 h, F32 fl, F32 fr, F32 rl, F32 rr );
};
|