fix movement bugs
[fishladder.git] / vg / vg_m.h
index 690683710d816a9bec4ec8444b29d54b58b9e007..a0c01077048b0a5cd599f206e428b474ca3af1d9 100644 (file)
--- a/vg/vg_m.h
+++ b/vg/vg_m.h
@@ -17,6 +17,11 @@ static inline float vg_maxf( float a, float b )
        return a > b? a: b;
 }
 
+static inline float vg_clampf( float a, float min, float max )
+{
+       return vg_minf( max, vg_maxf( a, min ) );
+}
+
 #define VG_MIN( A, B ) ((A)<(B)?(A):(B))
 #define VG_MAX( A, B ) ((A)>(B)?(A):(B))
 
@@ -45,6 +50,21 @@ static inline void v2_copy( v2f a, v2f b )
        b[0] = a[0]; b[1] = a[1];
 }
 
+static inline void v2i_copy( v2i a, v2i b )
+{
+       b[0] = a[0]; b[1] = a[1];
+}
+
+static inline void v2i_add( v2i a, v2i b, v2i d )
+{
+       d[0] = a[0]+b[0]; d[1] = a[1]+b[1];
+}
+
+static inline void v2i_sub( v2i a, v2i b, v2i d )
+{
+       d[0] = a[0]-b[0]; d[1] = a[1]-b[1];
+}
+
 static inline void v2_minv( v2f a, v2f b, v2f dest ) 
 {
        dest[0] = vg_minf(a[0], b[0]);
@@ -98,6 +118,28 @@ static inline void v2_muladds( v2f a, v2f b, float s, v2f d )
        d[0] = a[0]+b[0]*s; d[1] = a[1]+b[1]*s;
 }
 
+static inline float v2_length2( v2f a )
+{
+       return a[0]*a[0] + a[1]*a[1];
+}
+
+static inline float v2_length( v2f a )
+{
+       return sqrtf( v2_length2( a ) );
+}
+
+static inline float v2_dist2( v2f a, v2f b )
+{
+       v2f delta;
+       v2_sub( a, b, delta );
+       return v2_length2( delta );
+}
+
+static inline float v2_dist( v2f a, v2f b )
+{
+       return sqrtf( v2_dist2( a, b ) );
+}
+
 // Vector 3
 // ==================================================================================================================