level smooth transition camera
authorhgn <hgodden00@gmail.com>
Tue, 21 Dec 2021 00:07:02 +0000 (00:07 +0000)
committerhgn <hgodden00@gmail.com>
Tue, 21 Dec 2021 00:07:02 +0000 (00:07 +0000)
fishladder.c
maps/cmp_b11.map
vg/vg_m.h

index e90a8a527a1f89742bf31ee007545adb01ead367..fcdd58d4fe014c5d4ae3de204315e036e7a29af6 100644 (file)
@@ -1211,16 +1211,23 @@ void vg_update(void)
                        r2 = (float)world.h / (float)world.w,
                        size;
        
-       size = ( r2 < r1? (float)(world.w+5) * 0.5f: ((float)world.h * 0.5f) / r1 ) + 2.5f;     
-       m3x3_projection( m_projection, -size, size, -size*r1, size*r1 );
+       static float size_current = 2.0f;
+       static v3f origin_current = { 0.0f, 0.0f, 0.0f };
+       
+       size = ( r2 < r1? (float)(world.w+5) * 0.5f: ((float)(world.h+5) * 0.5f) / r1 ) + 0.5f; 
        
        v3f origin;
-       origin[0] = floorf( -0.5f * ((float)world.w-3.0f) );
+       origin[0] = floorf( -0.5f * ((float)world.w-4.5f) );
        origin[1] = floorf( -0.5f * world.h );
        origin[2] = 0.0f;
        
+       // Lerp towards target
+       size_current = vg_lerpf( size_current, size, vg_time_delta * 6.0f );
+       v2_lerp( origin_current, origin, vg_time_delta * 6.0f, origin_current ); 
+       
+       m3x3_projection( m_projection, -size_current, size_current, -size_current*r1, size_current*r1 );
        m3x3_identity( m_view );
-       m3x3_translate( m_view, origin );
+       m3x3_translate( m_view, origin_current );
        m3x3_mul( m_projection, m_view, vg_pv );
        vg_projection_update();
        
index 5154c5e56e1188702b7a2e9b86ad7698239a0520..77a8fe1134603cdb6d559706fa53303d8141b265 100644 (file)
@@ -1,5 +1,7 @@
 ###########;
 ##-#####-##;a,aa
+## ##### ##;
 ##       ##;
+##### #####;
 #####+#####;aaa
 ###########;
index 6276edb814bdb23bb0b83e036698ebf4b9d9513a..a567092e79b130fa83dfe2234ead19aa95ad4d78 100644 (file)
--- a/vg/vg_m.h
+++ b/vg/vg_m.h
@@ -145,6 +145,12 @@ static inline float v2_dist( v2f a, v2f b )
        return sqrtf( v2_dist2( a, b ) );
 }
 
+static inline void v2_lerp( v2f a, v2f b, float t, v2f d )
+{
+       d[0] = a[0] + t*(b[0]-a[0]);
+       d[1] = a[1] + t*(b[1]-a[1]);
+}
+
 // Vector 3
 // ==================================================================================================================