summaryrefslogtreecommitdiff
path: root/src/gauges.h
blob: 9889690856c97bbceebc800eb02d5446ed1a4b74 (plain)
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 );
};