diff options
Diffstat (limited to 'src/gauges.h')
| -rw-r--r-- | src/gauges.h | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/src/gauges.h b/src/gauges.h new file mode 100644 index 0000000..9889690 --- /dev/null +++ b/src/gauges.h @@ -0,0 +1,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 ); +}; |
