From cbc67ae3887e54cd698eac7d51df47060dce142d Mon Sep 17 00:00:00 2001 From: Miloslav Ciz Date: Thu, 5 Jun 2025 22:19:59 +0200 Subject: [PATCH] Fix small bugs --- TODO.txt | 2 ++ renderer.h | 39 ++++++++++++++++++++++++++++++--------- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/TODO.txt b/TODO.txt index 549b86f..ffed0bb 100644 --- a/TODO.txt +++ b/TODO.txt @@ -42,6 +42,8 @@ fuck issue trackers :D =========== HANDLED ============== - should drifting make a sound? NO NEED +- devtest map, internal camera: reversing at start makes the car face completely + downwards which bugs the camera rotation! the shadow model too - particles in free camera mode are very big if far away from the car (maybe just turn them off in this mode?) - make helper header for PC frontends that use stdio for data file, parse diff --git a/renderer.h b/renderer.h index 911c017..0978398 100644 --- a/renderer.h +++ b/renderer.h @@ -207,6 +207,14 @@ void _LCR_rendererDrawFontPixel(int x, int y, uint16_t color) #endif } +int _LCR_rendererGimbalDanger(S3L_Unit angle) +{ + return S3L_min( + S3L_abs(LCR_renderer.carModel->transform.rotation.x - S3L_F / 4), + S3L_abs(LCR_renderer.carModel->transform.rotation.x - (S3L_F - S3L_F / 4))) + < S3L_F / 100; +} + int LCR_rendererComputeTextWidth(const char *text, int size) { int r = 0; @@ -1843,15 +1851,22 @@ void LCR_rendererCameraFollow(unsigned char distance) LCR_renderer.scene.camera.transform.translation.y += LCR_RENDERER_UNIT / 3; - LCR_renderer.scene.camera.transform.rotation = - LCR_renderer.carModel->transform.rotation; + if (!_LCR_rendererGimbalDanger( // kind of (imperfectly) deals with bugs + LCR_renderer.carModel->transform.rotation.x)) + { + LCR_renderer.scene.camera.transform.rotation = + LCR_renderer.carModel->transform.rotation; - LCR_renderer.scene.camera.transform.rotation.x = -1 * - ((LCR_renderer.scene.camera.transform.rotation.x + S3L_FRACTIONS_PER_UNIT / 4) % - (S3L_FRACTIONS_PER_UNIT / 2) - S3L_FRACTIONS_PER_UNIT / 4); + LCR_renderer.scene.camera.transform.rotation.x = -1 * + ((LCR_renderer.scene.camera.transform.rotation.x + + S3L_FRACTIONS_PER_UNIT / 4) % (S3L_FRACTIONS_PER_UNIT / 2) - + S3L_FRACTIONS_PER_UNIT / 4); - LCR_renderer.scene.camera.transform.rotation.y += S3L_FRACTIONS_PER_UNIT / 2; - LCR_renderer.scene.camera.transform.rotation.z *= -1; + LCR_renderer.scene.camera.transform.rotation.y += + S3L_FRACTIONS_PER_UNIT / 2; + + LCR_renderer.scene.camera.transform.rotation.z *= -1; + } return; } @@ -2130,8 +2145,9 @@ void LCR_rendererDraw3D(void) LCR_RENDERER_UNIT,LCR_RENDERER_UNIT,LCR_RENDERER_UNIT, LCR_RENDERER_UNIT); - LCR_renderer.shadowModel->transform.rotation.y = - LCR_renderer.carModel->transform.rotation.y; + if (!_LCR_rendererGimbalDanger(LCR_renderer.carModel->transform.rotation.x)) + LCR_renderer.shadowModel->transform.rotation.y = + LCR_renderer.carModel->transform.rotation.y; #endif // first make sure rotations are in correct range: @@ -2182,6 +2198,11 @@ void LCR_rendererDraw3D(void) m = LCR_renderer.ghostModel; } +#if LCR_SETTING_CAR_SHADOW + LCR_renderer.shadowModel->config.visible = + LCR_renderer.carModel->config.visible; +#endif + LCR_LOG2("3D rendering (start)"); #if LCR_SETTING_POTATO_GRAPHICS