From 4772371c6291a74f317f9994f76cd183c6ea11b9 Mon Sep 17 00:00:00 2001 From: Slyvtt Date: Thu, 21 Apr 2022 22:11:48 +0200 Subject: [PATCH] WIP indicator on where is next checkpoint on HUD --- CppOutRun.layout | 206 +++++++++++++++++++++++------------------------ src/main.cc | 49 ++++++++--- 2 files changed, 141 insertions(+), 114 deletions(-) diff --git a/CppOutRun.layout b/CppOutRun.layout index f7613c2..4f3b8c2 100644 --- a/CppOutRun.layout +++ b/CppOutRun.layout @@ -2,9 +2,22 @@ - + - + + + + + + + + + + + + + + @@ -12,9 +25,9 @@ - + - + @@ -22,9 +35,54 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -48,112 +106,24 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - - - - - - - - - - - - - - - - - - - - - - - + @@ -161,14 +131,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - diff --git a/src/main.cc b/src/main.cc index ffb4460..09df34b 100644 --- a/src/main.cc +++ b/src/main.cc @@ -111,11 +111,17 @@ bool OptionMode = false; bool PauseMode = false; bool SkipTime = false; + +///HUD options +bool visualspeedindicator = false; +bool visualnextpoint = true; + // for multilap bool multilap = false; uint8_t numlap = 1; uint8_t currentLap = 1; +int currentpoint = 0; uint16_t currentcurve=0; uint8_t shiftcolor=0; @@ -302,7 +308,7 @@ static void get_inputs( float dt, int index ) speedcontrol = true; } - if(keydown(KEY_EXIT) || keydown(KEY_SHIFT)) drawPauseQuit(); + if(keydown(KEY_EXIT)) drawPauseQuit(); if(keydown(KEY_OPTN)) drawOptions(); @@ -372,7 +378,7 @@ static void get_minimum_inputs( void ) } - if(keydown(KEY_EXIT)) drawPauseQuit(); + if(keydown(KEY_EXIT) || keydown(KEY_SHIFT)) drawPauseQuit(); if(keydown(KEY_OPTN)) drawOptions(); @@ -517,6 +523,7 @@ int main(void) time_render=0; ranking = -1; + currentpoint = 0; exitToOS = false; @@ -1083,17 +1090,37 @@ int main(void) } - if (drawspeed==0.0) dsubimage( 48, 25, &speedhud, 0, 0, 76, 13, DIMAGE_NONE); - else if (drawspeed<3.30) dsubimage( 48, 25, &speedhud, 0, 13, 76, 13, DIMAGE_NONE); - else if (drawspeed<6.70) dsubimage( 48, 25, &speedhud, 0, 26, 76, 13, DIMAGE_NONE); - else if (drawspeed<10.0) dsubimage( 48, 25, &speedhud, 0, 39, 76, 13, DIMAGE_NONE); - else if (drawspeed<13.3) dsubimage( 48, 25, &speedhud, 0, 52, 76, 13, DIMAGE_NONE); - else if (drawspeed<16.7) dsubimage( 48, 25, &speedhud, 0, 65, 76, 13, DIMAGE_NONE); - else if (drawspeed<20.0) dsubimage( 48, 25, &speedhud, 0, 78, 76, 13, DIMAGE_NONE); - else if (drawspeed<23.3) dsubimage( 48, 25, &speedhud, 0, 91, 76, 13, DIMAGE_NONE); - else dsubimage( 48, 25, &speedhud, 0, 104, 76, 13, DIMAGE_NONE); + /// Graphical speed indicator + if (visualspeedindicator) + { + if (drawspeed==0.0) dsubimage( 48, 25, &speedhud, 0, 0, 76, 13, DIMAGE_NONE); + else if (drawspeed<3.30) dsubimage( 48, 25, &speedhud, 0, 13, 76, 13, DIMAGE_NONE); + else if (drawspeed<6.70) dsubimage( 48, 25, &speedhud, 0, 26, 76, 13, DIMAGE_NONE); + else if (drawspeed<10.0) dsubimage( 48, 25, &speedhud, 0, 39, 76, 13, DIMAGE_NONE); + else if (drawspeed<13.3) dsubimage( 48, 25, &speedhud, 0, 52, 76, 13, DIMAGE_NONE); + else if (drawspeed<16.7) dsubimage( 48, 25, &speedhud, 0, 65, 76, 13, DIMAGE_NONE); + else if (drawspeed<20.0) dsubimage( 48, 25, &speedhud, 0, 78, 76, 13, DIMAGE_NONE); + else if (drawspeed<23.3) dsubimage( 48, 25, &speedhud, 0, 91, 76, 13, DIMAGE_NONE); + else dsubimage( 48, 25, &speedhud, 0, 104, 76, 13, DIMAGE_NONE); + } + /// Checkpoint indicator + if (visualnextpoint) + { + double Z1 = jalons[currentpoint]->wZ; + double Z2 = jalons[currentpoint+1]->wZ; + + double frac = (fround(cam->cZ) - Z1) / (Z2 - Z1 ); + if (frac<0) frac=0; + + if (fround(cam->cZ) >= Z2) currentpoint++; + + drect( 15, 50, 20, 150, C_WHITE ); + + drect( 10, 49+frac*100, 25, 51+frac*100, C_RED ); + } + if (finishSequence) {