summaryrefslogtreecommitdiff
path: root/src/gauges.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/gauges.h')
-rw-r--r--src/gauges.h99
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 );
+};