diff --git a/constants.h b/constants.h index d5a0468..89c0d63 100644 --- a/constants.h +++ b/constants.h @@ -21,6 +21,8 @@ #define LCR_MAP_SIZE_BLOCKS 64 +#define LCR_ANIMATE_CAR (LCR_SETTING_CAR_ANIMATION_SUBDIVIDE != 0) + /** Maximum number of triangles of a block shape. */ #define LCR_MAP_BLOCK_SHAPE_MAX_BYTES 80 diff --git a/renderer.h b/renderer.h index 098c610..027d6de 100644 --- a/renderer.h +++ b/renderer.h @@ -71,7 +71,7 @@ struct int triUVs[6]; uint8_t texSubsampleCount; -#if LCR_SETTING_ANIMATE_CAR +#if LCR_ANIMATE_CAR S3L_Unit wheelRotation; S3L_Unit wheelTurn; S3L_Unit wheelRotationCenters[4]; @@ -735,7 +735,7 @@ uint8_t LCR_rendererInit(void) LCR_renderer.carModel = LCR_renderer.models + 8; S3L_model3DInit( -#if LCR_SETTING_ANIMATE_CAR +#if LCR_ANIMATE_CAR LCR_renderer.animatedCarVerts #else LCR_carVertices @@ -744,7 +744,7 @@ uint8_t LCR_rendererInit(void) LCR_carTriangles,LCR_CAR_TRIANGLE_COUNT, LCR_renderer.carModel); -#if LCR_SETTING_ANIMATE_CAR +#if LCR_ANIMATE_CAR for (int i = 0; i < LCR_CAR_VERTEX_COUNT * 3; ++i) LCR_renderer.animatedCarVerts[i] = LCR_carVertices[i]; @@ -1209,9 +1209,12 @@ void LCR_drawLevelFloor(void) #endif } +#if LCR_ANIMATE_CAR void _LCR_rendererAnimateCar(void) { - for (int i = 0; i < LCR_CAR_VERTEX_COUNT; ++i) + for (int i = LCR_renderer.frame % LCR_SETTING_CAR_ANIMATION_SUBDIVIDE; + i < LCR_CAR_VERTEX_COUNT; i += LCR_SETTING_CAR_ANIMATION_SUBDIVIDE) + { if (LCR_carVertexTypes[i] > 0) { S3L_Unit s = S3L_sin(-1 * LCR_renderer.wheelRotation), @@ -1252,7 +1255,9 @@ void _LCR_rendererAnimateCar(void) / (2 * S3L_FRACTIONS_PER_UNIT); } } + } } +#endif void LCR_rendererDraw(void) { @@ -1261,14 +1266,16 @@ void LCR_rendererDraw(void) _LCR_rendererLoadMapChunks(); // TODO: call only once in a while? - LCR_rendererDrawSky(2, + LCR_rendererDrawSky(1, LCR_renderer.scene.camera.transform.rotation.y, -4 * LCR_renderer.scene.camera.transform.rotation.x); - + +#if LCR_ANIMATE_CAR LCR_renderer.wheelRotation += 5; LCR_renderer.wheelTurn = S3L_sin(LCR_renderer.frame * 4); _LCR_rendererAnimateCar(); +#endif LCR_drawLevelFloor(); LCR_rendererDrawLOD(); diff --git a/settings.h b/settings.h index be19e93..c97c682 100644 --- a/settings.h +++ b/settings.h @@ -92,8 +92,12 @@ #define LCR_SETTING_FLOOR_PARTICLE_SIZE 32 #endif -#ifndef LCR_SETTING_ANIMATE_CAR - #define LCR_SETTING_ANIMATE_CAR 1 +#ifndef LCR_SETTING_CAR_ANIMATION_SUBDIVIDE + /** How many frames will be used to complete whole animation of the car model. + 0 turns off car animation completely (may be faster and smaller), 1 turns + on highest quality animation, higher values lower animation quality and + may increase performance. */ + #define LCR_SETTING_CAR_ANIMATION_SUBDIVIDE 4 #endif #endif // guard